Вторник, 21.05.2024, 12:43

Каталог статей

Главная » Статьи » DCPU-16 » Туториалы

Чтение с клавиатуры
Итак, первое, что нам нужно знать о клавиатуре, что значение последней нажатой клавиши хранится в памяти по адресу 0x9000. В DCPU-16 Studio, конечно.

Получаем такой код, для чтения клавиши клавиатуры:

Code
; Работа с клавиатурой
: kbinput
 SET Z, [0x9000] ; Устанавливаем в Z адрес значение последней нажатой клавиши
 SET A, Z ; Делаем копию адреса
 SET Z, [Z] ; Устанавливаем в Z значение в памяти по адресу, который был записан в Z (0x9000), т.е. нажатую клавишу
 SET [A], 0 ; Сбрасываем значение нажатой клавиши
 SET PC, POP ; В итоге, у нас в регистре Z записан код нажатой клавиши. Возвращаемся назад.

Значение нужно сбрасывать для того, чтобы знать - нажимал еще пользователь клавишу или нет. А то, если мы нажмем "А", то в памяти будет "А", пока не нажмем другую клавишу.

Теперь выведем на экран наш прочитанный символ:

Code

; Основоной код программы
: main
 JSR kbinput ; Читаем символ с клавиатуры
 IFE Z, 0x0000 ; Если пользователь ничего не нажал...
 SET PC, main ; ... снова читаем символ с клавиатуры
 JSR transform ; Переводим код нажатой клавиши в составляющие
 ADD Z, 0xf000 ; Прибавляем цвет. Как это работает?
 SET [0x8000], Z ; Выводим Z...
 SET PC, main
;====================================

Вот, собственно и все, что нужно знать о чтении клавиши. Но мы пойдем дальше - выведем код символа на экран.

Немного теории:

Если у нас есть символ с кодом 0x2F, то как же нам перевести этот код в буквы "2" и "F"?
Обратимся к математическим вычислениям.
Для простоты объяснения, я в пример возьму десятичное число: 29.

Что бы нам получить, что младший разряд именно 9, мы узнаем остаток от деления на 10. Ведь, если делить на десять, то младший разряд и будет остатком от деления. В нашем случае же это 9. Вот и все. Почти.

Теперь нам нужно знать старший разряд. Чтобы упростить это дело, мы просто старший разряд переведем в младший разряд.

Сначала, вычитаем из нашего числа (29) остаток от деления на 10 (9), т.е. младший разряд. Получим число 20. Делим его на 10, и вот - наш старший разряд (2) уже стал младшим разрядом. Осталось узнать остаток от деления на 10.

Вы не поверите, но в шестнадцатеричной системы так же. Только вместо остатка от деления на 10, мы узнаем остаток от деления на 16 (0x10). 

Итак, допустим, мы узнали, что младший разряд 0xF, а старший 0x2. Теперь нужно их преобразовать в коды символов. Делается это очень просто. Мы берем ASCII таблицу кодов. Смотрим, откуда начинается цифра 0. Затем, проверяем является ли наш разряд цифрой или бувкой? Если цифрой, то просто прибавляем к разряду код начала цифр. Т.е. Если у нас число 0x0 - прибавляем к нему код символа 0 (0x30), получаем символ-цифру.

Т.к. буквы идут не сразу после цифр, то если наш разряд оказался не цифрой, то проверяем его на "буквенность". Проделываем то же самое, как с цифрой, но с одним ухищрением. Т.к. буквенный разряд у нас уже равен 10-и в десятичной системе, то и прибавлять надо на десяток меньше, чем в сам код. А - начинается с 0x41. Вычитаем десятку (0xA) - получаем 0x37. Вот мы и получили коды символов разрядов. Вот функция, которая все это делает:

Code
; Подготовка регистров X и Y в
; нужный нам вид, а именно в вид кода
:transform
 SET  X, Z ; Регистр Z мы не трогаем, а работать будем с Х
 MOD X, 0x10 ; Остаток от деления на 0x10(16). В итоге, мы получим нужную нам цифру в значение. Прим. 0x2F станет 0xF
 SET A, X ; Копируем Х в А
 IFG 0xA, A ; Если Х - обычная цифра
Категория: Туториалы | Добавил: Defend (21.04.2012)
Просмотров: 395 | Теги: notch, Space, 0x10c, mmo, космос, туториал, нотч, dcpu-16, game, игра | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Defend Developing | 2024 | Нашёл баг?