diff options
-rw-r--r-- | .gitattributes | 4 | ||||
-rw-r--r-- | src/emu/bus/generic/slot.c | 2 | ||||
-rw-r--r-- | src/emu/bus/generic/slot.h | 3 | ||||
-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.h | 59 | ||||
-rw-r--r-- | src/mess/drivers/advision.c | 23 | ||||
-rw-r--r-- | src/mess/drivers/svi318.c | 33 | ||||
-rw-r--r-- | src/mess/drivers/tutor.c | 158 | ||||
-rw-r--r-- | src/mess/drivers/tvc.c | 639 | ||||
-rw-r--r-- | src/mess/drivers/x1.c | 22 | ||||
-rw-r--r-- | src/mess/drivers/x1twin.c | 8 | ||||
-rw-r--r-- | src/mess/includes/advision.h | 7 | ||||
-rw-r--r-- | src/mess/includes/svi318.h | 21 | ||||
-rw-r--r-- | src/mess/includes/tvc.h | 142 | ||||
-rw-r--r-- | src/mess/includes/x1.h | 17 | ||||
-rw-r--r-- | src/mess/machine/advision.c | 7 | ||||
-rw-r--r-- | src/mess/machine/svi318.c | 72 | ||||
-rw-r--r-- | src/mess/mess.mak | 2 |
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 \ |