more generic slots + some cleanups & some tagmap reductions. nw.

This commit is contained in:
Fabio Priuli 2014-09-20 10:52:31 +00:00
parent 975e125c6d
commit f948931bf8
18 changed files with 579 additions and 644 deletions

4
.gitattributes vendored
View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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>;

59
src/mess/audio/tvc_snd.h Normal file
View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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)
{
m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this));
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()
{
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);
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)

View File

@ -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)

View File

@ -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

View File

@ -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 )

View File

@ -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;

View File

@ -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;

View File

@ -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_ */

View File

@ -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;

View File

@ -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);

View File

@ -42,50 +42,34 @@ static INS8250_REFRESH_CONNECT( svi318_com_refresh_connected )
/* Cartridge */
bool svi318_state::cart_verify(UINT8 *ROM)
{
if (ROM[0] != 0xf3 || ROM[1] != 0x31)
return false;
return true;
}
DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
{
UINT8 *p = memregion("user1")->base();
UINT32 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");
if (size > 0x8000)
{
logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
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);
}
if ( p[0] != 0xf3 || p[1] != 0x31 )
{
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 );

View File

@ -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 \