如何在 Apple ii 上正确获取代码 运行

How to get code to correctly run on an Apple ii

我已经在 6502 汇编中编写了一小段代码(add.asm,如下所示),但在 apple ii 模拟器上将其正确转换为 运行 时遇到了一些问题。使用下面的配置文件以及 ca65 和 ld65,我可以获得一个二进制文件进行编译。

然后,使用 ciderpress,我可以将它放到磁盘映像上。但是,这就是我的问题开始的地方。当我编辑文件的属性,使其成为二进制文件时,Ciderpress 将名为 "aux Type (hex)" 的内容更改为 D818。我不确定这是为什么(将其更改为 6000,我已经说过 ram 在我的 ld65 配置文件中启动并不能解决我将要描述的问题)。

在 Ciderpress 中,我可以查看我刚刚添加到磁盘映像的文件 add。它说它从位置 "D818" 开始。但是,它不包括 "STA ADR1" 之前的每一行,该行已超过程序的一半。当我在 appleii 模拟器上 运行 时,程序的行为确认似乎只存在代码的后半部分。

谁能帮我理解这是怎么回事?

add.asm:

CLC      ; CLEAR CARRY BIT
CLD      ; CLEAR DECIMAL BIT

ADR1 = 00 
ADR2 = 01
ADR3 = 02

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 = 00, size = E00, file = %O;
}
SEGMENTS {
CODE: load = RAM, type = ro;
DATA: load = RAM, type = rw;
}

您的问题与 Apple II 知识无关,而与在工具之间传递信息有关。如果您正在为 C64 构建,那么您将使用 PRG 格式来设置加载地址。 See my answer here.

CiderPress 很棒,但也有局限性,有时你必须了解它才能达到你想要的效果。还有其他选择;例如 AppleCommander supports the AppleSingle format which was added to cc65。 CiderPress 也支持它,但我还没有使用它的经验。

(我有时更喜欢使用 Merlin 32 and Cadius。)

无论如何,CiderPress 正在猜测您的二进制文件的类型和起始地址。 DOS "B" 类型的文件有一个 2 字节的加载地址头,因此地址 D818 来自:

6000-   18          CLC
6001-   D8          CLD

这些行是汇编程序指令,而不是代码,因此不会出现在输出二进制文件中。

ADR1 = 00
ADR2 = 01
ADR3 = 02

实现所需内容的一种简单方法是使用以下方法指定文件类型 (BIN) 和地址 (6000):

File Attribute Preservation

The definitive guide to the file attribute preservation mechanism employed by CiderPress can be found in the "library" section of the www.nulib.com web site. This is a brief introduction to the topic.

There are four attributes that must be restored when adding Apple II files: file type, aux type, pathname, and file part (i.e. data fork, resource fork, disk image, or comment).

File Type and Aux Type

ProDOS files use an 8-bit file type and a 16-bit aux type. These can be encoded in a six-character hexadecimal string that looks like "#062000". The '#' is used to indicate the start of an attribute preservation string.

例如

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

现在你的输出文件被命名为:

add#066000.bin

CiderPress 会将此文件正确添加到 DSK 图像中,并且可以执行内容。