home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / mouse < prev    next >
Text File  |  1990-01-04  |  10KB  |  278 lines

  1.                         Chapter  6
  2.                         
  3.                     MOUSE Services Routine
  4.                     ----------------------
  5.  
  6.  1. Introduction
  7.  
  8.     For system which supports the MOUSE, the ROM BIOS contains two mouse-
  9.     related services, a PD ISR and a PD DSR (see Figure 1-1):
  10.  
  11.      * PD ISR
  12.        The BIOS PD Interrupt Service Routine (ISR) is invoked via H/W INT
  13.        74h each time the mouse is moved or the mouse button is pressed
  14.        while the  mouse is enabled.  
  15.        PD ISR stores the PD data temporarily in the PD buffer, when it 
  16.        accummulates the PD data to reach the package size, it will pass a
  17.        package of PD data through the system stack to the mouse driver.
  18.  
  19.      * PD DSR
  20.        The BIOS PD Device Service Routine (DSR) is invoked via S/W INT 15h,
  21.        AH=0C2h.  It is different from the keyboard DSR. PD DSR provides 
  22.        some functions to initialize mouse, enable/disable mouse, set the 
  23.        mouse configurations such as sample rate, resolution ..., and so on,
  24.        but it doesn't provide users access to the PD data.
  25.  
  26.  
  27.  <── H/W ──>│<──── BIOS Level ────────>│<───── User's Level ────────────>
  28.     Level
  29.  
  30.    PD H/W    ┌────────┐                ┌────────┐       ┌────────┐
  31.    Interrupt │        ├───────────────>│ System ├──────>│ MOUSE  ├──> MOUSE
  32.     (IRQ 12) │ PD ISR │   ┌───────────┐│ Stack  │       │ Driver │    AP
  33.    ┌────────>│        │<─>│ PD buffer │└────────┘       └────┬───┘
  34.    │         │ INT 74h│   └───────────┘                      │
  35.    │         │        │   ┌───────────┐                      │
  36.    │         │        │<─>│ PD flags  │                      │
  37.  ┌─┴──┐      └────────┘ ┌>└───────────┘                      │
  38.  │ PD │<┐               │   Extended                         │
  39.  └────┘ │               │   BIOS Data                        │
  40.         │    ┌────────┐ │                                    │
  41.         │    │        ├─┘                                    │
  42.         │    │ PD DSR │                                      │
  43.         └────┤        │                                      │
  44.              │ INT 15h│<─────────────────────────────────────┘
  45.              │ AH=0C2h│
  46.              │        │
  47.              └────────┘
  48.  
  49.               Figure 1-1. The roles of the PD ISR and PD DSR
  50.               ----------------------------------------------
  51.  
  52.  2. PD ISR (INT 74h) Operation
  53.  
  54.     2.1 PD H/W Architecture
  55.         Please refer to Keyboard Services (Figure 2-1) for PD H/W
  56.         architecture.  It must use the keyboard controller 8042 to support
  57.         the PS/2 MOUSE.
  58.  
  59.     2.2 PD Data
  60.         The data structure that PD ISR passes onto the device driver is 
  61.         called "package".  Normally, one package contains 3 bytes as shown:
  62.  
  63.           1st byte - status
  64.                 bit 0 - left button status
  65.                       - 1 : pressed
  66.                 bit 1 - right button status
  67.                       - 1 : pressed
  68.                 bit 2 - reserved (must be 0)
  69.                 bit 3 - reserved (must be 1)
  70.                 bit 4 - X data sign
  71.                       - 1 negative
  72.                 bit 5 - Y data sign
  73.                       - 1 negative
  74.                 bit 6 - X data overflow
  75.                       - 1 overflow
  76.                 bit 7 - Y data overflow
  77.                       - 1 overflow
  78.           2nd byte - X data
  79.                 bit 0 - least significant bit
  80.                 bit 7 - most  significant bit
  81.           3rd byte - Y data
  82.                 bit 0 - least significant bit
  83.                 bit 7 - most  significant bit
  84.  
  85.     2.3 PD ISR Processing
  86.         The PD ISR simply collects one package of the PD data in PD buffer,
  87.         and maintains the PD flags.  PD buffer and PD flags are all in the
  88.         extended BIOS data area as shown:
  89.  
  90.         022h        device drive far call offset
  91.         024h        device drive far call segment
  92.         026h        pointing device flag
  93.                     bit 7   -- command in progress
  94.                     bit 6   -- resend
  95.                     bit 5   -- acknowledge
  96.                     bit 4   -- error
  97.                     bit 3   -- reserved = 0
  98.                     bit 2-0 -- index count of input data
  99.  
  100.         027h        pointing device flag
  101.                     bit 7   -- device drive far call flag
  102.                     bit 6   -- Pointer device interface initialization ok
  103.                     bit 5-3 -- reserved
  104.                     bit 2-0 -- package size
  105.         028h-02Fh   Pointing device buffer
  106.  
  107.         When PD ISR collects the PD data to reach the package size, it will
  108.         pass a package of PD data through the system stack to the mouse 
  109.         driver.
  110.  
  111.  
  112.  3. PD DSR (INT 15h, AH=0C2h) Operation
  113.  
  114.     PD DSR initializes the mouse to function as follows:
  115.  
  116.        For all functions of the pointing device, the output is as follows:
  117.                (cy) = 0 -- operation successfully completed
  118.                     = 1 -- unsuccesful operation
  119.                (ah) = status
  120.                        00 - no error
  121.                        01 - invalid function call
  122.                        02 - invalid function input
  123.                        03 - error
  124.                        04 - reserved
  125.                        05 - no far call installed
  126.                        06 - reserved
  127.  
  128.         ENABLE OR DISABLE POINTING DEVICE
  129.         input:
  130.                 (ah) = c2h
  131.                 (al) = 0 
  132.                 (bh) = 0        disable the pointing device
  133.                      = 1        enable  the pointing device
  134.                      > 1        Invalid function call
  135.         output: See the note as described above.
  136.  
  137.         RESET POINTING DEVICE
  138.         input:
  139.                 (ah) = c2h
  140.                 (al) = 1 
  141.         output: See the note as described above.
  142.                 bx = device ID if operation is successful
  143.  
  144.         Notes:
  145.               After reset, the pointing device situation is
  146.               described as follows:
  147.               - It is disabled unless the flag of pointing device   
  148.                 interface initialization is set.
  149.               - Sample rate at 100 reports/sec
  150.               - Resolution at 4 counts/millimeter
  151.               - Scaling at 1 to 1
  152.               - Package size remain unchanged
  153.  
  154.         SET SAMPLE RATE
  155.         input:
  156.                 (ah) = c2h
  157.                 (al) = 2 
  158.                 (bh) = rate value
  159.                      = 0   - 10 reports/sec
  160.                      = 1   - 20 reports/sec
  161.                      = 2   - 40 reports/sec
  162.                      = 3   - 60 reports/sec
  163.                      = 4   - 80 reports/sec
  164.                      = 5   -100 reports/sec
  165.                      = 6   -200 reports/sec
  166.                      > 6   -Invalid input
  167.                         
  168.         output: See the note as described above.
  169.  
  170.         SET RESOLUTION
  171.         input:
  172.                 (ah) = c2h
  173.                 (al) = 3 
  174.                 (bh) - resolution value
  175.                      = 0    - 1 count /mm
  176.                      = 1    - 2 counts/mm
  177.                      = 2    - 4 counts/mm
  178.                      = 3    - 8 counts/mm  
  179.                      > 3    - Invalid input
  180.  
  181.         output: See the note as described above.
  182.  
  183.         READ DEVICE TYPE
  184.         input:
  185.                 (ah) = c2h
  186.                 (al) = 4 
  187.  
  188.         output: See the note as described above.
  189.                 If operation is successfully completed then
  190.                 (bh) = device ID
  191.  
  192.         INITIALIZATION
  193.         input:
  194.                 (ah) = c2h
  195.                 (al) = 5 
  196.                 (bh) - data package size
  197.                      = 1    -  1 byte
  198.                      = 2    -  2 bytes
  199.                      = 3    -  3 bytes
  200.                      = 4    -  4 bytes
  201.                      = 5    -  5 bytes
  202.                      = 6    -  6 bytes
  203.                      = 7    -  7 bytes
  204.                      = 8    -  8 bytes
  205.                      > 8    -  Invalid input
  206.  
  207.         output: See the note as described above.
  208.                 The pointing device state is as follows:
  209.                 . Disabled
  210.                 . Sample rate at 100 reports/sec
  211.                 . Resolution at 4 counts/millimeter
  212.                 . Scaling at 1 to 1
  213.  
  214.  
  215.         EXTENDED COMMAND
  216.         input:
  217.                 (ah) = c2h
  218.                 (al) = 6 
  219.                 (bh) = 0      return status
  220.  
  221.         output: See the note as described above.
  222.  
  223.                 If operation is successfully completed then
  224.                 (bl) - status byte 1
  225.                         bit 7 = 0 - reserved
  226.                         bit 6 = 0 - stream mode
  227.                               = 1 - remote mode
  228.                         bit 5 = 1 - pointer enable
  229.                         bit 4 = 0 - 1:1 scaling
  230.                               = 1 - 2:1 scaling  
  231.                         bit 3 = 0 - reserved
  232.                         bit 2 = 1 - left butten pressed
  233.                         bit 1 = 0 - reserved
  234.                         bit 0 = 1 - right butten pressed
  235.                 (cl) - status byte 2
  236.                         00  - 1 count /mm
  237.                         01  - 2 counts/mm
  238.                         02  - 4 counts/mm
  239.                         03  - 8 counts/mm
  240.  
  241.                 (dl) - status byte 3
  242.                         0a  - 10 reports/sec
  243.                         14  - 20 reports/sec
  244.                         2b  - 40 reports/sec
  245.                         3c  - 60 reports/sec
  246.                         50  - 80 reports/sec
  247.                         64  -100 reports/sec
  248.                         c8  -200 reports/sec
  249.  
  250.         input:
  251.                 (ah) = c2h
  252.                 (al) = 6 
  253.                 (bh) = 1      set scaling to 1:1
  254.         output: See the note as described above.
  255.  
  256.         input:
  257.                 (ah) = c2h
  258.                 (al) = 6 
  259.                 (bh) = 2      set scaling to 2:1
  260.         output: See the note as described above.
  261.  
  262.         input:
  263.                 (ah) = c2h
  264.                 (al) = 6 
  265.                 (bh) > 2      Illegal function call
  266.         output: See the note as described above.
  267.  
  268.  
  269.         DEVICE DRIVER FAR CALL
  270.         input:
  271.                 (ah) = c2h
  272.                 (al) = 7 
  273.                 (es) = segment pointer     
  274.                 (bx) = offset  pointer
  275.         output:
  276.                 none
  277.  
  278.