Deja Vu #09
13 ноября 1999

Coding - набор процедур для построения пользовательского интерфейса.

<b>Coding</b> - набор процедур для построения пользовательского интерфейса.
(C) Rezonance group
__________________________________________


          Интерфейс...


   Очень  часто в программах требуется оп-
росить клавиатуру, джойстик или мышь. Ниже
приведены  процедуры, которыми  я хотел бы
поделиться с читателями журнала.

   Наиболее  часто  используется следующая
методика:  в таблицу последовательно зано-
сятся старший разряд требуемого ряда, мас-
ка, указывающая на требуемую клавишу в ря-
де, и байт, указывающий направление в фор-
мате кемпстон джойстика.

KEY1A LD     HL,KEY1F
      LD     C,0
      LD     A,(HL)
KEY1B INC    HL
      IN     A,(#FE)
      AND    (HL)
      INC    HL
      JR     NZ,KEY1C
      LD     A,(HL)
      OR     C
      LD     C,A
KEY1C INC    HL
      LD     A,(HL)
      AND    A
      JR     NZ,KEY1B
      LD     A,C
      RET
KEY1F DEFB   #DF,#01,#01 ;P
      DEFB   #EF,#08,#01 ;7
      DEFB   #F7,#02,#01 ;2
      DEFB   #DF,#02,#02 ;O
      DEFB   #EF,#10,#02 ;6
      DEFB   #F7,#01,#02 ;1
      DEFB   #FD,#01,#04 ;A
      DEFB   #EF,#04,#04 ;8
      DEFB   #F7,#04,#04 ;3
      DEFB   #FB,#01,#08 ;Q
      DEFB   #EF,#02,#08 ;9
      DEFB   #F7,#08,#08 ;4
      DEFB   #7F,#01,#10 ;Sp
      DEFB   #EF,#01,#10 ;0
      DEFB   #F7,#10,#10 ;5
      DEFB   0,0,0


   Как  видно  из  текста программы, кроме
стандартных Q, A, O, P, Space, здесь опра-
шивается  Sinclear1 и Sinclear2. На выходе
в регистре 'A' в формате кемпстон джойсти-
ка  мы  имеем требуемое направление движе-
ния.
   Но лучше всего предоставить  выбор уст-
ройства управления пользователю, и опраши-
вать  только требуемое устройство. Это по-
может  немножко  сэкономить   ресурсы там,
где они очень требуются.
   Что  может  быть  проще опроса кемпстон
джойстика?!

KEMPSTON
      IN     A,(#1F)
      AND    #1F
      RET


   Опрос Sinclear1, на выходе данные в ре-
гистре 'A', преобразованные в формат кемп-
стон  джойстика с помощью таблицы. Быстро,
просто, удобно!

SINCLEAR1
      LD     A,#EF
      IN     A,(#FE)
      AND    #1F
      XOR    #1F
      LD     HL,SINCLEAR1F
      LD     D,0
      LD     E,A
      ADD    HL,DE
      LD     A,(HL)
      RET
SINCLEAR1F
      DEFB   #00,#1F,#08,#18,#04
      DEFB   #14,#0C,#1C,#01,#11
      DEFB   #09,#19,#05,#15,#0D
      DEFB   #1D,#02,#12,#0A,#1A
      DEFB   #06,#16,#0E,#1E,#03
      DEFB   #13,#0B,#1B,#07,#17
      DEFB   #0F,#1F


   Таблица  занимает 32 байта, при желании
ее  можно сократить до 15, но усложнив тем
самым процедуру. Стоит ли это делать?
   То же самое, но для Sinclear2.

SINCLEAR2
      LD     A,#F7
      IN     A,(#FE)
      AND    #1F
      XOR    #1F
      LD     HL,SINCLEAR2F
      LD     D,0
      LD     E,A
      ADD    HL,DE
      LD     A,(HL)
      RET
SINCLEAR2F
      DEFB   #00,#02,#01,#03,#04
      DEFB   #06,#05,#07,#08,#0A
      DEFB   #09,#0B,#0C,#0E,#0D
      DEFB   #0F,#10,#12,#11,#13
      DEFB   #14,#16,#15,#17,#18
      DEFB   #1A,#19,#1B,#1C,#1E
      DEFB   #1D,#1F


   Быстрый,  но  довольно-таки  громоздкий
вариант опроса клавиатуры. Данные по преж-
нему на выходе в регистре 'A'.

KEYscan1
      LD     C,0
      LD     A,#DF  ;P
      IN     A,(#FE)
      AND    #01
      JR     NZ,KEYscan11
      SET    0,C
KEYscan11
      LD     A,#DF  ;O
      IN     A,(#FE)
      AND    #02
      JR     NZ,KEYscan12
      SET    1,C
KEYscan12
      LD     A,#FD  ;A
      IN     A,(#FE)
      AND    #01
      JR     NZ,KEYscan13
      SET    2,C
KEYscan13
      LD     A,#FB  ;Q
      IN     A,(#FE)
      AND    #01
      JR     NZ,KEYscan14
      SET    3,C
KEYscan14
      LD     A,#7F
      IN     A,(#FE)
      AND    #01
      JR     NZ,KEYscan15
      SET    4,C
KEYscan15
      LD     A,C
      RET


   Но  мне  больше  нравится следующий ва-
риант, компактный и понятный.

KEYscan2
      LD     C,0
      LD     A,#DF  ;P
      LD     DE,#0101
      CALL   KEYscan2F
      LD     A,#DF  ;O
      LD     DE,#0202
      CALL   KEYscan2F
      LD     A,#FD  ;A
      LD     DE,#0104
      CALL   KEYscan2F
      LD     A,#FB  ;Q
      LD     DE,#0108
      CALL   KEYscan2F
      LD     A,#7F  ;Space
      LD     DE,#0110
      CALL   KEYscan2F
      LD     A,C
      RET
KEYscan2F
      IN     A,(#FE)
      AND    D
      RET    NZ
      LD     A,C
      OR     E
      LD     C,A
      RET


   Какая  передовая программа сможет обой-
тись  без  кемпстон  мыши. Процедура после
вызова  изменяет  координаты в зависимости
от передвижения мышки.

MOUSE10
      LD     HL,(XYkoor)
      LD     BC,#FBDF
      IN     A,(C)
MOUSE11
      LD     D,0
      LD     (MOUSE11+1),A
      SUB    D
      CALL   NZ,MOUSE30
      LD     B,#FF
      IN     A,(C)
MOUSE12
      LD     D,0
      LD     (MOUSE12+1),A
      SUB    D
      CALL   NZ,MOUSE40
      LD     (XYkoor),HL
      RET
MOUSE30
      JP     M,MOUSE35
      ADD    A,H
      LD     H,A
      RET    NC
      LD     H,#FF
      RET
MOUSE35
      XOR    #FF
      INC    A
      LD     D,A
      LD     A,H
      SUB    D
      LD     H,A
      RET    NC
      LD     H,0
      RET
MOUSE40
      JP     M,MOUSE45
      LD     E,A
      LD     A,L
      SUB    E
      LD     L,A
      RET    NC
      LD     L,#0
      RET
MOUSE45
      XOR    #FF
      INC    A
      ADD    A,L
      LD     L,A
      RET    NC
      LD     L,#FF
      RET


   А  это  процедура  показывает, как всем
этим можно пользоваться.

CONTROL DEFB  0
XYkoor  DEFW  0
      LD     B,0
      CALL   SINCLEAR1
      OR     B
      LD     B,A
      CALL   SINCLEAR2
      OR     B
      LD     B,A
      CALL   KEYscan1
      OR     B
      LD     (CONTROL),A
      CALL   MOUSE10
      RET


   Теперь  осталось  определить, есть ли у
пользователя  мышь или джойстик. На выходе
в  регистре  'A' установлен 0-ой бит, если
есть джойстик и 1-ый бит, если есть мышь.

AUTOconfig
      LD     E,0
      LD     B,250
A_config01
      IN     A,(#1F)
      AND    #1F
      JR     NZ,A_config02
      DJNZ   A_config01
      SET    0,E
A_config02
      LD     B,250
A_config03
      LD     A,#FA
      IN     A,(#DF)
      XOR    #FF
      JR     NZ,A_config04
      DJNZ   A_config03
      SET    1,E
A_config04
      LD     A,E
      RET


   Теперь, кажется, все. Надеюсь ничего не
забыл. До новых встреч.
------------------------------------------




Другие статьи номера:

Апперативчик - вступление от авторов.

Апперативчик - Об управлении в Deja Vu.

Апперативчик - Халява №2: о пиратах и взломанных версиях журнала.

Апперативчик - Dejavu Info: Как приобрести журнал Deja Vu.

Тема - Swap: "От письма до бандероли" как найти в своем городе Спектрумистов.

Тема - Тусовка: CSP'99 - интервью со Slack Den.

Тема - Тусовка: CSP'99 - интервью с main coder'ом молодой Новосибирской группы AREASoft

Тема - Тусовка: CSP'99 - интервью с одним из издателей электронного журнала Deja Vu' Daniel/Playgear Co./Binary Dimension.

Тема - Тусовка: CSP'99 - интервью с одним из участников Рыбинской группы Cav/Auryn.

Тема - Тусовка: CSP'99 - интервью с отцом группы Playgear классным дядькой Ze Pagan.

Тема - Тусовка: CSP'99 - интервью с main coder'ом Flash и по совместительству одним из основателей группы - Alex Rider.

Тема - Тусовка: CSP'99 - опрос, как прошла party в двух словах, общие впечатления.

Тема - Тусовка: Сказание о том, как проходило Crazy Siberian Party 1999.

Капля припоя - HD диски: Доработка контроллера дисковода для работы с HD-дисками.

Капля припоя - Решение пpоблемы 1.2Мб дисковода.

Капля припоя - увеличение объема ОЗУ до 1024к на SPECCY варианта Таганрог 128К!

Капля припоя - схема программатора для микросхем постоянных запоминающих устройств (ПЗУ).

Капля припоя - о матричных принтерах.

Капля припоя - ISA-Spectrum: плата вставляемая в ISA слот IBM, являющееся частью или полным компьютером ZX-Spectrum.

Software - Демосцена: Обзор'инг демозов: 63 bit III, Jam, Anamnesis, 7 Up, 63 bit IV, DemoDyin, Napalm, Crapmo 2, Bunch of Arce, Devotion, WorkStop, Energy, Yes.

Software - Обзор Игр: MIST: Monstrland Part Two, Bomb Lakes, Marbles, KluXer, 4x4 Puzzle, Солдатики, Кораблики.

Software - Gun Commander: руководство пользователя.

Coding - coding для чайников: цивилизованный выход в TR-DOS.

Coding - coding для чайников: Подробно об одном из способов опроса клавиатуры.

Coding - coding для чайников: как устроен "Boot" изнутри.

Coding - coding для чайников: доработка MINI BOOT V3.0.

Coding - процедура печати 42 символа в строке (с трабутами), процедура быстрой печать спрайта с точностью до пикселя.

Coding - быстрай печать 64 символов в строке.

Coding - Конверсия числа со стека калькулятора в символьную строку.

Coding - быстрая печать спрайта 2х2 знакоместа, с точностью до знакоместа.

Coding - Hrust Library свободноpаспpостpаняемая библиотека пpоцедуp, с помощью котоpых можно упаковывать и pаспаковывать pазличные данные.

Coding - Обработка ошибок TR-DOS при работе через #3D13.

Coding - набор процедур для построения пользовательского интерфейса.

Coding - пишим вирус невидимку для TR-DOS.

Another world - Иллюзия безопасности: Страшные сказки о безопасности Windows и Internet (часть первая).

Доска почета - 3 метода отличить pеальный ZX Spectrum от эмулятоpов.

Доска почета - устав национального Фонда Спектрума (HФСП).

Доска почета - Резервы: попытка представить совершенный ZX Spectrum.

Доска почета - Накипело: "А жив ли еще Speccy, курилка?" Размышления в слух.

Доска почета - Ща скажу №1: оптимизация процедур, анонс журнала и новой аркадной игрушки.

Доска почета - Ща скажу №1: разборки Serg'a и Playgear, Взлом телефонных карт, анонс Crazy Siberian Party '2000.

Доска почета - Краткая история кемеровской группы Digital Life Group.

Семь и 1/2 - Студенческая мифология.

Семь и 1/2 - День дурака 2 (окончание).

Семь и 1/2 - Сказочки для детей.

Семь и 1/2 - Особенности национального рулеза или чисто Сибирский проект (повесть о Crazy Siberian Party 1999).

Пробы пера - воспоминания: новелла по игре "Черный Ворон".

Пробы пера - рассказ "Элексир Зверя".

Пробы пера - "Last Warrior".

Реклама - текстовая реклама и обьявления.

Реклама - графическая реклама и обьявления.


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

Похожие статьи:
Софт - глюки Monster Commander.
Spectrum systemz - ZXAmp, unRAR, TRMSHob v2.0, Burial Graphics Editor v2.0, Freaker v0.5...
Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
От автора - пиздато читать газетки каждую неделю?
Тусовка - "Орбита-2".

В этот день...   2 октября