1

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

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

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

谁能帮我理解发生了什么?

添加.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

苹果.cfg:

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

4

1 回答 1

2

您的问题与 Apple II 知识无关,而与在工具之间传递信息有关。如果您正在为 C64 构建,那么您将使用 PRG 格式来设置加载地址。在这里查看我的答案

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

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

在任何情况下,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 文件时必须恢复四个属性:文件类型、辅助类型、路径名和文件部分(即数据分叉、资源分叉、磁盘映像或注释)。

文件类型和辅助类型

ProDOS 文件使用 8 位文件类型和 16 位辅助类型。这些可以被编码成一个六字符的十六进制字符串,看起来像“#062000”。'#' 用于指示属性保存字符串的开始。

例如

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

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

add#066000.bin

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

于 2019-11-10T09:05:41.717 回答