Previous 199869 Revisions Next

r20584 Monday 28th January, 2013 at 15:01:31 UTC by Curt Coder
(MESS) plus4: Cleaned up input handling. Controllers are now connected using the slot interface, and by default a joystick is present. [Curt Coder]
[src/mess/drivers]plus4.c
[src/mess/includes]plus4.h

trunk/src/mess/includes/plus4.h
r20583r20584
66#include "emu.h"
77#include "cpu/m6502/m7501.h"
88#include "formats/cbm_snqk.h"
9#include "includes/cbm.h"
109#include "audio/t6721.h"
1110#include "audio/mos7360.h"
1211#include "machine/6551acia.h"
r20583r20584
2726#define T6721_TAG           "t6721"
2827#define PLA_TAG             "u19"
2928#define SCREEN_TAG          "screen"
29#define CONTROL1_TAG       "joy1"
30#define CONTROL2_TAG          "joy2"
3031
3132class plus4_state : public driver_device
3233{
r20583r20584
4142         m_spi_kb(*this, MOS6529_KB_TAG),
4243         m_t6721(*this, T6721_TAG),
4344         m_iec(*this, CBM_IEC_TAG),
45         m_joy1(*this, CONTROL1_TAG),
46         m_joy2(*this, CONTROL2_TAG),
4447         m_exp(*this, PLUS4_EXPANSION_SLOT_TAG),
4548         m_user(*this, PLUS4_USER_PORT_TAG),
4649         m_ram(*this, RAM_TAG),
r20583r20584
4851         m_kernal(*this, "kernal"),
4952         m_function(*this, "function"),
5053         m_c2(*this, "c2"),
54         m_row0(*this, "ROW0"),
55         m_row1(*this, "ROW1"),
56         m_row2(*this, "ROW2"),
57         m_row3(*this, "ROW3"),
58         m_row4(*this, "ROW4"),
59         m_row5(*this, "ROW5"),
60         m_row6(*this, "ROW6"),
61         m_row7(*this, "ROW7"),
62         m_lock(*this, "LOCK"),
5163         m_addr(0),
5264         m_ted_irq(CLEAR_LINE),
5365         m_acia_irq(CLEAR_LINE),
r20583r20584
6274   required_device<mos6529_device> m_spi_kb;
6375   optional_device<t6721_device> m_t6721;
6476   required_device<cbm_iec_device> m_iec;
77   required_device<vcs_control_port_device> m_joy1;
78   required_device<vcs_control_port_device> m_joy2;
6579   required_device<plus4_expansion_slot_device> m_exp;
6680   optional_device<plus4_user_port_device> m_user;
6781   required_device<ram_device> m_ram;
r20583r20584
6983   required_memory_region m_kernal;
7084   optional_memory_region m_function;
7185   optional_memory_region m_c2;
86   required_ioport m_row0;
87   required_ioport m_row1;
88   required_ioport m_row2;
89   required_ioport m_row3;
90   required_ioport m_row4;
91   required_ioport m_row5;
92   required_ioport m_row6;
93   required_ioport m_row7;
94   required_ioport m_lock;
7295
7396   virtual void machine_start();
7497   virtual void machine_reset();
r20583r20584
107130   int m_exp_irq;
108131
109132   // keyboard state
110   UINT8 m_port6529;
111   UINT8 m_keyline[10];
133   UINT8 m_kb;
134
112135   INTERRUPT_GEN_MEMBER(c16_raster_interrupt);
113136   INTERRUPT_GEN_MEMBER(c16_frame_interrupt);
114137};
trunk/src/mess/drivers/plus4.c
r20583r20584
44
55    - cassette motor is turned on only for a moment while LOADing
66    - c16 function ROM test fails
7    - clean up keyboard handling
87    - clean up TED
98    - dump PLA
109    - T6721 speech chip
r20583r20584
372371//-------------------------------------------------
373372
374373static INPUT_PORTS_START( plus4 )
375   PORT_INCLUDE( common_cbm_keyboard )     /* ROW0 -> ROW7 */
374   PORT_START( "ROW0" )
375   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE)              PORT_CHAR('@')
376   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3)                                    PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F6))
377   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2)                                    PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F5))
378   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1)                                    PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F4))
379   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HELP f7") PORT_CODE(KEYCODE_F4)               PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CHAR(UCHAR_MAMEKEY(F7))
380   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)                            PORT_CHAR(0xA3)
381   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER)             PORT_CHAR(13)
382   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INST DEL") PORT_CODE(KEYCODE_BACKSPACE)       PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
376383
377   PORT_MODIFY("ROW0")
378   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE)              PORT_CHAR('@')
379   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3)                                    PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F6))
380   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2)                                    PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F5))
381   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1)                                    PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F4))
382   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HELP f7") PORT_CODE(KEYCODE_F4)               PORT_CHAR(UCHAR_MAMEKEY(F8)) PORT_CHAR(UCHAR_MAMEKEY(F7))
383   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)                            PORT_CHAR(0xA3)
384   PORT_START( "ROW1" )
385   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left & Right)") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
386   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)         PORT_CHAR('E')
387   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)         PORT_CHAR('S')
388   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)         PORT_CHAR('Z')
389   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)         PORT_CHAR('4') PORT_CHAR('$')
390   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)         PORT_CHAR('A')
391   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)         PORT_CHAR('W')
392   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)         PORT_CHAR('3') PORT_CHAR('#')
384393
385   PORT_MODIFY("ROW1")
386   /* Both Shift keys were mapped to the same bit */
387   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift (Left & Right)") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
394   PORT_START( "ROW2" )
395   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)         PORT_CHAR('X')
396   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)         PORT_CHAR('T')
397   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)         PORT_CHAR('F')
398   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)         PORT_CHAR('C')
399   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)         PORT_CHAR('6') PORT_CHAR('&')
400   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)         PORT_CHAR('D')
401   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)         PORT_CHAR('R')
402   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)         PORT_CHAR('5') PORT_CHAR('%')
388403
389   PORT_MODIFY("ROW4")
390   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  \xE2\x86\x91") PORT_CODE(KEYCODE_0)        PORT_CHAR('0') PORT_CHAR(0x2191)
404   PORT_START( "ROW3" )
405   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)         PORT_CHAR('V')
406   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)         PORT_CHAR('U')
407   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)         PORT_CHAR('H')
408   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)         PORT_CHAR('B')
409   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)         PORT_CHAR('8') PORT_CHAR('(')
410   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)         PORT_CHAR('G')
411   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)         PORT_CHAR('Y')
412   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)         PORT_CHAR('7') PORT_CHAR('\'')
391413
392   PORT_MODIFY("ROW5")
393   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                                PORT_CHAR('-')
394   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)                                    PORT_CHAR(UCHAR_MAMEKEY(UP))
395   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)                                  PORT_CHAR(UCHAR_MAMEKEY(DOWN))
414   PORT_START( "ROW4" )
415   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)         PORT_CHAR('N')
416   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)         PORT_CHAR('O')
417   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)         PORT_CHAR('K')
418   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)         PORT_CHAR('M')
419   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("0  \xE2\x86\x91") PORT_CODE(KEYCODE_0)        PORT_CHAR('0') PORT_CHAR(0x2191)
420   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)         PORT_CHAR('J')
421   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)         PORT_CHAR('I')
422   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)         PORT_CHAR('9') PORT_CHAR(')')
396423
397   PORT_MODIFY("ROW6")
398   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                                 PORT_CHAR('+')
399   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  Pi  \xE2\x86\x90") PORT_CODE(KEYCODE_BACKSLASH2)   PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190)
400   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC)                                   PORT_CHAR(UCHAR_MAMEKEY(ESC))
401   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)                                 PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
402   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT)                                PORT_CHAR('*')
403   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)                                  PORT_CHAR(UCHAR_MAMEKEY(LEFT))
424   PORT_START( "ROW5" )
425   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)     PORT_CHAR(',') PORT_CHAR('<')
426   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                                PORT_CHAR('-')
427   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)     PORT_CHAR(':') PORT_CHAR('[')
428   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)      PORT_CHAR('.') PORT_CHAR('>')
429   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)                                    PORT_CHAR(UCHAR_MAMEKEY(UP))
430   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)         PORT_CHAR('L')
431   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)         PORT_CHAR('P')
432   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)                                  PORT_CHAR(UCHAR_MAMEKEY(DOWN))
404433
405   PORT_MODIFY("ROW7")
406   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Home Clear") PORT_CODE(KEYCODE_DEL)           PORT_CHAR(UCHAR_MAMEKEY(HOME))
434   PORT_START( "ROW6" )
435   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)                             PORT_CHAR('/') PORT_CHAR('?')
436   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                                 PORT_CHAR('+')
437   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("=  Pi  \xE2\x86\x90") PORT_CODE(KEYCODE_BACKSLASH2)   PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190)
438   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC)                                   PORT_CHAR(UCHAR_MAMEKEY(ESC))
439   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)                                 PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
440   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE)                             PORT_CHAR(';') PORT_CHAR(']')
441   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT)                                PORT_CHAR('*')
442   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)                                  PORT_CHAR(UCHAR_MAMEKEY(LEFT))
407443
408   PORT_INCLUDE( c16_special )             /* SPECIAL */
444   PORT_START( "ROW7" )
445   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RUN STOP") PORT_CODE(KEYCODE_HOME)
446   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)                                 PORT_CHAR('Q')
447   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CBM") PORT_CODE(KEYCODE_LALT)
448   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)                             PORT_CHAR(' ')
449   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)                                 PORT_CHAR('2') PORT_CHAR('"')
450   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB)                               PORT_CHAR(UCHAR_SHIFT_2)
451   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home Clear") PORT_CODE(KEYCODE_DEL)           PORT_CHAR(UCHAR_MAMEKEY(HOME))
452   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)                                 PORT_CHAR('1') PORT_CHAR('!')
409453
410   PORT_INCLUDE( c16_controls )            /* CTRLSEL, JOY0, JOY1 */
454   PORT_START( "LOCK" )
455   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
456   PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
411457INPUT_PORTS_END
412458
413459
r20583r20584
419465   PORT_INCLUDE( plus4 )
420466
421467   PORT_MODIFY( "ROW0" )
422   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT)                                PORT_CHAR(0xA3)
468   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT)                                PORT_CHAR(0xA3)
423469
424470   PORT_MODIFY( "ROW5" )
425   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)                  PORT_CHAR('-')
426   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2)                            PORT_CHAR(UCHAR_MAMEKEY(UP))
427   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP)                                  PORT_CHAR(UCHAR_MAMEKEY(DOWN))
471   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)                  PORT_CHAR('-')
472   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2)                            PORT_CHAR(UCHAR_MAMEKEY(UP))
473   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP)                                  PORT_CHAR(UCHAR_MAMEKEY(DOWN))
428474
429475   PORT_MODIFY( "ROW6" )
430   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)                            PORT_CHAR('+')
431   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  Pi  \xE2\x86\x90") PORT_CODE(KEYCODE_PGDN) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190)
432   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                                PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
433   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)                             PORT_CHAR('*')
434   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                                 PORT_CHAR(UCHAR_MAMEKEY(LEFT))
476   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)                            PORT_CHAR('+')
477   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("=  Pi  \xE2\x86\x90") PORT_CODE(KEYCODE_PGDN) PORT_CHAR('=') PORT_CHAR(0x03C0) PORT_CHAR(0x2190)
478   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                                PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
479   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)                             PORT_CHAR('*')
480   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                                 PORT_CHAR(UCHAR_MAMEKEY(LEFT))
435481INPUT_PORTS_END
436482
437483
r20583r20584
541587   m_cassette->write(!BIT(data, 1));
542588}
543589
590
544591//-------------------------------------------------
545592//  ted7360_interface ted_intf
546593//-------------------------------------------------
r20583r20584
552599
553600INTERRUPT_GEN_MEMBER(plus4_state::c16_frame_interrupt)
554601{
555   int value, i;
556   static const char *const c16ports[] = { "ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7" };
557
558   /* Lines 0-7 : common keyboard */
559   for (i = 0; i < 8; i++)
560   {
561      value = 0xff;
562      value &= ~machine().root_device().ioport(c16ports[i])->read();
563
564      /* Shift Lock is mapped on Left/Right Shift */
565      if ((i == 1) && (machine().root_device().ioport("SPECIAL")->read() & 0x80))
566         value &= ~0x80;
567
568      m_keyline[i] = value;
569   }
570
571   if (machine().root_device().ioport("CTRLSEL")->read() & 0x01)
572   {
573      value = 0xff;
574      if (machine().root_device().ioport("JOY0")->read() & 0x10)          /* Joypad1_Button */
575         {
576            if (machine().root_device().ioport("SPECIAL")->read() & 0x40)
577               value &= ~0x80;
578            else
579               value &= ~0x40;
580         }
581
582      value &= ~(machine().root_device().ioport("JOY0")->read() & 0x0f);  /* Other Inputs Joypad1 */
583
584      if (machine().root_device().ioport("SPECIAL")->read() & 0x40)
585         m_keyline[9] = value;
586      else
587         m_keyline[8] = value;
588   }
589
590   if (machine().root_device().ioport("CTRLSEL")->read() & 0x10)
591   {
592      value = 0xff;
593      if (machine().root_device().ioport("JOY1")->read() & 0x10)          /* Joypad2_Button */
594         {
595            if (machine().root_device().ioport("SPECIAL")->read() & 0x40)
596               value &= ~0x40;
597            else
598               value &= ~0x80;
599         }
600
601      value &= ~(machine().root_device().ioport("JOY1")->read() & 0x0f);  /* Other Inputs Joypad2 */
602
603      if (machine().root_device().ioport("SPECIAL")->read() & 0x40)
604         m_keyline[8] = value;
605      else
606         m_keyline[9] = value;
607   }
608
609602   m_ted->frame_interrupt_gen();
610603}
611604
r20583r20584
618611
619612READ8_MEMBER( plus4_state::ted_k_r )
620613{
621   UINT8 value = 0xff;
622   int i;
614   /*
615   
616       bit     description
617   
618       0       JOY A0, JOY B0
619       1       JOY A1, JOY B1
620       2       JOY A2, JOY B2
621       3       JOY A3, JOY B3
622       4       
623       5       
624       6       BTN A
625       7       BTN B
626   
627   */
623628
624   for (i = 0; i < 8; i++)
629   UINT8 data = 0xff;
630
631   // joystick
632   if (!BIT(offset, 2))
625633   {
626      if (!BIT(m_port6529, i))
627         value &= m_keyline[i];
634      UINT8 joy_a = m_joy1->joy_r();
635     
636      data &= (0xf0 | (joy_a & 0x0f));
637      data &= ~(!BIT(joy_a, 5) << 6);
628638   }
629639
630   /* looks like joy 0 needs dataline2 low
631    * and joy 1 needs dataline1 low
632    * write to 0xff08 (value on databus) reloads latches */
633   if (!BIT(offset, 2))
634      value &= m_keyline[8];
635
636640   if (!BIT(offset, 1))
637      value &= m_keyline[9];
641   {
642      UINT8 joy_b = m_joy2->joy_r();
643     
644      data &= (0xf0 | (joy_b & 0x0f));
645      data &= ~(!BIT(joy_b, 5) << 7);
646   }
638647
639   return value;
648   // keyboard
649   if (!BIT(m_kb, 7)) data &= m_row7->read();
650   if (!BIT(m_kb, 6)) data &= m_row6->read();
651   if (!BIT(m_kb, 5)) data &= m_row5->read();
652   if (!BIT(m_kb, 4)) data &= m_row4->read();
653   if (!BIT(m_kb, 3)) data &= m_row3->read();
654   if (!BIT(m_kb, 2)) data &= m_row2->read();
655   if (!BIT(m_kb, 1)) data &= m_row1->read() & m_lock->read();
656   if (!BIT(m_kb, 0)) data &= m_row0->read();
657
658   return data;
640659}
641660
642661static MOS7360_INTERFACE( ted_intf )
r20583r20584
663682//  MOS6529_INTERFACE( spi_kb_intf )
664683//-------------------------------------------------
665684
666UINT8 plus4_state::read_keyboard(UINT8 databus)
667{
668   UINT8 value = 0xff;
669   int i;
670
671   for (i = 0; i < 8; i++)
672   {
673      if (!BIT(m_port6529, i))
674         value &= m_keyline[i];
675   }
676
677   /* looks like joy 0 needs dataline2 low
678    * and joy 1 needs dataline1 low
679    * write to 0xff08 (value on databus) reloads latches */
680   if (!BIT(databus, 2))
681      value &= m_keyline[8];
682
683   if (!BIT(databus, 1))
684      value &= m_keyline[9];
685
686   return value;
687}
688
689685READ8_MEMBER( plus4_state::spi_kb_r )
690686{
691   /*
692
693       bit     description
694
695       0
696       1
697       2
698       3
699       4
700       5
701       6
702       7
703
704   */
705
706   return m_port6529 & (read_keyboard (0xff /*databus */ ) | (m_port6529 ^ 0xff));
687   return 0xff;
707688}
708689
709690WRITE8_MEMBER( plus4_state::spi_kb_w )
710691{
711   /*
712
713       bit     description
714
715       0
716       1
717       2
718       3
719       4
720       5
721       6
722       7
723
724   */
725
726   m_port6529 = data;
692   m_kb = data;
727693}
728694
729695static MOS6529_INTERFACE( spi_kb_intf )
r20583r20584
812778
813779void plus4_state::machine_start()
814780{
815   cbm_common_init();
816
817781   // initialize memory
818782   UINT8 data = 0xff;
819783
r20583r20584
828792   save_item(NAME(m_ted_irq));
829793   save_item(NAME(m_acia_irq));
830794   save_item(NAME(m_exp_irq));
831   save_item(NAME(m_port6529));
832   save_item(NAME(m_keyline));
795   save_item(NAME(m_kb));
833796}
834797
835798
r20583r20584
856819   }
857820
858821   m_addr = 0;
859
860   for (int i = 0; i < 10; i++)
861   {
862      m_keyline[i] = 0xff;
863   }
864822}
865823
866824
r20583r20584
896854   MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
897855   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL)
898856   MCFG_CBM_IEC_ADD(iec_intf, NULL)
857   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
858   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
899859   MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_14_31818MHz/16, expansion_intf, plus4_expansion_cards, "c1551", NULL)
900860   MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL)
901861
r20583r20584
936896   MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
937897   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL)
938898   MCFG_CBM_IEC_ADD(iec_intf, NULL)
899   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
900   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
939901   MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL)
940902   MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL)
941903

Previous 199869 Revisions Next


© 1997-2024 The MAME Team