Уровень 27: Hello, Ports!
Открыть уровень →Где это в машине →
Задание
Цель: Измените константы в программе так, чтобы пиксель зажёгся в координатах X=4, Y=12. Затем заранее заполните массив для «Змейки» (уровень 29): запишите 7 в RAM[10] и 8 в RAM[11] через индексный регистр IX (LDX / STA [IX] / INX).
Порты ввода-вывода: 252=X-координата, 253=Y-координата, 255=запись пикселя.
Главная идея уровня: готовая программа — это текст, который можно читать и точечно править: константы портов стоят прямо в инструкциях STA, и замена чисел перемещает пиксель по экрану. Чужой код — такой же материал, как и свой.
Материалы по теме
- Ассемблер: самый честный язык программирования
- Справка по ассемблеру →
- MatrixDisplay — матричный дисплей
- LED8 — светодиодная линейка
- AddrDecoder — дешифратор адреса
Решение для самопроверки
Сначала попробуйте собрать схему сами. Решение ниже — способ свериться, если застряли или уже справились.
Что должно получиться: пиксель горит в (4,12), а в RAM[10]=7 и RAM[11]=8 лежат координаты для Змейки.
Инструкция LDA загружает в аккумулятор непосредственное значение (операнд). Инструкция STA записывает значение аккумулятора по адресу операнда.
Программа-заготовка использует LDA 8. Вам нужно изменить значения 8 на 4 и 12: замените LDA 8 на LDA 4 в первой строке и LDA 8 на LDA 12 во второй.
1. Откройте вкладку «Ассемблер» в правой панели. 2. Замените первую LDA 8 на LDA 4 (X=4). 3. Замените вторую LDA 8 на LDA 12 (Y=12). 4. Нажмите «Выполнить». 5. Нажмите «Чекпойнт 1» — пиксель на дисплее должен загореться в позиции (4,12).
Часть 2 — массив для «Змейки» через IX. Индексный регистр IX на схеме уже подключён: он принимает данные с шины, а мультиплексор адреса по команде дешифратора подставляет содержимое IX на адресный вход RAM вместо операнда. Внизу заготовки добавьте шесть строк после STA 255 (до HLT):
6. LDX 10 — записывает константу 10 в IX (обычная загрузка в регистр).
7. LDA 7 — кладёт значение 7 в аккумулятор.
8. STA [IX] — записывает аккумулятор в RAM, но адресом служит не операнд, а содержимое IX: RAM[10] = 7.
9. INX — увеличивает IX на 1: теперь IX = 11.
10. LDA 8 и STA [IX] — так же пишется RAM[11] = 8.
Нажмите «Выполнить», затем «Чекпойнт 2» — он проверит, что в RAM[10] лежит 7, а в RAM[11] — 8. Этот приём — тренировка работы с массивом в «Змейке» (уровень 29): там координаты точек тела будут жить в RAM по индексам.
Проверь себя
Почему после LDA 8 значение 8 можно записать дважды двумя STA подряд?
STA не сбрасывает аккумулятор: обе записи заберут одно и то же значение из Acc.