Previous 199869 Revisions Next

r17668 Thursday 6th September, 2012 at 00:51:10 UTC by Angelo Salese
(MESS) Added keyboard inputs for Pasopia and Pasopia 7, z80pio irq still doesn't work [Angelo Salese]
[src/mess/drivers]pasopia.c pasopia7.c
[src/mess/includes]pasopia.h*

trunk/src/mess/includes/pasopia.h
r0r17668
1#define PASOPIA_KEYBOARD \
2   PORT_START("KEY0") \
3    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) \
4    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) \
5    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) \
6   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
7   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
8   PORT_DIPSETTING(    0x08, DEF_STR( On ) ) \
9   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
10   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
11   PORT_DIPSETTING(    0x10, DEF_STR( On ) ) \
12    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("KANA LOCK") \
13   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
14   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
15   PORT_DIPSETTING(    0x40, DEF_STR( On ) ) \
16   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
17   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
18   PORT_DIPSETTING(    0x80, DEF_STR( On ) ) \
19   PORT_START("KEY1") \
20    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) \
21    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) \
22    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) \
23    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) \
24    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) \
25    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) \
26    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) \
27    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) \
28   PORT_START("KEY2") \
29    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) \
30    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) \
31    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) \
32    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) \
33    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) \
34    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) \
35    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) \
36    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) \
37   PORT_START("KEY3") \
38    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT") \
39    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Status?") \
40    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACKSPACE") \
41    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) \
42   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
43   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
44   PORT_DIPSETTING(    0x10, DEF_STR( On ) ) \
45   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) \
46   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
47   PORT_DIPSETTING(    0x20, DEF_STR( On ) ) \
48   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
49   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
50   PORT_DIPSETTING(    0x40, DEF_STR( On ) ) \
51   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \
52   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
53   PORT_DIPSETTING(    0x80, DEF_STR( On ) ) \
54   PORT_START("KEY4") \
55    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("CLS") \
56   PORT_DIPNAME( 0x02, 0x00, "4" ) \
57   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
58   PORT_DIPSETTING(    0x02, DEF_STR( On ) ) \
59   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) \
60   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
61   PORT_DIPSETTING(    0x04, DEF_STR( On ) ) \
62   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \
63   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
64   PORT_DIPSETTING(    0x08, DEF_STR( On ) ) \
65   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \
66   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
67   PORT_DIPSETTING(    0x10, DEF_STR( On ) ) \
68    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT") \
69   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \
70   PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
71   PORT_DIPSETTING(    0x40, DEF_STR( On ) ) \
72    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") \
73   PORT_START("KEY5") \
74    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1") \
75    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2") \
76    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3") \
77    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4") \
78    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5") \
79    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6") \
80    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7") \
81    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8") \
82   PORT_START("KEY6") \
83    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") \
84    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("2") \
85    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") \
86    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") \
87    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") \
88    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("=") \
89    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^") \
90    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Yen Symbol") \
91   PORT_START("KEY7") \
92    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") \
93    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") \
94    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") \
95    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") \
96    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") \
97    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") \
98    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("@") \
99    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[") \
100   PORT_START("KEY8") \
101    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") \
102    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") \
103    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") \
104    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") \
105    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") \
106    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") \
107    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(":") \
108    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("]") \
109   PORT_START("KEY9") \
110    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") \
111    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") \
112    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") \
113    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") \
114    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") \
115    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") \
116    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") \
117    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") \
118   PORT_START("KEYA") \
119    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") \
120    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") \
121    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") \
122    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") \
123    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") \
124    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") \
125    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") \
126    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(";") \
127   PORT_START("KEYB") \
128    PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") \
129    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") \
130    PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") \
131    PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") \
132    PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") \
133    PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(",") \
134    PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") \
135    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/")
trunk/src/mess/drivers/pasopia7.c
r17667r17668
2323#include "sound/sn76496.h"
2424#include "video/mc6845.h"
2525#include "rendlay.h"
26#include "includes/pasopia.h"
2627
2728class pasopia7_state : public driver_device
2829{
r17667r17668
6364   DECLARE_WRITE8_MEMBER(pasopia7_fdc_w);
6465   DECLARE_READ8_MEMBER(pasopia7_io_r);
6566   DECLARE_WRITE8_MEMBER(pasopia7_io_w);
66   DECLARE_READ8_MEMBER(test_r);
67   DECLARE_WRITE_LINE_MEMBER(testa_w);
68   DECLARE_WRITE_LINE_MEMBER(testb_w);
67   DECLARE_READ8_MEMBER(mux_r);
68   DECLARE_READ8_MEMBER(keyb_r);
69   DECLARE_WRITE8_MEMBER(mux_w);
6970   DECLARE_READ8_MEMBER(crtc_portb_r);
7071   DECLARE_WRITE8_MEMBER(screen_mode_w);
7172   DECLARE_WRITE8_MEMBER(plane_reg_w);
r17667r17668
101102   UINT8 m_screen_type;
102103   int m_addr_latch;
103104   void pasopia_nmi_trap();
105   UINT8 m_mux_data;
104106   DECLARE_DRIVER_INIT(p7_lcd);
105107   DECLARE_DRIVER_INIT(p7_raster);
106108};
r17667r17668
128130      ram_space->write_byte(0xfce1,_charset_); \
129131   } \
130132
131/* cheap kludge to use the keyboard without going nuts with the debugger ... */
132static void fake_keyboard_data(running_machine &machine)
133{
134   address_space *ram_space = machine.device("maincpu")->memory().space(AS_PROGRAM);
135133
136   ram_space->write_byte(0xfda4,0x00); //clear flag
137
138   keyb_press(KEYCODE_Z, 'z');
139   keyb_press(KEYCODE_X, 'x');
140   keyb_press(KEYCODE_C, 'c');
141   keyb_press(KEYCODE_V, 'v');
142   keyb_press(KEYCODE_B, 'b');
143   keyb_press(KEYCODE_N, 'n');
144   keyb_press(KEYCODE_M, 'm');
145
146   keyb_press(KEYCODE_A, 'a');
147   keyb_press(KEYCODE_S, 's');
148   keyb_press(KEYCODE_D, 'd');
149   keyb_press(KEYCODE_F, 'f');
150   keyb_press(KEYCODE_G, 'g');
151   keyb_press(KEYCODE_H, 'h');
152   keyb_press(KEYCODE_J, 'j');
153   keyb_press(KEYCODE_K, 'k');
154   keyb_press(KEYCODE_L, 'l');
155
156   keyb_press(KEYCODE_Q, 'q');
157   keyb_press(KEYCODE_W, 'w');
158   keyb_press(KEYCODE_E, 'e');
159   keyb_press(KEYCODE_R, 'r');
160   keyb_press(KEYCODE_T, 't');
161   keyb_press(KEYCODE_Y, 'y');
162   keyb_press(KEYCODE_U, 'u');
163   keyb_press(KEYCODE_I, 'i');
164   keyb_press(KEYCODE_O, 'o');
165   keyb_press(KEYCODE_P, 'p');
166
167   keyb_press(KEYCODE_0, '0');
168   keyb_press(KEYCODE_1, '1');
169   keyb_press(KEYCODE_2, '2');
170   keyb_press(KEYCODE_3, '3');
171   keyb_press(KEYCODE_4, '4');
172   keyb_press(KEYCODE_5, '5');
173   keyb_press(KEYCODE_6, '6');
174   keyb_press(KEYCODE_7, '7');
175   keyb_press(KEYCODE_8, '8');
176   keyb_press(KEYCODE_9, '9');
177
178   keyb_shift_press(KEYCODE_0, '=');
179   keyb_shift_press(KEYCODE_1, '!');
180   keyb_shift_press(KEYCODE_2, '"');
181   keyb_shift_press(KEYCODE_3, '?');
182   keyb_shift_press(KEYCODE_4, '$');
183   keyb_shift_press(KEYCODE_5, '%');
184   keyb_shift_press(KEYCODE_6, '&');
185   keyb_shift_press(KEYCODE_7, '/');
186   keyb_shift_press(KEYCODE_8, '(');
187   keyb_shift_press(KEYCODE_9, ')');
188
189   keyb_press(KEYCODE_ENTER, 0x0d);
190   keyb_press(KEYCODE_SPACE, ' ');
191   keyb_press(KEYCODE_STOP, '.');
192   keyb_shift_press(KEYCODE_STOP, ':');
193   keyb_press(KEYCODE_BACKSPACE, 0x08);
194   keyb_press(KEYCODE_0_PAD, '@'); //@
195   keyb_press(KEYCODE_COMMA, ',');
196   keyb_shift_press(KEYCODE_COMMA, ';');
197   keyb_press(KEYCODE_MINUS_PAD, '-');
198   keyb_press(KEYCODE_PLUS_PAD, '+');
199   keyb_press(KEYCODE_ASTERISK, '*');
200}
201
202134static void draw_cg4_screen(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int width)
203135{
204136   UINT8 *vram = machine.root_device().memregion("vram")->base();
r17667r17668
376308
377309   bitmap.fill(screen.machine().pens[0], cliprect);
378310
379   fake_keyboard_data(screen.machine());
380
381311   width = state->m_x_width ? 80 : 40;
382312
383313   if(state->m_gfx_mode)
r17667r17668
656586
657587   io_port = offset & 0xff; //trim down to 8-bit bus
658588
659   if(io_port >= 0x30 && io_port <= 0x33)
660      printf("[%02x]\n",offset & 3);
661
662589   if(io_port >= 0x08 && io_port <= 0x0b)
663590      return m_ppi0->read(space, io_port & 3);
664591   else
r17667r17668
679606      return m_ctc->read(space,io_port & 3);
680607   else
681608   if(io_port >= 0x30 && io_port <= 0x33)
682      return m_pio->read_alt(space, io_port & 3);
609      return m_pio->read(space, io_port & 3);
683610//  else if(io_port == 0x3a)                    { SN1 }
684611//  else if(io_port == 0x3b)                    { SN2 }
685612//  else if(io_port == 0x3c)                    { bankswitch }
r17667r17668
708635
709636   io_port = offset & 0xff; //trim down to 8-bit bus
710637
711   if(io_port >= 0x30 && io_port <= 0x33)
712      printf("[%02x] <- %02x\n",offset & 3,data);
713
714638   if(io_port >= 0x08 && io_port <= 0x0b)
715639      m_ppi0->write(space, io_port & 3, data);
716640   else
r17667r17668
733657      m_ctc->write(space, io_port & 3, data);
734658   else
735659   if(io_port >= 0x30 && io_port <= 0x33)
736      m_pio->write_alt(space, io_port & 3, data);
660      m_pio->write(space, io_port & 3, data);
737661   else
738662   if(io_port == 0x3a)
739663      m_sn1->write(space, 0, data);
r17667r17668
766690   AM_RANGE( 0x0000, 0xffff) AM_READWRITE( pasopia7_io_r, pasopia7_io_w )
767691ADDRESS_MAP_END
768692
769/* Input ports */
693/* TODO: where are SPACE and RETURN keys? */
770694static INPUT_PORTS_START( pasopia7 )
695   PASOPIA_KEYBOARD
771696INPUT_PORTS_END
772697
773698static const gfx_layout p7_chars_8x8 =
r17667r17668
819744   DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3)      // ZC/TO2 callback
820745};
821746
822READ8_MEMBER( pasopia7_state::test_r )
747
748READ8_MEMBER( pasopia7_state::mux_r )
823749{
824   return machine().rand();
750   return m_mux_data;
825751}
826752
827WRITE_LINE_MEMBER( pasopia7_state::testa_w )
753READ8_MEMBER( pasopia7_state::keyb_r )
828754{
829   printf("A %02x\n",state);
755   const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" },
756                                    { "KEY4", "KEY5", "KEY6", "KEY7" },
757                                  { "KEY8", "KEY9", "KEYA", "KEYB" } };
758   int i,j;
759   UINT8 res;
760
761   res = 0;
762   for(j=0;j<3;j++)
763   {
764      if(m_mux_data & 0x10 << j)
765      {
766         for(i=0;i<4;i++)
767         {
768            if(m_mux_data & 1 << i)
769               res |= ioport(keynames[j][i])->read();
770         }
771      }
772   }
773
774   return res ^ 0xff;
830775}
831776
832WRITE_LINE_MEMBER( pasopia7_state::testb_w )
777WRITE8_MEMBER( pasopia7_state::mux_w )
833778{
834   printf("B %02x\n",state);
779   m_mux_data = data;
835780}
836781
837782static Z80PIO_INTERFACE( z80pio_intf )
838783{
839784   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
840   DEVCB_DRIVER_MEMBER(pasopia7_state, test_r),
785   DEVCB_DRIVER_MEMBER(pasopia7_state, mux_r),
786   DEVCB_DRIVER_MEMBER(pasopia7_state, mux_w),
841787   DEVCB_NULL,
842   DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testa_w),
843   DEVCB_DRIVER_MEMBER(pasopia7_state, test_r),
788   DEVCB_DRIVER_MEMBER(pasopia7_state, keyb_r),
844789   DEVCB_NULL,
845   DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testb_w)
790   DEVCB_NULL
846791};
847792
848793static const z80_daisy_config p7_daisy[] =
r17667r17668
1049994 *  Sound interface
1050995 *
1051996 *************************************/
1052 
1053 
997
998
1054999//-------------------------------------------------
10551000//  sn76496_config psg_intf
10561001//-------------------------------------------------
trunk/src/mess/drivers/pasopia.c
r17667r17668
1717#include "machine/z80pio.h"
1818#include "video/mc6845.h"
1919#include "machine/keyboard.h"
20#include "includes/pasopia.h"
2021
2122class pasopia_state : public driver_device
2223{
r17667r17668
5556   DECLARE_WRITE_LINE_MEMBER(testa_w);
5657   DECLARE_WRITE_LINE_MEMBER(testb_w);
5758   DECLARE_WRITE8_MEMBER(kbd_put);
59   DECLARE_READ8_MEMBER(mux_r);
60   DECLARE_READ8_MEMBER(keyb_r);
61   DECLARE_WRITE8_MEMBER(mux_w);
5862
5963   UINT8 m_hblank;
6064   UINT16 m_vram_addr;
6165   UINT8 m_vram_latch;
6266   UINT8 m_attr_latch;
6367//  UINT8 m_gfx_mode;
68   UINT8 m_mux_data;
6469   bool m_video_wl;
6570   bool m_ram_bank;
6671   UINT8 *m_p_vram;
r17667r17668
125130//  0x1c - 0x1f something
126131   AM_RANGE(0x20,0x23) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
127132   AM_RANGE(0x28,0x2b) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
128   AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt)
133   AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read, write)
129134//  0x38 printer
130135   AM_RANGE(0x3c,0x3c) AM_WRITE(pasopia_ctrl_w)
131136ADDRESS_MAP_END
132137
133138/* Input ports */
134139static INPUT_PORTS_START( pasopia )
140   PASOPIA_KEYBOARD
135141INPUT_PORTS_END
136142
137143static MACHINE_START(pasopia)
r17667r17668
243249   DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3)      // ZC/TO2 callback
244250};
245251
246READ8_MEMBER( pasopia_state::testa_r )
252READ8_MEMBER( pasopia_state::mux_r )
247253{
248   printf("A R\n");
249   return 0xff;
254   return m_mux_data;
250255}
251256
252READ8_MEMBER( pasopia_state::testb_r )
257READ8_MEMBER( pasopia_state::keyb_r )
253258{
254   printf("B R\n");
255   return 0xff;
256}
259   const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" },
260                                    { "KEY4", "KEY5", "KEY6", "KEY7" },
261                                  { "KEY8", "KEY9", "KEYA", "KEYB" } };
262   int i,j;
263   UINT8 res;
257264
258WRITE_LINE_MEMBER( pasopia_state::testa_w )
259{
260   printf("A %02x\n",state);
265   res = 0;
266   for(j=0;j<3;j++)
267   {
268      if(m_mux_data & 0x10 << j)
269      {
270         for(i=0;i<4;i++)
271         {
272            if(m_mux_data & 1 << i)
273               res |= ioport(keynames[j][i])->read();
274         }
275      }
276   }
277
278   return res ^ 0xff;
261279}
262280
263WRITE_LINE_MEMBER( pasopia_state::testb_w )
281WRITE8_MEMBER( pasopia_state::mux_w )
264282{
265   printf("B %02x\n",state);
283   m_mux_data = data;
266284}
267285
268286static Z80PIO_INTERFACE( z80pio_intf )
269287{
270288   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work?
271   DEVCB_DRIVER_MEMBER(pasopia_state, testa_r), // port A read
272   DEVCB_NULL, // port A write
273   DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testa_w), // ready A
274   DEVCB_DRIVER_MEMBER(pasopia_state, testb_r), // port B read
275   DEVCB_NULL, // port B write
276   DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testb_w) // ready B
289   DEVCB_DRIVER_MEMBER(pasopia_state, mux_r),
290   DEVCB_DRIVER_MEMBER(pasopia_state, mux_w),
291   DEVCB_NULL,
292   DEVCB_DRIVER_MEMBER(pasopia_state, keyb_r),
293   DEVCB_NULL,
294   DEVCB_NULL
277295};
278296
279297static const mc6845_interface mc6845_intf =
r17667r17668
313331   { NULL }
314332};
315333
316// temporary hack
317WRITE8_MEMBER( pasopia_state::kbd_put )
318{
319   address_space *mem = m_maincpu->memory().space(AS_PROGRAM);
320   mem->write_byte(0xfe79, data);
321}
322334
323static ASCII_KEYBOARD_INTERFACE( keyboard_intf )
324{
325   DEVCB_DRIVER_MEMBER(pasopia_state, kbd_put)
326};
327335
328336DRIVER_INIT_MEMBER(pasopia_state,pasopia)
329337{
r17667r17668
364372   MCFG_I8255A_ADD( "ppi8255_2", ppi8255_intf_2 )
365373   MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf )
366374   MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
367
368   // temporary hack
369   MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf)
370375MACHINE_CONFIG_END
371376
372377/* ROM definition */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team