Previous 199869 Revisions Next

r23591 Monday 10th June, 2013 at 13:39:02 UTC by Curt Coder
(MESS) ep64: Stop Dave from crashing, give Nick RGB32 and resnet colors. (nw)
[hash]ep64_flop.xml
[src/mess/audio]dave.c dave.h
[src/mess/drivers]ep64.c
[src/mess/includes]enterp.h
[src/mess/machine]ep64exp.h
[src/mess/video]nick.c nick.h

trunk/hash/ep64_flop.xml
r23590r23591
19281928      </part>
19291929   </software>
19301930
1931   <software name="dbase242hu">
1931   <software name="dbase242hu" cloneof="dbase23">
19321932      <description>dBase II (v2.42) (Hun)</description>
19331933      <year>1984</year>
19341934      <publisher>Ashton-Tate/Babsoft</publisher>
trunk/src/mess/machine/ep64exp.h
r23590r23591
103103   DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
104104   DECLARE_WRITE_LINE_MEMBER( wait_w ) { m_write_wait(state); }
105105
106   address_space& program() { return m_dave->space(DAVE_AS_PROGRAM); }
107   address_space& io() { return m_dave->space(DAVE_AS_IO); }
106   address_space& program() { return m_dave->space(AS_PROGRAM); }
107   address_space& io() { return m_dave->space(AS_IO); }
108108
109109protected:
110110   // device-level overrides
trunk/src/mess/video/nick.c
r23590r23591
6767/* "clocks" per line */
6868#define NICK_TOTAL_CLOCKS_PER_LINE  64
6969
70/* Enterprise has 256 colours, all may be on the screen at once!
71 the NICK_GET_RED8, NICK_GET_GREEN8, NICK_GET_BLUE8 macros
72 return a 8-bit colour value for the index specified.  */
7370
74/* given a colour index in range 0..255 gives the Red component */
75#define NICK_GET_RED8(x) \
76   ((      \
77      (BIT(x, 0) << 2) | \
78      (BIT(x, 3) << 1) | \
79      (BIT(x, 6) << 0) \
80   ) << 5)
8171
82/* given a colour index in range 0..255 gives the Red component */
83#define NICK_GET_GREEN8(x) \
84   ((  \
85      (BIT(x, 1) << 2) | \
86      (BIT(x, 4) << 1) | \
87      (BIT(x, 7) << 0) \
88   ) << 5)
89
90/* given a colour index in range 0..255 gives the Red component */
91#define NICK_GET_BLUE8(x) \
92   (( \
93      (BIT(x, 2) << 1) | \
94      (BIT(x, 5) << 0) \
95   ) << 6)
96
97
98
9972//**************************************************************************
10073//  DEVICE DEFINITIONS
10174//**************************************************************************
r23590r23591
11487   AM_RANGE(0x03, 0x03) AM_WRITE(lph_w)
11588ADDRESS_MAP_END
11689
90
11791static ADDRESS_MAP_START( nick_map, AS_0, 8, nick_device )
11892   AM_RANGE(0x0000, 0xffff) AM_RAM
11993ADDRESS_MAP_END
r23590r23591
129103//-------------------------------------------------
130104
131105nick_device::nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
132   : device_t(mconfig, NICK, "NICK", tag, owner, clock),
106   : device_t(mconfig, NICK, "NICK", tag, owner, clock, "nick", __FILE__),
133107     device_memory_interface(mconfig, *this),
134108     m_space_config("vram", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(nick_map)),
135     m_write_virq(*this)
109     m_write_virq(*this),
110     horizontal_clock(0),
111     m_scanline_count(0),
112     m_FIXBIAS(0),
113     m_BORDER(0),
114     m_LPL(0),
115     m_LPH(0),
116     m_LD1(0),
117     m_LD2(0),
118     m_virq(CLEAR_LINE)
136119{
137120}
138121
r23590r23591
143126
144127void nick_device::device_start()
145128{
146   screen_device *screen = machine().first_screen();
147
148   screen->register_screen_bitmap(m_bitmap);
129   m_screen = machine().device<screen_device>(m_screen_tag);
130   m_screen->register_screen_bitmap(m_bitmap);
149131   calc_visible_clocks(ENTERPRISE_SCREEN_WIDTH);
150132
151133   // initialize palette
152   for (int i = 0; i < 256; i++)
153      palette_set_color_rgb(machine(), i, NICK_GET_RED8(i), NICK_GET_GREEN8(i), NICK_GET_BLUE8(i));
134   initialize_palette();
154135
155136   // resolve callbacks
156137   m_write_virq.resolve_safe();
157138
158139   // allocate timers
159140   m_timer_scanline = timer_alloc();
160   m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period());
141   m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period());
161142
162143   // state saving
163144   save_item(NAME(m_scanline_count));
r23590r23591
193174   m_write_virq(CLEAR_LINE);
194175   m_virq = 0;
195176
196   for (int i = 0; i < 256; i++)
197   {
198      int pen_index;
199     
200      pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1);
201      m_pen_idx_4col[i] = pen_index;
202     
203      pen_index =  (BIT(i, 7) << 0) | (BIT(i, 3) << 1) |  (BIT(i, 5) << 2) | (BIT(i, 1) << 3);
204      m_pen_idx_16col[i] = pen_index;
205   }
206
207177   m_scanline_count = 0;
208178}
209179
r23590r23591
214184
215185void nick_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
216186{
217   int scanline = machine().first_screen()->vpos();
187   int scanline = m_screen->vpos();
218188
219189   if (scanline < ENTERPRISE_SCREEN_HEIGHT)
220190   {
221191      /* set write address for line */
222      m_dest = &m_bitmap.pix16(scanline);
192      m_dest = &m_bitmap.pix32(scanline);
223193      m_dest_pos = 0;
224194      m_dest_max_pos = m_bitmap.width();
225195
r23590r23591
244214//  update_screen - update screen
245215//-------------------------------------------------
246216
247UINT32 nick_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
217UINT32 nick_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
248218{
249219   copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
250220
r23590r23591
258228
259229READ8_MEMBER( nick_device::vram_r )
260230{
261   return m_addrspace[0]->read_byte(offset);
231   return this->space().read_byte(offset);
262232}
263233
264234
r23590r23591
268238
269239WRITE8_MEMBER( nick_device::vram_w )
270240{
271   m_addrspace[0]->write_byte(offset, data);
241   this->space().write_byte(offset, data);
272242}
273243
274244
r23590r23591
316286}
317287
318288
289//-------------------------------------------------
290//  initialize_palette -
291//-------------------------------------------------
292
293void nick_device::initialize_palette()
294{
295   const int resistances_rg[] = { RES_R(470), RES_R(220), RES_R(100) };
296   const int resistances_b[] = { RES_R(220), RES_R(82) };
297
298   double color_weights_rg[3], color_weights_b[2];
299
300   compute_resistor_weights(0, 0xff, -1.0,
301                        3, resistances_rg, color_weights_rg, 0, 0,
302                        2, resistances_b,  color_weights_b,  0, 0,
303                        0, 0, 0, 0, 0);
304
305   for (int i = 0; i < 256; i++)
306   {
307      /*
308     
309          bit     description
310     
311          PC0     100R -- RED
312          PC1     100R -- GREEN
313          PC2      82R -- BLUE
314          PC3     220R -- RED
315          PC4     220R -- GREEN
316          PC5     220R -- BLUE
317          PC6     470R -- RED
318          PC7     470R -- GREEN
319     
320      */
321
322      int ra = BIT(i, 0);
323      int rb = BIT(i, 3);
324      int rc = BIT(i, 6);
325
326      int ga = BIT(i, 1);
327      int gb = BIT(i, 4);
328      int gc = BIT(i, 7);
329
330      int ba = BIT(i, 2);
331      int bb = BIT(i, 5);
332
333      UINT8 r = combine_3_weights(color_weights_rg, rc, rb, ra);
334      UINT8 g = combine_3_weights(color_weights_rg, gc, gb, ga);
335      UINT8 b = combine_2_weights(color_weights_b, bb, ba);
336
337      m_palette[i] = MAKE_RGB(r, g, b);
338   }
339
340   for (int i = 0; i < 256; i++)
341   {
342      int pen_index;
343     
344      pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1);
345      m_pen_idx_4col[i] = pen_index;
346     
347      pen_index =  (BIT(i, 7) << 0) | (BIT(i, 3) << 1) |  (BIT(i, 5) << 2) | (BIT(i, 1) << 3);
348      m_pen_idx_16col[i] = pen_index;
349   }
350}
351
319352// MESS specific
320353/* 8-bit pixel write! */
321354void nick_device::write_pixel(int ci)
322355{
323356   if (m_dest_pos < m_dest_max_pos)
324357   {
325      m_dest[m_dest_pos++] = ci;
358      m_dest[m_dest_pos++] = m_palette[ci];
326359   }
327360}
328361
r23590r23591
745778
746779   for (int i = 0; i < clocks_visible; i++)
747780   {
748      buf1 = m_addrspace[0]->read_byte(m_LD1);
781      buf1 = space().read_byte(m_LD1);
749782      m_LD1++;
750783
751      buf2 = m_addrspace[0]->read_byte(m_LD1);
784      buf2 = space().read_byte(m_LD1);
752785      m_LD1++;
753786
754787      write_pixels(buf1, buf1);
r23590r23591
763796
764797   for (int i = 0; i < clocks_visible; i++)
765798   {
766      buf1 = m_addrspace[0]->read_byte(m_LD1);
799      buf1 = space().read_byte(m_LD1);
767800      m_LD1++;
768801
769802      write_pixels_lpixel(buf1, buf1);
r23590r23591
776809
777810   for (int i = 0; i < clocks_visible; i++)
778811   {
779      buf1 = m_addrspace[0]->read_byte(m_LD1);
812      buf1 = space().read_byte(m_LD1);
780813      m_LD1++;
781814
782      buf2 = m_addrspace[0]->read_byte(m_LD2);
815      buf2 = space().read_byte(m_LD2);
783816      m_LD2++;
784817
785818      {
r23590r23591
797830
798831   for (int i = 0; i < clocks_visible; i++)
799832   {
800      buf1 = m_addrspace[0]->read_byte(m_LD1);
833      buf1 = space().read_byte(m_LD1);
801834      m_LD1++;
802      buf2 = m_addrspace[0]->read_byte(ADDR_CH256(m_LD2, buf1));
835      buf2 = space().read_byte(ADDR_CH256(m_LD2, buf1));
803836
804837      write_pixels_lpixel(buf2, buf1);
805838   }
r23590r23591
811844
812845   for (int i = 0; i < clocks_visible; i++)
813846   {
814      buf1 = m_addrspace[0]->read_byte(m_LD1);
847      buf1 = space().read_byte(m_LD1);
815848      m_LD1++;
816      buf2 = m_addrspace[0]->read_byte(ADDR_CH128(m_LD2, buf1));
849      buf2 = space().read_byte(ADDR_CH128(m_LD2, buf1));
817850
818851      write_pixels_lpixel(buf2, buf1);
819852   }
r23590r23591
825858
826859   for (int i = 0; i < clocks_visible; i++)
827860   {
828      buf1 = m_addrspace[0]->read_byte(m_LD1);
861      buf1 = space().read_byte(m_LD1);
829862      m_LD1++;
830      buf2 = m_addrspace[0]->read_byte(ADDR_CH64(m_LD2, buf1));
863      buf2 = space().read_byte(ADDR_CH64(m_LD2, buf1));
831864
832865      write_pixels_lpixel(buf2, buf1);
833866   }
r23590r23591
950983   UINT32 LPT_Addr = ((m_LPL & 0x0ff) << 4) | ((m_LPH & 0x0f) << (8+4));
951984
952985   /* update internal LPT state */
953   m_LPT.SC = m_addrspace[0]->read_byte(LPT_Addr);
954   m_LPT.MB = m_addrspace[0]->read_byte(LPT_Addr + 1);
955   m_LPT.LM = m_addrspace[0]->read_byte(LPT_Addr + 2);
956   m_LPT.RM = m_addrspace[0]->read_byte(LPT_Addr + 3);
957   m_LPT.LD1L = m_addrspace[0]->read_byte(LPT_Addr + 4);
958   m_LPT.LD1H = m_addrspace[0]->read_byte(LPT_Addr + 5);
959   m_LPT.LD2L = m_addrspace[0]->read_byte(LPT_Addr + 6);
960   m_LPT.LD2H = m_addrspace[0]->read_byte(LPT_Addr + 7);
961   m_LPT.COL[0] = m_addrspace[0]->read_byte(LPT_Addr + 8);
962   m_LPT.COL[1] = m_addrspace[0]->read_byte(LPT_Addr + 9);
963   m_LPT.COL[2] = m_addrspace[0]->read_byte(LPT_Addr + 10);
964   m_LPT.COL[3] = m_addrspace[0]->read_byte(LPT_Addr + 11);
965   m_LPT.COL[4] = m_addrspace[0]->read_byte(LPT_Addr + 12);
966   m_LPT.COL[5] = m_addrspace[0]->read_byte(LPT_Addr + 13);
967   m_LPT.COL[6] = m_addrspace[0]->read_byte(LPT_Addr + 14);
968   m_LPT.COL[7] = m_addrspace[0]->read_byte(LPT_Addr + 15);
986   m_LPT.SC = space().read_byte(LPT_Addr);
987   m_LPT.MB = space().read_byte(LPT_Addr + 1);
988   m_LPT.LM = space().read_byte(LPT_Addr + 2);
989   m_LPT.RM = space().read_byte(LPT_Addr + 3);
990   m_LPT.LD1L = space().read_byte(LPT_Addr + 4);
991   m_LPT.LD1H = space().read_byte(LPT_Addr + 5);
992   m_LPT.LD2L = space().read_byte(LPT_Addr + 6);
993   m_LPT.LD2H = space().read_byte(LPT_Addr + 7);
994   m_LPT.COL[0] = space().read_byte(LPT_Addr + 8);
995   m_LPT.COL[1] = space().read_byte(LPT_Addr + 9);
996   m_LPT.COL[2] = space().read_byte(LPT_Addr + 10);
997   m_LPT.COL[3] = space().read_byte(LPT_Addr + 11);
998   m_LPT.COL[4] = space().read_byte(LPT_Addr + 12);
999   m_LPT.COL[5] = space().read_byte(LPT_Addr + 13);
1000   m_LPT.COL[6] = space().read_byte(LPT_Addr + 14);
1001   m_LPT.COL[7] = space().read_byte(LPT_Addr + 15);
9691002}
9701003
9711004/* call here to render a line of graphics */
r23590r23591
9771010
9781011   if (m_virq && !(m_LPT.MB & NICK_MB_VIRQ))
9791012   {
980      screen_device *screen = machine().first_screen();
981      m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period());
1013      m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period());
9821014   }
9831015
9841016   m_virq = (m_LPT.MB & NICK_MB_VIRQ) ? 1 : 0;
trunk/src/mess/video/nick.h
r23590r23591
1313#define __NICK__
1414
1515#include "emu.h"
16#include "machine/rescap.h"
17#include "video/resnet.h"
1618
1719
1820
r23590r23591
2830   MCFG_SCREEN_VISIBLE_AREA(0, ENTERPRISE_SCREEN_WIDTH-1, 0, ENTERPRISE_SCREEN_HEIGHT-1) \
2931   MCFG_SCREEN_UPDATE_DEVICE(_tag, nick_device, screen_update) \
3032   MCFG_DEVICE_ADD(_tag, NICK, _clock) \
31   downcast<nick_device *>(device)->set_virq_callback(DEVCB2_##_virq); \
32   MCFG_PALETTE_LENGTH(256)
33   downcast<nick_device *>(device)->set_screen_tag(_screen_tag); \
34   downcast<nick_device *>(device)->set_virq_callback(DEVCB2_##_virq);
3335
3436
3537/* there are 64us per line, although in reality
r23590r23591
7072   // construction/destruction
7173   nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
7274
75   void set_screen_tag(const char *screen_tag) { m_screen_tag = screen_tag; }
7376   template<class _virq> void set_virq_callback(_virq virq) { m_write_virq.set_callback(virq); }
7477
7578   virtual DECLARE_ADDRESS_MAP(vram_map, 8);
7679   virtual DECLARE_ADDRESS_MAP(vio_map, 8);
7780
78   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
81   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
7982
8083protected:
8184   // device-level overrides
r23590r23591
99102private:
100103   devcb2_write_line m_write_virq;
101104
105   void initialize_palette();
106
102107   void write_pixel(int ci);
103108   void calc_visible_clocks(int width);
104109   void init();
r23590r23591
138143   
139144   LPT_ENTRY   m_LPT;
140145   
141   UINT16 *m_dest;
146   UINT32 *m_dest;
142147   int m_dest_pos;
143148   int m_dest_max_pos;
144149   
145   UINT8 m_reg[16];
150   UINT8 m_reg[4];
146151   
147152   /* first clock visible on left hand side */
148153   int m_first_visible_clock;
r23590r23591
156161
157162   int m_virq;
158163
159   bitmap_ind16 m_bitmap;
164   const char *m_screen_tag;
165   screen_device *m_screen;
166   bitmap_rgb32 m_bitmap;
167   rgb_t m_palette[256];
160168
161169   emu_timer *m_timer_scanline;
162170};
trunk/src/mess/includes/enterp.h
r23590r23591
1#ifndef __ENTERP_H__
2#define __ENTERP_H__
3
4
5#define NICK_PALETTE_SIZE   256
6
7#include "machine/ram.h"
8#include "audio/dave.h"
9#include "video/epnick.h"
10
11class ep_state : public driver_device
12{
13public:
14   ep_state(const machine_config &mconfig, device_type type, const char *tag)
15      : driver_device(mconfig, type, tag),
16      m_maincpu(*this, "maincpu"),
17      m_dave(*this, "custom"),
18      m_nick(*this, "nick"),
19      m_ram(*this, RAM_TAG),
20      m_joy(*this, "JOY1") { }
21
22   required_device<cpu_device> m_maincpu;
23   required_device<dave_sound_device> m_dave;
24   required_device<nick_device> m_nick;
25   required_device<ram_device> m_ram;
26   required_ioport m_joy;
27
28   UINT8 exdos_card_value;  /* state of the wd1770 irq/drq lines */
29   UINT8 keyboard_line;     /* index of keyboard line to read */
30
31   ioport_port *m_key[10];
32
33   DECLARE_READ8_MEMBER(exdos_card_r);
34   DECLARE_WRITE8_MEMBER(exdos_card_w);
35   virtual void machine_start();
36   virtual void machine_reset();
37   virtual void palette_init();
38   UINT32 screen_update_enterp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
39   DECLARE_WRITE8_MEMBER(enterprise_dave_reg_write);
40   DECLARE_READ8_MEMBER(enterprise_dave_reg_read);
41   DECLARE_WRITE_LINE_MEMBER(enterp_wd1770_intrq_w);
42   DECLARE_WRITE_LINE_MEMBER(enterp_wd1770_drq_w);
43   void enterprise_update_memory_page(address_space &space, offs_t page, int index);
44};
45
46
47#endif /* __ENTERP_H__ */
trunk/src/mess/drivers/ep64.c
r23590r23591
312312//  ADDRESS_MAP( dave_64k_mem )
313313//-------------------------------------------------
314314
315static ADDRESS_MAP_START( dave_64k_mem, DAVE_AS_PROGRAM, 8, ep64_state )
315static ADDRESS_MAP_START( dave_64k_mem, AS_PROGRAM, 8, ep64_state )
316316   AM_RANGE(0x000000, 0x007fff) AM_ROM AM_REGION(Z80_TAG, 0)
317317   AM_RANGE(0x010000, 0x01ffff) AM_ROM AM_REGION("cart", 0)
318318   AM_RANGE(0x3f0000, 0x3fffff) AM_DEVICE(NICK_TAG, nick_device, vram_map)
r23590r23591
323323//  ADDRESS_MAP( dave_128k_mem )
324324//-------------------------------------------------
325325
326static ADDRESS_MAP_START( dave_128k_mem, DAVE_AS_PROGRAM, 8, ep64_state )
326static ADDRESS_MAP_START( dave_128k_mem, AS_PROGRAM, 8, ep64_state )
327327   AM_IMPORT_FROM(dave_64k_mem)
328328   AM_RANGE(0x3e0000, 0x3effff) AM_RAM
329329ADDRESS_MAP_END
r23590r23591
333333//  ADDRESS_MAP( dave_io )
334334//-------------------------------------------------
335335
336static ADDRESS_MAP_START( dave_io, DAVE_AS_IO, 8, ep64_state )
336static ADDRESS_MAP_START( dave_io, AS_IO, 8, ep64_state )
337337   ADDRESS_MAP_GLOBAL_MASK(0xff)
338338   AM_RANGE(0x80, 0x8f) AM_DEVICE(NICK_TAG, nick_device, vio_map)
339339   AM_RANGE(0xb5, 0xb5) AM_READWRITE(rd0_r, wr0_w)
r23590r23591
353353
354354static INPUT_PORTS_START( ep64 )
355355   PORT_START("Y0")
356   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)            PORT_CHAR('n') PORT_CHAR('N')
357   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE)        PORT_CHAR('\\') PORT_CHAR('|')
358   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)            PORT_CHAR('b') PORT_CHAR('B')
359   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)            PORT_CHAR('c') PORT_CHAR('C')
360   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)            PORT_CHAR('v') PORT_CHAR('V')
361   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)            PORT_CHAR('x') PORT_CHAR('X')
362   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)            PORT_CHAR('z') PORT_CHAR('Z')
363   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT)       PORT_CHAR(UCHAR_SHIFT_1)
356   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
357   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|')
358   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
359   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
360   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
361   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
362   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
363   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
364364
365365   PORT_START("Y1")
366   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)            PORT_CHAR('h') PORT_CHAR('H')
367   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LOCK") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
368   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)            PORT_CHAR('g') PORT_CHAR('G')
369   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)            PORT_CHAR('d') PORT_CHAR('D')
370   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)            PORT_CHAR('f') PORT_CHAR('F')
371   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)            PORT_CHAR('s') PORT_CHAR('S')
372   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)            PORT_CHAR('a') PORT_CHAR('A')
373   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL)     PORT_CHAR(UCHAR_SHIFT_2)
366   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
367   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
368   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
369   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
370   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
371   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
372   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
373   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL)
374374
375375   PORT_START("Y2")
376   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)            PORT_CHAR('u') PORT_CHAR('U')
377   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)            PORT_CHAR('q') PORT_CHAR('Q')
378   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)            PORT_CHAR('y') PORT_CHAR('Y')
379   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)            PORT_CHAR('r') PORT_CHAR('R')
380   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)            PORT_CHAR('t') PORT_CHAR('T')
381   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)            PORT_CHAR('e') PORT_CHAR('E')
382   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)            PORT_CHAR('w') PORT_CHAR('W')
383   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB)          PORT_CHAR('\t')
376   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
377   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
378   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
379   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
380   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
381   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
382   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
383   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
384384
385385   PORT_START("Y3")
386   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)            PORT_CHAR('7') PORT_CHAR('\'')
387   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)            PORT_CHAR('1') PORT_CHAR('!')
388   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)            PORT_CHAR('6') PORT_CHAR('&')
389   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)            PORT_CHAR('4') PORT_CHAR('$')
390   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)            PORT_CHAR('5') PORT_CHAR('%')
391   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('\xA3')
392   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)            PORT_CHAR('2') PORT_CHAR('"')
393   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)          PORT_CHAR(UCHAR_MAMEKEY(ESC))
386   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
387   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
388   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
389   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
390   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
391   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(0x00a3)
392   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
393   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
394394
395395   PORT_START("Y4")
396   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4)           PORT_CHAR(UCHAR_MAMEKEY(F4))
397   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8)           PORT_CHAR(UCHAR_MAMEKEY(F8))
398   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)           PORT_CHAR(UCHAR_MAMEKEY(F3))
399   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6)           PORT_CHAR(UCHAR_MAMEKEY(F6))
400   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5)           PORT_CHAR(UCHAR_MAMEKEY(F5))
401   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7)           PORT_CHAR(UCHAR_MAMEKEY(F7))
402   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2)           PORT_CHAR(UCHAR_MAMEKEY(F2))
403   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)           PORT_CHAR(UCHAR_MAMEKEY(F1))
396   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
397   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
398   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
399   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
400   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
401   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
402   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
403   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
404404
405405   PORT_START("Y5")
406   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)            PORT_CHAR('8') PORT_CHAR('(')
407   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
408   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)            PORT_CHAR('9') PORT_CHAR(')')
409   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS)        PORT_CHAR('-') PORT_CHAR('=')
410   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)            PORT_CHAR('0') PORT_CHAR('_')
411   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS)       PORT_CHAR('^') PORT_CHAR('~')
412   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
413   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
406   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
407   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
408   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
409   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
410   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_')
411   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~')
412   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
413   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
414414
415415   PORT_START("Y6")
416   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)            PORT_CHAR('j') PORT_CHAR('J')
417   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
418   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)            PORT_CHAR('k') PORT_CHAR('K')
419   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)        PORT_CHAR(';') PORT_CHAR('+')
420   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)            PORT_CHAR('l') PORT_CHAR('L')
421   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE)        PORT_CHAR(':') PORT_CHAR('*')
422   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH)    PORT_CHAR(']') PORT_CHAR('}')
423   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
416   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
417   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
418   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
419   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
420   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
421   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
422   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}')
423   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
424424
425   /* Notice that, in fact, ep128 only had the built-in joystick and no cursor arrow keys on the keyboard */
426425   PORT_START("Y7")
427   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("STOP")           PORT_CODE(KEYCODE_END)              PORT_CHAR(UCHAR_MAMEKEY(F10))
428   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN)     PORT_CODE(JOYCODE_Y_DOWN_SWITCH)    PORT_CHAR(UCHAR_MAMEKEY(DOWN))
429   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT)    PORT_CODE(JOYCODE_X_RIGHT_SWITCH)   PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
430   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP)       PORT_CODE(JOYCODE_Y_UP_SWITCH)      PORT_CHAR(UCHAR_MAMEKEY(UP))
431   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("HOLD")           PORT_CODE(KEYCODE_HOME)             PORT_CHAR(UCHAR_MAMEKEY(F11))
432   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT)     PORT_CODE(JOYCODE_X_LEFT_SWITCH)    PORT_CHAR(UCHAR_MAMEKEY(LEFT))
433   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER)                                        PORT_CHAR(13)
434   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ALT")            PORT_CODE(KEYCODE_LALT)             PORT_CHAR(UCHAR_MAMEKEY(LALT))
426   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END)
427   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
428   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
429   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
430   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HOLD") PORT_CODE(KEYCODE_HOME)
431   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
432   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r')
433   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
435434
436435   PORT_START("Y8")
437   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)            PORT_CHAR('m') PORT_CHAR('M')
438   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL)          PORT_CHAR(UCHAR_MAMEKEY(DEL))
439   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)        PORT_CHAR(',') PORT_CHAR('<')
440   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)        PORT_CHAR('/') PORT_CHAR('?')
441   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)         PORT_CHAR('.') PORT_CHAR('>')
442   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT (right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
443   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)        PORT_CHAR(' ')
444   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT)       PORT_CHAR(UCHAR_MAMEKEY(INSERT))
436   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
437   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
438   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
439   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
440   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
441   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
442   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
443   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
445444
446445   PORT_START("Y9")
447   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)            PORT_CHAR('i') PORT_CHAR('I')
448   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
449   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)            PORT_CHAR('o') PORT_CHAR('O')
450   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE)    PORT_CHAR('@') PORT_CHAR('`')
451   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)            PORT_CHAR('p') PORT_CHAR('P')
452   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE)   PORT_CHAR('[') PORT_CHAR('{')
453   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
454   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
446   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
447   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
448   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
449   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`')
450   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
451   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{')
452   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
453   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
455454INPUT_PORTS_END
456455
457456
r23590r23591
572571
573572static MACHINE_CONFIG_DERIVED( ep128, ep64 )
574573   MCFG_DEVICE_MODIFY(DAVE_TAG)
575   MCFG_DEVICE_ADDRESS_MAP(AS_0, dave_128k_mem)
574   MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, dave_128k_mem)
576575
577576   // internal RAM
578577   MCFG_RAM_MODIFY(RAM_TAG)
trunk/src/mess/audio/dave.c
r23590r23591
3636   AM_RANGE(0x0000, 0xffff) AM_READWRITE(io_r, io_w)
3737ADDRESS_MAP_END
3838
39static ADDRESS_MAP_START( program_map, DAVE_AS_PROGRAM, 8, dave_device )
39
40static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, dave_device )
4041ADDRESS_MAP_END
4142
42static ADDRESS_MAP_START( io_map, DAVE_AS_IO, 8, dave_device )
43static ADDRESS_MAP_START( io_map, AS_IO, 8, dave_device )
4344ADDRESS_MAP_END
4445
4546
r23590r23591
5354//-------------------------------------------------
5455
5556dave_device::dave_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
56   : device_t(mconfig, DAVE, "DAVE", tag, owner, clock),
57   : device_t(mconfig, DAVE, "DAVE", tag, owner, clock, "dave", __FILE__),
5758     device_memory_interface(mconfig, *this),
5859     device_sound_interface(mconfig, *this),
5960     m_program_space_config("program", ENDIANNESS_LITTLE, 8, 22, 0, *ADDRESS_MAP_NAME(program_map)),
60     m_io_space_config("I/O", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)),
61     m_io_space_config("i/o", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)),
6162     m_write_irq(*this),
6263     m_write_lh(*this),
6364     m_write_rh(*this)
r23590r23591
164165{
165166   switch (spacenum)
166167   {
167      case DAVE_AS_PROGRAM: return &m_program_space_config;
168      case DAVE_AS_IO: return &m_io_space_config;
168      case AS_PROGRAM: return &m_program_space_config;
169      case AS_IO: return &m_io_space_config;
169170      default: return NULL;
170171   }
171172}
r23590r23591
302303   UINT8 segment = m_segment[offset >> 14];
303304   offset = (segment << 14) | (offset & 0x3fff);
304305
305   return m_addrspace[0]->read_byte(offset);
306   return this->space(AS_PROGRAM).read_byte(offset);
306307}
307308
308309
r23590r23591
315316   UINT8 segment = m_segment[offset >> 14];
316317   offset = (segment << 14) | (offset & 0x3fff);
317318
318   m_addrspace[0]->write_byte(offset, data);
319   this->space(AS_PROGRAM).write_byte(offset, data);
319320}
320321
321322
r23590r23591
365366      break;
366367
367368   default:
368      data = m_addrspace[1]->read_byte(offset);
369      data = this->space(AS_IO).read_byte(offset);
369370   }
370371
371372   return data;
r23590r23591
403404            {
404405               case 0:
405406               {
406                  count = (data & 0x0ff) | ((m_regs[offset + 1] & 0x0f)<<8);
407                  count = (data & 0x0ff) | ((m_regs[(offset & 0x1f) + 1] & 0x0f)<<8);
407408               }
408409               break;
409410
410411               case 1:
411412               {
412                  count = (m_regs[offset - 1] & 0x0ff) | ((data & 0x0f)<<8);
413                  count = (m_regs[(offset & 0x1f) - 1] & 0x0ff) | ((data & 0x0f)<<8);
413414
414415               }
415416               break;
r23590r23591
420421
421422            m_period[channel_index] = ((STEP  * machine().sample_rate())/125000) * count;
422423
423            m_regs[offset & 0x01f] = data;
424            m_regs[offset & 0x1f] = data;
424425         }
425426         break;
426427
r23590r23591
444445            /* update mame version of volume from data written */
445446            /* 0x03f->0x07e00. Max is 0x07fff */
446447            /* I believe the volume is linear - to be checked! */
447            m_mame_volumes[offset - 8] = (data & 0x03f) << 9;
448            m_mame_volumes[(offset & 0x1f) - 8] = (data & 0x03f) << 9;
448449
449            m_regs[offset & 0x01f] = data;
450            m_regs[offset & 0x1f] = data;
450451         }
451452         break;
452453
r23590r23591
570571            m_level_and[7] = 0xffff;
571572         }
572573
573         m_regs[offset & 0x01f] = data;
574         m_regs[offset & 0x1f] = data;
574575      }
575576      break;
576577
577578   case 0xb0: case 0xb1: case 0xb2: case 0xb3:
578579      m_segment[offset & 0x03] = data;
579580
580      m_regs[offset & 0x01f] = data;
581      m_regs[offset & 0x1f] = data;
581582      break;
582583
583584   case 0xb4:
r23590r23591
585586      m_irq_status &= ~(m_irq_enable & IRQ_LATCH);
586587      update_interrupt();
587588
588      m_regs[offset & 0x01f] = data;
589      m_regs[offset & 0x1f] = data;
589590      break;
590591
591592   case 0xbf:
592      m_regs[offset & 0x01f] = data;
593      m_regs[offset & 0x1f] = data;
593594      break;
594595
595596   default:
596      m_addrspace[1]->write_byte(offset, data);
597      this->space(AS_IO).write_byte(offset, data);
597598   }
598599}
599600
trunk/src/mess/audio/dave.h
r23590r23591
2020//  MACROS / CONSTANTS
2121///*************************************************************************
2222
23#define DAVE_AS_PROGRAM      AS_0
24#define DAVE_AS_IO         AS_1
2523
2624
27
2825///*************************************************************************
2926//  INTERFACE CONFIGURATION MACROS
3027///*************************************************************************
r23590r23591
3229#define MCFG_DAVE_ADD(_tag, _clock, _irq, _program_map, _io_map) \
3330    MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") \
3431   MCFG_SOUND_ADD(_tag, DAVE, _clock) \
35   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) \
36   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) \
37    MCFG_DEVICE_ADDRESS_MAP(DAVE_AS_PROGRAM, _program_map) \
38    MCFG_DEVICE_ADDRESS_MAP(DAVE_AS_IO, _io_map) \
32   MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) \
33   MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) \
34    MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, _program_map) \
35    MCFG_DEVICE_ADDRESS_MAP(AS_IO, _io_map) \
3936   downcast<dave_device *>(device)->set_irq_callback(DEVCB2_##_irq);
4037
4138

Previous 199869 Revisions Next


© 1997-2024 The MAME Team