如何重新定位 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]
.
有一个直接页面
背景资料
作为对 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]
.