summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes4
-rw-r--r--src/emu/bus/generic/slot.c2
-rw-r--r--src/emu/bus/generic/slot.h3
-rw-r--r--src/mess/audio/tvc_snd.c (renamed from src/mess/audio/tvc.c)2
-rw-r--r--src/mess/audio/tvc_snd.h59
-rw-r--r--src/mess/drivers/advision.c23
-rw-r--r--src/mess/drivers/svi318.c33
-rw-r--r--src/mess/drivers/tutor.c158
-rw-r--r--src/mess/drivers/tvc.c639
-rw-r--r--src/mess/drivers/x1.c22
-rw-r--r--src/mess/drivers/x1twin.c8
-rw-r--r--src/mess/includes/advision.h7
-rw-r--r--src/mess/includes/svi318.h21
-rw-r--r--src/mess/includes/tvc.h142
-rw-r--r--src/mess/includes/x1.h17
-rw-r--r--src/mess/machine/advision.c7
-rw-r--r--src/mess/machine/svi318.c72
-rw-r--r--src/mess/mess.mak2
18 files changed, 578 insertions, 643 deletions
diff --git a/.gitattributes b/.gitattributes
index cf99d451307..c989a7fa869 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7957,7 +7957,8 @@ src/mess/audio/socrates.c svneol=native#text/plain
src/mess/audio/socrates.h svneol=native#text/plain
src/mess/audio/special.c svneol=native#text/plain
src/mess/audio/svision.c svneol=native#text/plain
-src/mess/audio/tvc.c svneol=native#text/plain
+src/mess/audio/tvc_snd.c svneol=native#text/plain
+src/mess/audio/tvc_snd.h svneol=native#text/plain
src/mess/audio/upd1771.c svneol=native#text/plain
src/mess/audio/upd1771.h svneol=native#text/plain
src/mess/audio/vboy.c svneol=native#text/plain
@@ -8747,7 +8748,6 @@ src/mess/includes/tmc600.h svneol=native#text/plain
src/mess/includes/trs80.h svneol=native#text/plain
src/mess/includes/trs80m2.h svneol=native#text/plain
src/mess/includes/tsispch.h svneol=native#text/plain
-src/mess/includes/tvc.h svneol=native#text/plain
src/mess/includes/tx0.h svneol=native#text/plain
src/mess/includes/ut88.h svneol=native#text/plain
src/mess/includes/v1050.h svneol=native#text/plain
diff --git a/src/emu/bus/generic/slot.c b/src/emu/bus/generic/slot.c
index a22324c6d36..0f4266a6a8f 100644
--- a/src/emu/bus/generic/slot.c
+++ b/src/emu/bus/generic/slot.c
@@ -46,7 +46,7 @@ void device_generic_cart_interface::rom_alloc(size_t size, int width, const char
if (m_rom == NULL)
{
astring tempstring(tag);
- tempstring.cat(":cart:rom");
+ tempstring.cat(GENERIC_ROM_REGION_TAG);
m_rom = device().machine().memory().region_alloc(tempstring, size, width, ENDIANNESS_LITTLE)->base();
m_rom_size = size;
}
diff --git a/src/emu/bus/generic/slot.h b/src/emu/bus/generic/slot.h
index ab123a2cc30..6dc9dc702b4 100644
--- a/src/emu/bus/generic/slot.h
+++ b/src/emu/bus/generic/slot.h
@@ -44,6 +44,9 @@ enum
GENERIC_ROM16_WIDTH
};
+#define GENERIC_ROM_REGION_TAG ":cart:rom"
+
+
#define MCFG_GENERIC_MANDATORY \
static_cast<generic_slot_device *>(device)->set_must_be_loaded(TRUE);
diff --git a/src/mess/audio/tvc.c b/src/mess/audio/tvc_snd.c
index 0869cfc3f67..29d61b5dc7c 100644
--- a/src/mess/audio/tvc.c
+++ b/src/mess/audio/tvc_snd.c
@@ -7,7 +7,7 @@
***************************************************************************/
#include "emu.h"
-#include "includes/tvc.h"
+#include "tvc_snd.h"
// device type definition
const device_type TVC_SOUND = &device_creator<tvc_sound_device>;
diff --git a/src/mess/audio/tvc_snd.h b/src/mess/audio/tvc_snd.h
new file mode 100644
index 00000000000..b8b955d3c45
--- /dev/null
+++ b/src/mess/audio/tvc_snd.h
@@ -0,0 +1,59 @@
+// license:BSD-3-Clause
+// copyright-holders:Sandro Ronco
+/*****************************************************************************
+ *
+ * includes/tvc.h
+ *
+ ****************************************************************************/
+
+#pragma once
+
+#ifndef _TVC_SND_H_
+#define _TVC_SND_H_
+
+#define MCFG_TVC_SOUND_SNDINT_CALLBACK(_write) \
+ devcb = &tvc_sound_device::set_sndint_wr_callback(*device, DEVCB_##_write);
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> tvc_sound_device
+
+class tvc_sound_device : public device_t,
+ public device_sound_interface
+{
+public:
+ // construction/destruction
+ tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ template<class _Object> static devcb_base &set_sndint_wr_callback(device_t &device, _Object object) { return downcast<tvc_sound_device &>(device).m_write_sndint.set_callback(object); }
+
+ DECLARE_WRITE8_MEMBER(write);
+ void reset_divider();
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+ virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
+
+private:
+ static const device_timer_id TIMER_SNDINT = 0;
+
+ sound_stream * m_stream;
+ int m_freq;
+ int m_enabled;
+ int m_volume;
+ int m_incr;
+ int m_signal;
+ UINT8 m_ports[3];
+ emu_timer * m_sndint_timer;
+ devcb_write_line m_write_sndint;
+};
+
+// device type definition
+extern const device_type TVC_SOUND;
+
+#endif
diff --git a/src/mess/drivers/advision.c b/src/mess/drivers/advision.c
index 0f28d583f35..1cb0865fb2c 100644
--- a/src/mess/drivers/advision.c
+++ b/src/mess/drivers/advision.c
@@ -16,19 +16,23 @@
*/
-
#include "emu.h"
#include "includes/advision.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/cop400/cop400.h"
-#include "imagedev/cartslot.h"
#include "sound/dac.h"
/* Memory Maps */
+READ8_MEMBER( advision_state::rom_r )
+{
+ offset += 0x400;
+ return m_cart->read_rom(space, offset & 0xfff);
+}
+
static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, advision_state )
AM_RANGE(0x0000, 0x03ff) AM_ROMBANK("bank1")
- AM_RANGE(0x0400, 0x0fff) AM_ROM
+ AM_RANGE(0x0400, 0x0fff) AM_READ(rom_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, advision_state )
@@ -69,7 +73,7 @@ static MACHINE_CONFIG_START( advision, advision_state )
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_ADD(COP411_TAG, COP411, 52631*16) // COP411L-KCN/N
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, COP400_MICROBUS_DISABLED )
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, COP400_MICROBUS_DISABLED)
MCFG_CPU_IO_MAP(sound_io_map)
/* video hardware */
@@ -90,10 +94,8 @@ static MACHINE_CONFIG_START( advision, advision_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* cartridge */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("bin")
- MCFG_CARTSLOT_MANDATORY
- MCFG_CARTSLOT_INTERFACE("advision_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "advision_cart")
+ MCFG_GENERIC_MANDATORY
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","advision")
@@ -102,10 +104,7 @@ MACHINE_CONFIG_END
/* ROMs */
ROM_START( advision )
- ROM_REGION( 0x1000, I8048_TAG, 0 )
- ROM_CART_LOAD( "cart", 0x0000, 0x1000, ROM_NOMIRROR | ROM_FULLSIZE )
-
- ROM_REGION( 0x400, "bios", 0 )
+ ROM_REGION( 0x1000, I8048_TAG, ROMREGION_ERASE00 )
ROM_LOAD( "avbios.u5", 0x000, 0x400, CRC(279e33d1) SHA1(bf7b0663e9125c9bfb950232eab627d9dbda8460) )
ROM_REGION( 0x200, COP411_TAG, 0 )
diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c
index a64d4bbe043..39e044ca413 100644
--- a/src/mess/drivers/svi318.c
+++ b/src/mess/drivers/svi318.c
@@ -10,22 +10,10 @@
*/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/wave.h"
-#include "video/mc6845.h"
#include "includes/svi318.h"
-#include "video/tms9928a.h"
-#include "machine/i8255.h"
-#include "machine/wd17xx.h"
-#include "bus/centronics/ctronics.h"
#include "imagedev/flopdrv.h"
#include "formats/svi_dsk.h"
-#include "imagedev/cartslot.h"
-#include "imagedev/cassette.h"
#include "formats/svi_cas.h"
-#include "sound/dac.h"
-#include "sound/ay8910.h"
-#include "machine/ram.h"
#include "rendlay.h"
static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state )
@@ -263,12 +251,9 @@ static const floppy_interface svi318_floppy_interface =
};
static MACHINE_CONFIG_FRAGMENT( svi318_cartslot )
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("rom")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_INTERFACE("svi318_cart")
- MCFG_CARTSLOT_LOAD(svi318_state,svi318_cart)
- MCFG_CARTSLOT_UNLOAD(svi318_state,svi318_cart)
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "svi318_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
+ MCFG_GENERIC_LOAD(svi318_state, svi318_cart)
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","svi318_cart")
@@ -497,8 +482,6 @@ ROM_START( svi318 )
ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
ROM_START( svi318n )
@@ -509,8 +492,6 @@ ROM_START( svi318n )
ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
ROM_START( svi328 )
@@ -521,8 +502,6 @@ ROM_START( svi328 )
ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
ROM_START( svi328n )
@@ -533,8 +512,6 @@ ROM_START( svi328n )
ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
ROM_START( sv328p80 )
@@ -546,8 +523,6 @@ ROM_START( sv328p80 )
ROMX_LOAD("svi806.rom", 0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
ROM_START( sv328n80 )
@@ -559,8 +534,6 @@ ROM_START( sv328n80 )
ROMX_LOAD("svi806.rom", 0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
-
- ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
ROM_END
diff --git a/src/mess/drivers/tutor.c b/src/mess/drivers/tutor.c
index c3aa7eea127..6fe6aba5269 100644
--- a/src/mess/drivers/tutor.c
+++ b/src/mess/drivers/tutor.c
@@ -170,10 +170,11 @@ A=AMA, P=PRO, these keys don't exist, and so the games cannot be played.
#include "cpu/tms9900/tms9995.h"
#include "sound/wave.h"
#include "video/tms9928a.h"
-#include "imagedev/cartslot.h"
#include "imagedev/cassette.h"
#include "sound/sn76496.h"
#include "bus/centronics/ctronics.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
class tutor_state : public driver_device
@@ -182,16 +183,22 @@ public:
tutor_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_cart(*this, "cartslot"),
m_cass(*this, "cassette"),
m_centronics(*this, "centronics"),
- m_cent_data_out(*this, "cent_data_out")
+ m_cent_data_out(*this, "cent_data_out"),
+ m_bank1(*this, "bank1")
{
}
required_device<tms9995_device> m_maincpu;
+ required_device<generic_slot_device> m_cart;
optional_device<cassette_image_device> m_cass;
optional_device<centronics_device> m_centronics;
optional_device<output_latch_device> m_cent_data_out;
+ required_memory_bank m_bank1;
+ memory_region *m_cart_rom;
+
DECLARE_READ8_MEMBER(key_r);
DECLARE_READ8_MEMBER(tutor_mapper_r);
DECLARE_WRITE8_MEMBER(tutor_mapper_w);
@@ -201,67 +208,38 @@ public:
DECLARE_WRITE8_MEMBER(tutor_printer_w);
DECLARE_READ8_MEMBER(tutor_highmem_r);
- char m_cartridge_enable;
- char m_tape_interrupt_enable;
+ int m_tape_interrupt_enable;
emu_timer *m_tape_interrupt_timer;
- UINT8 m_printer_data;
- char m_printer_strobe;
- DECLARE_DRIVER_INIT(tutor);
- DECLARE_DRIVER_INIT(pyuuta);
virtual void machine_start();
virtual void machine_reset();
TIMER_CALLBACK_MEMBER(tape_interrupt_handler);
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER( tutor_cart );
- DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( tutor_cart );
int m_centronics_busy;
- DECLARE_WRITE_LINE_MEMBER( write_centronics_busy );
+ DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
};
-/* mapper state */
-
-/* tape interface state */
-
-
-
-/* parallel interface state */
-
-enum
-{
- basic_base = 0x8000,
- cartridge_base = 0xe000
-};
-
-
-DRIVER_INIT_MEMBER(tutor_state,tutor)
+void tutor_state::machine_start()
{
+ astring region_tag;
+ m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
+
m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this));
+
+ m_bank1->configure_entry(0, memregion("maincpu")->base() + 0x8000);
+ m_bank1->set_entry(0);
- membank("bank1")->configure_entry(0, memregion("maincpu")->base() + basic_base);
- membank("bank1")->configure_entry(1, memregion("maincpu")->base() + cartridge_base);
- membank("bank1")->set_entry(0);
-}
-
-
-DRIVER_INIT_MEMBER(tutor_state,pyuuta)
-{
- DRIVER_INIT_CALL(tutor);
- membank("bank1")->set_entry(1);
-}
-
-void tutor_state::machine_start()
-{
+ if (m_cart_rom)
+ {
+ m_bank1->configure_entry(1, m_cart_rom->base());
+ m_bank1->set_entry(1);
+ }
}
void tutor_state::machine_reset()
{
- m_cartridge_enable = 0;
-
m_tape_interrupt_enable = 0;
-
- m_printer_data = 0;
- m_printer_strobe = 0;
+ m_centronics_busy = 0;
// Enable auto wait states by lowering READY during reset
m_maincpu->set_ready(CLEAR_LINE);
@@ -300,31 +278,6 @@ READ8_MEMBER( tutor_state::key_r )
}
-DEVICE_IMAGE_LOAD_MEMBER( tutor_state, tutor_cart )
-{
- UINT32 size;
- UINT8 *ptr = memregion("maincpu")->base();
-
- if (image.software_entry() == NULL)
- {
- size = image.length();
- if (image.fread(ptr + cartridge_base, size) != size)
- return IMAGE_INIT_FAIL;
- }
- else
- {
- size = image.get_software_region_length("rom");
- memcpy(ptr + cartridge_base, image.get_software_region("rom"), size);
- }
-
- return IMAGE_INIT_PASS;
-}
-
-DEVICE_IMAGE_UNLOAD_MEMBER( tutor_state, tutor_cart )
-{
- memset(memregion("maincpu")->base() + cartridge_base, 0, 0x6000);
-}
-
/*
Cartridge mapping:
@@ -346,7 +299,7 @@ READ8_MEMBER( tutor_state::tutor_mapper_r )
switch (offset)
{
case 0x10:
- /* return 0x42 if we have an cartridge with an alternate boot ROM */
+ /* return 0x42 if we have a cartridge with an alternate boot ROM */
reply = 0;
break;
@@ -369,18 +322,17 @@ WRITE8_MEMBER( tutor_state::tutor_mapper_w )
case 0x08:
/* disable cartridge ROM, enable BASIC ROM at base >8000 */
- m_cartridge_enable = 0;
- membank("bank1")->set_entry(0);
+ m_bank1->set_entry(0);
break;
case 0x0c:
/* enable cartridge ROM, disable BASIC ROM at base >8000 */
- m_cartridge_enable = 1;
- membank("bank1")->set_entry(1);
+ if (m_cart_rom)
+ m_bank1->set_entry(1);
break;
default:
- if (! (offset & 1))
+ if (!(offset & 1))
logerror("unknown port in %s %d\n", __FILE__, __LINE__);
break;
}
@@ -435,7 +387,7 @@ WRITE8_MEMBER( tutor_state::tutor_cassette_w )
if ((offset & 0x1f) == 0)
{
- data = (offset & 0x20) != 0;
+ data = BIT(offset, 5);
switch ((offset >> 6) & 3)
{
@@ -446,10 +398,10 @@ WRITE8_MEMBER( tutor_state::tutor_cassette_w )
case 1:
/* interrupt control??? */
//logerror("ignoring write of %d to cassette port 1\n", data);
- if (m_tape_interrupt_enable != ! data)
+ if (m_tape_interrupt_enable != data)
{
- m_tape_interrupt_enable = ! data;
- if (m_tape_interrupt_enable)
+ m_tape_interrupt_enable = data;
+ if (!m_tape_interrupt_enable)
m_tape_interrupt_timer->adjust(/*attotime::from_hz(44100)*/attotime::zero, 0, attotime::from_hz(44100));
else
{
@@ -618,7 +570,7 @@ Small note about natural keyboard support: currently,
*/
static INPUT_PORTS_START(tutor)
- PORT_START("LINE0") /* col 0 */
+ PORT_START("LINE0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
@@ -628,7 +580,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
- PORT_START("LINE1") /* col 1 */
+ PORT_START("LINE1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
@@ -638,7 +590,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
- PORT_START("LINE2") /* col 2 */
+ PORT_START("LINE2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
@@ -648,7 +600,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
- PORT_START("LINE3") /* col 3 */
+ PORT_START("LINE3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
@@ -658,7 +610,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
- PORT_START("LINE4") /* col 4 */
+ PORT_START("LINE4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- b") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
@@ -668,7 +620,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_START("LINE4_alt") /* col 4 */
+ PORT_START("LINE4_alt")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(1)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(1)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) PORT_CODE(KEYCODE_2_PAD)
@@ -676,7 +628,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_PLAYER(1) PORT_CODE(KEYCODE_8_PAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_CODE(KEYCODE_6_PAD)
- PORT_START("LINE5") /* col 5 */
+ PORT_START("LINE5")
/* Unused? */
PORT_BIT(0x03, IP_ACTIVE_HIGH, IPT_UNUSED)
@@ -687,7 +639,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') // this one is 4th line, 4th key after 'M'
- PORT_START("LINE5_alt") /* col 5 */
+ PORT_START("LINE5_alt")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_PLAYER(2)
@@ -695,7 +647,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_PLAYER(2)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2)
- PORT_START("LINE6") /* col 6 */
+ PORT_START("LINE6")
/* Unused? */
PORT_BIT(0x21, IP_ACTIVE_HIGH, IPT_UNUSED)
@@ -708,7 +660,7 @@ static INPUT_PORTS_START(tutor)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Mod") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_START("LINE7") /* col 7 */
+ PORT_START("LINE7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
@@ -776,11 +728,7 @@ static MACHINE_CONFIG_START( tutor, tutor_state )
MCFG_CASSETTE_ADD( "cassette" )
/* cartridge */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_LOAD(tutor_state, tutor_cart)
- MCFG_CARTSLOT_UNLOAD(tutor_state, tutor_cart)
- MCFG_CARTSLOT_INTERFACE("tutor_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_linear_slot, "tutor_cart")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","tutor")
@@ -796,27 +744,25 @@ MACHINE_CONFIG_END
/*
ROM loading
*/
+
ROM_START(tutor)
- /*CPU memory space*/
- ROM_REGION(0x14000,"maincpu",0)
+ ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("tutor1.bin", 0x0000, 0x8000, CRC(702c38ba) SHA1(ce60607c3038895e31915d41bb5cf71cb8522d7a)) /* system ROM */
ROM_LOAD("tutor2.bin", 0x8000, 0x4000, CRC(05f228f5) SHA1(46a14a45f6f9e2c30663a2b87ce60c42768a78d0)) /* BASIC ROM */
ROM_END
ROM_START(pyuuta)
- /*CPU memory space*/
- ROM_REGION(0x14000,"maincpu",0)
+ ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("tomy29.7", 0x0000, 0x8000, CRC(7553bb6a) SHA1(fa41c45cb6d3daf7435f2a82f77dfa286003255e)) /* system ROM */
ROM_END
ROM_START(pyuutajr)
- /*CPU memory space*/
- ROM_REGION(0x14000,"maincpu",0)
+ ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "ipl.rom", 0x0000, 0x4000, CRC(2ca37e62) SHA1(eebdc5c37d3b532edd5e5ca65eb785269ebd1ac0)) /* system ROM */
ROM_END
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP(1983?, tutor, 0, 0, tutor, tutor, tutor_state, tutor, "Tomy", "Tomy Tutor" , 0)
-COMP(1982, pyuuta, tutor, 0, tutor, tutor, tutor_state, pyuuta, "Tomy", "Tomy Pyuuta" , 0)
-COMP(1983, pyuutajr, tutor, 0, pyuutajr, pyuutajr, tutor_state, pyuuta, "Tomy", "Tomy Pyuuta Jr." , 0)
+/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
+COMP(1983?, tutor, 0, 0, tutor, tutor, driver_device, 0, "Tomy", "Tomy Tutor" , 0)
+COMP(1982, pyuuta, tutor, 0, tutor, tutor, driver_device, 0, "Tomy", "Tomy Pyuuta" , 0)
+COMP(1983, pyuutajr, tutor, 0, pyuutajr, pyuutajr, driver_device, 0, "Tomy", "Tomy Pyuuta Jr." , 0)
diff --git a/src/mess/drivers/tvc.c b/src/mess/drivers/tvc.c
index eb8baf255d1..82b96fd9234 100644
--- a/src/mess/drivers/tvc.c
+++ b/src/mess/drivers/tvc.c
@@ -13,7 +13,96 @@
****************************************************************************/
#include "emu.h"
-#include "includes/tvc.h"
+#include "cpu/z80/z80.h"
+#include "video/mc6845.h"
+#include "machine/ram.h"
+#include "audio/tvc_snd.h"
+#include "bus/centronics/ctronics.h"
+#include "imagedev/cassette.h"
+#include "imagedev/snapquik.h"
+#include "formats/tvc_cas.h"
+
+#include "bus/tvc/tvc.h"
+#include "bus/tvc/hbf.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#define TVC_RAM_BANK 1
+#define TVC_ROM_BANK 2
+
+#define CENTRONICS_TAG "centronics"
+
+
+class tvc_state : public driver_device
+{
+public:
+ tvc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_ram(*this, RAM_TAG),
+ m_sound(*this, "custom"),
+ m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
+ m_centronics(*this, CENTRONICS_TAG),
+ m_palette(*this, "palette"),
+ m_keyboard(*this, "LINE")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
+ required_device<tvc_sound_device> m_sound;
+ required_device<cassette_image_device> m_cassette;
+ required_device<generic_slot_device> m_cart;
+ required_device<centronics_device> m_centronics;
+ required_device<palette_device> m_palette;
+ required_ioport_array<16> m_keyboard;
+
+ tvcexp_slot_device *m_expansions[4];
+ memory_region *m_bios_rom;
+ memory_region *m_cart_rom;
+ memory_region *m_ext;
+ memory_region *m_vram;
+
+ void machine_start();
+ void machine_reset();
+
+ void set_mem_page(UINT8 data);
+ DECLARE_WRITE8_MEMBER(bank_w);
+ DECLARE_WRITE8_MEMBER(vram_bank_w);
+ DECLARE_WRITE8_MEMBER(palette_w);
+ DECLARE_WRITE8_MEMBER(keyboard_w);
+ DECLARE_READ8_MEMBER(keyboard_r);
+ DECLARE_READ8_MEMBER(int_state_r);
+ DECLARE_WRITE8_MEMBER(flipflop_w);
+ DECLARE_WRITE8_MEMBER(border_color_w);
+ DECLARE_WRITE8_MEMBER(sound_w);
+ DECLARE_WRITE8_MEMBER(cassette_w);
+ DECLARE_READ8_MEMBER(_5b_r);
+ DECLARE_WRITE_LINE_MEMBER(int_ff_set);
+ DECLARE_WRITE_LINE_MEMBER(centronics_ack);
+
+ // expansions
+ DECLARE_WRITE8_MEMBER(expansion_w);
+ DECLARE_READ8_MEMBER(expansion_r);
+ DECLARE_READ8_MEMBER(exp_id_r);
+ DECLARE_WRITE8_MEMBER(expint_ack_w);
+
+ DECLARE_QUICKLOAD_LOAD_MEMBER( tvc64);
+
+ MC6845_UPDATE_ROW(crtc_update_row);
+
+ UINT8 m_video_mode;
+ UINT8 m_keyline;
+ UINT8 m_active_slot;
+ UINT8 m_int_flipflop;
+ UINT8 m_col[4];
+ UINT8 m_bank_type[4];
+ UINT8 m_bank;
+ UINT8 m_vram_bank;
+ UINT8 m_cassette_ff;
+ UINT8 m_centronics_ff;
+ DECLARE_PALETTE_INIT(tvc);
+};
@@ -30,29 +119,33 @@
space.install_readwrite_bank(_start, _end, _tag); \
m_bank_type[_bank] = TVC_RAM_BANK; \
}
-void tvc_state::tvc_set_mem_page(UINT8 data)
+
+void tvc_state::set_mem_page(UINT8 data)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- switch(data & 0x18)
+ switch (data & 0x18)
{
case 0x00 : // system ROM selected
TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
- membank("bank1")->set_base(memregion("sys")->base());
+ membank("bank1")->set_base(m_bios_rom->base());
break;
case 0x08 : // Cart ROM selected
- TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
- membank("bank1")->set_base(memregion("cart")->base());
+ if (m_cart_rom)
+ {
+ TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
+ membank("bank1")->set_base(m_cart_rom->base());
+ }
break;
case 0x10 : // RAM selected
TVC_INSTALL_RAM_BANK(0, "bank1", 0x0000, 0x3fff);
membank("bank1")->set_base(m_ram->pointer());
break;
case 0x18 : // Video RAM
- if (memregion("vram")->bytes() > 0x4000)
+ if (m_vram->bytes() > 0x4000)
{
// TVC 64+ only
TVC_INSTALL_RAM_BANK(0, "bank1", 0x0000, 0x3fff);
- membank("bank1")->set_base(memregion("vram")->base() + ((m_vram_bank & 0x03)<<14));
+ membank("bank1")->set_base(m_vram->base() + ((m_vram_bank & 0x03)<<14));
}
else
{
@@ -65,7 +158,7 @@ void tvc_state::tvc_set_mem_page(UINT8 data)
if ((data & 0x20)==0) // Video RAM
{
TVC_INSTALL_RAM_BANK(2, "bank3", 0x8000, 0xbfff);
- membank("bank3")->set_base(memregion("vram")->base() + ((m_vram_bank & 0x0c)<<12));
+ membank("bank3")->set_base(m_vram->base() + ((m_vram_bank & 0x0c)<<12));
}
else // System RAM page 3
{
@@ -84,12 +177,15 @@ void tvc_state::tvc_set_mem_page(UINT8 data)
switch(data & 0xc0)
{
case 0x00 : // Cart ROM selected
- TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
- membank("bank4")->set_base(memregion("cart")->base());
+ if (m_cart_rom)
+ {
+ TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
+ membank("bank4")->set_base(m_cart_rom->base());
+ }
break;
case 0x40 : // System ROM selected
TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
- membank("bank4")->set_base(memregion("sys")->base());
+ membank("bank4")->set_base(m_bios_rom->base());
break;
case 0x80 : // RAM selected
if (m_ram->size() > 0x8000)
@@ -105,46 +201,46 @@ void tvc_state::tvc_set_mem_page(UINT8 data)
break;
case 0xc0 : // External ROM selected
TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
- membank("bank4")->set_base(memregion("ext")->base());
- space.install_readwrite_handler (0xc000, 0xdfff, 0, 0, read8_delegate(FUNC(tvc_state::tvc_expansion_r), this), write8_delegate(FUNC(tvc_state::tvc_expansion_w), this), 0);
+ membank("bank4")->set_base(m_ext->base());
+ space.install_readwrite_handler (0xc000, 0xdfff, 0, 0, read8_delegate(FUNC(tvc_state::expansion_r), this), write8_delegate(FUNC(tvc_state::expansion_w), this), 0);
m_bank_type[3] = -1;
break;
}
}
-WRITE8_MEMBER(tvc_state::tvc_expansion_w)
+WRITE8_MEMBER(tvc_state::expansion_w)
{
m_expansions[m_active_slot & 3]->write(space, offset, data);
}
-READ8_MEMBER(tvc_state::tvc_expansion_r)
+READ8_MEMBER(tvc_state::expansion_r)
{
return m_expansions[m_active_slot & 3]->read(space, offset);
}
-WRITE8_MEMBER(tvc_state::tvc_bank_w)
+WRITE8_MEMBER(tvc_state::bank_w)
{
m_bank = data;
- tvc_set_mem_page(data);
+ set_mem_page(data);
}
-WRITE8_MEMBER(tvc_state::tvc_vram_bank_w)
+WRITE8_MEMBER(tvc_state::vram_bank_w)
{
// TVC 64+ only
- if (memregion("vram")->bytes() > 0x4000)
+ if (m_vram->bytes() > 0x4000)
{
// bit 4-5 - screen video RAM
// bit 2-3 - video RAM active in bank 3
// bit 0-1 - video RAM active in bank 1
m_vram_bank = data;
- tvc_set_mem_page(m_bank);
+ set_mem_page(m_bank);
}
}
-WRITE8_MEMBER(tvc_state::tvc_palette_w)
+WRITE8_MEMBER(tvc_state::palette_w)
{
// 0 I 0 G | 0 R 0 B
// 0 0 0 0 | I G R B
@@ -153,7 +249,7 @@ WRITE8_MEMBER(tvc_state::tvc_palette_w)
m_col[offset] = i;
}
-WRITE8_MEMBER(tvc_state::tvc_keyboard_w)
+WRITE8_MEMBER(tvc_state::keyboard_w)
{
// bit 6-7 - expansion select
// bit 0-3 - keyboard scan
@@ -162,16 +258,12 @@ WRITE8_MEMBER(tvc_state::tvc_keyboard_w)
m_active_slot = (data>>6) & 0x03;
}
-READ8_MEMBER(tvc_state::tvc_keyboard_r)
+READ8_MEMBER(tvc_state::keyboard_r)
{
- static const char *const keynames[] = {
- "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
- "LINE8", "LINE9", "LINEA", "LINEB", "LINEC", "LINED", "LINEE", "LINEF"
- };
- return ioport(keynames[m_keyline & 0x0f])->read();
+ return m_keyboard[m_keyline & 0x0f]->read();
}
-READ8_MEMBER(tvc_state::tvc_int_state_r)
+READ8_MEMBER(tvc_state::int_state_r)
{
/*
x--- ---- centronics ACK flipflop
@@ -189,32 +281,32 @@ READ8_MEMBER(tvc_state::tvc_int_state_r)
return 0x40 | (m_int_flipflop << 4) | (level > 0.01 ? 0x20 : 0x00) | (m_centronics_ff << 7) | (expint & 0x0f);
}
-WRITE8_MEMBER(tvc_state::tvc_flipflop_w)
+WRITE8_MEMBER(tvc_state::flipflop_w)
{
// every write here clears the vblank flipflop
m_int_flipflop = 1;
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-READ8_MEMBER(tvc_state::tvc_exp_id_r)
+READ8_MEMBER(tvc_state::exp_id_r)
{
// expansion slots ID
return (m_expansions[0]->id_r()<<0) | (m_expansions[1]->id_r()<<2) |
(m_expansions[2]->id_r()<<4) | (m_expansions[3]->id_r()<<6);
}
-WRITE8_MEMBER(tvc_state::tvc_expint_ack_w)
+WRITE8_MEMBER(tvc_state::expint_ack_w)
{
m_expansions[offset & 3]->int_ack();
}
-WRITE8_MEMBER(tvc_state::tvc_border_color_w)
+WRITE8_MEMBER(tvc_state::border_color_w)
{
// x-x- x-x- border color (I G R B)
}
-WRITE8_MEMBER(tvc_state::tvc_sound_w)
+WRITE8_MEMBER(tvc_state::sound_w)
{
switch(offset)
{
@@ -238,13 +330,13 @@ WRITE8_MEMBER(tvc_state::tvc_sound_w)
m_sound->write(space, offset, data);
}
-READ8_MEMBER(tvc_state::tvc_5b_r)
+READ8_MEMBER(tvc_state::_5b_r)
{
m_sound->reset_divider();
return 0xff;
}
-WRITE8_MEMBER(tvc_state::tvc_cassette_w)
+WRITE8_MEMBER(tvc_state::cassette_w)
{
// writig here cause the toggle of the cassette flipflop
m_cassette_ff = !m_cassette_ff;
@@ -261,229 +353,247 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( tvc_io , AS_IO, 8, tvc_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_WRITE(tvc_border_color_w)
+ AM_RANGE(0x00, 0x00) AM_WRITE(border_color_w)
AM_RANGE(0x01, 0x01) AM_DEVWRITE("cent_data_out", output_latch_device, write)
- AM_RANGE(0x02, 0x02) AM_WRITE(tvc_bank_w)
- AM_RANGE(0x03, 0x03) AM_WRITE(tvc_keyboard_w)
- AM_RANGE(0x04, 0x06) AM_WRITE(tvc_sound_w)
- AM_RANGE(0x07, 0x07) AM_WRITE(tvc_flipflop_w)
- AM_RANGE(0x0f, 0x0f) AM_WRITE(tvc_vram_bank_w)
+ AM_RANGE(0x02, 0x02) AM_WRITE(bank_w)
+ AM_RANGE(0x03, 0x03) AM_WRITE(keyboard_w)
+ AM_RANGE(0x04, 0x06) AM_WRITE(sound_w)
+ AM_RANGE(0x07, 0x07) AM_WRITE(flipflop_w)
+ AM_RANGE(0x0f, 0x0f) AM_WRITE(vram_bank_w)
AM_RANGE(0x10, 0x1f) AM_DEVREADWRITE("exp1", tvcexp_slot_device, io_read, io_write)
AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("exp2", tvcexp_slot_device, io_read, io_write)
AM_RANGE(0x30, 0x3f) AM_DEVREADWRITE("exp3", tvcexp_slot_device, io_read, io_write)
AM_RANGE(0x40, 0x4f) AM_DEVREADWRITE("exp4", tvcexp_slot_device, io_read, io_write)
- AM_RANGE(0x50, 0x50) AM_WRITE(tvc_cassette_w)
- AM_RANGE(0x58, 0x58) AM_READ(tvc_keyboard_r)
- AM_RANGE(0x59, 0x59) AM_READ(tvc_int_state_r)
- AM_RANGE(0x5a, 0x5a) AM_READ(tvc_exp_id_r)
- AM_RANGE(0x5b, 0x5b) AM_READ(tvc_5b_r)
- AM_RANGE(0x58, 0x5b) AM_WRITE(tvc_expint_ack_w)
- AM_RANGE(0x60, 0x63) AM_WRITE(tvc_palette_w)
+ AM_RANGE(0x50, 0x50) AM_WRITE(cassette_w)
+ AM_RANGE(0x58, 0x58) AM_READ(keyboard_r)
+ AM_RANGE(0x59, 0x59) AM_READ(int_state_r)
+ AM_RANGE(0x5a, 0x5a) AM_READ(exp_id_r)
+ AM_RANGE(0x5b, 0x5b) AM_READ(_5b_r)
+ AM_RANGE(0x58, 0x5b) AM_WRITE(expint_ack_w)
+ AM_RANGE(0x60, 0x63) AM_WRITE(palette_w)
AM_RANGE(0x70, 0x70) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x71, 0x71) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( tvc )
- PORT_START("LINE0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('+')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('&')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('/')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\x8d") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(0x00cd)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('\'')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('!')
- PORT_START("LINE1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('^')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xbc") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(0x00fc)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(0x00f3)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb6") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(0x00f6)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('=')
- PORT_START("LINE2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('$')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_HOME) PORT_CHAR('@')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_START("LINE3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\x91") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(0x0151)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xba") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(0x00fa)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_START("LINE4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_END) PORT_CHAR('<')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_START("LINE5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa1") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(0x00e1)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\xb1") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(0x0171)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(0x00e9)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_START("LINE6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_START("LINE7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('?')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_START("LINE8")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fire") PORT_CODE(KEYCODE_PGUP) //PORT_CHAR(UCHAR_MAMEKEY())
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Acc") PORT_CODE(KEYCODE_PGDN) //PORT_CHAR(UCHAR_MAMEKEY())
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINE9")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEA")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEB")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEC")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINED")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEE")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEF")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('+')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('&')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('/')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\x8d") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(0x00cd)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('\'')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('!')
+
+ PORT_START("LINE.1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('^')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xbc") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(0x00fc)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(0x00f3)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb6") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(0x00f6)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('=')
+
+ PORT_START("LINE.2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('$')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_HOME) PORT_CHAR('@')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+
+ PORT_START("LINE.3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\x91") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(0x0151)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xba") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(0x00fa)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+
+ PORT_START("LINE.4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_END) PORT_CHAR('<')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+
+ PORT_START("LINE.5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa1") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(0x00e1)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\xb1") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(0x0171)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(0x00e9)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+
+ PORT_START("LINE.6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+
+ PORT_START("LINE.7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('?')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+
+ PORT_START("LINE.8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fire") PORT_CODE(KEYCODE_PGUP) //PORT_CHAR(UCHAR_MAMEKEY())
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Acc") PORT_CODE(KEYCODE_PGDN) //PORT_CHAR(UCHAR_MAMEKEY())
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("LINE.9")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.10")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.11")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.12")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.13")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.14")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.15")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
static INPUT_PORTS_START( tvc64pru )
- PORT_START("LINE0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x0436)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DL") PORT_CODE(KEYCODE_HOME) // delete line
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DC") PORT_CODE(KEYCODE_7_PAD)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_START("LINE1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("IL") PORT_CODE(KEYCODE_END) // insert line
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('{')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('_')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
- PORT_START("LINE2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_START("LINE3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_START("LINE4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_START("LINE5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_START("LINE6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('^')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_START("LINE7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('@') PORT_CHAR('\'')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_START("LINE8")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Up") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(UP))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Down") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Fire") PORT_CODE(KEYCODE_PGUP) //PORT_CHAR(UCHAR_MAMEKEY())
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Acc") PORT_CODE(KEYCODE_PGDN) //PORT_CHAR(UCHAR_MAMEKEY())
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Right") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Left") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINE9")
- PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
- PORT_START("LINEA")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEB")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEC")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINED")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEE")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("LINEF")
- PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x0436)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DL") PORT_CODE(KEYCODE_HOME) // delete line
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DC") PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+
+ PORT_START("LINE.1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("IL") PORT_CODE(KEYCODE_END) // insert line
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('{')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('_')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
+
+ PORT_START("LINE.2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+
+ PORT_START("LINE.3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+
+ PORT_START("LINE.4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+
+ PORT_START("LINE.5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+
+ PORT_START("LINE.6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('^')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+
+ PORT_START("LINE.7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('@') PORT_CHAR('\'')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+
+ PORT_START("LINE.8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Up") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Down") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Fire") PORT_CODE(KEYCODE_PGUP) //PORT_CHAR(UCHAR_MAMEKEY())
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Acc") PORT_CODE(KEYCODE_PGDN) //PORT_CHAR(UCHAR_MAMEKEY())
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Right") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Left") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("LINE.9")
+ PORT_BIT(0x7f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
+ PORT_START("LINE.10")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.11")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.12")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.13")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.14")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("LINE.15")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
void tvc_state::machine_start()
{
- for (int i=0; i<4; i++)
+ for (int i = 0; i < 4; i++)
m_col[i] = i;
m_int_flipflop = 0;
@@ -492,12 +602,19 @@ void tvc_state::machine_start()
m_expansions[1] = machine().device<tvcexp_slot_device>("exp2");
m_expansions[2] = machine().device<tvcexp_slot_device>("exp3");
m_expansions[3] = machine().device<tvcexp_slot_device>("exp4");
+
+ m_bios_rom = memregion("sys");
+ m_ext = memregion("ext");
+ m_vram = memregion("vram");
+
+ astring region_tag;
+ m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
}
void tvc_state::machine_reset()
{
memset(m_ram->pointer(), 0, m_ram->size());
- tvc_set_mem_page(0);
+ set_mem_page(0);
m_video_mode = 0;
m_cassette_ff = 1;
m_centronics_ff = 1;
@@ -514,7 +631,7 @@ MC6845_UPDATE_ROW( tvc_state::crtc_update_row )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
- UINT8 *vram = memregion("vram")->base() + ((m_vram_bank & 0x30)<<10);
+ UINT8 *vram = m_vram->base() + ((m_vram_bank & 0x30)<<10);
UINT16 offset = ((ma*4 + ra*0x40) & 0x3fff);
int i;
@@ -599,7 +716,7 @@ PALETTE_INIT_MEMBER(tvc_state, tvc)
palette.set_pen_color(i, tvc_palette[i][0], tvc_palette[i][1], tvc_palette[i][2]);
}
-WRITE_LINE_MEMBER(tvc_state::tvc_int_ff_set)
+WRITE_LINE_MEMBER(tvc_state::int_ff_set)
{
if (state)
{
@@ -608,13 +725,13 @@ WRITE_LINE_MEMBER(tvc_state::tvc_int_ff_set)
}
}
-WRITE_LINE_MEMBER(tvc_state::tvc_centronics_ack)
+WRITE_LINE_MEMBER(tvc_state::centronics_ack)
{
if (state)
m_centronics_ff = 1;
}
-QUICKLOAD_LOAD_MEMBER( tvc_state,tvc64)
+QUICKLOAD_LOAD_MEMBER( tvc_state, tvc64)
{
UINT8 first_byte;
@@ -658,7 +775,7 @@ static MACHINE_CONFIG_START( tvc, tvc_state )
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8) /*?*/
MCFG_MC6845_UPDATE_ROW_CB(tvc_state, crtc_update_row)
- MCFG_MC6845_OUT_CUR_CB(WRITELINE(tvc_state, tvc_int_ff_set))
+ MCFG_MC6845_OUT_CUR_CB(WRITELINE(tvc_state, int_ff_set))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -668,19 +785,17 @@ static MACHINE_CONFIG_START( tvc, tvc_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("custom", TVC_SOUND, 0)
- MCFG_TVC_SOUND_SNDINT_CALLBACK(WRITELINE(tvc_state, tvc_int_ff_set))
+ MCFG_TVC_SOUND_SNDINT_CALLBACK(WRITELINE(tvc_state, int_ff_set))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
- MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tvc_state, tvc_centronics_ack))
+ MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tvc_state, centronics_ack))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
/* cartridge */
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("crt,rom,bin")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_INTERFACE("tvc_cart")
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "tvc_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom,crt")
/* expansion interface */
MCFG_DEVICE_ADD("exp1", TVCEXP_SLOT, 0)
@@ -718,8 +833,7 @@ ROM_START( tvc64 )
ROM_REGION( 0x4000, "sys", ROMREGION_ERASEFF )
ROM_LOAD( "tvc12_d4.64k", 0x0000, 0x2000, CRC(834ca9be) SHA1(c333318c1c6185aae2d3dfb86d55e3a4a3071a73))
ROM_LOAD( "tvc12_d3.64k", 0x2000, 0x2000, CRC(71753d02) SHA1(d9a1905cf55c532b3380c83158fb5254ee503829))
- ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
- ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
+
ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
ROM_LOAD( "tvc12_d7.64k", 0x2000, 0x2000, CRC(1cbbeac6) SHA1(54b29c9ca9942f04620fbf3edab3b8e3cd21c194))
@@ -735,8 +849,6 @@ ROM_START( tvc64p )
ROMX_LOAD( "tvc21_d6.64k", 0x0000, 0x2000, CRC(f197ffce) SHA1(7b27a91504dd864170451949ada5f938d6532cae), ROM_BIOS(2) )
ROMX_LOAD( "tvc21_d4.64k", 0x2000, 0x2000, CRC(b054c0b2) SHA1(c8ca8d5a4d092604de01e2cafc2a2dabe94e6380), ROM_BIOS(2) )
- ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
- ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
ROM_LOAD( "tvc22_d7.64k", 0x2000, 0x2000, CRC(05e1c3a8) SHA1(abf119cf947ea32defd08b29a8a25d75f6bd4987))
@@ -747,8 +859,7 @@ ROM_START( tvc64pru )
ROM_REGION( 0x4000, "sys", ROMREGION_ERASEFF )
ROM_LOAD( "tvcru_d6.bin", 0x0000, 0x2000, CRC(1e0fa0b8) SHA1(9bebb6c8f03f9641bd35c9fd45ffc13a48e5c572))
ROM_LOAD( "tvcru_d4.bin", 0x2000, 0x2000, CRC(bac5dd4f) SHA1(665a1b8c80b6ad82090803621f0c73ef9243c7d4))
- ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
- ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
+
ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
ROM_LOAD( "tvcru_d7.bin", 0x2000, 0x2000, CRC(70cde756) SHA1(c49662af9f6653347ead641e85777c3463cc161b))
@@ -757,7 +868,7 @@ ROM_END
/* Driver */
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1985, tvc64, 0, 0, tvc, tvc, driver_device, 0, "Videoton", "TVC 64", GAME_NOT_WORKING | GAME_NO_SOUND)
-COMP( 1985, tvc64p, tvc64, 0, tvc, tvc, driver_device, 0, "Videoton", "TVC 64+", GAME_NOT_WORKING | GAME_NO_SOUND)
-COMP( 1985, tvc64pru,tvc64, 0, tvc, tvc64pru, driver_device, 0, "Videoton", "TVC 64+ (Russian)", GAME_NOT_WORKING | GAME_NO_SOUND)
+/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
+COMP( 1985, tvc64, 0, 0, tvc, tvc, driver_device, 0, "Videoton", "TVC 64", GAME_NOT_WORKING | GAME_NO_SOUND)
+COMP( 1985, tvc64p, tvc64, 0, tvc, tvc, driver_device, 0, "Videoton", "TVC 64+", GAME_NOT_WORKING | GAME_NO_SOUND)
+COMP( 1985, tvc64pru, tvc64, 0, tvc, tvc64pru, driver_device, 0, "Videoton", "TVC 64+ (Russian)", GAME_NOT_WORKING | GAME_NO_SOUND)
diff --git a/src/mess/drivers/x1.c b/src/mess/drivers/x1.c
index 888b9c429dc..ac8c563b534 100644
--- a/src/mess/drivers/x1.c
+++ b/src/mess/drivers/x1.c
@@ -960,11 +960,11 @@ WRITE8_MEMBER( x1_state::x1_sub_io_w )
READ8_MEMBER( x1_state::x1_rom_r )
{
- UINT8 *rom = memregion("cart_img")->base();
-
// printf("%06x\n",m_rom_index[0]<<16|m_rom_index[1]<<8|m_rom_index[2]<<0);
-
- return rom[m_rom_index[0]<<16|m_rom_index[1]<<8|m_rom_index[2]<<0];
+ if (m_cart->cart_mounted())
+ return m_cart->read_rom(space, (m_rom_index[0] << 16) | (m_rom_index[1] << 8) | (m_rom_index[2] << 0));
+ else
+ return 0;
}
WRITE8_MEMBER( x1_state::x1_rom_w )
@@ -2478,9 +2478,8 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("rom")
- MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "x1_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@@ -2561,9 +2560,6 @@ MACHINE_CONFIG_END
ROM_REGION(0x20000, "kanji", ROMREGION_ERASEFF)
ROM_REGION(0x20000, "raw_kanji", ROMREGION_ERASEFF)
-
- ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
- ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
ROM_END
ROM_START( x1turbo )
@@ -2587,9 +2583,6 @@ ROM_START( x1turbo )
ROM_LOAD("kanji2.rom", 0x08000, 0x8000, CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
ROM_LOAD("kanji3.rom", 0x10000, 0x8000, CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
ROM_LOAD("kanji1.rom", 0x18000, 0x8000, CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
-
- ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
- ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
ROM_END
ROM_START( x1turbo40 )
@@ -2613,9 +2606,6 @@ ROM_START( x1turbo40 )
ROM_LOAD("kanji2.rom", 0x08000, 0x8000, CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
ROM_LOAD("kanji3.rom", 0x10000, 0x8000, CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
ROM_LOAD("kanji1.rom", 0x18000, 0x8000, CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
-
- ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
- ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
ROM_END
diff --git a/src/mess/drivers/x1twin.c b/src/mess/drivers/x1twin.c
index 42a362a2fa8..2b1820100a6 100644
--- a/src/mess/drivers/x1twin.c
+++ b/src/mess/drivers/x1twin.c
@@ -474,9 +474,8 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
- MCFG_CARTSLOT_ADD("cart")
- MCFG_CARTSLOT_EXTENSION_LIST("rom")
- MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "x1_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_SPEAKER_ADD("x1_l",-0.2, 0.0, 1.0)
MCFG_SPEAKER_ADD("x1_r",0.2, 0.0, 1.0)
@@ -547,9 +546,6 @@ ROM_START( x1twin )
ROM_LOAD("kanji2.rom", 0x08000, 0x8000, BAD_DUMP CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
ROM_LOAD("kanji3.rom", 0x10000, 0x8000, BAD_DUMP CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
ROM_LOAD("kanji1.rom", 0x18000, 0x8000, BAD_DUMP CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
-
- ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
- ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
ROM_END
COMP( 1986, x1twin, x1, 0, x1twin, x1twin, x1_state, x1_kanji,"Sharp", "X1 Twin (CZ-830C)", GAME_NOT_WORKING )
diff --git a/src/mess/includes/advision.h b/src/mess/includes/advision.h
index 42c0e73b44e..98bece4ccbd 100644
--- a/src/mess/includes/advision.h
+++ b/src/mess/includes/advision.h
@@ -8,6 +8,8 @@
#define __ADVISION__
#include "sound/dac.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
#define SCREEN_TAG "screen"
#define I8048_TAG "i8048"
@@ -21,12 +23,14 @@ public:
m_maincpu(*this, I8048_TAG),
m_soundcpu(*this, COP411_TAG),
m_dac(*this, "dac"),
+ m_cart(*this, "cartslot"),
m_palette(*this, "palette")
{ }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
required_device<dac_device> m_dac;
+ required_device<generic_slot_device> m_cart;
required_device<palette_device> m_palette;
virtual void machine_start();
@@ -39,6 +43,7 @@ public:
void vh_write(int data);
void vh_update(int x);
+ DECLARE_READ8_MEMBER( rom_r );
DECLARE_READ8_MEMBER( ext_ram_r );
DECLARE_WRITE8_MEMBER( ext_ram_w );
DECLARE_READ8_MEMBER( controller_r );
@@ -49,6 +54,8 @@ public:
DECLARE_WRITE8_MEMBER( sound_g_w );
DECLARE_WRITE8_MEMBER( sound_d_w );
+ memory_region *m_cart_rom;
+
/* external RAM state */
UINT8 *m_ext_ram;
int m_rambank;
diff --git a/src/mess/includes/svi318.h b/src/mess/includes/svi318.h
index 52a85befe54..997bfbed2e3 100644
--- a/src/mess/includes/svi318.h
+++ b/src/mess/includes/svi318.h
@@ -13,11 +13,17 @@
#include "machine/i8255.h"
#include "machine/ins8250.h"
#include "machine/wd17xx.h"
-#include "imagedev/cassette.h"
-#include "sound/dac.h"
#include "machine/ram.h"
#include "machine/buffer.h"
+#include "imagedev/cassette.h"
+#include "sound/dac.h"
+#include "sound/ay8910.h"
+#include "sound/wave.h"
+#include "video/mc6845.h"
+#include "video/tms9928a.h"
#include "bus/centronics/ctronics.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
struct SVI_318
@@ -58,8 +64,6 @@ class svi318_state : public driver_device
public:
svi318_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_pcart(NULL),
- m_pcart_rom_size(0),
m_maincpu(*this, "maincpu"),
m_cassette(*this, "cassette"),
m_dac(*this, "dac"),
@@ -69,6 +73,7 @@ public:
m_cent_data_out(*this, "cent_data_out"),
m_ins8250_0(*this, "ins8250_0"),
m_ins8250_1(*this, "ins8250_1"),
+ m_cart(*this, "cartslot"),
m_line0(*this, "LINE0"),
m_line1(*this, "LINE1"),
m_line2(*this, "LINE2"),
@@ -85,8 +90,6 @@ public:
m_palette(*this, "palette") { }
SVI_318 m_svi;
- UINT8 *m_pcart;
- UINT32 m_pcart_rom_size;
int m_centronics_busy;
SVI318_FDC_STRUCT m_fdc;
DECLARE_WRITE8_MEMBER(svi318_ppi_w);
@@ -115,12 +118,13 @@ public:
DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w);
+ bool cart_verify(UINT8 *ROM);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
- DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(svi318_cart);
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
MC6845_UPDATE_ROW(crtc_update_row);
-
+ memory_region *m_cart_rom;
+
required_device<z80_device> m_maincpu;
protected:
required_device<cassette_image_device> m_cassette;
@@ -131,6 +135,7 @@ protected:
required_device<output_latch_device> m_cent_data_out;
required_device<ins8250_device> m_ins8250_0;
required_device<ins8250_device> m_ins8250_1;
+ required_device<generic_slot_device> m_cart;
required_ioport m_line0;
required_ioport m_line1;
required_ioport m_line2;
diff --git a/src/mess/includes/tvc.h b/src/mess/includes/tvc.h
deleted file mode 100644
index 68152acc9f0..00000000000
--- a/src/mess/includes/tvc.h
+++ /dev/null
@@ -1,142 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sandro Ronco
-/*****************************************************************************
- *
- * includes/tvc.h
- *
- ****************************************************************************/
-
-#pragma once
-
-#ifndef TVC_H_
-#define TVC_H_
-
-#include "cpu/z80/z80.h"
-#include "video/mc6845.h"
-#include "machine/ram.h"
-#include "bus/centronics/ctronics.h"
-#include "imagedev/cartslot.h"
-#include "imagedev/cassette.h"
-#include "imagedev/snapquik.h"
-#include "formats/tvc_cas.h"
-
-#include "bus/tvc/tvc.h"
-#include "bus/tvc/hbf.h"
-
-#define TVC_RAM_BANK 1
-#define TVC_ROM_BANK 2
-
-#define CENTRONICS_TAG "centronics"
-
-#define MCFG_TVC_SOUND_SNDINT_CALLBACK(_write) \
- devcb = &tvc_sound_device::set_sndint_wr_callback(*device, DEVCB_##_write);
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
-
-// ======================> tvc_sound_device
-
-class tvc_sound_device : public device_t,
- public device_sound_interface
-{
-public:
- // construction/destruction
- tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-
- template<class _Object> static devcb_base &set_sndint_wr_callback(device_t &device, _Object object) { return downcast<tvc_sound_device &>(device).m_write_sndint.set_callback(object); }
-
- DECLARE_WRITE8_MEMBER(write);
- void reset_divider();
-
-protected:
- // device-level overrides
- virtual void device_start();
- virtual void device_reset();
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
- virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
-
-private:
- static const device_timer_id TIMER_SNDINT = 0;
-
- sound_stream * m_stream;
- int m_freq;
- int m_enabled;
- int m_volume;
- int m_incr;
- int m_signal;
- UINT8 m_ports[3];
- emu_timer * m_sndint_timer;
- devcb_write_line m_write_sndint;
-};
-
-
-// ======================> tvc_state
-
-class tvc_state : public driver_device
-{
-public:
- tvc_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_ram(*this, RAM_TAG),
- m_sound(*this, "custom"),
- m_cassette(*this, "cassette"),
- m_centronics(*this, CENTRONICS_TAG),
- m_palette(*this, "palette")
- { }
-
- required_device<cpu_device> m_maincpu;
- required_device<ram_device> m_ram;
- required_device<tvc_sound_device> m_sound;
- required_device<cassette_image_device> m_cassette;
- required_device<centronics_device> m_centronics;
- required_device<palette_device> m_palette;
-
- void machine_start();
- void machine_reset();
-
- void tvc_set_mem_page(UINT8 data);
- DECLARE_WRITE8_MEMBER(tvc_bank_w);
- DECLARE_WRITE8_MEMBER(tvc_vram_bank_w);
- DECLARE_WRITE8_MEMBER(tvc_palette_w);
- DECLARE_WRITE8_MEMBER(tvc_keyboard_w);
- DECLARE_READ8_MEMBER(tvc_keyboard_r);
- DECLARE_READ8_MEMBER(tvc_int_state_r);
- DECLARE_WRITE8_MEMBER(tvc_flipflop_w);
- DECLARE_WRITE8_MEMBER(tvc_border_color_w);
- DECLARE_WRITE8_MEMBER(tvc_sound_w);
- DECLARE_WRITE8_MEMBER(tvc_cassette_w);
- DECLARE_READ8_MEMBER(tvc_5b_r);
- DECLARE_WRITE_LINE_MEMBER(tvc_int_ff_set);
- DECLARE_WRITE_LINE_MEMBER(tvc_centronics_ack);
-
- // expansions
- DECLARE_WRITE8_MEMBER(tvc_expansion_w);
- DECLARE_READ8_MEMBER(tvc_expansion_r);
- DECLARE_READ8_MEMBER(tvc_exp_id_r);
- DECLARE_WRITE8_MEMBER(tvc_expint_ack_w);
-
- DECLARE_QUICKLOAD_LOAD_MEMBER( tvc64);
-
- MC6845_UPDATE_ROW(crtc_update_row);
-
- tvcexp_slot_device * m_expansions[4];
- UINT8 m_video_mode;
- UINT8 m_keyline;
- UINT8 m_active_slot;
- UINT8 m_int_flipflop;
- UINT8 m_col[4];
- UINT8 m_bank_type[4];
- UINT8 m_bank;
- UINT8 m_vram_bank;
- UINT8 m_cassette_ff;
- UINT8 m_centronics_ff;
- DECLARE_PALETTE_INIT(tvc);
-};
-
-
-// device type definition
-extern const device_type TVC_SOUND;
-
-#endif /* TVC_H_ */
diff --git a/src/mess/includes/x1.h b/src/mess/includes/x1.h
index e41ea61b791..f47bca4df61 100644
--- a/src/mess/includes/x1.h
+++ b/src/mess/includes/x1.h
@@ -21,9 +21,10 @@
#include "sound/wave.h"
#include "imagedev/cassette.h"
#include "imagedev/flopdrv.h"
-#include "imagedev/cartslot.h"
#include "formats/basicdsk.h"
#include "formats/x1_tap.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
// ======================> x1_keyboard_device
@@ -74,18 +75,20 @@ class x1_state : public driver_device
public:
x1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this,"x1_cpu"),
- m_cassette(*this, "cassette"),
- m_fdc(*this, "fdc"),
- m_crtc(*this, "crtc"),
- m_ctc(*this, "ctc"),
- m_gfxdecode(*this, "gfxdecode"),
+ m_maincpu(*this,"x1_cpu"),
+ m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
+ m_fdc(*this, "fdc"),
+ m_crtc(*this, "crtc"),
+ m_ctc(*this, "ctc"),
+ m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_dma(*this, "dma")
{ }
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
+ required_device<generic_slot_device> m_cart;
required_device<mb8877_device> m_fdc;
required_device<mc6845_device> m_crtc;
required_device<z80ctc_device> m_ctc;
diff --git a/src/mess/machine/advision.c b/src/mess/machine/advision.c
index a15c0fd13e2..ca1cb8d354b 100644
--- a/src/mess/machine/advision.c
+++ b/src/mess/machine/advision.c
@@ -27,9 +27,12 @@
void advision_state::machine_start()
{
+ astring region_tag;
+ m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
+
/* configure EA banking */
- membank("bank1")->configure_entry(0, memregion("bios")->base());
- membank("bank1")->configure_entry(1, memregion(I8048_TAG)->base());
+ membank("bank1")->configure_entry(0, memregion(I8048_TAG)->base());
+ membank("bank1")->configure_entry(1, m_cart_rom->base());
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");
membank("bank1")->set_entry(0);
diff --git a/src/mess/machine/svi318.c b/src/mess/machine/svi318.c
index 1231d9a8966..2f630f79b65 100644
--- a/src/mess/machine/svi318.c
+++ b/src/mess/machine/svi318.c
@@ -42,50 +42,34 @@ static INS8250_REFRESH_CONNECT( svi318_com_refresh_connected )
/* Cartridge */
-DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
+bool svi318_state::cart_verify(UINT8 *ROM)
{
- UINT8 *p = memregion("user1")->base();
- UINT32 size;
-
- if (image.software_entry() == NULL)
- size = image.length();
- else
- size = image.get_software_region_length("rom");
+ if (ROM[0] != 0xf3 || ROM[1] != 0x31)
+ return false;
- if (size > 0x8000)
- logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
+ return true;
+}
- if (image.software_entry() == NULL)
- {
- if (image.fread(p, size) != size)
- {
- logerror("Can't read file %s\n", image.filename());
- return IMAGE_INIT_FAIL;
- }
- }
- else
- {
- memcpy(p, image.get_software_region("rom"), size);
- }
+DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
+{
+ UINT32 size = m_cart->common_get_size("rom");
- if ( p[0] != 0xf3 || p[1] != 0x31 )
+ if (size > 0x8000)
{
+ logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
return IMAGE_INIT_FAIL;
}
- m_pcart = p;
- m_pcart_rom_size = size;
+ m_cart->rom_alloc(size, 1);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ if (image.software_entry() == NULL && !cart_verify(m_cart->get_rom_base()))
+ return IMAGE_INIT_FAIL;
return IMAGE_INIT_PASS;
}
-DEVICE_IMAGE_UNLOAD_MEMBER( svi318_state, svi318_cart )
-{
- m_pcart = NULL;
- m_pcart_rom_size = 0;
-}
-
/* PPI */
@@ -487,12 +471,16 @@ DRIVER_INIT_MEMBER(svi318_state,svi318)
memset (m_svi.empty_bank, 0xff, 0x8000);
}
-MACHINE_START_MEMBER(svi318_state,svi318_ntsc)
+MACHINE_START_MEMBER(svi318_state, svi318_ntsc)
{
+ astring region_tag;
+ m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
}
-MACHINE_START_MEMBER(svi318_state,svi318_pal)
+MACHINE_START_MEMBER(svi318_state, svi318_pal)
{
+ astring region_tag;
+ m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
}
static void svi318_load_proc(device_image_interface &image)
@@ -591,10 +579,8 @@ void svi318_state::svi318_set_banks()
m_svi.bankLow_ptr = memregion("maincpu")->base();
break;
case SVI_CART:
- if ( m_pcart )
- {
- m_svi.bankLow_ptr = m_pcart;
- }
+ if (m_cart_rom)
+ m_svi.bankLow_ptr = m_cart_rom->base();
break;
case SVI_EXPRAM2:
if ( ram_size >= 64 * 1024 )
@@ -658,14 +644,10 @@ void svi318_state::svi318_set_banks()
m_svi.bankHigh1_read_only = 1;
m_svi.bankHigh2_ptr = m_svi.empty_bank;
m_svi.bankHigh2_read_only = 1;
- if ( m_pcart && ! ( v & 0x80 ) )
- {
- m_svi.bankHigh2_ptr = m_pcart + 0x4000;
- }
- if ( m_pcart && ! ( v & 0x40 ) )
- {
- m_svi.bankHigh1_ptr = m_pcart;
- }
+ if (m_cart_rom && !(v & 0x80))
+ m_svi.bankHigh2_ptr = m_cart_rom->base() + 0x4000;
+ if (m_cart_rom && !(v & 0x40))
+ m_svi.bankHigh1_ptr = m_cart_rom->base();
}
membank("bank1")->set_base(m_svi.bankLow_ptr );
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index d65af8aa627..6f8b02f8f27 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -2003,7 +2003,7 @@ $(MESSOBJ)/vidbrain.a: \
$(MESSOBJ)/videoton.a: \
$(MESS_DRIVERS)/tvc.o \
- $(MESS_AUDIO)/tvc.o \
+ $(MESS_AUDIO)/tvc_snd.o \
$(MESSOBJ)/visual.a: \
$(MESS_DRIVERS)/v1050.o \