Как заставить код правильно работать на Apple ii

Я написал небольшой фрагмент кода (add.asm, показанный ниже) на сборке 6502, но у меня возникли некоторые проблемы с его правильной работой на эмуляторе Apple II. Используя приведенный ниже файл конфигурации и ca65 и ld65, я могу получить двоичный файл для компиляции.

Затем, используя сидр-пресс, я могу записать это на образ диска. Однако здесь начинаются мои проблемы. Когда я редактирую атрибуты файла, делая его бинарным, Ciderpress меняет что-то под названием "aux Type (hex)" на D818. Я не уверен, почему это так (изменение этого значения на 6000, где я сказал, что оперативная память запускается в моем файле конфигурации ld65, не устраняет проблемы, которые я собираюсь описать).

В Ciderpress я могу просмотреть добавленный файл, который я только что добавил к образу диска. В нем говорится, что он начинается с местоположения "D818". Однако он не включает каждую строку до "STA ADR1", который находится в середине программы. Когда я запускаю это на эмуляторе appleii, поведение программы подтверждает, что существует только вторая половина кода.

Может ли кто-нибудь помочь мне понять, что происходит?

add.asm:

CLC      ; CLEAR CARRY BIT
CLD      ; CLEAR DECIMAL BIT

ADR1 = $6100 
ADR2 = $6101
ADR3 = $6102

LDA #01
STA ADR1
LDA #02
STA ADR2

LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR 
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3

RTS

apple.cfg:

MEMORY {
RAM: start = $6000, size = $8E00, file = %O;
}
SEGMENTS {
CODE: load = RAM, type = ro;
DATA: load = RAM, type = rw;
}

1 ответ

Решение

Ваша проблема связана не столько со знанием Apple II, сколько с передачей информации между инструментами. Если бы вы строили для C64, вы бы использовали формат PRG для установки адреса загрузки. Смотрите мой ответ здесь.

И CiderPress замечательный, но есть ограничения, и иногда вам нужно знать его, чтобы достичь того, чего вы хотите. Есть и другие варианты; например, AppleCommander поддерживает формат AppleSingle, который был добавлен в cc65. CiderPress тоже поддерживает его, но у меня пока нет опыта.

(Иногда я предпочитаю работать с Merlin 32 и Cadius.)

В любом случае CiderPress угадывает тип и начальный адрес вашего двоичного файла. Файлы типа DOS "B" имеют 2-байтовый заголовок адреса загрузки, следовательно, адрес D818 находится от:

6000-   18          CLC
6001-   D8          CLD

Эти строки представляют собой директивы ассемблера, а не код, и поэтому не появляются в выходном двоичном файле.

ADR1 = $6100
ADR2 = $6101
ADR3 = $6102

Один из простых способов добиться желаемого - указать тип файла (BIN) и адрес (6000), используя:

Сохранение атрибутов файла

Подробное руководство по механизму сохранения атрибутов файлов, используемому CiderPress, можно найти в разделе "библиотеки" на веб-сайте www.nulib.com. Это краткое введение в тему.

При добавлении файлов Apple II необходимо восстановить четыре атрибута: тип файла, тип вспомогательного файла, путь и часть файла (т. Е. Вилка данных, вилка ресурсов, образ диска или комментарий).

Тип файла и тип Aux

Файлы ProDOS используют 8-битный тип файла и 16-битный вспомогательный тип. Их можно закодировать в шестизначной шестнадцатеричной строке, которая выглядит как "#062000". Знак "#" используется для обозначения начала строки сохранения атрибута.

Например

.\bin\cl65.exe -o add#066000.bin -t apple2 -C apple.cfg add.asm

Теперь ваш выходной файл назван:

add#066000.bin

CiderPress правильно добавит этот файл к изображению DSK, и его содержимое может быть выполнено.

Другие вопросы по тегам