如何重新定位 65816 上的零页

How do you relocate the Zero Page on a 65816

背景资料

作为对 8 位技术一时感兴趣的现代 PHP 开发人员,我对真正的低级内容有些粗略。尽管我使用过 Z80 处理器,并在大学做过一些 MIP 组装,但我对 65x 处理器系列的了解最少。

我想要达到的目标

我想做的是为我的应用程序将零页重新定位到 0xd300 - 我进行了强制性的 Internet 搜索,但找不到我能够理解的好例子。我在 65c02 中工作,但使用的是 65816 处理器;多亏了一位朋友,我发现您只能在本机模式下重新定位零页,而不能在仿真模式下重新定位,因为 65c02 不支持它。这不是问题,因为我可以为我正在做的事情切换到本机模式,如果我想 return 优雅地切换到 BASIC(嗯,不仅我知道)。

如果有人也可以提供 8502 (Commodore C128) 的示例,据我所知,它有一个可重定位的零页。我知道这是两个问题合二为一,但它与我想做的事情有关。

直接页面寄存器 D 是一个 16 位寄存器,指定 bank 0 中的哪个 256 字节页面应该是当前直接页面(您称之为零页面)。

您可以使用多种不同的指令写入 D。所以例如这样的事情应该有效:

rep #  ; 16-bit accumulator
lda #0
tcd       ; transfer 16-bit accumulator to D

请注意,页面可以从任何字节边界开始。所以你可以例如设置 D=2 并在 [0002, 0101].

有一个直接页面