Hacker #07
10 марта 1997
  Железо  

 Kempston Mouse Interface.                              .ЖЕЛЕЗО 
                                                                
 Нижеследующий  тескст  был  жестоко  выдран  из  некого журнала
SPECTR0F0N,  так  как схема нарисована действительно корректно и
нормально.                                                      
                                                                
             DD1              DDS                               
         5┌──┬──┬─┐ б     2┌──┬──┬─┐18 D0                       
     ┌────оСа│СТ│0├────────┤D1│|>│1├─────╢                      
ХЬ  ─┴─ 15├──┤  │ │11     4│  │  │ │1б D1║                      
 ──┬──────/С │  │1├────────┤D2│  │2├─────╢                      
Ха │    10│  │  │ │14     б│  │  │ │14 D2║                      
 ───┬─────┤U/D  │2├────────┤D3│  │3├─────╢                      
   ││    9├──┤  │ │2      8│  │  │ │12 D3║                      
   ││ ┌───┤R │  │3├────────┤D4│  │4├─────╢                      
   ││ │  1│  │  │ │      11│  │  │ │9  D4║                      
   ││ ├───┤S │  │ │  ┌─────┤D5│  │5├─────╢                      
   ││─┴─ 4│  │  │ │  │   13│  │  │ │7  D5║                      
   ││   ──┤0 │  │ │  │┌────┤Dб│  │б├─────╢                      
   ││   12│  │  │ │  ││  15│  │  │ │5  Dб║                      
   ││   ──┤1 │  │ │  ││┌───┤D7│  │7├─────╢                      
   ││   13│  │  │ │  │││ 17│  │  │ │3  D7║                      
   ││   ──┤2 │  │ │  │││┌──┤D8│  │8├─────╢                      
   ││    3│  │  ├─┤7 ││││19├──┤  │ │     ║                      
   ││   ──┤3 │  │Со─┐││││┌─оЕ2│  │ │     ║                      
   ││     └──┴──┴─┘ ││││││1│  │  │ │     ║                      
   ││  ┌────────────┘││││├─оЕ1│  │ │     ║                      
   ││  │     DD2     │││││ └──┴──┴─┘     ║                      
   ││  │ 5┌──┬──┬─┐б │││││ /XCS          ║                      
   ││  └──оСа│СТ│0├──┘│││└────           ║                      
   ││   15├──┤  │ │11 │││                ║                      
   └──────/С │  │1├───┘││                ║                      
    │   10│  │  │ │14  ││                ║                      
    └─────┤U/D  │2├────┘│                ║                      
         9├──┤  │ │2    │                ║                      
      ┌───┤R │  │3├─────┘                ║                      
      │  1│  │  │ │                      ║                      
      ├───┤S │  │ │                      ║                      
     ─┴─ 4│  │  │ │                      ║                      
        ──┤0 │  │ │                      ║                      
        12│  │  │ │                      ║                      
        ──┤1 │  │ │                      ║                      
        13│  │  │ │                      ║                      
        ──┤2 │  │ │                      ║                      
         3│  │  ├─┤7                     ║                      
        ──┤3 │  │Со──                    ║                      
          └──┴──┴─┘                      ║                      
             DDЗ              DDб        ║                      
         5┌──┬──┬─┐б      2┌──┬──┬─┐18 D0║                      
     ┌────оСа│СТ│0├────────┤D1│|>│1├─────╢                      
Уа  ─┴─ 15├──┤  │ │11     4│  │  │ │1б D1║                      
 ──┬──────/С │  │1├────────┤D2│  │2├─────╢                      
Yb │    10│  │  │ │14     б│  │  │ │14 D2║                      
 ───┬─────┤U/D  │2├────────┤D3│  │3├─────╢                      
   ││    9├──┤  │ │2      8│  │  │ │12 D3║                      
   ││ ┌───┤R │  │3├────────┤D4│  │4├─────╢                      
   ││ │  1│  │  │ │      11│  │  │ │ 9 D4║                      
   ││ ├───┤S │  │ │  ┌─────┤D5│  │5├─────╢                      
   ││─┴─ 4│  │  │ │  │   13│  │  │ │ 7 D5║                      
   ││   ──┤0 │  │ │  │┌────┤Dб│  │б├─────╢                      
   ││   12│  │  │ │  ││  15│  │  │ │ 5 Dб║                      
   ││   ──┤1 │  │ │  ││┌───┤D7│  │7├─────╢                      
   ││   13│  │  │ │  │││ 17│  │  │ │ 3 D7║                      
   ││   ──┤2 │  │ │  │││┌──┤D8│  │8├─────╢                      
   ││    3│  │  ├─┤7 ││││19├──┤  │ │     ║                      
   ││   ──┤3 │  │Со─┐││││┌─оЕ2│  │ │     ║                      
   ││     └──┴──┴─┘ ││││││1│  │  │ │     ║                      
   ││ ┌─────────────┘││││├─оЕ1│  │ │     ║                      
   ││ │      DDЧ     │││││ └──┴──┴─┘     ║                      
   ││ │  5┌──┬──┬─┐б │││││  /YCS         ║                      
   ││ └───оСа│СТ│0├──┘│││└──────         ║                      
   ││   15├──┤  │ │11 │││                ║                      
   └──────/С │  │1├───┘││ ╔══════════════╝                      
    │   10│  │  │ │14  ││ ║                                     
    └─────┤U/D  │2├────┘│ ║                                     
         9├──┤  │ │2    │ ║                                     
      ┌───┤R │  │3├─────┘ ║                                     
      │  1│  │  │ │       ║                                     
      ├───┤S │  │ │       ║                                     
     ─┴─ 4│  │  │ │       ║                                     
        ──┤0 │  │ │       ║                                     
        12│  │  │ │       ║                                     
        ──┤1 │  │ │       ║                                     
        13│  │  │ │       ║                                     
        ──┤2 │  │ │       ║                                     
         3│  │  ├─┤7      ║                                     
        ──┤3 │  │Со──     ║                                     
          └──┴──┴─┘       ║                                     
                     ╔════╝                                     
          DD7.2      ║       DD8                                
 RIGHB   5┌─┬──┐б  D0║А10 1┌─┬──┬─┐15                           
 ─────────┤D│|>├─────╫─────┤1│DC│0о──                           
         4│ │  │     ║А8  2│ │  │ │14                           
       ┌──оЕ│  │     ║─────┤2│  │1о──                           
       │  └─┴──┘     ║А7  3│ │  │ │13                           
       │  DD7.3      ║─────┤4│  │2о──                           
 LEFTB │ 9┌─┬──┐8  D1║/RD 5├─┤  │ │12                           
 ─────────┤D│|>├─────╫─────о&│  │3о──                           
       │10│ │  │     ║А0  б│ │  │ │11 /BCS                      
       ├──оЕ│  │     ║─────┤ │  │4о───────                      
       │  └─┴──┘     ║    4│ │  │ │10                           
       │  DD7.4      ║  ┌──oS│  │5о──                           
 MIDLB │12┌─┬──┐11 D2║  │  │ │  │ │9 /XCS                       
 ─────────┤D│|>├─────╢  │  │ │  │бо───────                      
       │13│ │  │     ║  │  │ │  │ │7 /YCS                       
       ├──оЕ│  │     ║  │  │ │  │7о───────                      
       │  └─┴──┘     ║  │  └─┴──┴─┘                             
       │             ║  └────────────┐                          
       │  /BCS       ║       DD7.1   │                          
       └────────     ║/IORQ 2┌─┬──┐3 │                          
                     ║───────┤D│|>├──┘                          
 DD1..DDЧ - КSб1ИЕ11 ║А5    1│ │  │                             
 DDS, DDб - К5SSАПS  ║───────оЕ│  │                             
 DD7  - К1SSЛП8      ║       └─┴──┘                             
 DD8  - К5SSИД7      ║                                          
                                                                
----------------------------------------------------------------
                                                                
   Примечания:                                                  
                                                                
- жирной линией обозначена шина Spectrum;                       
                                                                
- на мышь идут следующие сигналы: Ха, ХЬ, Уа, Yb, RIGHTB, MIDLB,
  LEFTB, +5V, GND;                                              
                                                                
- /BCS,  /XCS,  /YCS  - внутренние сигналы схемы,  соединяются с
  одноименными парными на схеме;                                
                                                                
- схема  приведена  для  мыши пассивного типа (мышь для "Поиска"
  ММП-9В), для других необходимо вывести сигналы Ха, ХЬ  и  Уа, 
  Yb, которые берутся с оптопар после цепочки транзистор-триггер
  Шмидта;                                                       
                                                                
- в компьютере требуется обеспечить блокировку порта ODFh;      
                                                                
- возможна  замена схемы дешифрации (DD7.1, DD8)  на ПЛМ-ку типа
  55бPТЧ (РТ11), оставшийся свободный выход может использоваться
  для блокировки портов.                                        
                                                                
 Если у вас есть пожелания/нарекания, вопросы/идеи, то вы можете
связаться с автором схемы Михаилом Кондратьевым.                
                                                                
            Michael Kondratyev: 2:5030/3б2.1@FidoNet            
                                                                
 Итак,  теперь  поясним, каким образом работать с Kempston Mouse
Interface   программисту.   Ничего  сложного  для  понимания  не
предвидится,  поскольку  интерфейс  довольно  прост  и  понятен.
Имеются   три   порта,  вот  их  адреса:  #FADF,  #FBDF,  #FFDF;
разрядность каждого - 8 битов, т.е. байт.                       
                                                                
 #FADF - порт кнопок, значащими в нем являются младшие три бита:
         0 бит - состояние правой кнопки;                       
         1 бит - состояние левой кнопки;                        
         2 бит - состояние средней кнопки.                      
                                                                
 При  ненажатых  кнопках  все  биты в '1'. При нажатии на кнопку
соответствующий бит устанавливается в '0'.                      
                                                                
 По  старинной  традиции  левая  кнопка  используется  как выбор
(Fire),  правая  -  как  отмена (Cancel). Среднюю кнопку принято
использовать для дополнительных функций.                        
                                                                
 #FBDF - порт Х-координаты;                                     
 #FFDF - порт У-координаты.                                     
                                                                
 По   мере  передвижения  мышь-манипулятора  значения  в  портах
изменяются,  причем  еще и циклически, т.е. при достижении #FF и
дальшейшем  увеличении  становятся  снова  нулем и растут далее,
опять до #FF. При движении в другую сторону картина аналогичная,
только изменения происходят в обратном направлении.             
                                                                
 Представить это дело поможет вот такая картинка:               
                    у^                                          
                     │.                                         
                     │2                                         
                     │1                                         
                     │012..                                     
                     ┼─────────> х                              
                                                                
 Таким  образом,  необходимо  считывать  значения  портов,  и по
разнице   между  текущим  и  предыдущим  значением  определяется
направление перемешения мышки.                                  
                                                                
 При  необходимости  очень  точных манипуляций драйвер пишется с
учетом этого, и перемещение стрелочки на одну точку производится
при  изменении  значения,  считанного  из  порта на 2, 3, 5, или
более единиц.                                                   
                                                                
 В  последнее  время  стал модным более умный драйвер, который в
начале  ждет нажатия на кнопку, и первая нажатая кнопка на мышке
становится  (для  драйвера)  левой.  Сие относится только к двум
крайним  кнопкам,  средняя  кнопка - она и в Африке средняя. Это
полезно  для  людей, привыкших держать мышь в левой руке, или на
тот  случай,  если  кто-то часто наступал на вашу мышь и одна из
кнопок  у  нее  работает  хуже,  чем  остальные.  Такой  драйвер
считается   хорошим  тоном.  И  если  вы  заметили,  именно  так
поступает драйвер ZX-Format'а.                                  
                                                                
 Проверить  работу  только-что собранного интерфейса можно прямо
из Basic'а, делая PRINT IN из портов: б4479 - Х, б5503 - Y - при
перемещении  мыши  значения  должны  изменяться  циклически. При
чтении из порта б4423 - Fire должны щелкаться три младших битика
при нажатии кнопочек.                                           
                                                                
----------------------------------------------------------------
                                                                
 



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
WANTED - Searching for programs.
Advertising - Ads by V. Bogdanovich.
World News - News from Lithuania.
Assembler - Z80 Flags: undocumented command processor Z80.
For Coderz - Small programmers' tricks.

В этот день...   21 November