Previous 199869 Revisions Next

r33829 Thursday 11th December, 2014 at 17:50:37 UTC by Curt Coder
(MESS) victor9k: Keyboard WIP. (nw)
[src/mess/includes]victor9k.h
[src/mess/machine]victor9kb.c victor9kb.h

trunk/src/mess/includes/victor9k.h
r242340r242341
9494   required_device<hc55516_device> m_cvsd;
9595   required_device<mc6845_device> m_crtc;
9696   required_device<ram_device> m_ram;
97   required_device<victor9k_keyboard_device> m_kb;
97   required_device<victor_9000_keyboard_t> m_kb;
9898   required_device<victor_9000_fdc_t> m_fdc;
9999   required_device<centronics_device> m_centronics;
100100   required_device<rs232_port_device> m_rs232a;
trunk/src/mess/machine/victor9kb.c
r242340r242341
2525| X    X   X  X   X   X   X   X   X   X   X   X   X       X       X   X    X   X   X   X |
2626| X     X    marking             X                 X              X   X    X   X   X   X |
2727|----------------------------------------------------------------------------------------|
28                                         
2928
29
3030Notes:
3131    All IC's shown.
3232    XTAL        - 3.579545Mhz Crystal, marked "48-300-010" (front of xtal) and "3.579545Mhz" (back of xtal)
r242340r242341
5454  /3Y 6 |       | 9  4A
5555  GND 7 |_______| 8  /4Y
5656
57   
57
5858P8021 Pinout
5959------------------
6060            _____   _____
r242340r242341
134134  P20 26 - 22-908 pin 19 (/CLR) AND 22-950 pin 5 (/STB) AND (804x chip pin 35, P24)
135135  P21 27 - 74LS14 pin 9 (4A)                            AND (804x chip pin 36, P25)
136136  VCC 28 - VCC
137 
137
13813874LS14 to elsewhere connections
139139-------------------------------
140140  1A  1 - 100 Ohm resistor - J1 pin 4
r242340r242341
152152  6A 13 - 74LS14 pin 10
153153 VCC 14 - VCC
154154
155
155
156156J1 (aka CN1) connections:
157157-------------------------
1581581 - VCC
r242340r242341
212212   S09 - UNUSED (under the [8] key, no metal contact on key)
213213   S10 - [9]
214214   S11 - [10]
215   
215
216216   S12 - CLR/HOME
217217   S13 - (Degree symbol U+00B0)/(+- symbol U+00B1)/(Pi symbol U+03C0)
218218   S14 - !/1/|
r242340r242341
234234   S30 - % (white keypad key)
235235   S31 - (division symbol U+00F7) (white keypad key)
236236   S32 - (multiplication symbol U+00D7) (white keypad key)
237   
237
238238   S33 - (up arrow, SCRL, down arrow)//VTAB
239239   S34 - TAB//BACK
240240   S35 - Q
r242340r242341
256256   S51 - 8 (white keypad key)
257257   S52 - 9 (white keypad key)
258258   S53 - - (white keypad key)
259   
259
260260   S54 - (OFF,RVS,ON)//ESC
261261   S55 - LOCK//CAPS LOCK
262262   S56 - A
r242340r242341
278278   S72 - 5 (white keypad key)
279279   S73 - 6 (white keypad key)
280280   S74 - + (white keypad key)
281   
281
282282   S75 - (OFF,UNDL,ON)
283283   S76 - SHIFT (left shift)
284284   S77 - UNUSED (under the left SHIFT key, no metal contact on key)
r242340r242341
299299   S92 - 2 (white keypad key)
300300   S93 - 3 (white keypad key)
301301   S94 - ENTER (white keypad key)
302   
302
303303   S95 - RPT
304304   S96 - ALT
305305   S97 - (spacebar)
r242340r242341
310310   S102 - 00 (white keypad key) ('double zero')
311311   S103 - . (white keypad key)
312312   S104 - UNUSED (under the ENTER (keypad) key, no metal contact on key)
313   
313
314314   Note that the five unused key contacts:
315315   S09, S47, S67, S77 and S104
316316   may be used on international variants of the Victor 9000/Sirius 1 Keyboard.
r242340r242341
324324Y0        12  13  33  34  54  55  75  76
325325Y1        14  15  35  36  56  57  77  78
326326Y2        16  17  37  38  58  59  79  80
327Y3        18  19  39  40  60  61  81  82
327Y3        18  19  39  40  60  61  81  82
328328Y4        20  21  41  42  62  63  83  84
329329Y5        22  23  43  44  64  65  85  86
330330Y6        24  25  45  46  66  67  87  88
r242340r242341
345345//  MACROS / CONSTANTS
346346//**************************************************************************
347347
348#define I8021_TAG       "z3"
348#define I8021_TAG   "z3"
349349
350#define LOG       0
350351
351352
353
352354//**************************************************************************
353355//  DEVICE DEFINITIONS
354356//**************************************************************************
355357
356const device_type VICTOR9K_KEYBOARD = &device_creator<victor9k_keyboard_device>;
358const device_type VICTOR9K_KEYBOARD = &device_creator<victor_9000_keyboard_t>;
357359
358360
359361//-------------------------------------------------
r242340r242341
370372//  rom_region - device-specific ROM region
371373//-------------------------------------------------
372374
373const rom_entry *victor9k_keyboard_device::device_rom_region() const
375const rom_entry *victor_9000_keyboard_t::device_rom_region() const
374376{
375377   return ROM_NAME( victor9k_keyboard );
376378}
r242340r242341
380382//  ADDRESS_MAP( kb_io )
381383//-------------------------------------------------
382384
383static ADDRESS_MAP_START( victor9k_keyboard_io, AS_IO, 8, victor9k_keyboard_device )
385static ADDRESS_MAP_START( victor9k_keyboard_io, AS_IO, 8, victor_9000_keyboard_t )
384386   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(kb_p1_r, kb_p1_w)
385387   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(kb_p2_w)
386388   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(kb_t1_r)
r242340r242341
402404//  machine configurations
403405//-------------------------------------------------
404406
405machine_config_constructor victor9k_keyboard_device::device_mconfig_additions() const
407machine_config_constructor victor_9000_keyboard_t::device_mconfig_additions() const
406408{
407409   return MACHINE_CONFIG_NAME( victor9k_keyboard );
408410}
r242340r242341
474476   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
475477
476478   PORT_START("Y6")
477   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)
478   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)
479   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)
480   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)
481   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)
482   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)
483   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)
484   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)
479   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
480   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
481   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
482   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
483   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
484   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
485   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
486   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
485487
486488   PORT_START("Y7")
487489   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
r242340r242341
549551//  input_ports - device-specific input ports
550552//-------------------------------------------------
551553
552ioport_constructor victor9k_keyboard_device::device_input_ports() const
554ioport_constructor victor_9000_keyboard_t::device_input_ports() const
553555{
554556   return INPUT_PORTS_NAME( victor9k_keyboard );
555557}
r242340r242341
561563//**************************************************************************
562564
563565//-------------------------------------------------
564//  victor9k_keyboard_device - constructor
566//  victor_9000_keyboard_t - constructor
565567//-------------------------------------------------
566568
567victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
569victor_9000_keyboard_t::victor_9000_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
568570   device_t(mconfig, VICTOR9K_KEYBOARD, "Victor 9000 Keyboard", tag, owner, clock, "victor9kb", __FILE__),
569571   m_maincpu(*this, I8021_TAG),
570572   m_y0(*this, "Y0"),
r242340r242341
580582   m_ya(*this, "YA"),
581583   m_yb(*this, "YB"),
582584   m_yc(*this, "YC"),
583   m_kbrdy_handler(*this),
584   m_kbdata_handler(*this),
585   m_kbrdy_cb(*this),
586   m_kbdata_cb(*this),
585587   m_y(0),
586588   m_kbrdy(-1),
587589   m_kbdata(-1),
r242340r242341
594596//  device_start - device-specific startup
595597//-------------------------------------------------
596598
597void victor9k_keyboard_device::device_start()
599void victor_9000_keyboard_t::device_start()
598600{
599601   // resolve callbacks
600   m_kbrdy_handler.resolve_safe();
601   m_kbdata_handler.resolve_safe();
602   m_kbrdy_cb.resolve_safe();
603   m_kbdata_cb.resolve_safe();
602604
603605   // state saving
606   save_item(NAME(m_p1));
604607   save_item(NAME(m_y));
608   save_item(NAME(m_stb));
609   save_item(NAME(m_y12));
605610   save_item(NAME(m_kbrdy));
606611   save_item(NAME(m_kbdata));
607612   save_item(NAME(m_kback));
r242340r242341
609614
610615
611616//-------------------------------------------------
612//  device_reset - device-specific reset
613//-------------------------------------------------
614
615void victor9k_keyboard_device::device_reset()
616{
617}
618
619
620//-------------------------------------------------
621617//  kback_w -
622618//-------------------------------------------------
623619
624WRITE_LINE_MEMBER( victor9k_keyboard_device::kback_w )
620WRITE_LINE_MEMBER( victor_9000_keyboard_t::kback_w )
625621{
626   //logerror("KBACK %u\n", state);
627   m_kback = state;
622   if (LOG) logerror("KBACK %u\n", state);
623
624   m_kback = !state;
628625}
629626
630627
r242340r242341
632629//  kb_p1_r -
633630//-------------------------------------------------
634631
635READ8_MEMBER( victor9k_keyboard_device::kb_p1_r )
632READ8_MEMBER( victor_9000_keyboard_t::kb_p1_r )
636633{
637634   UINT8 data = 0xff;
638635
r242340r242341
650647      case 9: data &= m_y9->read(); break;
651648      case 0xa: data &= m_ya->read(); break;
652649      case 0xb: data &= m_yb->read(); break;
653      case 0xc: data &= m_yc->read(); break;
654650   }
655651
652   if (!m_y12)
653   {
654      data &= m_yc->read();
655   }
656
656657   return data;
657658}
658659
r242340r242341
661662//  kb_p1_w -
662663//-------------------------------------------------
663664
664WRITE8_MEMBER( victor9k_keyboard_device::kb_p1_w )
665WRITE8_MEMBER( victor_9000_keyboard_t::kb_p1_w )
665666{
666   if ((data & 0xf0) == 0x20)
667   {
668      m_y = data & 0x0f;
669   }
670
671   //logerror("%s P1 %02x\n", machine().describe_context(), data);
667   m_p1 = data;
672668}
673669
674670
r242340r242341
676672//  kb_p2_w -
677673//-------------------------------------------------
678674
679WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
675WRITE8_MEMBER( victor_9000_keyboard_t::kb_p2_w )
680676{
681677   /*
682678
683679       bit     description
684680
685       P20     ?
681       P20     22-908 CLR, 22-950 STB
686682       P21     KBRDY
687       P22     ?
683       P22     Y12
688684       P23     KBDATA
689685
690686   */
691687
692   int kbrdy = BIT(data, 1);
693
694   if (m_kbrdy != kbrdy)
688   // keyboard rows 0-11
689   if (!BIT(data, 0))
695690   {
696      m_kbrdy = kbrdy;
697      m_kbrdy_handler(m_kbrdy);
691      m_y = m_p1 & 0x0f;
698692   }
699693
700   int kbdata = BIT(data, 3);
694   // keyboard row 12
695   m_y12 = BIT(data, 2);
701696
702   if (m_kbdata != kbdata)
703   {
704      m_kbdata = kbdata;
705      m_kbdata_handler(m_kbdata);
706   }
697   // keyboard ready
698   m_kbrdy_cb(BIT(data, 1));
707699
708   //logerror("%s P2 %01x\n", machine().describe_context(), data&0x0f);
700   // keyboard data
701   m_kbdata_cb(BIT(data, 3));
709702}
710703
711704
r242340r242341
713706//  kb_t1_r -
714707//-------------------------------------------------
715708
716READ8_MEMBER( victor9k_keyboard_device::kb_t1_r )
709READ8_MEMBER( victor_9000_keyboard_t::kb_t1_r )
717710{
718711   return m_kback;
719712}
trunk/src/mess/machine/victor9kb.h
r242340r242341
2525//**************************************************************************
2626
2727#define MCFG_VICTOR9K_KBRDY_HANDLER(_devcb) \
28   devcb = &victor9k_keyboard_device::set_kbrdy_handler(*device, DEVCB_##_devcb);
28   devcb = &victor_9000_keyboard_t::set_kbrdy_cb(*device, DEVCB_##_devcb);
2929
3030#define MCFG_VICTOR9K_KBDATA_HANDLER(_devcb) \
31   devcb = &victor9k_keyboard_device::set_kbdata_handler(*device, DEVCB_##_devcb);
31   devcb = &victor_9000_keyboard_t::set_kbdata_cb(*device, DEVCB_##_devcb);
3232
3333
3434//**************************************************************************
3535//  TYPE DEFINITIONS
3636//**************************************************************************
3737
38// ======================> victor9k_keyboard_device
38// ======================> victor_9000_keyboard_t
3939
40class victor9k_keyboard_device :  public device_t
40class victor_9000_keyboard_t :  public device_t
4141{
4242public:
4343   // construction/destruction
44   victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
44   victor_9000_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
4545
46   template<class _Object> static devcb_base &set_kbrdy_handler(device_t &device, _Object object) { return downcast<victor9k_keyboard_device &>(device).m_kbrdy_handler.set_callback(object); }
47   template<class _Object> static devcb_base &set_kbdata_handler(device_t &device, _Object object) { return downcast<victor9k_keyboard_device &>(device).m_kbdata_handler.set_callback(object); }
46   template<class _Object> static devcb_base &set_kbrdy_cb(device_t &device, _Object object) { return downcast<victor_9000_keyboard_t &>(device).m_kbrdy_cb.set_callback(object); }
47   template<class _Object> static devcb_base &set_kbdata_cb(device_t &device, _Object object) { return downcast<victor_9000_keyboard_t &>(device).m_kbdata_cb.set_callback(object); }
4848
4949   // optional information overrides
5050   virtual const rom_entry *device_rom_region() const;
r242340r242341
6262protected:
6363   // device-level overrides
6464   virtual void device_start();
65   virtual void device_reset();
6665
6766private:
6867   required_device<cpu_device> m_maincpu;
r242340r242341
8079   required_ioport m_yb;
8180   required_ioport m_yc;
8281
83   devcb_write_line   m_kbrdy_handler;
84   devcb_write_line   m_kbdata_handler;
82   devcb_write_line   m_kbrdy_cb;
83   devcb_write_line   m_kbdata_cb;
8584
85   UINT8 m_p1;
8686   UINT8 m_y;
87   int m_stb;
88   int m_y12;
8789   int m_kbrdy;
8890   int m_kbdata;
8991   int m_kback;


Previous 199869 Revisions Next


© 1997-2024 The MAME Team