Previous 199869 Revisions Next

r19563 Saturday 15th December, 2012 at 05:18:17 UTC by R. Belmont
(MESS) New system drivers supported:
-----------------------------------
Ensoniq KT-76 [R. Belmont]
[src/mess]mess.lst mess.mak
[src/mess/drivers]esqkt.c*

trunk/src/mess/mess.lst
r19562r19563
182182sd1         // 1990 SD-1
183183sd132       // 1991 SD-1 32
184184sq1         // 1990 SQ-1
185kt76      // 1996 KT-76
185186
186187// Fairchild
187188channelf  // Fairchild Channel F VES - 1976
trunk/src/mess/drivers/esqkt.c
r0r19563
1/***************************************************************************
2
3    esqkt.c - Ensoniq KT-76, KT-88, and E-Prime
4
5    Driver by R. Belmont
6 
7    Hardware:
8       CPU: 68EC020-16 CPU
9       Serial/timers: SCN2681 (MC68681 clone)
10       Sound: 2xES5506
11      Effects: ES5510
12
13    Memory map:
14 
15    0x000000-0x07FFFF   OS ROM
16    0x200000-0x20003F   Master ES5506
17    0x240000-0x24003F   Slave ES5506
18    0x280000-0x2801FF   ES5510
19    0x300000-0x30000F   68681 DUART
20    0xFF0000-0xFFFFFF   OS RAM
21 
22***************************************************************************/
23
24#include "emu.h"
25#include "cpu/m68000/m68000.h"
26#include "sound/es5506.h"
27#include "machine/68681.h"
28
29#include "machine/esqvfd.h"
30
31#define KEYBOARD_HACK (1)   // turn on to play: Z and X are program up/down, A/S/D/F/G/H/J/K/L and Q/W/E/R/T/Y/U play notes
32#define HACK_VIA_MIDI (1)
33
34#if KEYBOARD_HACK
35#if HACK_VIA_MIDI
36static int program = 0;
37#else
38static int shift = 32;
39#endif
40#endif
41
42class esqkt_state : public driver_device
43{
44public:
45   esqkt_state(const machine_config &mconfig, device_type type, const char *tag)
46   : driver_device(mconfig, type, tag),
47        m_maincpu(*this, "maincpu"),
48        m_duart(*this, "duart"),
49        m_sq1vfd(*this, "sq1vfd")
50    { }
51
52    required_device<m68ec020_device> m_maincpu;
53    required_device<duart68681_device> m_duart;
54    required_device<esq2x40_sq1_t> m_sq1vfd;
55
56    virtual void machine_reset();
57
58    DECLARE_READ16_MEMBER(es5510_dsp_r);
59    DECLARE_WRITE16_MEMBER(es5510_dsp_w);
60    DECLARE_READ16_MEMBER(mc68681_r);
61    DECLARE_WRITE16_MEMBER(mc68681_w);
62    DECLARE_READ32_MEMBER(lower_r);
63    DECLARE_WRITE32_MEMBER(lower_w);
64
65    UINT8 m_duart_io;
66    bool  m_bCalibSecondByte;
67
68private:
69    UINT16  es5510_dsp_ram[0x200];
70    UINT32  es5510_gpr[0xc0];
71    UINT32  es5510_dram[1<<24];
72    UINT32  es5510_dol_latch;
73    UINT32  es5510_dil_latch;
74    UINT32  es5510_dadr_latch;
75    UINT32  es5510_gpr_latch;
76    UINT8   es5510_ram_sel;
77
78   UINT32    *m_rom, *m_ram;
79
80public:
81   DECLARE_DRIVER_INIT(kt);
82   DECLARE_INPUT_CHANGED_MEMBER(key_stroke);
83};
84
85void esqkt_state::machine_reset()
86{
87//   m_rom = (UINT32 *)machine().root_device().memregion("osrom")->base();
88//   m_ram = (UINT32 *)machine().root_device().memshare("osram")->ptr();
89
90//   memcpy(m_ram, m_rom, 8);
91//   m_maincpu->reset();
92
93   m_bCalibSecondByte = false;
94}
95
96READ16_MEMBER(esqkt_state::es5510_dsp_r)
97{
98//   printf("%06x: DSP read offset %04x (data is %04x)\n",space.device().safe_pc(),offset,es5510_dsp_ram[offset]);
99
100   switch(offset)
101   {
102      case 0x09: return (es5510_dil_latch >> 16) & 0xff;
103      case 0x0a: return (es5510_dil_latch >> 8) & 0xff;
104      case 0x0b: return (es5510_dil_latch >> 0) & 0xff; //TODO: docs says that this always returns 0
105   }
106
107   if (offset==0x12) return 0;
108
109   if (offset==0x16) return 0x27;
110
111   return es5510_dsp_ram[offset];
112}
113
114WRITE16_MEMBER(esqkt_state::es5510_dsp_w)
115{
116   UINT8 *snd_mem = (UINT8 *)space.machine().root_device().memregion("waverom")->base();
117
118   COMBINE_DATA(&es5510_dsp_ram[offset]);
119
120   switch (offset) {
121      case 0x00: es5510_gpr_latch=(es5510_gpr_latch&0x00ffff)|((data&0xff)<<16); break;
122      case 0x01: es5510_gpr_latch=(es5510_gpr_latch&0xff00ff)|((data&0xff)<< 8); break;
123      case 0x02: es5510_gpr_latch=(es5510_gpr_latch&0xffff00)|((data&0xff)<< 0); break;
124
125      /* 0x03 to 0x08 INSTR Register */
126      /* 0x09 to 0x0b DIL Register (r/o) */
127
128      case 0x0c: es5510_dol_latch=(es5510_dol_latch&0x00ffff)|((data&0xff)<<16); break;
129      case 0x0d: es5510_dol_latch=(es5510_dol_latch&0xff00ff)|((data&0xff)<< 8); break;
130      case 0x0e: es5510_dol_latch=(es5510_dol_latch&0xffff00)|((data&0xff)<< 0); break; //TODO: docs says that this always returns 0xff
131
132      case 0x0f:
133         es5510_dadr_latch=(es5510_dadr_latch&0x00ffff)|((data&0xff)<<16);
134         if(es5510_ram_sel)
135            es5510_dil_latch = es5510_dram[es5510_dadr_latch];
136         else
137            es5510_dram[es5510_dadr_latch] = es5510_dol_latch;
138         break;
139
140      case 0x10: es5510_dadr_latch=(es5510_dadr_latch&0xff00ff)|((data&0xff)<< 8); break;
141      case 0x11: es5510_dadr_latch=(es5510_dadr_latch&0xffff00)|((data&0xff)<< 0); break;
142
143      /* 0x12 Host Control */
144
145      case 0x14: es5510_ram_sel = data & 0x80; /* bit 6 is i/o select, everything else is undefined */break;
146
147      /* 0x16 Program Counter (test purpose, r/o?) */
148      /* 0x17 Internal Refresh counter (test purpose) */
149      /* 0x18 Host Serial Control */
150      /* 0x1f Halt enable (w) / Frame Counter (r) */
151
152      case 0x80: /* Read select - GPR + INSTR */
153   //      logerror("ES5510:  Read GPR/INSTR %06x (%06x)\n",data,es5510_gpr[data]);
154
155         /* Check if a GPR is selected */
156         if (data<0xc0) {
157            //es_tmp=0;
158            es5510_gpr_latch=es5510_gpr[data];
159         }// else es_tmp=1;
160         break;
161
162      case 0xa0: /* Write select - GPR */
163   //      logerror("ES5510:  Write GPR %06x %06x (0x%04x:=0x%06x\n",data,es5510_gpr_latch,data,snd_mem[es5510_gpr_latch>>8]);
164         if (data<0xc0)
165            es5510_gpr[data]=snd_mem[es5510_gpr_latch>>8];
166         break;
167
168      case 0xc0: /* Write select - INSTR */
169   //      logerror("ES5510:  Write INSTR %06x %06x\n",data,es5510_gpr_latch);
170         break;
171
172      case 0xe0: /* Write select - GPR + INSTR */
173   //      logerror("ES5510:  Write GPR/INSTR %06x %06x\n",data,es5510_gpr_latch);
174         break;
175   }
176}
177
178READ32_MEMBER(esqkt_state::lower_r)
179{
180   offset &= 0x3fff;
181
182   // get pointers when 68k resets
183   if (!m_rom)
184   {
185      m_rom = (UINT32 *)machine().root_device().memregion("osrom")->base();
186      m_ram = (UINT32 *)machine().root_device().memshare("osram")->ptr();
187   }
188
189   if (offset < 0x2000)
190   {
191      if (m68k_get_fc(m_maincpu) == 0x6)   // supervisor mode = ROM
192      {
193         return m_rom[offset];
194      }
195      else
196      {
197         return m_ram[offset];
198      }
199   }
200   else
201   {
202      return m_ram[offset];
203   }
204}
205
206WRITE32_MEMBER(esqkt_state::lower_w)
207{
208   offset &= 0x3fff;
209
210   if (offset < 0x2000)
211   {
212      if (m68k_get_fc(m_maincpu) != 0x6)   // if not supervisor mode, RAM
213      {
214         COMBINE_DATA(&m_ram[offset]);
215      }
216      else
217      {
218         logerror("Write to ROM: %x @ %x (fc=%x)\n", data, offset, m68k_get_fc(m_maincpu));
219      }
220   }
221   else
222   {
223      COMBINE_DATA(&m_ram[offset]);
224   }
225}
226
227static ADDRESS_MAP_START( kt_map, AS_PROGRAM, 32, esqkt_state )
228    AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_REGION("osrom", 0)
229   AM_RANGE(0x200000, 0x20003f) AM_DEVREADWRITE8_LEGACY("ensoniq", es5506_r, es5506_w, 0xffffffff)
230   AM_RANGE(0x240000, 0x24003f) AM_DEVREADWRITE8_LEGACY("ensoniq2", es5506_r, es5506_w, 0xffffffff)
231   AM_RANGE(0x280000, 0x2801ff) AM_READWRITE16(es5510_dsp_r, es5510_dsp_w, 0xffffffff)
232    AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0xffffffff)
233    AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram")
234ADDRESS_MAP_END
235
236static void esq5506_otto_irq(device_t *device, int state)
237{
238   #if 0   // 5505/06 IRQ generation needs (more) work
239    esqkt_state *esq5505 = device->machine().driver_data<esqkt_state>();
240    esq5505->m_maincpu->set_input_line(1, state);
241   #endif
242}
243
244static UINT16 esq5506_read_adc(device_t *device)
245{
246    esqkt_state *state = device->machine().driver_data<esqkt_state>();
247
248   switch ((state->m_duart_io & 7) ^ 7)
249   {
250      case 0:      // vRef to check battery
251         return 0x5b00;
252
253      case 2:    // battery voltage
254         return 0x7f00;
255
256      default: // pedal
257         return 0;
258   }
259
260    if (state->m_duart_io & 1)
261    {
262        return 0x5b00;              // vRef
263    }
264    else
265    {
266        return 0x7f00;              // vBattery
267    }
268}
269
270static void duart_irq_handler(device_t *device, int state, UINT8 vector)
271{
272    esqkt_state *esq5505 = device->machine().driver_data<esqkt_state>();
273
274   esq5505->m_maincpu->set_input_line(M68K_IRQ_3, state);
275};
276
277static UINT8 duart_input(device_t *device)
278{
279   UINT8 result = 0;   // DUART input lines are separate from the output lines
280
281    return result;
282}
283
284static void duart_output(device_t *device, UINT8 data)
285{
286    esqkt_state *state = device->machine().driver_data<esqkt_state>();
287
288    state->m_duart_io = data;
289
290//    printf("DUART output: %02x (PC=%x)\n", data, state->m_maincpu->pc());
291}
292
293static void duart_tx(device_t *device, int channel, UINT8 data)
294{
295    esqkt_state *state = device->machine().driver_data<esqkt_state>();
296
297    if (channel == 1)
298    {
299//        printf("ch %d: [%02x] (PC=%x)\n", channel, data, state->m_maincpu->pc());
300
301        state->m_sq1vfd->write_char(data);
302
303      if (state->m_bCalibSecondByte)
304        {
305            if (data == 0xfd)   // calibration request
306            {
307                duart68681_rx_data(state->m_duart, 1, (UINT8)(FPTR)0xff);   // this is the correct response for "calibration OK"
308            }
309            state->m_bCalibSecondByte = false;
310        }
311        else if (data == 0xfb)   // request calibration
312        {
313            state->m_bCalibSecondByte = true;
314        }
315    }
316}
317
318static const duart68681_config duart_config =
319{
320   duart_irq_handler,
321   duart_tx,
322   duart_input,
323   duart_output,
324
325   1000000, 500000,   // IP3, IP4
326   500000, 1000000, // IP5, IP6
327};
328
329#if KEYBOARD_HACK
330INPUT_CHANGED_MEMBER(esqkt_state::key_stroke)
331{
332    #if HACK_VIA_MIDI
333    // send a MIDI Note On
334    if (oldval == 0 && newval == 1)
335    {
336        if ((UINT8)(FPTR)param < 0x40)
337        {
338            int code = (int)(FPTR)param;
339
340            if (code == 0)
341            {
342                program--;
343                if (program < 0)
344                {
345                    program = 0;
346                }
347                printf("program to %d\n", program);
348            }
349            if (code == 1)
350            {
351                program++;
352                if (program > 127)
353                {
354                    program = 127;
355                }
356                printf("program to %d\n", program);
357            }
358
359            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)0xc0); // program change
360            duart68681_rx_data(m_duart, 0, program); // program
361        }
362        else
363        {
364            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)0x90); // note on
365            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)param);
366            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)0x7f);
367        }
368    }
369    else if (oldval == 1 && newval == 0)
370    {
371        if ((UINT8)(FPTR)param != 0x40)
372        {
373            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)0x80); // note off
374            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)param);
375            duart68681_rx_data(m_duart, 0, (UINT8)(FPTR)0x7f);
376        }
377    }
378    #else
379   int val = (UINT8)(FPTR)param;
380
381   if (val < 0x60)
382   {
383      if (oldval == 0 && newval == 1)
384      {
385         if (val == 0 && shift > 0)
386         {
387            shift -= 32;
388            printf("New shift %d\n", shift);
389         }
390         else if (val == 1 && shift < 32)
391         {
392            shift += 32;
393            printf("New shift %d\n", shift);
394         }
395      }
396   }
397   else
398   {
399      val += shift;
400      if (oldval == 0 && newval == 1)
401      {
402         printf("key pressed %d\n", val&0x7f);
403         duart68681_rx_data(m_duart, 1, val);
404         duart68681_rx_data(m_duart, 1, 0x00);
405      }
406      else if (oldval == 1 && newval == 0)
407      {
408   //        printf("key off %x\n", (UINT8)(FPTR)param);
409         duart68681_rx_data(m_duart, 1, val&0x7f);
410         duart68681_rx_data(m_duart, 1, 0x00);
411      }
412   }
413    #endif
414}
415#endif
416
417static const es5506_interface es5506_config =
418{
419   "waverom",   /* Bank 0 */
420   "waverom2",   /* Bank 1 */
421   "waverom3",   /* Bank 0 */
422   "waverom4",   /* Bank 1 */
423   esq5506_otto_irq, /* irq */
424    esq5506_read_adc
425};
426
427static const es5506_interface es5506_2_config =
428{
429   "waverom",   /* Bank 0 */
430   "waverom2",   /* Bank 1 */
431   "waverom3",   /* Bank 0 */
432   "waverom4",   /* Bank 1 */
433   NULL,
434   NULL
435};
436
437static MACHINE_CONFIG_START( kt, esqkt_state )
438   MCFG_CPU_ADD("maincpu", M68EC020, XTAL_16MHz)
439   MCFG_CPU_PROGRAM_MAP(kt_map)
440
441    MCFG_ESQ2x40_SQ1_ADD("sq1vfd")
442
443   MCFG_DUART68681_ADD("duart", 4000000, duart_config)
444
445   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
446   MCFG_SOUND_ADD("ensoniq", ES5506, XTAL_16MHz)
447   MCFG_SOUND_CONFIG(es5506_config)
448   MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
449   MCFG_SOUND_ROUTE(1, "rspeaker", 2.0)
450   MCFG_SOUND_ADD("ensoniq2", ES5506, XTAL_16MHz)
451   MCFG_SOUND_CONFIG(es5506_2_config)
452   MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
453   MCFG_SOUND_ROUTE(1, "rspeaker", 2.0)
454MACHINE_CONFIG_END
455
456static INPUT_PORTS_START( kt )
457#if KEYBOARD_HACK
458#if HACK_VIA_MIDI
459    PORT_START("KEY0")
460    PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x40)
461    PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x41)
462    PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x42)
463    PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x43)
464    PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x44)
465    PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x45)
466    PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x46)
467    PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x47)
468    PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x48)
469    PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x49)
470    PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4a)
471    PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4b)
472    PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4c)
473    PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4d)
474    PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4e)
475    PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x4f)
476
477    PORT_START("KEY1")
478    PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x0)
479    PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x1)
480#else
481    PORT_START("KEY0")
482    PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x80)
483    PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x81)
484    PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x82)
485    PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x83)
486    PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x84)
487    PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x85)
488    PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x86)
489    PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x87)
490    PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x88)
491    PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x89)
492    PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8a)
493    PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8b)
494    PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8c)
495    PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8d)
496    PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8e)
497    PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x8f)
498
499    PORT_START("KEY1")
500    PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x90)
501    PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x91)
502    PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x92)
503    PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x93)
504    PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x94)
505    PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x95)
506    PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x96)
507    PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x97)
508    PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x98)
509    PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x99)
510    PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9a)
511    PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9b)
512    PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9c)
513    PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9d)
514    PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9e)
515    PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0x9f)
516
517    PORT_START("KEY2")
518    PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 0)
519    PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, esqkt_state, key_stroke, 1)
520#endif
521#endif
522INPUT_PORTS_END
523
524ROM_START( kt76 )
525    ROM_REGION(0x80000, "osrom", 0)
526   ROM_LOAD32_WORD( "kt76_162_lo.bin", 0x000000, 0x020000, CRC(1a1ab910) SHA1(dcc80db2297fd25993e090c2e5bb7f947319a8bf) )
527   ROM_LOAD32_WORD( "kt76_162_hi.bin", 0x000002, 0x040000, CRC(de16d236) SHA1(c55fca86453e90e8c34a048bed45817063237370) )
528
529    ROM_REGION(0x200000, "waverom", ROMREGION_ERASE00)
530    ROM_REGION(0x200000, "waverom2", ROMREGION_ERASE00)
531    ROM_REGION(0x200000, "waverom3", ROMREGION_ERASE00)
532    ROM_REGION(0x200000, "waverom4", ROMREGION_ERASE00)
533ROM_END
534
535DRIVER_INIT_MEMBER(esqkt_state, kt)
536{
537    m_duart_io = 0;
538}
539
540CONS( 1996, kt76, 0, 0, kt, kt, esqkt_state, kt, "Ensoniq", "KT-76", GAME_NOT_WORKING )
541
trunk/src/mess/mess.mak
r19562r19563
11081108   $(MESS_DRIVERS)/esq1.o      \
11091109   $(MESS_DRIVERS)/mirage.o    \
11101110   $(MESS_DRIVERS)/esq5505.o   \
1111   $(MESS_DRIVERS)/esqkt.o     \
11111112    $(MESS_MACHINE)/esqvfd.o    \
11121113
11131114$(MESSOBJ)/entex.a:            \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team