西门子 PC 100 汇编手册 (1980) 中的 6502 非法操作码
西门子 PC 100 汇编手册 (1980) 中的 6502 非法操作码
2025-05-08 by Michael Steil
6502 的 "非法" 操作码 曾引起家庭计算机爱好者的浓厚兴趣,并且在各种 杂志上发表了分析文章。 但人们万万没想到像西门子这样的公司会在 1980 年的编程手册中记录非法操作码。
PC 100 汇编手册
西门子 PC 100 基本上是一个装在机箱中的 Rockwell AIM-65 单板计算机,配备 6502 处理器、集成键盘、LED 显示屏和热敏打印机,专为教育和开发目的而设计,并提供本地化文档和修改后的 ROM。
西门子的德语手册主要基于 Rockwell 的原始版本,但内容经过重新排列。 特别值得关注的是汇编手册:
[西门子汇编手册 Personal-Computer PC 100,1980/1981 版](https://www.pagetable.com/<docs/pc100_illop/Assembler-Handbuch Personal-Computer PC 100.pdf>)(124 页,17 MB)
它由以下部分组成:
汇编手册 | Rockwell | 描述 ---|---|--- 第 1-9 章 | 用户指南,第 5 章 | 汇编器参考 第 10 章 | 编程手册,附录 B | 6502 参考 第 11 章 | 用户指南,第 3 章 | 监控器参考 第 12 章 | – | 表格
“特殊指令”
6502 参考手册的末尾有三页额外的内容,描述了 “Sonderbefehle”(“特殊指令”),这些指令不在本章翻译的原始 MOS/Rockwell 6502 参考手册中。 我们可以认为这是西门子的原创研究。
以下是翻译后的内容:
10.3 特殊指令
微处理器识别出许多特殊的指令,这些指令在很大程度上是未知的,但可以为用户在程序开发中提供有价值的帮助。 下表中所选的助记符仅是有效表示这些指令的建议。
注意: 这些指令不属于规范的一部分,可能会随时更改,恕不另行通知。 特殊命令无法被汇编器程序解码,必须使用 .BYT 指令进行编程(请参阅第 10.2 章)。
AAX 累加器和 X 寄存器之间的逻辑 “AND” 运算,结果存储。
操作 A ∧ X → M,零页和 (A) ∧ X ∧ $02 → M,绝对地址
标志
N | Z | C | I | D | V ---|---|---|---|---|--- – | – | – | – | – | –
寻址方式 | 汇编器助记符 | 操作码 | 字节数 ---|---|---|--- 零页 | AAX Oper | 87 | 2 零页,Y | AAX+16 Oper | 97 | 2 X 寄存器 ∧ $02 绝对地址 | AAX+23 Oper | 9E | 3 X 寄存器 ∧ Accu ∧ $02 绝对地址 | AAX+24 Oper | 9F | 3
DCM 将内存位置的值减 1,并将结果与累加器进行比较。
操作 M – 1 → M,A – M
标志
N | Z | C | I | D | V ---|---|---|---|---|--- V | V | V | – | – | –
寻址方式 | 汇编器助记符 | 操作码 | 字节数 ---|---|---|--- 零页 | DCM Oper | C7 | 2
LAX 加载累加器和 X 寄存器
操作 M → A 和 M → X
标志
N | Z | C | I | D | V ---|---|---|---|---|--- V | V | – | – | – | –
寻址方式 | 汇编器助记符 | 操作码 | 字节数 ---|---|---|--- 立即数 | LAX Oper | AB | 2 零页 | LAX-4 Oper | A7 | 2
ISB 将内存单元的值加 1,然后从累加器中减去结果
操作 M + 1 → M 和 A – M → A
标志
N | Z | C | I | D | V ---|---|---|---|---|--- V | V | V | – | – | –
寻址方式 | 汇编器助记符 | 操作码 | 字节数 ---|---|---|--- 零页 | ISB Oper | E7 | 2
注意: 指令 LAX Immediate、AAX X reg $02 和 AAX X reg accu $02 并非总是被正确处理。
10.4 汇编语言编程
由于上述特殊指令无法被汇编器程序解码,因此必须使用 .BYT 指令进行编程。
分析
操作码 | 西门子助记符 | 现代助记符 | 注释 ---|---|---|--- 87/97 | AAX | SAX | 正确。 也存在 izx/abs 寻址模式。 9E/9F | AAX | SHX/SHA | 它是 aby,而不是 abs。 此外,它们的常数 ($02) 实际上是指令地址的高位字节。 (它不应该与其他的 “AAX” 操作码分组。) C7 | DCM | DCP | 正确。 也存在 zpx/izx/izy/abs/abx/aby 寻址模式。 AB | LAX | LAX | 基本正确。 文档中记录的不稳定性来自 A 寄存器的位有时会渗入计算中。 (更多信息) A7 | LAX | LAX | 正确。 也存在 zpy/izx/izy/abs/aby 寻址模式。 E7 | ISB | ISC | 正确。 也存在 zpx/izx/izy/abs/abx/aby 寻址模式。
总而言之:
- 他们正确地获得了他们指定为 “稳定” 的操作码,但缺少许多寻址模式。
- 他们错误地获得了 9E/9F(他们指定为 “不稳定”),可能是因为没有测试足够多的输入组合。
- 他们正确地获得了 AB(实际上是不稳定的),但他们没有进一步研究不稳定性的根源。
我们可以假设这要么是西门子作者的原创研究,要么他们从其他来源复制了它。 如果信息来自 MOS 或 Rockwell,他们肯定会
- 列出所有寻址模式。
- 不添加类似 “指令 […] 和 […] 并非总是被正确处理” 的语句,或者更好地是,省略不稳定的指令。
致谢
感谢 Gerald Schiepeck 在 VCFE 2025 上的 AIM-65 和 PC 100 展览,以及 Marco Baye 提请我注意汇编手册中的这一部分。
分类 6502, 考古, 文献 西门子 Personal Computer PC 100 Bedienungsanleitung, Ausgabe 1981/1982