Echo #02
30 ноября 1996

Маленькие хитрости - Изящная очистка экрана. Быстрое сканирование клавиатуры. Установка прерываний (IM2).

┌════════════════════════════════════════┐
│░░░░░░░░░░ Маленькие хитрости ░░░░░░░░░░│
└════════════════════════════════════════┘

   У  каждого  программиста есть свои хит-
рости,  зачастую  известные только ему од-
ному.  Для публикации подобных вещей и бу-
дет предназначен этот раздел.

   Сегодня у нас:

   1. Изящная очистка экрана:

   Обычно экран чистят так:

   XOR  A              ;1 │
   OUT  (#FE),A        ;2 │
   LD   HL,#4000       ;3 └
   LD   DE,#4001       ;3  Размер в байтах
   LD   BC,#1AFF       ;3 ┌
   LD   (HL),A         ;1 │
   LDIR                ;2 │

   Размер: 15 байт.

   А мы вот так:

   XOR  A              ;1
   OUT  (#FE),A        ;2
   LD   HL,#5B00       ;3
L1 DEC  HL             ;1
   LD   (HL),A         ;1
   OR   (HL)           ;1
   JR   Z,L1           ;2

   Размер:  11 байт. На четыре байта коро-
че. Кажется мелочь, а приятно...

   2. Быстрое сканирование клавиатуры:

   LD   L,0
   LD   A,#FE
L1 LD   C,A
   LD   B,5
   IN   A,(#FE)
L2 RRA
   JR   NC,YES_KEY
   INC  L
   DJNZ L1
   LD   A,C
   RLCA
   JP   C,L2
NO_KEY       ;Ни одна клавиша не нажата. В
             ;L торчит #28 (40)

YES_KEY      ;На  что-то надавили. В L-код
             ;клавиши.   Преобразовать   в
ASCII его можно с помощью таблички:

  ╔═════╦═════════╗    ╔═════╦═════════╗
  ║ Код ║ Клавиша ║    ║ Код ║ Клавиша ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #00 ║ C.SHIFT ║    ║ #14 ║    0    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #01 ║    Z    ║    ║ #15 ║    9    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #02 ║    X    ║    ║ #16 ║    8    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #03 ║    C    ║    ║ #17 ║    7    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #04 ║    V    ║    ║ #18 ║    6    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #05 ║    A    ║    ║ #19 ║    P    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #06 ║    S    ║    ║ #1A ║    O    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #07 ║    D    ║    ║ #1B ║    I    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #08 ║    F    ║    ║ #1C ║    U    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #09 ║    G    ║    ║ #1D ║    Y    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0А ║    Q    ║    ║ #1E ║  ENTER  ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0B ║    W    ║    ║ #1F ║    L    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0C ║    E    ║    ║ #20 ║    K    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0D ║    R    ║    ║ #21 ║    J    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0E ║    T    ║    ║ #22 ║    H    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #0F ║    1    ║    ║ #23 ║  SPACE  ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #10 ║    2    ║    ║ #24 ║ S.SHIFT ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #11 ║    3    ║    ║ #25 ║    M    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #12 ║    4    ║    ║ #26 ║    N    ║
  ╠═════╬═════════╣    ╠═════╬═════════╣
  ║ #13 ║    5    ║    ║ #27 ║    B    ║
  ╚═════╩═════════╝    ╚═════╩═════════╝

   Ежели  вы  получили значение триггерной
клавиши и, установив флаги клавиатуры, хо-
тите  продолжить  сканирование,  то  дайте
JP L2, при этом в регистрах A, BC, L долж-
ны  остаться те же значения, какие были на
выходе  из  процедуры.  В  тактах сканиро-
вание занимает максимум 1432 (NO_KEY)!

   3. А  вот очень старая, но красивая ус-
тановка IM 2 (не мы ее придумали):

   LD  HL,TABLE_ADR ;ТABLE_ADR должно быть
   LD  A,H          ;кратно 256!
   LD  I,A
   LD  B,L
   INC A
L1 LD  (HL),A
   INC HL
   DJNZ  L1
   LD  (HL),A
   LD  L,H
   LD  (HL),#C9     ;RET
   IM  2

   Сформирует таблицу обработки прерываний
с TABLE_ADR и установит процедуру обработ-
ки: одну единственную команду RET. Занима-
ет всего 3+1+2+1+1+1+1+2+1+1+2+2=18 байт.

   Ну  и  хватит  пока... Шлите нам и свои
хитрости, читатели! Если кто-то сумеет ис-
хитриться лучше нас, будем только рады.



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

Введение - О новом интерфейсе в газете.

Маленькие хитрости - Изящная очистка экрана. Быстрое сканирование клавиатуры. Установка прерываний (IM2).

HARDWARE - анонс Falcon Sound Drive.

HARDWARE - Еще несколько слов о дисководах 5'25 и 3'5.

Hardware- доработка компьютера Балтик.

Презентация - Генератор Спрайтов v4.5 от REAL SOFT.

Проблемы Байта - Почему не работают некоторые программы на Спектрум-совместимом компьютере "Байт".

Фантастика - Фантастическая повесть Рея Бредбери "Лед и пламя" (часть 1).

Сказки дядюшки Gill'а - Рассказы: Автобиография, Инкубаторный период, Происшествие на улице, Реабилитация...

Дерево смерти - Отчет о работе службы "Спасение 911".

Богатые тоже плачут - О проблемах, которые создают СНГ'шные кодеры для пользователей фирменных спектрумов (EXODUS из Польши).

Анкета - Опрос среди спектрумовского населения стран СНГ.

Знаете ли вы... - Гасить ВГ-шку нулем в порт #FF нельзя. Перед записью через #3D13 на конкретную дорожку, если моторчик включен, а головка на ней торчит. Как ускорить процедуру чтения и загрузки через #3D13, если необходимо загрузить/записать несколько небольших блоков подряд.

Музобзор - Интервью с группой "Too Late! Frozen".

Книга о вкусной пище - Холодные закуски, горячие закуски и супы. (кулинарные рецепты). Реклама: часы командирские.

Музыка - Форматы компилированных модулей известных музыкальных редакторов. Pro Tracker v2.101 by GDC, Стандартный проигрыватель.

Открытое письмо - Открытое письмо OLDMAN'у о создании газет...

AMIGA vs IBM - Какие возможности у этих компьютеров.

Амига - Немного истории создания Амиги.

Амига - Краткое описание различных моделей Амиги.

Амига - Описание AMIGA 500/2000 - Амига из нутри: клавиатура, дисководы, разъемы ввода/вывода. Что еще можно подключить?

Амига - Описание AMIGA 1200.

Besta - мы предлагаем скидываться на свежий софт для Спектрума всей Белорусью и закупать его везде где только возможно.

Новье - Список нового ПО, которое появилось в Бресте в декабре.

PENTIUM - Pentium Processor - Технический обзор.

Реклама - Реклама и объявления ...

Credits - создатели газеты.


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

Похожие статьи:
Ликбез - полное описание и диассемблер ПЗУ (часть 19).
Код - 3D демы на ZX Spectrum: история развития 3д движков.
Послесловие - Авторы и софт.

В этот день...   25 февраля