西门子 PC 100 汇编手册中的 6502 非法 Opcodes (1980)

2025-05-08 by Michael Steil

6502 的"非法" Opcodes 曾引起家庭电脑爱好者的极大兴趣,并且在各种 杂志上发表过分析文章。但人们永远不会想到像西门子这样的公司会在 1980 年的编程手册中记录非法 Opcodes。

PC 100 汇编手册

西门子 PC 100 基本上是一个装在机箱里的 Rockwell AIM-65 单板计算机,配备了 6502 处理器、集成键盘、LED 显示器和热敏打印机,专为教育和开发目的而定制,并提供本地化的文档和修改后的 ROM。

西门子的德语手册主要基于 Rockwell 的原始手册,但重新调整了内容。特别值得关注的是汇编手册:

[![](https://www.pagetable.com/docs/pc100_illop/Assembler-Handbuch Personal-Computer PC 100.jpg)Siemens Assembler-Handbuch Personal-Computer PC 100, Ausgabe 1980/1981](https://www.pagetable.com/<docs/pc100_illop/Assembler-Handbuch Personal-Computer PC 100.pdf>)(124 页,17 MB)

它由以下部分组成:

Assembler-Handbuch | Rockwell | 描述 ---|---|--- 第 1–9 章 | User’s Guide, Chapter 5 | 汇编器参考 第 10 章 | Programming Manual, Appendix B | 6502 参考 第 11 章 | User’s Guide, Chapter 3 | 监视器参考 第 12 章 | – | 表格

“特殊指令”

6502 参考的末尾有三页额外的页面,描述了“Sonderbefehle”(“特殊指令”),这些指令不在本章翻译的原始 MOS/Rockwell 6502 参考中。我们可以假设这是西门子的原创研究。

以下是翻译后的转录:

10.3 特殊指令

微处理器识别出许多特殊的指令,这些指令在很大程度上是未知的,但可以为用户在程序开发中提供有价值的帮助。下表中所选择的助记符仅是对有效表示这些指令的建议。

注意: 这些指令不是规范的一部分,可能会随时更改,恕不另行通知。特殊的命令无法被汇编器程序解码,必须使用 .BYT 指令进行编程(请参阅第 10.2 章)。

AAX 累加器和 X 寄存器之间的逻辑“AND”运算,带结果存储。

操作 A ∧ X → M,带零页 und (A) ∧ X ∧ $02 → M,带绝对地址

标志

N | Z | C | I | D | V ---|---|---|---|---|--- – | – | – | – | – | – 寻址模式 | 汇编器助记符 | OP CODE | 字节数 ---|---|---|--- 零页 | AAX Oper | 87 | 2 零页,Y | AAX+16 Oper | 97 | 2 X-Reg. ∧ $02Absolute | AAX+23 Oper | 9E | 3 X-Reg. ∧ Accu ∧ $02Absolute | AAX+24 Oper | 9F | 3

DCM 将内存位置的值减 1,并将结果与累加器进行比较。

操作 M – 1 → M 且 A – M

标志

N | Z | C | I | D | V ---|---|---|---|---|--- V | V | V | – | – | – 寻址模式 | 汇编器助记符 | OP CODE | 字节数 ---|---|---|--- 零页 | DCM Oper | C7 | 2

LAX 加载累加器和 X 寄存器

操作 M → A 且 M → X

标志

N | Z | C | I | D | V ---|---|---|---|---|--- V | V | – | – | – | – 寻址模式 | 汇编器助记符 | OP CODE | 字节数 ---|---|---|--- 立即数 | 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 | – | – | – 寻址模式 | 汇编器助记符 | OP CODE | 字节数 ---|---|---|--- 零页 | ISB Oper | E7 | 2

注意: 指令 LAX Immediate、AAX X reg $02 和 AAX X reg accu $02 并非总是被正确处理。

10.4 汇编语言编程

由于上述特殊指令无法被汇编器程序解码,因此必须使用 .BYT 指令进行编程。

分析

Opcodes | Siemens 助记符 | 现代助记符 | 评论 ---|---|---|--- 87/97 | AAX | SAX | 正确。也存在 izx/abs 寻址模式。 9E/9F | AAX | SHX/SHA | 它是 aby,而不是 abs。 此外,他们的常量 ($02) 实际上是指令地址的高字节。(不应该与其他“AAX” Opcodes 分组。) 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 寻址模式。

总而言之:

我们可以假设这要么是西门子作者的原创研究,要么是从其他来源复制的。 如果这些信息来自 MOS 或 Rockwell,他们肯定会:

致谢

感谢 Gerald SchiepeckVCFE 2025 上的 AIM-65 和 PC 100 展览,以及 Marco Baye 提请我注意汇编手册中的这一部分。

分类 6502, Archeology, Literature Siemens Personal Computer PC 100 Bedienungsanleitung, Ausgabe 1981/1982