Как получить код для правильной работы на Apple II - PullRequest
1 голос
/ 09 ноября 2019

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

Затем, используя ciderpress, я могу поместить это на образ диска. Однако здесь начинаются мои проблемы. Когда я редактирую атрибуты файла, делая его двоичным, Ciderpress меняет то, что называется «aux Type (hex)», на D818. Я не уверен, почему это так (изменив это на 6000, где я сказал, что RAM запускается в моем конфигурационном файле 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 Ответ

1 голос
/ 10 ноября 2019

Ваша проблема не столько в знаниях 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, путь и файловая часть (т. Е. Ветвь данных, ветвь ресурса, образ дискаили комментарий).

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

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

Например

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

Теперь ваш выходной файл имеет имя:

add#066000.bin

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

...