В этой статье мы углубимся в захватывающую сферу программирования Commodore 64, отправимся в 80-е, чтобы раскрыть искусство создания машинного кода с использованием надежного языка BASIC.

Раскрывая вызов

Как упоминалось в предыдущей части, мои поиски привели меня к книге по ассамблее, вновь разжигая мои поиски знаний.

Первое, что меня впечатлило, это возможность запоминать машинные коды, а затем вызывать их для исполнения, используя только BASIC. Кому-то это может показаться банальным, но для меня это было открытием. В эпоху, когда дисководы и ассемблеры не всегда были под рукой, Бейсик был верным спутником.

Использование ОСНОВНОЙ магии

Чтобы продемонстрировать мастерство BASIC, я проведу вас через создание программы «HELLO WORLD» в машинном коде, и метод, лежащий в основе этого волшебства, удивительно прост.

Основные ОСНОВНЫЕ команды:

  • PEEK(‹адрес памяти›): извлекает содержимое ячейки памяти по заданному адресу.
  • POOKE ‹адрес памяти›, ‹значение›: Записывает значение в определенную ячейку памяти.
  • READ, DATA: создает и последовательно читает массив данных.

Наш первоначальный проект включает в себя запись символа в видеопамять, что достигается за счет краткой структуры программы.

Часть BASIC здесь действует как загрузчик программ в машинных кодах.

  • Используя команду READ, мы извлекаем значения машинного кода одно за другим до завершения.
  • Оператор POKE старательно переносит эти сегменты в память, начиная с адреса 49152 с инкрементным смещением.

После завершения цикла инструкция SYS вызывает хранимую процедуру машинного кода, инициируя выполнение. Сам машинный код элегантно прост. Записываем код символа «x» (24) в аккумулятор, сохраняя его в начале видеопамяти (адрес 1024).

Наше исследование здесь не останавливается. Процесс распространяется на вывод целых слов, передачу данных из BASIC в машинный код и взаимодействие с динамической памятью.

Я также могу передавать данные из Бейсика в программу в машинных кодах.

Здесь буквенный код запрашивается через INPUT, а затем через POKE полученное значение записывается в определенную ячейку памяти.
Программа машинного кода берет данные из этой ячейки памяти.

Вот такое программирование в машинных кодах прямиком из бейсика.

Путешествие заново

Размышляя о своем первом знакомстве с BASIC на домашнем компьютере на базе Z80, я снова начал уважать его возможности. Методы BASIC плавно переходят к программированию на ассемблере, а сам язык становится мощным инструментом, особенно благодаря методологиям, подробно описанным в этой статье.

Продолжение Одиссеи

Вооружившись новыми знаниями, я готов продолжить свою одиссею 80-х. Поиск продолжается по мере того, как я все глубже погружаюсь в потенциал C64 и Assembly, особенно в решении интригующих математических задач.

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