Previous 15994 Revisions Next

r818 Monday 13th August, 2007 at 08:01:20 UTC by Curt Coder
[ATARIST] Connected keyboard/joystick to IKBD
[src/mess/drivers]atarist.c

src/mess/drivers/atarist.c
r817r818
2222
2323   - US keyboard layout
2424   - add serial communications to HD63701 cpu core
25   - connect keyboard ports to ikbd
2625   - connect mouse to ikbd
2726   - floppy image device_load
2827   - MFP interrupts
r817r818
219218/* IKBD */
220219
221220static UINT8 acia_ikbd_rx, acia_ikbd_tx;
222static UINT8 keylatch;
223static int joylatch;
221static UINT8 ikbd_keymask;
222static int ikbd_joyen;
224223
225static WRITE8_HANDLER( hd6301_port1_w )
224static WRITE8_HANDLER( ikbd_port1_w )
226225{
227   keylatch = data;
226   ikbd_keymask = data;
228227}
229228
230static READ8_HANDLER( hd6301_port2_r )
229static READ8_HANDLER( ikbd_port2_r )
231230{
232231   /*
233232     
r817r818
241240
242241   */
243242
244   UINT8 data = 0;
245     
246   data |= acia_ikbd_tx << 3;
247   
248   return data;
243   return readinputportbytag("JOY1") | (acia_ikbd_tx << 3);
249244}
250245
251static WRITE8_HANDLER( hd6301_port2_w )
246static WRITE8_HANDLER( ikbd_port2_w )
252247{
253248   /*
254249     
r817r818
262257
263258   */
264259
265   joylatch = data & 0x01;
260   ikbd_joyen = data & 0x01;
266261   acia_ikbd_rx = (data & 0x10) >> 4;
267262}
268263
269static WRITE8_HANDLER( hd6301_port_3_w )
264static WRITE8_HANDLER( ikbd_port_3_w )
270265{
271   // 0x01 CAPS LOCK led
266   set_led_status(1, data & 0x01);
272267}
273268
274static READ8_HANDLER( hd6301_port_3_r )
269static READ8_HANDLER( ikbd_port_3_r )
275270{
276271   /*
277272     
r817r818
288283
289284   */
290285
291   return 0xff;
286   UINT8 data = 0xff;
287
288   if ((readinputportbytag("P31") & ikbd_keymask) == ikbd_keymask) data -= 0x02;
289   if ((readinputportbytag("P32") & ikbd_keymask) == ikbd_keymask) data -= 0x04;
290   if ((readinputportbytag("P33") & ikbd_keymask) == ikbd_keymask) data -= 0x08;
291   if ((readinputportbytag("P34") & ikbd_keymask) == ikbd_keymask) data -= 0x10;
292   if ((readinputportbytag("P35") & ikbd_keymask) == ikbd_keymask) data -= 0x20;
293   if ((readinputportbytag("P36") & ikbd_keymask) == ikbd_keymask) data -= 0x40;
294   if ((readinputportbytag("P37") & ikbd_keymask) == ikbd_keymask) data -= 0x80;
295
296   return data;
292297}
293298
294static READ8_HANDLER( hd6301_port_4_r )
299static READ8_HANDLER( ikbd_port_4_r )
295300{
296301   /*
297302     
298303      bit      description
299304     
300      0      JOY 0-1 or keyboard row input
301      1      JOY 0-2 or keyboard row input
302      2      JOY 0-3 or keyboard row input
303      3      JOY 0-4 or keyboard row input
305      0      JOY 0-1 or mouse XB or keyboard row input
306      1      JOY 0-2 or mouse XA or keyboard row input
307      2      JOY 0-3 or mouse YA or keyboard row input
308      3      JOY 0-4 or mouse YB or keyboard row input
304309      4      JOY 1-1 or keyboard row input
305310      5      JOY 1-2 or keyboard row input
306311      6      JOY 1-3 or keyboard row input
r817r818
308313
309314   */
310315
311   return 0xff;
316   if (ikbd_joyen)
317   {
318      UINT8 data = 0xff;
319
320      if ((readinputportbytag("P40") & ikbd_keymask) == ikbd_keymask) data -= 0x01;
321      if ((readinputportbytag("P41") & ikbd_keymask) == ikbd_keymask) data -= 0x02;
322      if ((readinputportbytag("P42") & ikbd_keymask) == ikbd_keymask) data -= 0x04;
323      if ((readinputportbytag("P43") & ikbd_keymask) == ikbd_keymask) data -= 0x08;
324      if ((readinputportbytag("P44") & ikbd_keymask) == ikbd_keymask) data -= 0x10;
325      if ((readinputportbytag("P45") & ikbd_keymask) == ikbd_keymask) data -= 0x20;
326      if ((readinputportbytag("P46") & ikbd_keymask) == ikbd_keymask) data -= 0x40;
327      if ((readinputportbytag("P47") & ikbd_keymask) == ikbd_keymask) data -= 0x80;
328
329      return data;
330   }
331   else
332   {
333      if (readinputportbytag("config") & 0x01)
334      {
335         UINT8 data = readinputportbytag("JOY0") & 0xf0;
336
337         return data;
338      }
339      else
340      {
341         return readinputportbytag("JOY0");
342      }
343   }
312344}
313345
314346/* Memory Maps */
315347
316static ADDRESS_MAP_START(ikbd_map, ADDRESS_SPACE_PROGRAM, 8)
348static ADDRESS_MAP_START( ikbd_map, ADDRESS_SPACE_PROGRAM, 8 )
317349   AM_RANGE(0x0000, 0x001f) AM_READWRITE(hd63701_internal_registers_r, hd63701_internal_registers_w)
318350   AM_RANGE(0x0080, 0x00ff) AM_RAM
319351   AM_RANGE(0xf000, 0xffff) AM_ROM
320352ADDRESS_MAP_END
321353
322static ADDRESS_MAP_START(ikbd_io_map, ADDRESS_SPACE_IO, 8)
323   AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(hd6301_port1_w)
324   AM_RANGE(HD63701_PORT2, HD63701_PORT2) AM_READWRITE(hd6301_port2_r, hd6301_port2_w)
325   AM_RANGE(HD63701_PORT3, HD63701_PORT3) AM_READ(hd6301_port_3_r)
326   AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(hd6301_port_4_r)
354static ADDRESS_MAP_START( ikbd_io_map, ADDRESS_SPACE_IO, 8 )
355   AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(ikbd_port1_w)
356   AM_RANGE(HD63701_PORT2, HD63701_PORT2) AM_READWRITE(ikbd_port2_r, ikbd_port2_w)
357   AM_RANGE(HD63701_PORT3, HD63701_PORT3) AM_READ(ikbd_port_3_r)
358   AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(ikbd_port_4_r)
327359ADDRESS_MAP_END
328360
329static ADDRESS_MAP_START(st_map, ADDRESS_SPACE_PROGRAM, 16)
361static ADDRESS_MAP_START( st_map, ADDRESS_SPACE_PROGRAM, 16 )
330362   AM_RANGE(0x000000, 0x000007) AM_ROM
331363   AM_RANGE(0x000008, 0x1fffff) AM_RAMBANK(1)
332364   AM_RANGE(0x200000, 0x3fffff) AM_RAMBANK(2)
r817r818
344376   AM_RANGE(0xfffc06, 0xfffc07) AM_READWRITE(acia6850_1_data_msb_r, acia6850_1_data_msb_w)
345377ADDRESS_MAP_END
346378
347static ADDRESS_MAP_START(megast_map, ADDRESS_SPACE_PROGRAM, 16)
379static ADDRESS_MAP_START( megast_map, ADDRESS_SPACE_PROGRAM, 16 )
348380   AM_RANGE(0x000000, 0x000007) AM_ROM
349381   AM_RANGE(0x000008, 0x1fffff) AM_RAMBANK(1)
350382   AM_RANGE(0x200000, 0x3fffff) AM_RAMBANK(2)
r817r818
520552
521553INPUT_PORTS_START( atarist )
522554   PORT_START_TAG("config")
523   PORT_CONFNAME( 0x20, 0x00, "Input Port 0 Device")
555   PORT_CONFNAME( 0x01, 0x00, "Input Port 0 Device")
524556   PORT_CONFSETTING( 0x00, "Mouse" )
525   PORT_CONFSETTING( 0x20, DEF_STR(Joystick) )
557   PORT_CONFSETTING( 0x01, DEF_STR( Joystick ) )
526558   PORT_CONFNAME( 0x80, 0x80, "Monitor")
527559   PORT_CONFSETTING( 0x00, "Monochrome" )
528560   PORT_CONFSETTING( 0x80, "Color" )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team