Читаем Код. Тайный язык информатики полностью

Код обработчика намного длиннее кода инициализации. Именно он отвечает за выполнение всех по-настоящему полезных функций.

При каждом нажатии клавиши на клавиатуре сигнал прерывания заставляет микропроцессор перейти от команды HLT в конце кода инициализации к обработчику клавиатуры, использующему инструкцию IN (Input, «Ввод») для определения нажатой клавиши, а затем производит некое действие в зависимости от нажатой клавиши (то есть обрабатывает ее нажатие) и выполняет команду RET (Return, «Возврат») для возвращения процессора к команде HLT, где он будет ожидать следующего прерывания.

Если нажатой клавише соответствует буква, цифра или знак препинания, обработчик клавиатуры использует скан-код, чтобы определить соответствующий код ASCII с учетом того, была ли нажата клавиша Shift. Впоследствии он записывает этот код ASCII в видеопамять в соответствии с позицией курсора. Эта процедура называется эхо — отображение на экране символов, соответствующих нажатым клавишам. Курсор сдвигается на одну позицию вправо, располагаясь сразу после только что выведенного на экран символа. Таким образом в клавиатуру можно ввести множество символов, и они будут отображены на экране.

Если была нажата клавиша Backspace (соответствующая коду ASCII 08h), обработчик клавиатуры стирает последний записанный в видеопамять символ и перемещает курсор на одну позицию назад. (Стирание символа происходит путем записи кода ASCII 20h (символ пробела) в конкретную ячейку памяти.)

Обычно человек, работающий с клавиатурой, набирает символьную строку, пользуясь клавишей Backspace для исправления ошибок, а затем нажимает клавишу Return, часто обозначаемую словом Enter. Точно так же, как нажатие клавиши Return на электрической пишущей машинке указывает на необходимость перехода к началу следующей строки, нажатие Enter означает, что пользователь закончил набирать строку текста.

Когда обработчик клавиатуры взаимодействует с клавишей Return, или Enter (которая соответствует коду ASCII 0Dh), строка текста в видеопамяти интерпретируется как команда компьютеру, указание выполнить некое действие. Обработчик клавиатуры включает командный процессор, который понимает, например, три команды: W, D и R.

Если строка текста начинается с буквы W, она соответствует команде «Записать» (Write) некоторые байты в память. Допустим, на экране введена следующая строка.

W 1020 35 4F 78 23 9B AC67

Эта команда сигнализирует командному процессору, что нужно записать шестнадцатеричные байты 35, 4F в адреса памяти начиная с 1020h. Для выполнения этого задания обработчик клавиатуры должен перевести коды ASCII в байты. Такая трансформация обратна той, что я продемонстрировал ранее.

Если строка текста начинается с буквы D, она соответствует команде «Отобразить» (Display) некоторые из содержащихся в памяти байтов. В ответ на строку командный процессор отображает на экране 11 байт, хранящихся в ячейках памяти начиная с 1030h.

D1030

Я упоминаю 11 байт, потому что именно столько уместится в строке шириной в 40 символов после адреса. Вы можете использовать команду «Отобразить» для просмотра содержимого памяти.

Если строка текста начинается с буквы R, то она соответствует команде Run («Запустить»). Эта команда выглядит так:

R1000

и означает: «Запустить программу, которая хранится в ячейках памяти начиная с адреса 1000h». Командный процессор сохраняет адрес 1000h в пару регистров HL, затем выполняет команду PCHL, которая загружает в счетчик команд содержимое регистров HL, при этом осуществляется переход к соответствующему адресу.

Создание работоспособного обработчика клавиатуры и командного процессора — шаг вперед. После этого вам больше не придется мучиться с пультом управления. Ввод данных с клавиатуры проще, быстрее и аккуратнее.

Конечно, все еще остается нерешенной проблема исчезновения написанного кода при отключении питания. По этой причине вы, вероятно, решите хранить весь этот новый код в постоянной памяти, или ПЗУ. В предыдущей главе мы обсуждали микросхему ПЗУ, содержащую все комбинации точек, необходимые для отображения на экране символов ASCII, и предположили, что эти данные были «зашиты» в нашу микросхему при ее производстве. Вы также можете программировать микросхемы ПЗУ дома. Программируемые постоянные запоминающие устройства (ППЗУ) можно запрограммировать только один раз. Стираемые программируемые постоянные запоминающие устройства (СППЗУ) можно программировать и перепрограммировать после полного удаления данных ультрафиолетовым излучением.

Как вы помните, мы оснастили платы RAM DIP-переключателем, который позволяет указать ее начальный адрес. Если вы работаете с системой 8080, то для одной из плат RAM начальным адресом будет 0000h. После подключения микросхемы ПЗУ она займет адрес 0000h, а плату RAM можно будет переключить.

Перейти на страницу:

Похожие книги