Уровень 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, и замена чисел перемещает пиксель по экрану. Чужой код — такой же материал, как и свой.

Материалы по теме

Решение для самопроверки

Сначала попробуйте собрать схему сами. Решение ниже — способ свериться, если застряли или уже справились.

Что должно получиться: пиксель горит в (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.