Самое время порыбачить.
Возник вопрос по этой игрухе.
Каким образом проверить одновременное нажатие клавиш для движения по диагонали? (ADSW)
Думаю проверять 254 порт и параллельно inkey-символ,но громоздко получается.
Самое время порыбачить.
Возник вопрос по этой игрухе.
Каким образом проверить одновременное нажатие клавиш для движения по диагонали? (ADSW)
Думаю проверять 254 порт и параллельно inkey-символ,но громоздко получается.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Всегда создавал под кемпстон и с этим проблем не было.
А вот как же быть с клавой?
если на бейсике, то in #xxFE и выделять биты. inkey только для одной кнопки.
а можно по подробнее,именно для ASDW ?
И желательно не в HEX а в DEC,это ж sinclair-Basic.
"Так, например, порт 254 (FE) служит для связи процессора
с клавиатурой, магнитофоном, звуковым динамиком и телеэкраном.
Для примера рассмотрим содержимое байта данных, поступаю-
щих или выдаваемых по этому порту.
ПОРТ FE (ВВОД)
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
└───┴─┬─┴─┬─┴───┴───┴───┴───┴─┬─┘
│ └─────────┬─────────┘
А │
Б
А. Шестой бит указывает на наличие сигнала на магнитофон-
ном разъеме EAR (вход в компьютер). 1 - нет сигнала, 0 есть
сигнал.
Б. Младшие пять битов определяют какая из пяти клавиш каж-
дого полуряда клавиатуры была нажата. Бит равен нулю, если кла-
виша была нажата и 1, если нет.
Для тех, кто не имеет книги Виккерса, напомним, как зада-
ются адреса портов при опросе клавиатуры.
1. Мы указали, что 16-разрядная адресная шина (от А0 до
А15) указывает на адрес внешнего порта.
2. Порт FE задается состоянием адресных линий А0...А7. При
этом А0 - включена, А1...А7 - выключены:
1111 1110
Об остальных адресных линиях А8...А15 мы пока не говорим.
3. В то же время, мы указали, что клавиши полуряда опраши-
ваются по пяти битам данных, поступающим с этого порта
(D0...D5).
4. При этом адресные линии А8...А15 могут указывать о ка-
ком именно полуряде идет речь.
Клавиатура "Спектрума" имеет 40 основных клавиш. Они
разбиты на 8 полурядов по 5 клавиш в каждом.
┌────────────────────┬───────────────────┐
3 │ 1................5 │ 6...............0 │ 4
├────────────────────┼───────────────────┤
2 │ Q................T │ Y...............P │ 5
├────────────────────┼───────────────────┤
1 │ A................G │ H...........ENTER │6
├────────────────────┼───────────────────┤
0 │ C.SHIFT..........V │ B...........SPACE │7
└────────────────────┴───────────────────┘
Этим полурядам соответствует следующее состояние адресных
линий А8...А15.
┌───────────────┬───────────────┐
3 │ 1111 0111 = 247 │ 1110 1111 = 239 │ 4
├───────────────┼───────────────┤
2 │ 1111 1011 = 251 │ 1101 1111 = 223 │ 5
├───────────────┼───────────────┤
1 │ 1111 1101 = 253 │ 1011 1111 = 191 │ 6
├───────────────┼───────────────┤
0 │ 1111 1110 = 254 │ 0111 1111 = 127 │ 7
└───────────────┴───────────────┘
Таким образом, для опроса произвольного полуряда адрес его
порта равен:
256*(255-2^n) + 254
└──────┬────────┘ └─┬─┘
│ │
А8...А15 А0...А7
Здесь n - номер полуряда.
Например, опросить клавиши от 1 до 5 можно следующей ко-
мандой из Бейсика:
PRINT IN (256*(255-2^3)+254) или проще:
PRINT IN 63486
Младшие пять битов того байта, который поступает с этого
порта, указывают, какая именно клавиша была нажата. При этом
следует помнить:
- самый младший бит соответствует внешней клавише полуря-
да;
- при нажатой клавише соответствующий ей бит выключается,
т.е. если ни одна клавиша не была нажата, то все пять младших
битов включены, и Вы получите 255.
"
Итого,
(IN 64510) - даст нам состояние полуряда клавиатуры Q-T
(IN 65022) - состояние полуряда A-G
но выделить из них отдельные клавиши будет сложновато, из-за того, что в бейсике нет побитных логических операций.
Как вариант, примерно так:
LET k1=INT ((IN 64510)/2)
IF (k1- INT(k1/2)*2)=0 THEN клавиша W нажата
LET k2=IN 65022
LET t=INT (k2/2)
IF (k2-t*2)=0 THEN клавиша A нажата
LET k2=t: LET t=INT (k2/2)
IF (k2-t*2)=0 THEN клавиша S нажата
LET k2=t: LET t=INT (k2/2)
IF (k2-t*2)=0 THEN клавиша D нажата
Чего же она не работает по диагонали?
a1=64510
a2=65022
---------- Post added at 16:43 ---------- Previous post was at 16:41 ----------
В смысле комбинации A+W, D+W
по идее,она ж сперва проверяет одну за тем вторую букву,не выходя из подпрограммы.
---------- Post added at 16:44 ---------- Previous post was at 16:43 ----------
то есть ступеньками должно двигаться...
---------- Post added at 16:44 ---------- Previous post was at 16:44 ----------
по идее...
---------- Post added at 16:44 ---------- Previous post was at 16:44 ----------
Но не хотит...
---------- Post added at 16:45 ---------- Previous post was at 16:44 ----------
210 строка к перемещению не относится.
---------- Post added at 16:46 ---------- Previous post was at 16:45 ----------
хотелось бы это покомпактнее сделать,для быстродействия
Во-первых, бит магнитофона может быть и 0.
Во-вторых, если a1=64510, a2=65022, перепутаны адреса портов полурядов.
А так, по идее, A+W и D+W должны работать.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)