Previous 199869 Revisions Next

r32231 Saturday 20th September, 2014 at 10:52:31 UTC by Fabio Priuli
more generic slots + some cleanups & some tagmap reductions. nw.
[src/emu/bus/generic]slot.c slot.h
[src/mess]mess.mak
[src/mess/audio]tvc.c tvc_snd.c* tvc_snd.h*
[src/mess/drivers]advision.c svi318.c tutor.c tvc.c x1.c x1twin.c
[src/mess/includes]advision.h svi318.h tvc.h x1.h
[src/mess/machine]advision.c svi318.c

trunk/src/emu/bus/generic/slot.c
r32230r32231
4646   if (m_rom == NULL)
4747   {
4848      astring tempstring(tag);
49      tempstring.cat(":cart:rom");
49      tempstring.cat(GENERIC_ROM_REGION_TAG);
5050      m_rom = device().machine().memory().region_alloc(tempstring, size, width, ENDIANNESS_LITTLE)->base();
5151      m_rom_size = size;
5252   }
trunk/src/emu/bus/generic/slot.h
r32230r32231
4444   GENERIC_ROM16_WIDTH
4545};
4646
47#define GENERIC_ROM_REGION_TAG ":cart:rom"
4748
49
50
4851#define MCFG_GENERIC_MANDATORY       \
4952   static_cast<generic_slot_device *>(device)->set_must_be_loaded(TRUE);
5053
trunk/src/mess/audio/tvc.c
r32230r32231
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3/***************************************************************************
4
5    Videotone TVC 32/64 sound emulation
6
7***************************************************************************/
8
9#include "emu.h"
10#include "includes/tvc.h"
11
12// device type definition
13const device_type TVC_SOUND = &device_creator<tvc_sound_device>;
14
15//-------------------------------------------------
16//  tvc_sound_device - constructor
17//-------------------------------------------------
18
19tvc_sound_device::tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
20   device_t(mconfig, TVC_SOUND, "TVC 64 Audio Custom", tag, owner, clock, "tvc_sound", __FILE__),
21   device_sound_interface(mconfig, *this),
22   m_write_sndint(*this)
23{
24}
25
26//-------------------------------------------------
27//  device_start - device-specific startup
28//-------------------------------------------------
29void tvc_sound_device::device_start()
30{
31   // resolve callbacks
32   m_write_sndint.resolve_safe();
33
34   m_stream = machine().sound().stream_alloc(*this, 0, 1, machine().sample_rate());
35   m_sndint_timer = timer_alloc(TIMER_SNDINT);
36}
37
38//-------------------------------------------------
39//  device_reset - device-specific reset
40//-------------------------------------------------
41void tvc_sound_device::device_reset()
42{
43   m_enabled = 0;
44   m_freq    = 0;
45   m_incr    = 0;
46   m_signal  = 1;
47   m_sndint_timer->reset();
48}
49
50
51//-------------------------------------------------
52//  device_timer - handler timer events
53//-------------------------------------------------
54
55void tvc_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
56{
57   m_write_sndint(1);
58}
59
60//-------------------------------------------------
61//  sound_stream_update - handle update requests for
62//  our sound stream
63//-------------------------------------------------
64
65void tvc_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
66{
67   int rate = machine().sample_rate() / 2;
68
69   if (m_enabled && m_freq)
70   {
71      while( samples-- > 0 )
72      {
73         *outputs[0]++ = m_signal * (m_volume * 0x0800);
74         m_incr -= m_freq;
75         while(m_incr < 0)
76         {
77            m_incr += rate;
78            m_signal = -m_signal;
79         }
80      }
81   }
82   else
83   {
84      // fill output with 0 if the sound is disabled
85      memset(outputs[0], 0, samples * sizeof(stream_sample_t));
86   }
87}
88
89
90
91//-------------------------------------------------
92//  ports write
93//-------------------------------------------------
94
95WRITE8_MEMBER(tvc_sound_device::write)
96{
97   m_stream->update();
98
99   m_ports[offset] = data;
100
101   switch(offset)
102   {
103      case 1:
104         m_enabled = BIT(data, 4);
105         // fall through
106
107      case 0:
108      {
109         UINT16 pitch = (m_ports[0] | (m_ports[1]<<8)) & 0x0fff;
110         m_freq = (pitch == 0x0fff) ? 0 : (int)(195312.5 / (4096 - pitch));
111
112         if ((m_ports[1] & 0x20) && m_freq != 0)
113            m_sndint_timer->adjust(attotime::from_hz(m_freq), 0, attotime::from_hz(m_freq));
114         else
115            m_sndint_timer->reset();
116
117         break;
118      }
119
120      case 2:
121         m_volume = (data>>2) & 0x0f;
122         break;
123   }
124}
125
126
127//-------------------------------------------------
128//  tvc_sound_device::reset_divider
129//-------------------------------------------------
130
131void tvc_sound_device::reset_divider()
132{
133   m_stream->update();
134
135   m_incr = 0;
136   m_signal = 1;
137
138   if (m_ports[1] & 0x20 && m_freq != 0)
139      m_sndint_timer->adjust(attotime::from_hz(m_freq), 0, attotime::from_hz(m_freq));
140   else
141      m_sndint_timer->reset();
142}
trunk/src/mess/audio/tvc_snd.c
r0r32231
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3/***************************************************************************
4
5    Videotone TVC 32/64 sound emulation
6
7***************************************************************************/
8
9#include "emu.h"
10#include "tvc_snd.h"
11
12// device type definition
13const device_type TVC_SOUND = &device_creator<tvc_sound_device>;
14
15//-------------------------------------------------
16//  tvc_sound_device - constructor
17//-------------------------------------------------
18
19tvc_sound_device::tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
20   device_t(mconfig, TVC_SOUND, "TVC 64 Audio Custom", tag, owner, clock, "tvc_sound", __FILE__),
21   device_sound_interface(mconfig, *this),
22   m_write_sndint(*this)
23{
24}
25
26//-------------------------------------------------
27//  device_start - device-specific startup
28//-------------------------------------------------
29void tvc_sound_device::device_start()
30{
31   // resolve callbacks
32   m_write_sndint.resolve_safe();
33
34   m_stream = machine().sound().stream_alloc(*this, 0, 1, machine().sample_rate());
35   m_sndint_timer = timer_alloc(TIMER_SNDINT);
36}
37
38//-------------------------------------------------
39//  device_reset - device-specific reset
40//-------------------------------------------------
41void tvc_sound_device::device_reset()
42{
43   m_enabled = 0;
44   m_freq    = 0;
45   m_incr    = 0;
46   m_signal  = 1;
47   m_sndint_timer->reset();
48}
49
50
51//-------------------------------------------------
52//  device_timer - handler timer events
53//-------------------------------------------------
54
55void tvc_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
56{
57   m_write_sndint(1);
58}
59
60//-------------------------------------------------
61//  sound_stream_update - handle update requests for
62//  our sound stream
63//-------------------------------------------------
64
65void tvc_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
66{
67   int rate = machine().sample_rate() / 2;
68
69   if (m_enabled && m_freq)
70   {
71      while( samples-- > 0 )
72      {
73         *outputs[0]++ = m_signal * (m_volume * 0x0800);
74         m_incr -= m_freq;
75         while(m_incr < 0)
76         {
77            m_incr += rate;
78            m_signal = -m_signal;
79         }
80      }
81   }
82   else
83   {
84      // fill output with 0 if the sound is disabled
85      memset(outputs[0], 0, samples * sizeof(stream_sample_t));
86   }
87}
88
89
90
91//-------------------------------------------------
92//  ports write
93//-------------------------------------------------
94
95WRITE8_MEMBER(tvc_sound_device::write)
96{
97   m_stream->update();
98
99   m_ports[offset] = data;
100
101   switch(offset)
102   {
103      case 1:
104         m_enabled = BIT(data, 4);
105         // fall through
106
107      case 0:
108      {
109         UINT16 pitch = (m_ports[0] | (m_ports[1]<<8)) & 0x0fff;
110         m_freq = (pitch == 0x0fff) ? 0 : (int)(195312.5 / (4096 - pitch));
111
112         if ((m_ports[1] & 0x20) && m_freq != 0)
113            m_sndint_timer->adjust(attotime::from_hz(m_freq), 0, attotime::from_hz(m_freq));
114         else
115            m_sndint_timer->reset();
116
117         break;
118      }
119
120      case 2:
121         m_volume = (data>>2) & 0x0f;
122         break;
123   }
124}
125
126
127//-------------------------------------------------
128//  tvc_sound_device::reset_divider
129//-------------------------------------------------
130
131void tvc_sound_device::reset_divider()
132{
133   m_stream->update();
134
135   m_incr = 0;
136   m_signal = 1;
137
138   if (m_ports[1] & 0x20 && m_freq != 0)
139      m_sndint_timer->adjust(attotime::from_hz(m_freq), 0, attotime::from_hz(m_freq));
140   else
141      m_sndint_timer->reset();
142}
Property changes on: trunk/src/mess/audio/tvc_snd.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mess/audio/tvc_snd.h
r0r32231
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3/*****************************************************************************
4 *
5 *   includes/tvc.h
6 *
7 ****************************************************************************/
8
9#pragma once
10
11#ifndef _TVC_SND_H_
12#define _TVC_SND_H_
13
14#define MCFG_TVC_SOUND_SNDINT_CALLBACK(_write) \
15   devcb = &tvc_sound_device::set_sndint_wr_callback(*device, DEVCB_##_write);
16
17//**************************************************************************
18//  TYPE DEFINITIONS
19//**************************************************************************
20
21// ======================> tvc_sound_device
22
23class tvc_sound_device : public device_t,
24                     public device_sound_interface
25{
26public:
27   // construction/destruction
28   tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
29
30   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); }
31
32   DECLARE_WRITE8_MEMBER(write);
33   void reset_divider();
34
35protected:
36   // device-level overrides
37   virtual void device_start();
38   virtual void device_reset();
39   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
40   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
41
42private:
43   static const device_timer_id TIMER_SNDINT = 0;
44
45   sound_stream *  m_stream;
46   int             m_freq;
47   int             m_enabled;
48   int             m_volume;
49   int             m_incr;
50   int             m_signal;
51   UINT8           m_ports[3];
52   emu_timer *     m_sndint_timer;
53   devcb_write_line   m_write_sndint;
54};
55
56// device type definition
57extern const device_type TVC_SOUND;
58
59#endif
Property changes on: trunk/src/mess/audio/tvc_snd.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mess/machine/svi318.c
r32230r32231
4242
4343/* Cartridge */
4444
45DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
45bool svi318_state::cart_verify(UINT8 *ROM)
4646{
47   UINT8 *p = memregion("user1")->base();
48   UINT32 size;
47   if (ROM[0] != 0xf3 || ROM[1] != 0x31)
48      return false;
4949
50   if (image.software_entry() == NULL)
51      size = image.length();
52   else
53      size = image.get_software_region_length("rom");
50   return true;
51}
5452
55   if (size > 0x8000)
56      logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
53DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
54{
55   UINT32 size = m_cart->common_get_size("rom");
5756
58   if (image.software_entry() == NULL)
57   if (size > 0x8000)
5958   {
60      if (image.fread(p, size) != size)
61      {
62         logerror("Can't read file %s\n", image.filename());
63         return IMAGE_INIT_FAIL;
64      }
65   }
66   else
67   {
68      memcpy(p, image.get_software_region("rom"), size);
69   }
70
71   if ( p[0] != 0xf3 || p[1] != 0x31 )
72   {
59      logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
7360      return IMAGE_INIT_FAIL;
7461   }
7562
76   m_pcart = p;
77   m_pcart_rom_size = size;
63   m_cart->rom_alloc(size, 1);
64   m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");         
7865
66   if (image.software_entry() == NULL && !cart_verify(m_cart->get_rom_base()))
67      return IMAGE_INIT_FAIL;
68
7969   return IMAGE_INIT_PASS;
8070}
8171
8272
83DEVICE_IMAGE_UNLOAD_MEMBER( svi318_state, svi318_cart )
84{
85   m_pcart = NULL;
86   m_pcart_rom_size = 0;
87}
8873
89
9074/* PPI */
9175
9276/*
r32230r32231
487471   memset (m_svi.empty_bank, 0xff, 0x8000);
488472}
489473
490MACHINE_START_MEMBER(svi318_state,svi318_ntsc)
474MACHINE_START_MEMBER(svi318_state, svi318_ntsc)
491475{
476   astring region_tag;
477   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
492478}
493479
494MACHINE_START_MEMBER(svi318_state,svi318_pal)
480MACHINE_START_MEMBER(svi318_state, svi318_pal)
495481{
482   astring region_tag;
483   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
496484}
497485
498486static void svi318_load_proc(device_image_interface &image)
r32230r32231
591579      m_svi.bankLow_ptr = memregion("maincpu")->base();
592580      break;
593581   case SVI_CART:
594      if ( m_pcart )
595      {
596         m_svi.bankLow_ptr = m_pcart;
597      }
582      if (m_cart_rom)
583         m_svi.bankLow_ptr = m_cart_rom->base();
598584      break;
599585   case SVI_EXPRAM2:
600586      if ( ram_size >= 64 * 1024 )
r32230r32231
658644      m_svi.bankHigh1_read_only = 1;
659645      m_svi.bankHigh2_ptr = m_svi.empty_bank;
660646      m_svi.bankHigh2_read_only = 1;
661      if ( m_pcart && ! ( v & 0x80 ) )
662      {
663         m_svi.bankHigh2_ptr = m_pcart + 0x4000;
664      }
665      if ( m_pcart && ! ( v & 0x40 ) )
666      {
667         m_svi.bankHigh1_ptr = m_pcart;
668      }
647      if (m_cart_rom && !(v & 0x80))
648         m_svi.bankHigh2_ptr = m_cart_rom->base() + 0x4000;
649      if (m_cart_rom && !(v & 0x40))
650         m_svi.bankHigh1_ptr = m_cart_rom->base();
669651   }
670652
671653   membank("bank1")->set_base(m_svi.bankLow_ptr );
trunk/src/mess/machine/advision.c
r32230r32231
2727
2828void advision_state::machine_start()
2929{
30   astring region_tag;
31   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
32
3033   /* configure EA banking */
31   membank("bank1")->configure_entry(0, memregion("bios")->base());
32   membank("bank1")->configure_entry(1, memregion(I8048_TAG)->base());
34   membank("bank1")->configure_entry(0, memregion(I8048_TAG)->base());
35   membank("bank1")->configure_entry(1, m_cart_rom->base());
3336   m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");
3437   membank("bank1")->set_entry(0);
3538
trunk/src/mess/includes/tvc.h
r32230r32231
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3/*****************************************************************************
4 *
5 *   includes/tvc.h
6 *
7 ****************************************************************************/
8
9#pragma once
10
11#ifndef TVC_H_
12#define TVC_H_
13
14#include "cpu/z80/z80.h"
15#include "video/mc6845.h"
16#include "machine/ram.h"
17#include "bus/centronics/ctronics.h"
18#include "imagedev/cartslot.h"
19#include "imagedev/cassette.h"
20#include "imagedev/snapquik.h"
21#include "formats/tvc_cas.h"
22
23#include "bus/tvc/tvc.h"
24#include "bus/tvc/hbf.h"
25
26#define     TVC_RAM_BANK    1
27#define     TVC_ROM_BANK    2
28
29#define CENTRONICS_TAG  "centronics"
30
31#define MCFG_TVC_SOUND_SNDINT_CALLBACK(_write) \
32   devcb = &tvc_sound_device::set_sndint_wr_callback(*device, DEVCB_##_write);
33
34//**************************************************************************
35//  TYPE DEFINITIONS
36//**************************************************************************
37
38// ======================> tvc_sound_device
39
40class tvc_sound_device : public device_t,
41                     public device_sound_interface
42{
43public:
44   // construction/destruction
45   tvc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
46
47   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); }
48
49   DECLARE_WRITE8_MEMBER(write);
50   void reset_divider();
51
52protected:
53   // device-level overrides
54   virtual void device_start();
55   virtual void device_reset();
56   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
57   virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
58
59private:
60   static const device_timer_id TIMER_SNDINT = 0;
61
62   sound_stream *  m_stream;
63   int             m_freq;
64   int             m_enabled;
65   int             m_volume;
66   int             m_incr;
67   int             m_signal;
68   UINT8           m_ports[3];
69   emu_timer *     m_sndint_timer;
70   devcb_write_line   m_write_sndint;
71};
72
73
74// ======================> tvc_state
75
76class tvc_state : public driver_device
77{
78public:
79   tvc_state(const machine_config &mconfig, device_type type, const char *tag)
80      : driver_device(mconfig, type, tag),
81         m_maincpu(*this, "maincpu"),
82         m_ram(*this, RAM_TAG),
83         m_sound(*this, "custom"),
84         m_cassette(*this, "cassette"),
85         m_centronics(*this, CENTRONICS_TAG),
86         m_palette(*this, "palette")
87      { }
88
89   required_device<cpu_device> m_maincpu;
90   required_device<ram_device> m_ram;
91   required_device<tvc_sound_device> m_sound;
92   required_device<cassette_image_device> m_cassette;
93   required_device<centronics_device> m_centronics;
94   required_device<palette_device> m_palette;
95
96   void machine_start();
97   void machine_reset();
98
99   void tvc_set_mem_page(UINT8 data);
100   DECLARE_WRITE8_MEMBER(tvc_bank_w);
101   DECLARE_WRITE8_MEMBER(tvc_vram_bank_w);
102   DECLARE_WRITE8_MEMBER(tvc_palette_w);
103   DECLARE_WRITE8_MEMBER(tvc_keyboard_w);
104   DECLARE_READ8_MEMBER(tvc_keyboard_r);
105   DECLARE_READ8_MEMBER(tvc_int_state_r);
106   DECLARE_WRITE8_MEMBER(tvc_flipflop_w);
107   DECLARE_WRITE8_MEMBER(tvc_border_color_w);
108   DECLARE_WRITE8_MEMBER(tvc_sound_w);
109   DECLARE_WRITE8_MEMBER(tvc_cassette_w);
110   DECLARE_READ8_MEMBER(tvc_5b_r);
111   DECLARE_WRITE_LINE_MEMBER(tvc_int_ff_set);
112   DECLARE_WRITE_LINE_MEMBER(tvc_centronics_ack);
113
114   // expansions
115   DECLARE_WRITE8_MEMBER(tvc_expansion_w);
116   DECLARE_READ8_MEMBER(tvc_expansion_r);
117   DECLARE_READ8_MEMBER(tvc_exp_id_r);
118   DECLARE_WRITE8_MEMBER(tvc_expint_ack_w);
119
120   DECLARE_QUICKLOAD_LOAD_MEMBER( tvc64);
121
122   MC6845_UPDATE_ROW(crtc_update_row);
123
124   tvcexp_slot_device * m_expansions[4];
125   UINT8       m_video_mode;
126   UINT8       m_keyline;
127   UINT8       m_active_slot;
128   UINT8       m_int_flipflop;
129   UINT8       m_col[4];
130   UINT8       m_bank_type[4];
131   UINT8       m_bank;
132   UINT8       m_vram_bank;
133   UINT8       m_cassette_ff;
134   UINT8       m_centronics_ff;
135   DECLARE_PALETTE_INIT(tvc);
136};
137
138
139// device type definition
140extern const device_type TVC_SOUND;
141
142#endif /* TVC_H_ */
trunk/src/mess/includes/x1.h
r32230r32231
2121#include "sound/wave.h"
2222#include "imagedev/cassette.h"
2323#include "imagedev/flopdrv.h"
24#include "imagedev/cartslot.h"
2524#include "formats/basicdsk.h"
2625#include "formats/x1_tap.h"
26#include "bus/generic/slot.h"
27#include "bus/generic/carts.h"
2728
2829
2930// ======================> x1_keyboard_device
r32230r32231
7475public:
7576   x1_state(const machine_config &mconfig, device_type type, const char *tag)
7677      : driver_device(mconfig, type, tag),
77   m_maincpu(*this,"x1_cpu"),
78   m_cassette(*this, "cassette"),
79   m_fdc(*this, "fdc"),
80   m_crtc(*this, "crtc"),
81   m_ctc(*this, "ctc"),
82   m_gfxdecode(*this, "gfxdecode"),
78      m_maincpu(*this,"x1_cpu"),
79      m_cassette(*this, "cassette"),
80      m_cart(*this, "cartslot"),
81      m_fdc(*this, "fdc"),
82      m_crtc(*this, "crtc"),
83      m_ctc(*this, "ctc"),
84      m_gfxdecode(*this, "gfxdecode"),
8385      m_palette(*this, "palette"),
8486      m_dma(*this, "dma")
8587   { }
8688
8789   required_device<cpu_device> m_maincpu;
8890   required_device<cassette_image_device> m_cassette;
91   required_device<generic_slot_device> m_cart;
8992   required_device<mb8877_device> m_fdc;
9093   required_device<mc6845_device> m_crtc;
9194   required_device<z80ctc_device> m_ctc;
trunk/src/mess/includes/svi318.h
r32230r32231
1313#include "machine/i8255.h"
1414#include "machine/ins8250.h"
1515#include "machine/wd17xx.h"
16#include "machine/ram.h"
17#include "machine/buffer.h"
1618#include "imagedev/cassette.h"
1719#include "sound/dac.h"
18#include "machine/ram.h"
19#include "machine/buffer.h"
20#include "sound/ay8910.h"
21#include "sound/wave.h"
22#include "video/mc6845.h"
23#include "video/tms9928a.h"
2024#include "bus/centronics/ctronics.h"
25#include "bus/generic/slot.h"
26#include "bus/generic/carts.h"
2127
2228
2329struct SVI_318
r32230r32231
5864public:
5965   svi318_state(const machine_config &mconfig, device_type type, const char *tag)
6066      : driver_device(mconfig, type, tag),
61      m_pcart(NULL),
62      m_pcart_rom_size(0),
6367      m_maincpu(*this, "maincpu"),
6468      m_cassette(*this, "cassette"),
6569      m_dac(*this, "dac"),
r32230r32231
6973      m_cent_data_out(*this, "cent_data_out"),
7074      m_ins8250_0(*this, "ins8250_0"),
7175      m_ins8250_1(*this, "ins8250_1"),
76      m_cart(*this, "cartslot"),
7277      m_line0(*this, "LINE0"),
7378      m_line1(*this, "LINE1"),
7479      m_line2(*this, "LINE2"),
r32230r32231
8590      m_palette(*this, "palette")  { }
8691
8792   SVI_318 m_svi;
88   UINT8 *m_pcart;
89   UINT32 m_pcart_rom_size;
9093   int m_centronics_busy;
9194   SVI318_FDC_STRUCT m_fdc;
9295   DECLARE_WRITE8_MEMBER(svi318_ppi_w);
r32230r32231
115118   DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w);
116119   DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w);
117120   DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w);
121   bool cart_verify(UINT8 *ROM);
118122   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
119   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(svi318_cart);
120123   DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
121124
122125   MC6845_UPDATE_ROW(crtc_update_row);
123
126   memory_region *m_cart_rom;
127   
124128   required_device<z80_device> m_maincpu;
125129protected:
126130   required_device<cassette_image_device> m_cassette;
r32230r32231
131135   required_device<output_latch_device> m_cent_data_out;
132136   required_device<ins8250_device> m_ins8250_0;
133137   required_device<ins8250_device> m_ins8250_1;
138   required_device<generic_slot_device> m_cart;
134139   required_ioport m_line0;
135140   required_ioport m_line1;
136141   required_ioport m_line2;
trunk/src/mess/includes/advision.h
r32230r32231
88#define __ADVISION__
99
1010#include "sound/dac.h"
11#include "bus/generic/slot.h"
12#include "bus/generic/carts.h"
1113
1214#define SCREEN_TAG  "screen"
1315#define I8048_TAG   "i8048"
r32230r32231
2123         m_maincpu(*this, I8048_TAG),
2224         m_soundcpu(*this, COP411_TAG),
2325         m_dac(*this, "dac"),
26         m_cart(*this, "cartslot"),
2427         m_palette(*this, "palette")
2528   { }
2629
2730   required_device<cpu_device> m_maincpu;
2831   required_device<cpu_device> m_soundcpu;
2932   required_device<dac_device> m_dac;
33   required_device<generic_slot_device> m_cart;
3034   required_device<palette_device> m_palette;
3135
3236   virtual void machine_start();
r32230r32231
3943   void vh_write(int data);
4044   void vh_update(int x);
4145
46   DECLARE_READ8_MEMBER( rom_r );
4247   DECLARE_READ8_MEMBER( ext_ram_r );
4348   DECLARE_WRITE8_MEMBER( ext_ram_w );
4449   DECLARE_READ8_MEMBER( controller_r );
r32230r32231
4954   DECLARE_WRITE8_MEMBER( sound_g_w );
5055   DECLARE_WRITE8_MEMBER( sound_d_w );
5156
57   memory_region *m_cart_rom;
58
5259   /* external RAM state */
5360   UINT8 *m_ext_ram;
5461   int m_rambank;
trunk/src/mess/drivers/svi318.c
r32230r32231
1010*/
1111
1212#include "emu.h"
13#include "cpu/z80/z80.h"
14#include "sound/wave.h"
15#include "video/mc6845.h"
1613#include "includes/svi318.h"
17#include "video/tms9928a.h"
18#include "machine/i8255.h"
19#include "machine/wd17xx.h"
20#include "bus/centronics/ctronics.h"
2114#include "imagedev/flopdrv.h"
2215#include "formats/svi_dsk.h"
23#include "imagedev/cartslot.h"
24#include "imagedev/cassette.h"
2516#include "formats/svi_cas.h"
26#include "sound/dac.h"
27#include "sound/ay8910.h"
28#include "machine/ram.h"
2917#include "rendlay.h"
3018
3119static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state )
r32230r32231
263251};
264252
265253static MACHINE_CONFIG_FRAGMENT( svi318_cartslot )
266   MCFG_CARTSLOT_ADD("cart")
267   MCFG_CARTSLOT_EXTENSION_LIST("rom")
268   MCFG_CARTSLOT_NOT_MANDATORY
269   MCFG_CARTSLOT_INTERFACE("svi318_cart")
270   MCFG_CARTSLOT_LOAD(svi318_state,svi318_cart)
271   MCFG_CARTSLOT_UNLOAD(svi318_state,svi318_cart)
254   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "svi318_cart")
255   MCFG_GENERIC_EXTENSIONS("bin,rom")
256   MCFG_GENERIC_LOAD(svi318_state, svi318_cart)
272257
273258   /* Software lists */
274259   MCFG_SOFTWARE_LIST_ADD("cart_list","svi318_cart")
r32230r32231
497482   ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
498483   ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
499484   ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
500
501   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
502485ROM_END
503486
504487ROM_START( svi318n  )
r32230r32231
509492   ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
510493   ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
511494   ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
512
513   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
514495ROM_END
515496
516497ROM_START( svi328 )
r32230r32231
521502   ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
522503   ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
523504   ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
524
525   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
526505ROM_END
527506
528507ROM_START( svi328n )
r32230r32231
533512   ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
534513   ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
535514   ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
536
537   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
538515ROM_END
539516
540517ROM_START( sv328p80 )
r32230r32231
546523   ROMX_LOAD("svi806.rom",   0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
547524   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
548525   ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
549
550   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
551526ROM_END
552527
553528ROM_START( sv328n80 )
r32230r32231
559534   ROMX_LOAD("svi806.rom",   0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
560535   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
561536   ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
562
563   ROM_REGION( 0x8000, "user1", ROMREGION_ERASEFF )
564537ROM_END
565538
566539
trunk/src/mess/drivers/advision.c
r32230r32231
1616
1717*/
1818
19
2019#include "emu.h"
2120#include "includes/advision.h"
2221#include "cpu/mcs48/mcs48.h"
2322#include "cpu/cop400/cop400.h"
24#include "imagedev/cartslot.h"
2523#include "sound/dac.h"
2624
2725/* Memory Maps */
2826
27READ8_MEMBER( advision_state::rom_r )
28{
29   offset += 0x400;
30   return m_cart->read_rom(space, offset & 0xfff);
31}
32
2933static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, advision_state )
3034   AM_RANGE(0x0000, 0x03ff) AM_ROMBANK("bank1")
31   AM_RANGE(0x0400, 0x0fff) AM_ROM
35   AM_RANGE(0x0400, 0x0fff) AM_READ(rom_r)
3236ADDRESS_MAP_END
3337
3438static ADDRESS_MAP_START( io_map, AS_IO, 8, advision_state )
r32230r32231
6973   MCFG_CPU_IO_MAP(io_map)
7074
7175   MCFG_CPU_ADD(COP411_TAG, COP411, 52631*16) // COP411L-KCN/N
72   MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, COP400_MICROBUS_DISABLED )
76   MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, COP400_MICROBUS_DISABLED)
7377   MCFG_CPU_IO_MAP(sound_io_map)
7478
7579   /* video hardware */
r32230r32231
9094   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
9195
9296   /* cartridge */
93   MCFG_CARTSLOT_ADD("cart")
94   MCFG_CARTSLOT_EXTENSION_LIST("bin")
95   MCFG_CARTSLOT_MANDATORY
96   MCFG_CARTSLOT_INTERFACE("advision_cart")
97   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "advision_cart")
98   MCFG_GENERIC_MANDATORY
9799
98100   /* Software lists */
99101   MCFG_SOFTWARE_LIST_ADD("cart_list","advision")
r32230r32231
102104/* ROMs */
103105
104106ROM_START( advision )
105   ROM_REGION( 0x1000, I8048_TAG, 0 )
106   ROM_CART_LOAD( "cart", 0x0000, 0x1000, ROM_NOMIRROR | ROM_FULLSIZE )
107
108   ROM_REGION( 0x400, "bios", 0 )
107   ROM_REGION( 0x1000, I8048_TAG, ROMREGION_ERASE00 )
109108   ROM_LOAD( "avbios.u5", 0x000, 0x400, CRC(279e33d1) SHA1(bf7b0663e9125c9bfb950232eab627d9dbda8460) )
110109
111110   ROM_REGION( 0x200, COP411_TAG, 0 )
trunk/src/mess/drivers/x1twin.c
r32230r32231
474474   MCFG_DEVICE_ADD("fdc", MB8877, 0)
475475   MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
476476
477   MCFG_CARTSLOT_ADD("cart")
478   MCFG_CARTSLOT_EXTENSION_LIST("rom")
479   MCFG_CARTSLOT_NOT_MANDATORY
477   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "x1_cart")
478   MCFG_GENERIC_EXTENSIONS("bin,rom")
480479
481480   MCFG_SPEAKER_ADD("x1_l",-0.2, 0.0, 1.0)
482481   MCFG_SPEAKER_ADD("x1_r",0.2, 0.0, 1.0)
r32230r32231
547546   ROM_LOAD("kanji2.rom", 0x08000, 0x8000, BAD_DUMP CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
548547   ROM_LOAD("kanji3.rom", 0x10000, 0x8000, BAD_DUMP CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
549548   ROM_LOAD("kanji1.rom", 0x18000, 0x8000, BAD_DUMP CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
550
551   ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
552   ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
553549ROM_END
554550
555551COMP( 1986, x1twin,    x1,     0,       x1twin,      x1twin, x1_state,         x1_kanji,"Sharp",  "X1 Twin (CZ-830C)",    GAME_NOT_WORKING )
trunk/src/mess/drivers/tvc.c
r32230r32231
1313****************************************************************************/
1414
1515#include "emu.h"
16#include "includes/tvc.h"
16#include "cpu/z80/z80.h"
17#include "video/mc6845.h"
18#include "machine/ram.h"
19#include "audio/tvc_snd.h"
20#include "bus/centronics/ctronics.h"
21#include "imagedev/cassette.h"
22#include "imagedev/snapquik.h"
23#include "formats/tvc_cas.h"
1724
25#include "bus/tvc/tvc.h"
26#include "bus/tvc/hbf.h"
27#include "bus/generic/slot.h"
28#include "bus/generic/carts.h"
1829
30#define TVC_RAM_BANK    1
31#define TVC_ROM_BANK    2
1932
33#define CENTRONICS_TAG  "centronics"
34
35
36class tvc_state : public driver_device
37{
38public:
39   tvc_state(const machine_config &mconfig, device_type type, const char *tag)
40   : driver_device(mconfig, type, tag),
41   m_maincpu(*this, "maincpu"),
42   m_ram(*this, RAM_TAG),
43   m_sound(*this, "custom"),
44   m_cassette(*this, "cassette"),
45   m_cart(*this, "cartslot"),
46   m_centronics(*this, CENTRONICS_TAG),
47   m_palette(*this, "palette"),
48   m_keyboard(*this, "LINE")
49   { }
50   
51   required_device<cpu_device> m_maincpu;
52   required_device<ram_device> m_ram;
53   required_device<tvc_sound_device> m_sound;
54   required_device<cassette_image_device> m_cassette;
55   required_device<generic_slot_device> m_cart;
56   required_device<centronics_device> m_centronics;
57   required_device<palette_device> m_palette;
58   required_ioport_array<16> m_keyboard;
59
60   tvcexp_slot_device *m_expansions[4];
61   memory_region *m_bios_rom;
62   memory_region *m_cart_rom;
63   memory_region *m_ext;
64   memory_region *m_vram;
65
66   void machine_start();
67   void machine_reset();
68   
69   void set_mem_page(UINT8 data);
70   DECLARE_WRITE8_MEMBER(bank_w);
71   DECLARE_WRITE8_MEMBER(vram_bank_w);
72   DECLARE_WRITE8_MEMBER(palette_w);
73   DECLARE_WRITE8_MEMBER(keyboard_w);
74   DECLARE_READ8_MEMBER(keyboard_r);
75   DECLARE_READ8_MEMBER(int_state_r);
76   DECLARE_WRITE8_MEMBER(flipflop_w);
77   DECLARE_WRITE8_MEMBER(border_color_w);
78   DECLARE_WRITE8_MEMBER(sound_w);
79   DECLARE_WRITE8_MEMBER(cassette_w);
80   DECLARE_READ8_MEMBER(_5b_r);
81   DECLARE_WRITE_LINE_MEMBER(int_ff_set);
82   DECLARE_WRITE_LINE_MEMBER(centronics_ack);
83   
84   // expansions
85   DECLARE_WRITE8_MEMBER(expansion_w);
86   DECLARE_READ8_MEMBER(expansion_r);
87   DECLARE_READ8_MEMBER(exp_id_r);
88   DECLARE_WRITE8_MEMBER(expint_ack_w);
89   
90   DECLARE_QUICKLOAD_LOAD_MEMBER( tvc64);
91   
92   MC6845_UPDATE_ROW(crtc_update_row);
93   
94   UINT8       m_video_mode;
95   UINT8       m_keyline;
96   UINT8       m_active_slot;
97   UINT8       m_int_flipflop;
98   UINT8       m_col[4];
99   UINT8       m_bank_type[4];
100   UINT8       m_bank;
101   UINT8       m_vram_bank;
102   UINT8       m_cassette_ff;
103   UINT8       m_centronics_ff;
104   DECLARE_PALETTE_INIT(tvc);
105};
106
107
108
20109#define TVC_INSTALL_ROM_BANK(_bank,_tag,_start,_end) \
21110   if (m_bank_type[_bank] != TVC_ROM_BANK) \
22111   { \
r32230r32231
30119      space.install_readwrite_bank(_start, _end, _tag); \
31120      m_bank_type[_bank] = TVC_RAM_BANK; \
32121   }
33void tvc_state::tvc_set_mem_page(UINT8 data)
122
123void tvc_state::set_mem_page(UINT8 data)
34124{
35125   address_space &space = m_maincpu->space(AS_PROGRAM);
36   switch(data & 0x18)
126   switch (data & 0x18)
37127   {
38128      case 0x00 : // system ROM selected
39129         TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
40         membank("bank1")->set_base(memregion("sys")->base());
130         membank("bank1")->set_base(m_bios_rom->base());
41131         break;
42132      case 0x08 : // Cart ROM selected
43         TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
44         membank("bank1")->set_base(memregion("cart")->base());
133         if (m_cart_rom)
134         {
135            TVC_INSTALL_ROM_BANK(0, "bank1", 0x0000, 0x3fff);
136            membank("bank1")->set_base(m_cart_rom->base());
137         }
45138         break;
46139      case 0x10 : // RAM selected
47140         TVC_INSTALL_RAM_BANK(0, "bank1", 0x0000, 0x3fff);
48141         membank("bank1")->set_base(m_ram->pointer());
49142         break;
50143      case 0x18 : // Video RAM
51         if (memregion("vram")->bytes() > 0x4000)
144         if (m_vram->bytes() > 0x4000)
52145         {
53146            // TVC 64+ only
54147            TVC_INSTALL_RAM_BANK(0, "bank1", 0x0000, 0x3fff);
55            membank("bank1")->set_base(memregion("vram")->base() + ((m_vram_bank & 0x03)<<14));
148            membank("bank1")->set_base(m_vram->base() + ((m_vram_bank & 0x03)<<14));
56149         }
57150         else
58151         {
r32230r32231
65158   if ((data & 0x20)==0)       // Video RAM
66159   {
67160      TVC_INSTALL_RAM_BANK(2, "bank3", 0x8000, 0xbfff);
68      membank("bank3")->set_base(memregion("vram")->base() + ((m_vram_bank & 0x0c)<<12));
161      membank("bank3")->set_base(m_vram->base() + ((m_vram_bank & 0x0c)<<12));
69162   }
70163   else                        // System RAM page 3
71164   {
r32230r32231
84177   switch(data & 0xc0)
85178   {
86179      case 0x00 : // Cart ROM selected
87         TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
88         membank("bank4")->set_base(memregion("cart")->base());
180         if (m_cart_rom)
181         {
182            TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
183            membank("bank4")->set_base(m_cart_rom->base());
184         }
89185         break;
90186      case 0x40 : // System ROM selected
91187         TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
92         membank("bank4")->set_base(memregion("sys")->base());
188         membank("bank4")->set_base(m_bios_rom->base());
93189         break;
94190      case 0x80 : // RAM selected
95191         if (m_ram->size() > 0x8000)
r32230r32231
105201         break;
106202      case 0xc0 : // External ROM selected
107203         TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff);
108         membank("bank4")->set_base(memregion("ext")->base());
109         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);
204         membank("bank4")->set_base(m_ext->base());
205         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);
110206         m_bank_type[3] = -1;
111207         break;
112208   }
113209}
114210
115211
116WRITE8_MEMBER(tvc_state::tvc_expansion_w)
212WRITE8_MEMBER(tvc_state::expansion_w)
117213{
118214   m_expansions[m_active_slot & 3]->write(space, offset, data);
119215}
120216
121217
122READ8_MEMBER(tvc_state::tvc_expansion_r)
218READ8_MEMBER(tvc_state::expansion_r)
123219{
124220   return m_expansions[m_active_slot & 3]->read(space, offset);
125221}
126222
127WRITE8_MEMBER(tvc_state::tvc_bank_w)
223WRITE8_MEMBER(tvc_state::bank_w)
128224{
129225   m_bank = data;
130   tvc_set_mem_page(data);
226   set_mem_page(data);
131227}
132228
133WRITE8_MEMBER(tvc_state::tvc_vram_bank_w)
229WRITE8_MEMBER(tvc_state::vram_bank_w)
134230{
135231   // TVC 64+ only
136   if (memregion("vram")->bytes() > 0x4000)
232   if (m_vram->bytes() > 0x4000)
137233   {
138234      // bit 4-5 - screen video RAM
139235      // bit 2-3 - video RAM active in bank 3
140236      // bit 0-1 - video RAM active in bank 1
141237
142238      m_vram_bank = data;
143      tvc_set_mem_page(m_bank);
239      set_mem_page(m_bank);
144240   }
145241}
146242
147WRITE8_MEMBER(tvc_state::tvc_palette_w)
243WRITE8_MEMBER(tvc_state::palette_w)
148244{
149245   //  0 I 0 G | 0 R 0 B
150246   //  0 0 0 0 | I G R B
r32230r32231
153249   m_col[offset] = i;
154250}
155251
156WRITE8_MEMBER(tvc_state::tvc_keyboard_w)
252WRITE8_MEMBER(tvc_state::keyboard_w)
157253{
158254   // bit 6-7 - expansion select
159255   // bit 0-3 - keyboard scan
r32230r32231
162258   m_active_slot = (data>>6) & 0x03;
163259}
164260
165READ8_MEMBER(tvc_state::tvc_keyboard_r)
261READ8_MEMBER(tvc_state::keyboard_r)
166262{
167   static const char *const keynames[] = {
168      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
169      "LINE8", "LINE9", "LINEA", "LINEB", "LINEC", "LINED", "LINEE", "LINEF"
170   };
171   return ioport(keynames[m_keyline & 0x0f])->read();
263   return m_keyboard[m_keyline & 0x0f]->read();
172264}
173265
174READ8_MEMBER(tvc_state::tvc_int_state_r)
266READ8_MEMBER(tvc_state::int_state_r)
175267{
176268   /*
177269       x--- ----   centronics ACK flipflop
r32230r32231
189281   return 0x40 | (m_int_flipflop << 4) | (level > 0.01 ? 0x20 : 0x00) | (m_centronics_ff << 7) | (expint & 0x0f);
190282}
191283
192WRITE8_MEMBER(tvc_state::tvc_flipflop_w)
284WRITE8_MEMBER(tvc_state::flipflop_w)
193285{
194286   // every write here clears the vblank flipflop
195287   m_int_flipflop = 1;
196288   m_maincpu->set_input_line(0, CLEAR_LINE);
197289}
198290
199READ8_MEMBER(tvc_state::tvc_exp_id_r)
291READ8_MEMBER(tvc_state::exp_id_r)
200292{
201293   // expansion slots ID
202294   return  (m_expansions[0]->id_r()<<0) | (m_expansions[1]->id_r()<<2) |
203295         (m_expansions[2]->id_r()<<4) | (m_expansions[3]->id_r()<<6);
204296}
205297
206WRITE8_MEMBER(tvc_state::tvc_expint_ack_w)
298WRITE8_MEMBER(tvc_state::expint_ack_w)
207299{
208300   m_expansions[offset & 3]->int_ack();
209301}
210302
211WRITE8_MEMBER(tvc_state::tvc_border_color_w)
303WRITE8_MEMBER(tvc_state::border_color_w)
212304{
213305   // x-x- x-x-    border color (I G R B)
214306}
215307
216308
217WRITE8_MEMBER(tvc_state::tvc_sound_w)
309WRITE8_MEMBER(tvc_state::sound_w)
218310{
219311   switch(offset)
220312   {
r32230r32231
238330   m_sound->write(space, offset, data);
239331}
240332
241READ8_MEMBER(tvc_state::tvc_5b_r)
333READ8_MEMBER(tvc_state::_5b_r)
242334{
243335   m_sound->reset_divider();
244336   return 0xff;
245337}
246338
247WRITE8_MEMBER(tvc_state::tvc_cassette_w)
339WRITE8_MEMBER(tvc_state::cassette_w)
248340{
249341   // writig here cause the toggle of the cassette flipflop
250342   m_cassette_ff = !m_cassette_ff;
r32230r32231
261353static ADDRESS_MAP_START( tvc_io , AS_IO, 8, tvc_state )
262354   ADDRESS_MAP_UNMAP_HIGH
263355   ADDRESS_MAP_GLOBAL_MASK(0xff)
264   AM_RANGE(0x00, 0x00) AM_WRITE(tvc_border_color_w)
356   AM_RANGE(0x00, 0x00) AM_WRITE(border_color_w)
265357   AM_RANGE(0x01, 0x01) AM_DEVWRITE("cent_data_out", output_latch_device, write)
266   AM_RANGE(0x02, 0x02) AM_WRITE(tvc_bank_w)
267   AM_RANGE(0x03, 0x03) AM_WRITE(tvc_keyboard_w)
268   AM_RANGE(0x04, 0x06) AM_WRITE(tvc_sound_w)
269   AM_RANGE(0x07, 0x07) AM_WRITE(tvc_flipflop_w)
270   AM_RANGE(0x0f, 0x0f) AM_WRITE(tvc_vram_bank_w)
358   AM_RANGE(0x02, 0x02) AM_WRITE(bank_w)
359   AM_RANGE(0x03, 0x03) AM_WRITE(keyboard_w)
360   AM_RANGE(0x04, 0x06) AM_WRITE(sound_w)
361   AM_RANGE(0x07, 0x07) AM_WRITE(flipflop_w)
362   AM_RANGE(0x0f, 0x0f) AM_WRITE(vram_bank_w)
271363   AM_RANGE(0x10, 0x1f) AM_DEVREADWRITE("exp1", tvcexp_slot_device, io_read, io_write)
272364   AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("exp2", tvcexp_slot_device, io_read, io_write)
273365   AM_RANGE(0x30, 0x3f) AM_DEVREADWRITE("exp3", tvcexp_slot_device, io_read, io_write)
274366   AM_RANGE(0x40, 0x4f) AM_DEVREADWRITE("exp4", tvcexp_slot_device, io_read, io_write)
275   AM_RANGE(0x50, 0x50) AM_WRITE(tvc_cassette_w)
276   AM_RANGE(0x58, 0x58) AM_READ(tvc_keyboard_r)
277   AM_RANGE(0x59, 0x59) AM_READ(tvc_int_state_r)
278   AM_RANGE(0x5a, 0x5a) AM_READ(tvc_exp_id_r)
279   AM_RANGE(0x5b, 0x5b) AM_READ(tvc_5b_r)
280   AM_RANGE(0x58, 0x5b) AM_WRITE(tvc_expint_ack_w)
281   AM_RANGE(0x60, 0x63) AM_WRITE(tvc_palette_w)
367   AM_RANGE(0x50, 0x50) AM_WRITE(cassette_w)
368   AM_RANGE(0x58, 0x58) AM_READ(keyboard_r)
369   AM_RANGE(0x59, 0x59) AM_READ(int_state_r)
370   AM_RANGE(0x5a, 0x5a) AM_READ(exp_id_r)
371   AM_RANGE(0x5b, 0x5b) AM_READ(_5b_r)
372   AM_RANGE(0x58, 0x5b) AM_WRITE(expint_ack_w)
373   AM_RANGE(0x60, 0x63) AM_WRITE(palette_w)
282374   AM_RANGE(0x70, 0x70) AM_DEVWRITE("crtc", mc6845_device, address_w)
283375   AM_RANGE(0x71, 0x71) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
284376ADDRESS_MAP_END
285377
286378/* Input ports */
287379static INPUT_PORTS_START( tvc )
288   PORT_START("LINE0")
289      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)         PORT_CHAR('5')  PORT_CHAR('%')
290      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)         PORT_CHAR('3')  PORT_CHAR('+')
291      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)         PORT_CHAR('2')  PORT_CHAR('\"')
292      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)         PORT_CHAR('0')  PORT_CHAR('&')
293      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)         PORT_CHAR('6')  PORT_CHAR('/')
294      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\x8d") PORT_CODE(KEYCODE_1_PAD)  PORT_CHAR(0x00cd)
295      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)         PORT_CHAR('1')  PORT_CHAR('\'')
296      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)         PORT_CHAR('4')  PORT_CHAR('!')
297   PORT_START("LINE1")
298      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('^')
299      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)         PORT_CHAR('8')  PORT_CHAR('(')
300      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)         PORT_CHAR('9')  PORT_CHAR(')')
301      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xbc") PORT_CODE(KEYCODE_2_PAD)  PORT_CHAR(0x00fc)
302      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK)      PORT_CHAR('*')
303      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb3") PORT_CODE(KEYCODE_3_PAD)  PORT_CHAR(0x00f3)
304      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb6") PORT_CODE(KEYCODE_4_PAD)  PORT_CHAR(0x00f6)
305      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)         PORT_CHAR('7')  PORT_CHAR('=')
306   PORT_START("LINE2")
307      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)         PORT_CHAR('t')  PORT_CHAR('T')
308      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)         PORT_CHAR('e')  PORT_CHAR('E')
309      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)         PORT_CHAR('w')  PORT_CHAR('W')
310      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)     PORT_CHAR(';')  PORT_CHAR('$')
311      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)         PORT_CHAR('z')  PORT_CHAR('Z')
312      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_HOME)      PORT_CHAR('@')
313      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)         PORT_CHAR('q')  PORT_CHAR('Q')
314      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)         PORT_CHAR('r')  PORT_CHAR('R')
315   PORT_START("LINE3")
316      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
317      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)         PORT_CHAR('i')  PORT_CHAR('I')
318      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)         PORT_CHAR('o')  PORT_CHAR('O')
319      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\x91") PORT_CODE(KEYCODE_5_PAD)  PORT_CHAR(0x0151)
320      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')  PORT_CHAR('{')
321      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xba") PORT_CODE(KEYCODE_6_PAD)  PORT_CHAR(0x00fa)
322      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)         PORT_CHAR('p')  PORT_CHAR('P')
323      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)         PORT_CHAR('u')  PORT_CHAR('U')
324   PORT_START("LINE4")
325      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)         PORT_CHAR('g')  PORT_CHAR('G')
326      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)         PORT_CHAR('d')  PORT_CHAR('D')
327      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)         PORT_CHAR('s')  PORT_CHAR('S')
328      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')    PORT_CHAR('|')
329      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)         PORT_CHAR('h')  PORT_CHAR('H')
330      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_END)       PORT_CHAR('<')
331      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)         PORT_CHAR('a')  PORT_CHAR('A')
332      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)         PORT_CHAR('f')  PORT_CHAR('F')
333   PORT_START("LINE5")
334      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
335      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)         PORT_CHAR('k')  PORT_CHAR('K')
336      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)         PORT_CHAR('l')  PORT_CHAR('L')
337      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa1") PORT_CODE(KEYCODE_7_PAD)  PORT_CHAR(0x00e1)
338      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
339      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\xb1") PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR(0x0171)
340      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa9") PORT_CODE(KEYCODE_9_PAD)  PORT_CHAR(0x00e9)
341      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)         PORT_CHAR('j')  PORT_CHAR('J')
342   PORT_START("LINE6")
343      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)         PORT_CHAR('b')  PORT_CHAR('B')
344      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)         PORT_CHAR('c')  PORT_CHAR('C')
345      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)         PORT_CHAR('x')  PORT_CHAR('X')
346      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1)
347      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)         PORT_CHAR('n')  PORT_CHAR('N')
348      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
349      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)         PORT_CHAR('y')  PORT_CHAR('Y')
350      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)         PORT_CHAR('v')  PORT_CHAR('V')
351   PORT_START("LINE7")
352      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT)    PORT_CHAR(UCHAR_MAMEKEY(LALT))
353      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)     PORT_CHAR(',')  PORT_CHAR('?')
354      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)      PORT_CHAR('.')  PORT_CHAR(':')
355      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC))
356      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
357      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
358      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')  PORT_CHAR('_')
359      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)         PORT_CHAR('m')  PORT_CHAR('M')
360   PORT_START("LINE8")
361      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert")  PORT_CODE(KEYCODE_INSERT)  PORT_CHAR(UCHAR_MAMEKEY(INSERT))
362      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up")      PORT_CODE(KEYCODE_UP)      PORT_CHAR(UCHAR_MAMEKEY(UP))
363      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down")    PORT_CODE(KEYCODE_DOWN)    PORT_CHAR(UCHAR_MAMEKEY(DOWN))
364      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fire")    PORT_CODE(KEYCODE_PGUP)    //PORT_CHAR(UCHAR_MAMEKEY())
365      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Acc")     PORT_CODE(KEYCODE_PGDN)    //PORT_CHAR(UCHAR_MAMEKEY())
366      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right")   PORT_CODE(KEYCODE_RIGHT)   PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
367      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left")    PORT_CODE(KEYCODE_LEFT)    PORT_CHAR(UCHAR_MAMEKEY(LEFT))
368      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
369   PORT_START("LINE9")
370      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
371   PORT_START("LINEA")
372      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
373   PORT_START("LINEB")
374      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
375   PORT_START("LINEC")
376      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
377   PORT_START("LINED")
378      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
379   PORT_START("LINEE")
380      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
381   PORT_START("LINEF")
382      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
380   PORT_START("LINE.0")
381   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)         PORT_CHAR('5')  PORT_CHAR('%')
382   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)         PORT_CHAR('3')  PORT_CHAR('+')
383   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)         PORT_CHAR('2')  PORT_CHAR('\"')
384   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)         PORT_CHAR('0')  PORT_CHAR('&')
385   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)         PORT_CHAR('6')  PORT_CHAR('/')
386   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\x8d") PORT_CODE(KEYCODE_1_PAD)  PORT_CHAR(0x00cd)
387   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)         PORT_CHAR('1')  PORT_CHAR('\'')
388   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)         PORT_CHAR('4')  PORT_CHAR('!')
389
390   PORT_START("LINE.1")
391   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('^')
392   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)         PORT_CHAR('8')  PORT_CHAR('(')
393   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)         PORT_CHAR('9')  PORT_CHAR(')')
394   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xbc") PORT_CODE(KEYCODE_2_PAD)  PORT_CHAR(0x00fc)
395   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK)      PORT_CHAR('*')
396   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb3") PORT_CODE(KEYCODE_3_PAD)  PORT_CHAR(0x00f3)
397   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xb6") PORT_CODE(KEYCODE_4_PAD)  PORT_CHAR(0x00f6)
398   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)         PORT_CHAR('7')  PORT_CHAR('=')
399
400   PORT_START("LINE.2")
401   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)         PORT_CHAR('t')  PORT_CHAR('T')
402   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)         PORT_CHAR('e')  PORT_CHAR('E')
403   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)         PORT_CHAR('w')  PORT_CHAR('W')
404   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)     PORT_CHAR(';')  PORT_CHAR('$')
405   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)         PORT_CHAR('z')  PORT_CHAR('Z')
406   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_HOME)      PORT_CHAR('@')
407   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)         PORT_CHAR('q')  PORT_CHAR('Q')
408   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)         PORT_CHAR('r')  PORT_CHAR('R')
409
410   PORT_START("LINE.3")
411   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
412   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)         PORT_CHAR('i')  PORT_CHAR('I')
413   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)         PORT_CHAR('o')  PORT_CHAR('O')
414   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\x91") PORT_CODE(KEYCODE_5_PAD)  PORT_CHAR(0x0151)
415   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')  PORT_CHAR('{')
416   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xba") PORT_CODE(KEYCODE_6_PAD)  PORT_CHAR(0x00fa)
417   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)         PORT_CHAR('p')  PORT_CHAR('P')
418   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)         PORT_CHAR('u')  PORT_CHAR('U')
419
420   PORT_START("LINE.4")
421   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)         PORT_CHAR('g')  PORT_CHAR('G')
422   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)         PORT_CHAR('d')  PORT_CHAR('D')
423   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)         PORT_CHAR('s')  PORT_CHAR('S')
424   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')    PORT_CHAR('|')
425   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)         PORT_CHAR('h')  PORT_CHAR('H')
426   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_END)       PORT_CHAR('<')
427   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)         PORT_CHAR('a')  PORT_CHAR('A')
428   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)         PORT_CHAR('f')  PORT_CHAR('F')
429
430   PORT_START("LINE.5")
431   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
432   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)         PORT_CHAR('k')  PORT_CHAR('K')
433   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)         PORT_CHAR('l')  PORT_CHAR('L')
434   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa1") PORT_CODE(KEYCODE_7_PAD)  PORT_CHAR(0x00e1)
435   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
436   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc5\xb1") PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR(0x0171)
437   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xc3\xa9") PORT_CODE(KEYCODE_9_PAD)  PORT_CHAR(0x00e9)
438   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)         PORT_CHAR('j')  PORT_CHAR('J')
439
440   PORT_START("LINE.6")
441   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)         PORT_CHAR('b')  PORT_CHAR('B')
442   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)         PORT_CHAR('c')  PORT_CHAR('C')
443   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)         PORT_CHAR('x')  PORT_CHAR('X')
444   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1)
445   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)         PORT_CHAR('n')  PORT_CHAR('N')
446   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
447   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)         PORT_CHAR('y')  PORT_CHAR('Y')
448   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)         PORT_CHAR('v')  PORT_CHAR('V')
449
450   PORT_START("LINE.7")
451   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT)    PORT_CHAR(UCHAR_MAMEKEY(LALT))
452   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)     PORT_CHAR(',')  PORT_CHAR('?')
453   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)      PORT_CHAR('.')  PORT_CHAR(':')
454   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC))
455   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
456   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
457   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')  PORT_CHAR('_')
458   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)         PORT_CHAR('m')  PORT_CHAR('M')
459
460   PORT_START("LINE.8")
461   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert")  PORT_CODE(KEYCODE_INSERT)  PORT_CHAR(UCHAR_MAMEKEY(INSERT))
462   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up")      PORT_CODE(KEYCODE_UP)      PORT_CHAR(UCHAR_MAMEKEY(UP))
463   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down")    PORT_CODE(KEYCODE_DOWN)    PORT_CHAR(UCHAR_MAMEKEY(DOWN))
464   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fire")    PORT_CODE(KEYCODE_PGUP)    //PORT_CHAR(UCHAR_MAMEKEY())
465   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Acc")     PORT_CODE(KEYCODE_PGDN)    //PORT_CHAR(UCHAR_MAMEKEY())
466   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right")   PORT_CODE(KEYCODE_RIGHT)   PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
467   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left")    PORT_CODE(KEYCODE_LEFT)    PORT_CHAR(UCHAR_MAMEKEY(LEFT))
468   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
469
470   PORT_START("LINE.9")
471   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
472   PORT_START("LINE.10")
473   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
474   PORT_START("LINE.11")
475   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
476   PORT_START("LINE.12")
477   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
478   PORT_START("LINE.13")
479   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
480   PORT_START("LINE.14")
481   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
482   PORT_START("LINE.15")
483   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
383484INPUT_PORTS_END
384485
385486static INPUT_PORTS_START( tvc64pru )
386   PORT_START("LINE0")
387      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)         PORT_CHAR('4')  PORT_CHAR(0x0436)
388      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)         PORT_CHAR('2')  PORT_CHAR('"')
389      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)         PORT_CHAR('1')  PORT_CHAR('!')
390      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DL") PORT_CODE(KEYCODE_HOME)     // delete line
391      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)         PORT_CHAR('5')  PORT_CHAR('%')
392      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DC") PORT_CODE(KEYCODE_7_PAD)
393      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)     PORT_CHAR(';')  PORT_CHAR('+')
394      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)         PORT_CHAR('3')  PORT_CHAR('#')
395   PORT_START("LINE1")
396      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("IL") PORT_CODE(KEYCODE_END)      // insert line
397      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)         PORT_CHAR('7')  PORT_CHAR('\'')
398      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)         PORT_CHAR('8')  PORT_CHAR('{')
399      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)         PORT_CHAR('0')
400      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_") PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('_')
401      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)     PORT_CHAR('-')
402      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)         PORT_CHAR('9')  PORT_CHAR(')')
403      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)         PORT_CHAR('6')  PORT_CHAR('&')
404   PORT_START("LINE2")
405      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)         PORT_CHAR('e')  PORT_CHAR('E')
406      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)         PORT_CHAR('u')  PORT_CHAR('U')
407      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)         PORT_CHAR('c')  PORT_CHAR('C')
408      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)       PORT_CHAR(UCHAR_MAMEKEY(DOWN))
409      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)         PORT_CHAR('n')  PORT_CHAR('N')
410      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)       PORT_CHAR(UCHAR_MAMEKEY(UP))
411      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)         PORT_CHAR('j')  PORT_CHAR('J')
412      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)         PORT_CHAR('k')  PORT_CHAR('K')
413   PORT_START("LINE3")
414      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_DEL)       PORT_CHAR(UCHAR_MAMEKEY(DEL))
415      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')  PORT_CHAR('{')
416      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
417      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)         PORT_CHAR('h')  PORT_CHAR('H')
418      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)     PORT_CHAR(',')  PORT_CHAR('<')
419      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE)     PORT_CHAR(':')
420      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)         PORT_CHAR('z')  PORT_CHAR('Z')
421      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)         PORT_CHAR('g')  PORT_CHAR('G')
422   PORT_START("LINE4")
423      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)         PORT_CHAR('p')  PORT_CHAR('P')
424      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)         PORT_CHAR('w')  PORT_CHAR('W')
425      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)         PORT_CHAR('y')  PORT_CHAR('Y')
426      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
427      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)         PORT_CHAR('r')  PORT_CHAR('R')
428      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)   PORT_CHAR(UCHAR_MAMEKEY(LEFT))
429      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)         PORT_CHAR('f')  PORT_CHAR('F')
430      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)         PORT_CHAR('a')  PORT_CHAR('A')
431   PORT_START("LINE5")
432      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
433      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)         PORT_CHAR('l')  PORT_CHAR('L')
434      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)         PORT_CHAR('d')  PORT_CHAR('D')
435      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')    PORT_CHAR('|')
436      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
437      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)      PORT_CHAR('.')  PORT_CHAR('>')
438      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)         PORT_CHAR('v')  PORT_CHAR('V')
439      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)         PORT_CHAR('o')  PORT_CHAR('O')
440   PORT_START("LINE6")
441      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)         PORT_CHAR('i')  PORT_CHAR('I')
442      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)         PORT_CHAR('s')  PORT_CHAR('S')
443      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_9_PAD)     PORT_CHAR('^')
444      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1)
445      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)         PORT_CHAR('t')  PORT_CHAR('T')
446      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
447      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)         PORT_CHAR('q')  PORT_CHAR('Q')
448      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)         PORT_CHAR('m')  PORT_CHAR('M')
449   PORT_START("LINE7")
450      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT)    PORT_CHAR(UCHAR_MAMEKEY(LALT))
451      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)         PORT_CHAR('b')  PORT_CHAR('B')
452      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_1_PAD)     PORT_CHAR('@')  PORT_CHAR('\'')
453      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC))
454      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
455      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
456      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_SLASH)     PORT_CHAR('/')  PORT_CHAR('?')
457      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)         PORT_CHAR('x')  PORT_CHAR('X')
458   PORT_START("LINE8")
459      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert")     PORT_CODE(KEYCODE_INSERT)   PORT_CHAR(UCHAR_MAMEKEY(INSERT))
460      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Up")     PORT_CODE(KEYCODE_8_PAD)    PORT_CHAR(UCHAR_MAMEKEY(UP))
461      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Down")   PORT_CODE(KEYCODE_2_PAD)    PORT_CHAR(UCHAR_MAMEKEY(DOWN))
462      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Fire")   PORT_CODE(KEYCODE_PGUP)     //PORT_CHAR(UCHAR_MAMEKEY())
463      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Acc")    PORT_CODE(KEYCODE_PGDN)     //PORT_CHAR(UCHAR_MAMEKEY())
464      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Right")  PORT_CODE(KEYCODE_6_PAD)    PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
465      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Left")   PORT_CODE(KEYCODE_4_PAD)    PORT_CHAR(UCHAR_MAMEKEY(LEFT))
466      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
467   PORT_START("LINE9")
468      PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
469      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*")  PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
470   PORT_START("LINEA")
471      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
472   PORT_START("LINEB")
473      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
474   PORT_START("LINEC")
475      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
476   PORT_START("LINED")
477      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
478   PORT_START("LINEE")
479      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
480   PORT_START("LINEF")
481      PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED)
487   PORT_START("LINE.0")
488   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)         PORT_CHAR('4')  PORT_CHAR(0x0436)
489   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)         PORT_CHAR('2')  PORT_CHAR('"')
490   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)         PORT_CHAR('1')  PORT_CHAR('!')
491   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DL") PORT_CODE(KEYCODE_HOME)     // delete line
492   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)         PORT_CHAR('5')  PORT_CHAR('%')
493   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DC") PORT_CODE(KEYCODE_7_PAD)
494   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)     PORT_CHAR(';')  PORT_CHAR('+')
495   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)         PORT_CHAR('3')  PORT_CHAR('#')
496
497   PORT_START("LINE.1")
498   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("IL") PORT_CODE(KEYCODE_END)      // insert line
499   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)         PORT_CHAR('7')  PORT_CHAR('\'')
500   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)         PORT_CHAR('8')  PORT_CHAR('{')
501   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)         PORT_CHAR('0')
502   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_") PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('_')
503   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)     PORT_CHAR('-')
504   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)         PORT_CHAR('9')  PORT_CHAR(')')
505   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)         PORT_CHAR('6')  PORT_CHAR('&')
506
507   PORT_START("LINE.2")
508   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)         PORT_CHAR('e')  PORT_CHAR('E')
509   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)         PORT_CHAR('u')  PORT_CHAR('U')
510   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)         PORT_CHAR('c')  PORT_CHAR('C')
511   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)       PORT_CHAR(UCHAR_MAMEKEY(DOWN))
512   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)         PORT_CHAR('n')  PORT_CHAR('N')
513   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)       PORT_CHAR(UCHAR_MAMEKEY(UP))
514   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)         PORT_CHAR('j')  PORT_CHAR('J')
515   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)         PORT_CHAR('k')  PORT_CHAR('K')
516
517   PORT_START("LINE.3")
518   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_DEL)       PORT_CHAR(UCHAR_MAMEKEY(DEL))
519   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')  PORT_CHAR('{')
520   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
521   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)         PORT_CHAR('h')  PORT_CHAR('H')
522   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)     PORT_CHAR(',')  PORT_CHAR('<')
523   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE)     PORT_CHAR(':')
524   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)         PORT_CHAR('z')  PORT_CHAR('Z')
525   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)         PORT_CHAR('g')  PORT_CHAR('G')
526
527   PORT_START("LINE.4")
528   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)         PORT_CHAR('p')  PORT_CHAR('P')
529   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)         PORT_CHAR('w')  PORT_CHAR('W')
530   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)         PORT_CHAR('y')  PORT_CHAR('Y')
531   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
532   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)         PORT_CHAR('r')  PORT_CHAR('R')
533   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)   PORT_CHAR(UCHAR_MAMEKEY(LEFT))
534   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)         PORT_CHAR('f')  PORT_CHAR('F')
535   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)         PORT_CHAR('a')  PORT_CHAR('A')
536
537   PORT_START("LINE.5")
538   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
539   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)         PORT_CHAR('l')  PORT_CHAR('L')
540   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)         PORT_CHAR('d')  PORT_CHAR('D')
541   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')    PORT_CHAR('|')
542   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
543   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)      PORT_CHAR('.')  PORT_CHAR('>')
544   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)         PORT_CHAR('v')  PORT_CHAR('V')
545   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)         PORT_CHAR('o')  PORT_CHAR('O')
546
547   PORT_START("LINE.6")
548   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)         PORT_CHAR('i')  PORT_CHAR('I')
549   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)         PORT_CHAR('s')  PORT_CHAR('S')
550   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_9_PAD)     PORT_CHAR('^')
551   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1)
552   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)         PORT_CHAR('t')  PORT_CHAR('T')
553   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
554   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)         PORT_CHAR('q')  PORT_CHAR('Q')
555   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)         PORT_CHAR('m')  PORT_CHAR('M')
556
557   PORT_START("LINE.7")
558   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_RALT) PORT_CODE(KEYCODE_LALT)    PORT_CHAR(UCHAR_MAMEKEY(LALT))
559   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)         PORT_CHAR('b')  PORT_CHAR('B')
560   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_1_PAD)     PORT_CHAR('@')  PORT_CHAR('\'')
561   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC))
562   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
563   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
564   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_SLASH)     PORT_CHAR('/')  PORT_CHAR('?')
565   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)         PORT_CHAR('x')  PORT_CHAR('X')
566
567   PORT_START("LINE.8")
568   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Insert")     PORT_CODE(KEYCODE_INSERT)   PORT_CHAR(UCHAR_MAMEKEY(INSERT))
569   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Up")     PORT_CODE(KEYCODE_8_PAD)    PORT_CHAR(UCHAR_MAMEKEY(UP))
570   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Down")   PORT_CODE(KEYCODE_2_PAD)    PORT_CHAR(UCHAR_MAMEKEY(DOWN))
571   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Fire")   PORT_CODE(KEYCODE_PGUP)     //PORT_CHAR(UCHAR_MAMEKEY())
572   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Acc")    PORT_CODE(KEYCODE_PGDN)     //PORT_CHAR(UCHAR_MAMEKEY())
573   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Right")  PORT_CODE(KEYCODE_6_PAD)    PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
574   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Joy Left")   PORT_CODE(KEYCODE_4_PAD)    PORT_CHAR(UCHAR_MAMEKEY(LEFT))
575   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
576
577   PORT_START("LINE.9")
578   PORT_BIT(0x7f, IP_ACTIVE_LOW, IPT_UNUSED)
579   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("*")  PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*')
580   PORT_START("LINE.10")
581   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
582   PORT_START("LINE.11")
583   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
584   PORT_START("LINE.12")
585   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
586   PORT_START("LINE.13")
587   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
588   PORT_START("LINE.14")
589   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
590   PORT_START("LINE.15")
591   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
482592INPUT_PORTS_END
483593
484594void tvc_state::machine_start()
485595{
486   for (int i=0; i<4; i++)
596   for (int i = 0; i < 4; i++)
487597      m_col[i] = i;
488598
489599   m_int_flipflop = 0;
r32230r32231
492602   m_expansions[1] = machine().device<tvcexp_slot_device>("exp2");
493603   m_expansions[2] = machine().device<tvcexp_slot_device>("exp3");
494604   m_expansions[3] = machine().device<tvcexp_slot_device>("exp4");
605
606   m_bios_rom = memregion("sys");
607   m_ext = memregion("ext");
608   m_vram = memregion("vram");
609
610   astring region_tag;
611   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
495612}
496613
497614void tvc_state::machine_reset()
498615{
499616   memset(m_ram->pointer(), 0, m_ram->size());
500   tvc_set_mem_page(0);
617   set_mem_page(0);
501618   m_video_mode = 0;
502619   m_cassette_ff = 1;
503620   m_centronics_ff = 1;
r32230r32231
514631{
515632   const rgb_t *palette = m_palette->palette()->entry_list_raw();
516633   UINT32  *p = &bitmap.pix32(y);
517   UINT8 *vram = memregion("vram")->base() + ((m_vram_bank & 0x30)<<10);
634   UINT8 *vram = m_vram->base() + ((m_vram_bank & 0x30)<<10);
518635   UINT16 offset = ((ma*4 + ra*0x40) & 0x3fff);
519636   int i;
520637
r32230r32231
599716      palette.set_pen_color(i, tvc_palette[i][0], tvc_palette[i][1], tvc_palette[i][2]);
600717}
601718
602WRITE_LINE_MEMBER(tvc_state::tvc_int_ff_set)
719WRITE_LINE_MEMBER(tvc_state::int_ff_set)
603720{
604721   if (state)
605722   {
r32230r32231
608725   }
609726}
610727
611WRITE_LINE_MEMBER(tvc_state::tvc_centronics_ack)
728WRITE_LINE_MEMBER(tvc_state::centronics_ack)
612729{
613730   if (state)
614731      m_centronics_ff = 1;
615732}
616733
617QUICKLOAD_LOAD_MEMBER( tvc_state,tvc64)
734QUICKLOAD_LOAD_MEMBER( tvc_state, tvc64)
618735{
619736   UINT8 first_byte;
620737
r32230r32231
658775   MCFG_MC6845_SHOW_BORDER_AREA(false)
659776   MCFG_MC6845_CHAR_WIDTH(8) /*?*/
660777   MCFG_MC6845_UPDATE_ROW_CB(tvc_state, crtc_update_row)
661   MCFG_MC6845_OUT_CUR_CB(WRITELINE(tvc_state, tvc_int_ff_set))
778   MCFG_MC6845_OUT_CUR_CB(WRITELINE(tvc_state, int_ff_set))
662779
663780   /* internal ram */
664781   MCFG_RAM_ADD(RAM_TAG)
r32230r32231
668785   /* sound hardware */
669786   MCFG_SPEAKER_STANDARD_MONO("mono")
670787   MCFG_SOUND_ADD("custom", TVC_SOUND, 0)
671   MCFG_TVC_SOUND_SNDINT_CALLBACK(WRITELINE(tvc_state, tvc_int_ff_set))
788   MCFG_TVC_SOUND_SNDINT_CALLBACK(WRITELINE(tvc_state, int_ff_set))
672789   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
673790
674791   MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
675   MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tvc_state, tvc_centronics_ack))
792   MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tvc_state, centronics_ack))
676793
677794   MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
678795
679796   /* cartridge */
680   MCFG_CARTSLOT_ADD("cart")
681   MCFG_CARTSLOT_EXTENSION_LIST("crt,rom,bin")
682   MCFG_CARTSLOT_NOT_MANDATORY
683   MCFG_CARTSLOT_INTERFACE("tvc_cart")
797   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "tvc_cart")
798   MCFG_GENERIC_EXTENSIONS("bin,rom,crt")
684799
685800   /* expansion interface */
686801   MCFG_DEVICE_ADD("exp1", TVCEXP_SLOT, 0)
r32230r32231
718833   ROM_REGION( 0x4000, "sys", ROMREGION_ERASEFF )
719834   ROM_LOAD( "tvc12_d4.64k", 0x0000, 0x2000, CRC(834ca9be) SHA1(c333318c1c6185aae2d3dfb86d55e3a4a3071a73))
720835   ROM_LOAD( "tvc12_d3.64k", 0x2000, 0x2000, CRC(71753d02) SHA1(d9a1905cf55c532b3380c83158fb5254ee503829))
721   ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
722   ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
836
723837   ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
724838   ROM_LOAD( "tvc12_d7.64k", 0x2000, 0x2000, CRC(1cbbeac6) SHA1(54b29c9ca9942f04620fbf3edab3b8e3cd21c194))
725839
r32230r32231
735849   ROMX_LOAD( "tvc21_d6.64k", 0x0000, 0x2000, CRC(f197ffce) SHA1(7b27a91504dd864170451949ada5f938d6532cae), ROM_BIOS(2) )
736850   ROMX_LOAD( "tvc21_d4.64k", 0x2000, 0x2000, CRC(b054c0b2) SHA1(c8ca8d5a4d092604de01e2cafc2a2dabe94e6380), ROM_BIOS(2) )
737851
738   ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
739   ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
740852   ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
741853   ROM_LOAD( "tvc22_d7.64k", 0x2000, 0x2000, CRC(05e1c3a8) SHA1(abf119cf947ea32defd08b29a8a25d75f6bd4987))
742854
r32230r32231
747859   ROM_REGION( 0x4000, "sys", ROMREGION_ERASEFF )
748860   ROM_LOAD( "tvcru_d6.bin", 0x0000, 0x2000, CRC(1e0fa0b8) SHA1(9bebb6c8f03f9641bd35c9fd45ffc13a48e5c572))
749861   ROM_LOAD( "tvcru_d4.bin", 0x2000, 0x2000, CRC(bac5dd4f) SHA1(665a1b8c80b6ad82090803621f0c73ef9243c7d4))
750   ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
751   ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
862
752863   ROM_REGION( 0x4000, "ext", ROMREGION_ERASEFF )
753864   ROM_LOAD( "tvcru_d7.bin", 0x2000, 0x2000, CRC(70cde756) SHA1(c49662af9f6653347ead641e85777c3463cc161b))
754865
r32230r32231
757868
758869/* Driver */
759870
760/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT COMPANY   FULLNAME       FLAGS */
761COMP( 1985, tvc64,  0,       0,     tvc,    tvc, driver_device,  0,       "Videoton",   "TVC 64",       GAME_NOT_WORKING | GAME_NO_SOUND)
762COMP( 1985, tvc64p, tvc64,   0,     tvc,    tvc, driver_device,  0,       "Videoton",   "TVC 64+",      GAME_NOT_WORKING | GAME_NO_SOUND)
763COMP( 1985, tvc64pru,tvc64,   0,    tvc,    tvc64pru, driver_device, 0,   "Videoton",   "TVC 64+ (Russian)",        GAME_NOT_WORKING | GAME_NO_SOUND)
871/*    YEAR  NAME      PARENT  COMPAT MACHINE    INPUT     INIT                     COMPANY       FULLNAME       FLAGS */
872COMP( 1985, tvc64,    0,      0,     tvc,       tvc,      driver_device,  0,       "Videoton",   "TVC 64",       GAME_NOT_WORKING | GAME_NO_SOUND)
873COMP( 1985, tvc64p,   tvc64,  0,     tvc,       tvc,      driver_device,  0,       "Videoton",   "TVC 64+",      GAME_NOT_WORKING | GAME_NO_SOUND)
874COMP( 1985, tvc64pru, tvc64,  0,     tvc,       tvc64pru, driver_device,  0,       "Videoton",   "TVC 64+ (Russian)",        GAME_NOT_WORKING | GAME_NO_SOUND)
trunk/src/mess/drivers/x1.c
r32230r32231
960960
961961READ8_MEMBER( x1_state::x1_rom_r )
962962{
963   UINT8 *rom = memregion("cart_img")->base();
964
965963//  printf("%06x\n",m_rom_index[0]<<16|m_rom_index[1]<<8|m_rom_index[2]<<0);
966
967   return rom[m_rom_index[0]<<16|m_rom_index[1]<<8|m_rom_index[2]<<0];
964   if (m_cart->cart_mounted())
965      return m_cart->read_rom(space, (m_rom_index[0] << 16) | (m_rom_index[1] << 8) | (m_rom_index[2] << 0));
966   else
967      return 0;
968968}
969969
970970WRITE8_MEMBER( x1_state::x1_rom_w )
r32230r32231
24782478   MCFG_DEVICE_ADD("fdc", MB8877, 0)
24792479   MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
24802480
2481   MCFG_CARTSLOT_ADD("cart")
2482   MCFG_CARTSLOT_EXTENSION_LIST("rom")
2483   MCFG_CARTSLOT_NOT_MANDATORY
2481   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "x1_cart")
2482   MCFG_GENERIC_EXTENSIONS("bin,rom")
24842483
24852484   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
24862485
r32230r32231
25612560   ROM_REGION(0x20000, "kanji", ROMREGION_ERASEFF)
25622561
25632562   ROM_REGION(0x20000, "raw_kanji", ROMREGION_ERASEFF)
2564
2565   ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
2566   ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
25672563ROM_END
25682564
25692565ROM_START( x1turbo )
r32230r32231
25872583   ROM_LOAD("kanji2.rom", 0x08000, 0x8000, CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
25882584   ROM_LOAD("kanji3.rom", 0x10000, 0x8000, CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
25892585   ROM_LOAD("kanji1.rom", 0x18000, 0x8000, CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
2590
2591   ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
2592   ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
25932586ROM_END
25942587
25952588ROM_START( x1turbo40 )
r32230r32231
26132606   ROM_LOAD("kanji2.rom", 0x08000, 0x8000, CRC(e710628a) SHA1(103bbe459dc8da27a9400aa45b385255c18fcc75) )
26142607   ROM_LOAD("kanji3.rom", 0x10000, 0x8000, CRC(8cae13ae) SHA1(273f3329c70b332f6a49a3a95e906bbfe3e9f0a1) )
26152608   ROM_LOAD("kanji1.rom", 0x18000, 0x8000, CRC(5874f70b) SHA1(dad7ada1b70c45f1e9db11db273ef7b385ef4f17) )
2616
2617   ROM_REGION( 0x1000000, "cart_img", ROMREGION_ERASE00 )
2618   ROM_CART_LOAD("cart", 0x0000, 0xffffff, ROM_OPTIONAL | ROM_NOMIRROR)
26192609ROM_END
26202610
26212611
trunk/src/mess/drivers/tutor.c
r32230r32231
170170#include "cpu/tms9900/tms9995.h"
171171#include "sound/wave.h"
172172#include "video/tms9928a.h"
173#include "imagedev/cartslot.h"
174173#include "imagedev/cassette.h"
175174#include "sound/sn76496.h"
176175#include "bus/centronics/ctronics.h"
176#include "bus/generic/slot.h"
177#include "bus/generic/carts.h"
177178
178179
179180class tutor_state : public driver_device
r32230r32231
182183   tutor_state(const machine_config &mconfig, device_type type, const char *tag)
183184      : driver_device(mconfig, type, tag),
184185      m_maincpu(*this, "maincpu"),
186      m_cart(*this, "cartslot"),
185187      m_cass(*this, "cassette"),
186188      m_centronics(*this, "centronics"),
187      m_cent_data_out(*this, "cent_data_out")
189      m_cent_data_out(*this, "cent_data_out"),
190      m_bank1(*this, "bank1")
188191   {
189192   }
190193
191194   required_device<tms9995_device> m_maincpu;
195   required_device<generic_slot_device> m_cart;
192196   optional_device<cassette_image_device> m_cass;
193197   optional_device<centronics_device> m_centronics;
194198   optional_device<output_latch_device> m_cent_data_out;
199   required_memory_bank m_bank1;   
200   memory_region *m_cart_rom;
201
195202   DECLARE_READ8_MEMBER(key_r);
196203   DECLARE_READ8_MEMBER(tutor_mapper_r);
197204   DECLARE_WRITE8_MEMBER(tutor_mapper_w);
r32230r32231
201208   DECLARE_WRITE8_MEMBER(tutor_printer_w);
202209
203210   DECLARE_READ8_MEMBER(tutor_highmem_r);
204   char m_cartridge_enable;
205   char m_tape_interrupt_enable;
211   int m_tape_interrupt_enable;
206212   emu_timer *m_tape_interrupt_timer;
207   UINT8 m_printer_data;
208   char m_printer_strobe;
209   DECLARE_DRIVER_INIT(tutor);
210   DECLARE_DRIVER_INIT(pyuuta);
211213   virtual void machine_start();
212214   virtual void machine_reset();
213215   TIMER_CALLBACK_MEMBER(tape_interrupt_handler);
214   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( tutor_cart );
215   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( tutor_cart );
216216
217217   int m_centronics_busy;
218   DECLARE_WRITE_LINE_MEMBER( write_centronics_busy );
218   DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
219219};
220220
221221
222/* mapper state */
223
224/* tape interface state */
225
226
227
228/* parallel interface state */
229
230enum
222void tutor_state::machine_start()
231223{
232   basic_base = 0x8000,
233   cartridge_base = 0xe000
234};
235
236
237DRIVER_INIT_MEMBER(tutor_state,tutor)
238{
224   astring region_tag;
225   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
226   
239227   m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this));
228   
229   m_bank1->configure_entry(0, memregion("maincpu")->base() + 0x8000);
230   m_bank1->set_entry(0);
240231
241   membank("bank1")->configure_entry(0, memregion("maincpu")->base() + basic_base);
242   membank("bank1")->configure_entry(1, memregion("maincpu")->base() + cartridge_base);
243   membank("bank1")->set_entry(0);
232   if (m_cart_rom)
233   {
234      m_bank1->configure_entry(1, m_cart_rom->base());
235      m_bank1->set_entry(1);
236   }
244237}
245238
246
247DRIVER_INIT_MEMBER(tutor_state,pyuuta)
248{
249   DRIVER_INIT_CALL(tutor);
250   membank("bank1")->set_entry(1);
251}
252
253void tutor_state::machine_start()
254{
255}
256
257239void tutor_state::machine_reset()
258240{
259   m_cartridge_enable = 0;
260
261241   m_tape_interrupt_enable = 0;
242   m_centronics_busy = 0;
262243
263   m_printer_data = 0;
264   m_printer_strobe = 0;
265
266244   // Enable auto wait states by lowering READY during reset
267245   m_maincpu->set_ready(CLEAR_LINE);
268246}
r32230r32231
300278}
301279
302280
303DEVICE_IMAGE_LOAD_MEMBER( tutor_state, tutor_cart )
304{
305   UINT32 size;
306   UINT8 *ptr = memregion("maincpu")->base();
307
308   if (image.software_entry() == NULL)
309   {
310      size = image.length();
311      if (image.fread(ptr + cartridge_base, size) != size)
312         return IMAGE_INIT_FAIL;
313   }
314   else
315   {
316      size = image.get_software_region_length("rom");
317      memcpy(ptr + cartridge_base, image.get_software_region("rom"), size);
318   }
319
320   return IMAGE_INIT_PASS;
321}
322
323DEVICE_IMAGE_UNLOAD_MEMBER( tutor_state, tutor_cart )
324{
325   memset(memregion("maincpu")->base() + cartridge_base, 0, 0x6000);
326}
327
328281/*
329282    Cartridge mapping:
330283
r32230r32231
346299   switch (offset)
347300   {
348301   case 0x10:
349      /* return 0x42 if we have an cartridge with an alternate boot ROM */
302      /* return 0x42 if we have a cartridge with an alternate boot ROM */
350303      reply = 0;
351304      break;
352305
r32230r32231
369322
370323   case 0x08:
371324      /* disable cartridge ROM, enable BASIC ROM at base >8000 */
372      m_cartridge_enable = 0;
373      membank("bank1")->set_entry(0);
325      m_bank1->set_entry(0);
374326      break;
375327
376328   case 0x0c:
377329      /* enable cartridge ROM, disable BASIC ROM at base >8000 */
378      m_cartridge_enable = 1;
379      membank("bank1")->set_entry(1);
330      if (m_cart_rom)
331         m_bank1->set_entry(1);
380332      break;
381333
382334   default:
383      if (! (offset & 1))
335      if (!(offset & 1))
384336         logerror("unknown port in %s %d\n", __FILE__, __LINE__);
385337      break;
386338   }
r32230r32231
435387
436388   if ((offset & 0x1f) == 0)
437389   {
438      data = (offset & 0x20) != 0;
390      data = BIT(offset, 5);
439391
440392      switch ((offset >> 6) & 3)
441393      {
r32230r32231
446398      case 1:
447399         /* interrupt control??? */
448400         //logerror("ignoring write of %d to cassette port 1\n", data);
449         if (m_tape_interrupt_enable != ! data)
401         if (m_tape_interrupt_enable != data)
450402         {
451            m_tape_interrupt_enable = ! data;
452            if (m_tape_interrupt_enable)
403            m_tape_interrupt_enable = data;
404            if (!m_tape_interrupt_enable)
453405               m_tape_interrupt_timer->adjust(/*attotime::from_hz(44100)*/attotime::zero, 0, attotime::from_hz(44100));
454406            else
455407            {
r32230r32231
618570*/
619571
620572static INPUT_PORTS_START(tutor)
621   PORT_START("LINE0")    /* col 0 */
573   PORT_START("LINE0")
622574      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)               PORT_CHAR('1') PORT_CHAR('!')
623575      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)               PORT_CHAR('2') PORT_CHAR('"')
624576      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)               PORT_CHAR('Q')
r32230r32231
628580      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)               PORT_CHAR('Z')
629581      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)               PORT_CHAR('X')
630582
631   PORT_START("LINE1")    /* col 1 */
583   PORT_START("LINE1")
632584      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)               PORT_CHAR('3') PORT_CHAR('#')
633585      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)               PORT_CHAR('4') PORT_CHAR('$')
634586      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)               PORT_CHAR('E')
r32230r32231
638590      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)               PORT_CHAR('C')
639591      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)               PORT_CHAR('V')
640592
641   PORT_START("LINE2")    /* col 2 */
593   PORT_START("LINE2")
642594      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)               PORT_CHAR('5') PORT_CHAR('%')
643595      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)               PORT_CHAR('6') PORT_CHAR('&')
644596      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)               PORT_CHAR('T')
r32230r32231
648600      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)               PORT_CHAR('B')
649601      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)               PORT_CHAR('N')
650602
651   PORT_START("LINE3")    /* col 3 */
603   PORT_START("LINE3")
652604      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)               PORT_CHAR('7') PORT_CHAR('\'')
653605      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)               PORT_CHAR('8') PORT_CHAR('(')
654606      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)               PORT_CHAR('9') PORT_CHAR(')')
r32230r32231
658610      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)               PORT_CHAR('K')
659611      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)               PORT_CHAR('M')
660612
661   PORT_START("LINE4")    /* col 4 */
613   PORT_START("LINE4")
662614      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)               PORT_CHAR('0') PORT_CHAR('=')
663615      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("-  b") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
664616      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)               PORT_CHAR('O')
r32230r32231
668620      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)           PORT_CHAR(',') PORT_CHAR('<')
669621      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)            PORT_CHAR('.') PORT_CHAR('>')
670622
671   PORT_START("LINE4_alt")    /* col 4 */
623   PORT_START("LINE4_alt")
672624      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(1)
673625      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(1)
674626      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_PLAYER(1) PORT_CODE(KEYCODE_2_PAD)
r32230r32231
676628      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_PLAYER(1) PORT_CODE(KEYCODE_8_PAD)
677629      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_CODE(KEYCODE_6_PAD)
678630
679   PORT_START("LINE5")    /* col 5 */
631   PORT_START("LINE5")
680632      /* Unused? */
681633      PORT_BIT(0x03, IP_ACTIVE_HIGH, IPT_UNUSED)
682634
r32230r32231
687639      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)           PORT_CHAR('/') PORT_CHAR('?')
688640      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'
689641
690   PORT_START("LINE5_alt")    /* col 5 */
642   PORT_START("LINE5_alt")
691643      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(2)
692644      PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(2)
693645      PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_PLAYER(2)
r32230r32231
695647      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_PLAYER(2)
696648      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2)
697649
698   PORT_START("LINE6")    /* col 6 */
650   PORT_START("LINE6")
699651      /* Unused? */
700652      PORT_BIT(0x21, IP_ACTIVE_HIGH, IPT_UNUSED)
701653
r32230r32231
708660      PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Mod") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
709661      PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)           PORT_CHAR(' ')
710662
711   PORT_START("LINE7")    /* col 7 */
663   PORT_START("LINE7")
712664      PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
713665      PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
714666      PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
r32230r32231
776728   MCFG_CASSETTE_ADD( "cassette" )
777729
778730   /* cartridge */
779   MCFG_CARTSLOT_ADD("cart")
780   MCFG_CARTSLOT_NOT_MANDATORY
781   MCFG_CARTSLOT_LOAD(tutor_state, tutor_cart)
782   MCFG_CARTSLOT_UNLOAD(tutor_state, tutor_cart)
783   MCFG_CARTSLOT_INTERFACE("tutor_cart")
731   MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_linear_slot, "tutor_cart")
784732
785733   /* software lists */
786734   MCFG_SOFTWARE_LIST_ADD("cart_list","tutor")
r32230r32231
796744/*
797745  ROM loading
798746*/
747
799748ROM_START(tutor)
800   /*CPU memory space*/
801   ROM_REGION(0x14000,"maincpu",0)
749   ROM_REGION(0x10000, "maincpu", 0)
802750   ROM_LOAD("tutor1.bin", 0x0000, 0x8000, CRC(702c38ba) SHA1(ce60607c3038895e31915d41bb5cf71cb8522d7a))      /* system ROM */
803751   ROM_LOAD("tutor2.bin", 0x8000, 0x4000, CRC(05f228f5) SHA1(46a14a45f6f9e2c30663a2b87ce60c42768a78d0))      /* BASIC ROM */
804752ROM_END
805753
806754
807755ROM_START(pyuuta)
808   /*CPU memory space*/
809   ROM_REGION(0x14000,"maincpu",0)
756   ROM_REGION(0x10000, "maincpu", 0)
810757   ROM_LOAD("tomy29.7", 0x0000, 0x8000, CRC(7553bb6a) SHA1(fa41c45cb6d3daf7435f2a82f77dfa286003255e))      /* system ROM */
811758ROM_END
812759
813760ROM_START(pyuutajr)
814   /*CPU memory space*/
815   ROM_REGION(0x14000,"maincpu",0)
761   ROM_REGION(0x10000, "maincpu", 0)
816762   ROM_LOAD( "ipl.rom", 0x0000, 0x4000, CRC(2ca37e62) SHA1(eebdc5c37d3b532edd5e5ca65eb785269ebd1ac0))      /* system ROM */
817763ROM_END
818764
819/*   YEAR    NAME      PARENT      COMPAT  MACHINE     INPUT      INIT    COMPANY     FULLNAME */
820COMP(1983?,  tutor,    0,          0,      tutor,      tutor, tutor_state,     tutor,  "Tomy",   "Tomy Tutor" , 0)
821COMP(1982,   pyuuta,   tutor,      0,      tutor,      tutor, tutor_state,     pyuuta, "Tomy",   "Tomy Pyuuta" , 0)
822COMP(1983,   pyuutajr, tutor,      0,      pyuutajr,   pyuutajr, tutor_state,  pyuuta, "Tomy",   "Tomy Pyuuta Jr." , 0)
765/*   YEAR    NAME      PARENT      COMPAT  MACHINE     INPUT                      INIT    COMPANY     FULLNAME */
766COMP(1983?,  tutor,    0,          0,      tutor,      tutor,    driver_device,   0,      "Tomy",   "Tomy Tutor" , 0)
767COMP(1982,   pyuuta,   tutor,      0,      tutor,      tutor,    driver_device,   0,      "Tomy",   "Tomy Pyuuta" , 0)
768COMP(1983,   pyuutajr, tutor,      0,      pyuutajr,   pyuutajr, driver_device,   0,      "Tomy",   "Tomy Pyuuta Jr." , 0)
trunk/src/mess/mess.mak
r32230r32231
20032003
20042004$(MESSOBJ)/videoton.a:          \
20052005   $(MESS_DRIVERS)/tvc.o       \
2006   $(MESS_AUDIO)/tvc.o         \
2006   $(MESS_AUDIO)/tvc_snd.o     \
20072007
20082008$(MESSOBJ)/visual.a:            \
20092009   $(MESS_DRIVERS)/v1050.o     \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team