Previous 15994 Revisions Next

r9560 Friday 12th November, 2010 at 20:32:54 UTC by Wilbert Pol
[PHUNSY] Updated driver to use the ascii keyboard implementation from machine/terminal.c.
[src/mess/drivers]phunsy.c

src/mess/drivers/phunsy.c
r9559r9560
88
99#include "emu.h"
1010#include "cpu/s2650/s2650.h"
11#include "machine/terminal.h"
1112
1213
1314#define LOG   1
r9559r9560
2425   UINT8      keyboard_input;
2526   UINT8      q_bank;
2627   UINT8      u_bank;
27   UINT16      old_in[3];
2828   UINT8      ram_1800[0x800];
29   emu_timer   *kb_timer;
3029};
3130
3231
r9559r9560
155154
156155/* Input ports */
157156INPUT_PORTS_START( phunsy )
158   PORT_START( "IN0" )
159   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_NAME("1")
160   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("2")
161   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("3")
162   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_NAME("4")
163   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_NAME("5")
164   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_NAME("6")
165   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_NAME("7")
166   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_NAME("8")
167   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_NAME("9")
168   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_NAME("0")
169   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Spacebar")
170   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Enter")
171   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-")
172
173   PORT_START( "IN1" )
174   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
175   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("B")
176   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
177   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("D")
178   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
179   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
180   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("G")
181   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("H")
182   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("I")
183   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("J")
184   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
185   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("L")
186   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("M")
187   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("N")
188   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("O")
189   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("P")
190
191   PORT_START( "IN2" )
192   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Q")
193   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME("R")
194   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("S")
195   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("T")
196   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_NAME("U")
197   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("V")
198   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("W")
199   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("X")
200   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Y")
201   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Z")
157   PORT_INCLUDE(generic_terminal)
202158INPUT_PORTS_END
203159
204160
205static TIMER_CALLBACK( phunsy_kb_scan )
161static WRITE8_DEVICE_HANDLER( phunsy_kbd_put )
206162{
207   static const char *ports[3] = { "IN0", "IN1", "IN2" };
208   static const UINT8 kb_decode[3][16] =
209   {
210      {
211         0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
212         0x39, 0x30, 0x20, 0x0D, 0x2D, 0xFF, 0xFF, 0xFF
213      },
214      {
215         0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
216         0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50
217      },
218      {
219         0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
220         0x59, 0x5a, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
221      },
222   };
223   phunsy_state *state = machine->driver_data<phunsy_state>();
163   phunsy_state *state = device->machine->driver_data<phunsy_state>();
224164
225   for ( int j = 0; j < 3; j++ )
226   {
227      UINT16 x = 1;
228      UINT16 data = input_port_read( machine, ports[j] );
229
230      for ( int i = 0; i < 16; i++ )
231      {
232         /* Key pressed? */
233         if ( ! ( state->old_in[j] & x ) && ( data & x ) )
234         {
235            if ( kb_decode[j][i] != 0xFF )
236               state->keyboard_input = kb_decode[j][i];
237         }
238         x <<= 1;
239      }
240      state->old_in[j] = data;
241   }
165   state->keyboard_input = data;
242166}
243167
244168
245static DRIVER_INIT( phunsy )
169static GENERIC_TERMINAL_INTERFACE( phunsy_terminal_intf )
246170{
247   phunsy_state *state = machine->driver_data<phunsy_state>();
171   DEVCB_HANDLER(phunsy_kbd_put)
172};
248173
249   state->kb_timer = timer_alloc( machine, phunsy_kb_scan, NULL );
174
175static DRIVER_INIT( phunsy )
176{
250177}
251178
252179
r9559r9560
260187   state->u_bank = 0;
261188   state->q_bank = 0;
262189   state->keyboard_input = 0xFF;
263   state->old_in[0] = 0;
264   state->old_in[1] = 0;
265   state->old_in[2] = 0;
266
267   timer_adjust_periodic( state->kb_timer, machine->primary_screen->frame_period(), 0, machine->primary_screen->frame_period() );
268190}
269191
270192
r9559r9560
354276
355277static MACHINE_CONFIG_START( phunsy, phunsy_state )
356278    /* basic machine hardware */
357    MDRV_CPU_ADD("maincpu",S2650, XTAL_1MHz)
358    MDRV_CPU_PROGRAM_MAP(phunsy_mem)
359    MDRV_CPU_IO_MAP(phunsy_io)   
279   MDRV_CPU_ADD("maincpu",S2650, XTAL_1MHz)
280   MDRV_CPU_PROGRAM_MAP(phunsy_mem)
281   MDRV_CPU_IO_MAP(phunsy_io)   
360282
361    MDRV_MACHINE_RESET(phunsy)
283   MDRV_MACHINE_RESET(phunsy)
362284   
363285    /* video hardware */
364    MDRV_SCREEN_ADD("screen", RASTER)
286   MDRV_SCREEN_ADD("screen", RASTER)
365287   /* Display (page 12 of pdf)
366288      - 8Mhz clock
367289      - 64 6 pixel characters on a line.
r9559r9560
369291      - 313 line display of which 256 are displayed.
370292   */
371293   MDRV_SCREEN_RAW_PARAMS(XTAL_8MHz, 480, 0, 64*6, 313, 0, 256)
372    MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
373    MDRV_PALETTE_LENGTH(8)
374    MDRV_PALETTE_INIT(phunsy)
294   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
295   MDRV_PALETTE_LENGTH(8)
296   MDRV_PALETTE_INIT(phunsy)
375297
376    MDRV_VIDEO_START(phunsy)
377    MDRV_VIDEO_UPDATE(phunsy)
298   MDRV_VIDEO_START(phunsy)
299   MDRV_VIDEO_UPDATE(phunsy)
300
301   MDRV_GENERIC_TERMINAL_ADD("ascii_keyboard",phunsy_terminal_intf)
378302MACHINE_CONFIG_END
379303
380304

Previous 15994 Revisions Next


© 1998-2018 The MESS Team