【问题标题】:How to get code to correctly run on an Apple ii如何让代码在 Apple ii 上正确运行
【发布时间】:2019-11-09 16:50:48
【问题描述】:

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

然后,使用 ciderpress,我可以将它放到磁盘映像中。但是,这是我的问题开始的地方。当我编辑文件的属性,使其成为二进制文件时,Ciderpress 将名为“辅助类型(十六进制)”的内容更改为 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;
}

【问题讨论】:

  • 您可能想在retrocomputing.stackexchange.com 上提问。 (我认为即使您使用的是模拟器,而不是真正的 Apple II,它也会成为该网站的主题。)

标签: assembly 6502 ca65 apple-ii


【解决方案1】:

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

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

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

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

6000-   18          CLC
6001-   D8          CLD

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

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

实现您想要的一种简单方法是使用以下命令指定文件类型 (BIN) 和地址 (6000):

文件属性保留

文件属性保存机制权威指南 可以在"library" section of the www.nulib.com web site 中找到 CiderPress 的雇员。这是对该主题的简要介绍。

添加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 映像中,并且可以执行内容。

【讨论】:

  • 谢谢你,尼克!这让我明白了很多。
  • @Andrew:没问题,很高兴我能帮上忙。
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2012-10-02
  • 2021-08-03
  • 2018-11-29
  • 2018-12-23
相关资源
最近更新 更多