home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sys / mac / system / 15287 < prev    next >
Encoding:
Text File  |  1992-12-16  |  5.6 KB  |  125 lines

  1. Newsgroups: comp.sys.mac.system
  2. Path: sparky!uunet!munnari.oz.au!uniwa!bilby.cs.uwa.oz.au!usenet
  3. From: Quinn <quinn@cs.uwa.edu.au>
  4. Subject: Re: How does KeyCaps know which keyboard was used?  [also: Dvorak]
  5. Message-ID: <1992Dec17.014731.5015@bilby.cs.uwa.edu.au>
  6. X-Xxdate: Thu, 17 Dec 92 01: 10:29 GMT
  7. Sender: usenet@bilby.cs.uwa.edu.au
  8. Nntp-Posting-Host: eriodon
  9. Organization: The University of Western Australia
  10. X-Useragent: Nuntius v1.1.1d13
  11. References: <tuc.724405827@cs.wisc.edu>
  12. Date: Thu, 17 Dec 1992 01:47:31 GMT
  13. Lines: 110
  14.  
  15. In article <tuc.724405827@cs.wisc.edu> Brian A. Cole,
  16. tuc@calico.cs.wisc.edu writes:
  17. >Try this:  Attach two different models of ADB keyboard to an ADB mac (or
  18. >attach an external ADB keyboard to a PowerBook, like I did) and go into
  19. >KeyCaps.  Press a key.  Now press a key on the _other_ keyboard.
  20. >Presto-Zamboni, the key layout displayed changes to that of the new
  21. >keyboard.  Pretty neat, huh?
  22. >
  23. >Now, I'm not complaining.  In fact, I think that this is just how I'd
  24. >like it to work.  My question is _how_ does it work?  How did it know
  25. >that I'd attached an "Apple Keyboard II" and not an "Apple Extended
  26. >Keyboard II" (or, for that matter, some relatively unknown third-party
  27. >gizmo)?
  28.  
  29. Simple.  Check out Inside Macintosh V-367....
  30.  
  31. "The ADB address of the keyboard on which the last-typed character
  32. was entered is now stored in the global variable KbdLast.  The type
  33. of the keyboard on which the last-typed character was entered is stored
  34. in the global variable KbdType.  The value of the KbdType is the Device
  35. Handler ID value in register 3 of the device; values below $20 are
  36. reserved by Apple."
  37.  
  38. The device handler ID mentioned is discussed in IM V-365.  It's basically
  39. a number ranging from $00..$FF with numbers below $20 reserved.
  40.  
  41. "Warning:  You must register new device handler ID values with Apple, so
  42. they do not conflict with the values of other devices that may be
  43. connected
  44. to the ADB at the same time."
  45.  
  46. But if you're just building a keyboard or mouse you can use the handler
  47. ID of Apple's keyboard or mouse.  ADB supports multiple devices on the
  48. same bus with the same handler ID (it gives them different "addresses"
  49. at startup time).
  50.  
  51. >I'd always thought that all a keyboard did was broadcast an ASCII (or
  52. >otherwise) code whenever a key is hit, but it seems to me that it must
  53. >also be sending some self-identification of some sort.  Or I guess that
  54. >the few applications that care (like KeyCaps) could ask the keyboard to
  55. >identify itself after every keystroke or something.
  56.  
  57. The situation is quite complicated.  ADB devices do not broadcast
  58. anything.
  59. The bus master (the Mac) polls each device regularly asking if it has
  60. any data by sending it a Talk command.  The Talk command has a field
  61. that specifies which register the bus master wants returned (registers
  62. are numbered 0..3).  Register 0 traditionally contains the keyboard data
  63. (the key codes pressed) while register 3 must contain (among other things)
  64. the device handler ID.
  65.  
  66. >Either way, it seems like the System must have some list of possible
  67. >keyboards somewhere.  If this is the case, how the heck do third-party
  68. >manufacturers make Mac keyboards -- do they require a system extension
  69. >or something before the keyboard can be recognized?  Will someone in
  70. >the know _please_ fill me in?
  71.  
  72. Third party keyboard manufacturers traditionally use the same device
  73. handler ID as Apple hardware and send compatible keycodes down the line.
  74. That saves them from having to write an ADB device driver, which although
  75. not hard, keeps them out of the software business.
  76.  
  77. Anyone building a radical keyboard (like a chord keyboard perhaps) would
  78. most probably have to write an ADB driver.
  79.  
  80. >Why do I care so much?  Because I'm looking for true-Dvorak-hardware
  81. >keyboard that I can use _in_parallel_ with a normal (qwerty) one.
  82. >[note:  a Dvorak keyboard layout thingie doesn't help me here.  I want
  83. >to be able to type on one keyboard in Dvorak and the other in qwerty
  84. >simultaneously (or in quick succession) without having to use a Control
  85. >Panel or macro.]
  86.  
  87. You might be able to do this using a KMAP resource.  This resource
  88. is used by Apple's keyboard to handle physical to virtual key code
  89. translation.  Perhaps I should explain...
  90.  
  91. ADB keyboards generate physical keycodes.  These are mapped using a KMAP
  92. resource (the one where the ID field matches the device handler ID (I
  93. think)) to virtual keycodes.  Virtual keycodes are then translated into
  94. ASCII using the current KMAP resource.
  95.  
  96. Normally to install Dvorak on a Mac you want it on all keyboards so you
  97. install a new KCHR.  However in your case you might be able to bash
  98. a KMAP to do the job.  You'll need to make sure that the two keyboards
  99. you attach have different device handler IDs.  IM V-193 raises the
  100. possibility of being able to change the device handler ID of an
  101. attached keyboard which would be useful for you.
  102.  
  103. Apple ship different keyboards with different device handler IDs
  104. because some of their keyboards generate strange keycodes (for an
  105. example see the discussion of the Apple Extended Keyboard in IM V-191).
  106.  
  107. Consult IM VI.14-23 for a more lucid discussion of keyboards.  That
  108. points to the MPW file "SysTypes.r" which describes the format of
  109. a KMAP.  [The same file ships with both Think C and Pascal.]
  110.  
  111. btw, Why do you want different layouts on different keyboards?
  112. Using Dvorak is *much* easier if you have it on all your keyboards.
  113. It also forces you to touce type real quick!  But I assume you have
  114. a good reason.
  115.  
  116. Gads, I hope you've got a set of IM and you're handy with ResEdit (-:
  117.  
  118. Good luck.
  119.  
  120. Share and Enjoy.
  121.  
  122. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  123. Department of Computer Science, The University of Western Australia
  124.   -- Well you said you were desperate!
  125.