ZXNet эхоконференция «code.zx»


тема: Генерация матрицы клавиатуры



от: Виталий Гаврилов
кому: All
дата: 21 Jan 2007
Hello, AlexCrush

┌─- CODE ───

;SRC - source map
;DST - destination map, 256-aligned
ld de,SRC
ld hl,DST
fillloop;
ld; (hl),-1
inc l
jr nz,fillloop
ld c,1 ;step
cpyloop;
ld; a,c
cpl
ld l,a
ld b,c
fillal;
ld; a,(de)
and (hl)
ld (hl),a
dec l
djnz fillal
ld a,l
sub c
ld l,a
jr nc,fillal
inc de
rl c
jr nc,cpyloop

└── CODE ───
Hабросал на скорую руку. В правильности работы не уверен :)
Алгоритм, думаю, понятен.

от: Крашенинников Александр
кому: All
дата: 21 Jan 2007
Hello, All

Занимался я как-то (года 4 назад) созданием контроллера PS/2 клавиатуры на базе
второго спека ;-). Контроллер был без-wait-овый за счет чтения кода клавиши
основным спеком прямо из памяти спека-контроллера (да,я, наверное, извращенец
:) ). Следовательно, стояла задача генерации 256-байтной таблицы клавиатуры.
Т.е., 0й байт - то что основной спек получит при чтении из порта #00FE, 1й -
#01FE... И т.д..
Если кто не знает, каждый байт в этой таблице рассчитывается как AND тех рядов
клавиатуры, номера которых в номере данного байта нулевые.
Т.е значение ячейки с номером #D6= %11010110 равняется ANDу 0го,3го и 5го рядов
клавиатуры. Значение последней ячейки - порта #FFFE, есс-но = #FF

Так вот, предлагаю (в качестве этюда, чтоли), написать процедуру для рассчета
такой таблицы. Естесственно хочется, чтобы процедура была как можно быстрее.
Входные данные - 8 байт (ряды клавы, имеют значения только 5 младших бит, но
это вроде как побоку), выход - 256 байт. Больше ограничений - никаких.

P.S. Помнится у меня получился результат около 7000 тактов. Сегодняшние
раздумия позволяют вроде как бы сократить это число до ~4500 тактов (хотя я
точно считал и вообще не проверял свои мысли).

Дерзайте,ежели кому интересно :-)

от: Крашенинников Александр
кому: All
дата: 21 Jan 2007
Hello, Vitamin

Vit> Алгоритм, думаю, понятен.

Алгоритм и изначально проблем ни разу не вызывал :-). Я же в скорости предлагаю
поупражняться ;-) . А у Вас получается (хотя я и не могу уже в 3 часа ночи
чтолибо нормально сосчитать) примерно "совсем-дофига-тактов"

от: Знахарь
кому: All
дата: 21 Jan 2007
Hello, AlexCrush

к слову о клавах - сколько-то лет назад я разбирал АТшные еще клавы для ремонта
(!) (мда, когда-то их чинили...) так вот там контроллером реально стояло нечто
ОЧЕHЬ похожее внешне и с надписью Z80... Так что на извращенца AlexCrush не
тянет и может спать спокойно :)))) а я, если повезет, попробую найти раритет и
сфоткать.

от: Камиль Каримов
кому: All
дата: 21 Jan 2007
Hello, Знахарь

> там контроллером реально стояло нечто ОЧЕHЬ похожее внешне и с
> надписью Z80...

Zilog выпускал контроллеры клавиатуры Z8602/14/15/C15/E23
Применялись во многих AT клавиатурах.

от: Петр Кицун
кому: All
дата: 21 Jan 2007
Hello, caro

2caro - я так понял у тебя в ZXMC когда спек клаву опрашивает wait
используется, это не сильно тормозит при загрузки с касеты например?

от: Крашенинников Александр
кому: All
дата: 22 Jan 2007
Hello, caro

Предлагаю не уходить от темы.
Hеужели никому не интересно попытаться придумать быстрый способ? Или все сильно
чем-то заняты?

от: Виталий Гаврилов
кому: All
дата: 23 Jan 2007
Hello, AlexCrush

Hу можно еще так...
┌─- CODE ───

ld de,dst
allkc;
ld; hl,src
ld a,-1
exa
ld a,e
cpl
keyc;
and; a
jr z,nokey
rra
jr nc,nochk
exa
and (hl)
exa
nochk;
inc; l ;??
jr keyc
nokey;
exa;
ld (de),a
inc e
jr nz,allkc

└── CODE ───
Признаюсь, запамятовал- влияет ли rra на флаг нуля. Если да, то можно
сократить.
Сколько весит по тактам- не считал :)




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

Похожие статьи:
Part 1 - Editorial and news.
С миру по биту - обзор читательской почты: вопросы стандартизации, проблемы IS-DOS и др.
От редакции - ZX-News теперь выходит по средам...
Стихи - стихи или про спектрумистов.
DUCK NEWS - Доска объявлений (юмор).

В этот день...   5 мая