Commodore的装配商:第1部分:MOS交叉装配器

2021-05-16 04:28:05

本文介绍了用于开发8位计算机的ROM的汇编程序的系列,本文介绍了1975年的“MOS交叉组件”,可用于时代的各种主要框架。

随着1975年的6502,MOS Technology,Inc。还发布了两个用于新架构的汇编程序:“交叉汇编程序”,可用于各种大型机和小型计算机,以及“驻留汇编程序”,在6502个系统上自然运行。 。

根据硕士的论文,用于基于微处理器的工业控制器的交叉汇编/模拟器,原始MOS交叉装配机与模拟器一起由伊利诺伊大学的学生Robert E.Blanton在Urbana-Champaign实施。

它是用Fortran编写的,并使用了6位(即所有大写)字符编码。在大学的CDC网络175系统上,它需要120k(!)60位内存的单词来运行,并具有“通常可接受的”响应时间。

然后使用交叉汇编器开发驻留汇编器(系列的第2部分),并设计用于兼容它,以便它符合相同的源格式,具有相同的数学特征和相同的指令和选项。这样,MOS定义了所有未来的Commodore汇编程序支持的基本格式。

今天,您希望在Linux,Windows或Mac上运行交叉汇编程序。但这些是不同的时间:当6502被释放时,微电脑刚刚出现 - 并且6502是这一班次的一部分 - 即使是PDP系列等第一冰箱大小的小型计算机才刚刚推出10年。大多数使用计算机在使用终端的计算机中拨入计算中心托管的大型机的计算机。市场非常零碎。

交叉汇编程序可在各种时间份额系统或用户系统上使用批量使用。

根据6502跨装配手册(6500-60P),截至1975年8月的支持平台是:

目前的计划涉及具有在几个更普遍的时间共享服务的多个产品中提供的软件。

此外,它还可以用于甲板销售。可以使用CDC,IBM和PDP-11类机的批量甲板,我们将在不久的将来支持其他几个流行的迷你和主要计算机系统。

1975 MCS6500微处理器软件支持手册显示了在联合计算系统(UCS)时间共享服务上运行的交叉汇编程序。

本文展示了爱荷华州大学在IBM 360/370上本地跨汇编程序的版本4。

然后,并非所有计算机系统都使用ASCII编码,并且某些计算机甚至没有支持小写。因此,源文件的编码是特定于平台运行跨汇编程序的平台,只允许大写字符。

; ; 650x交叉汇编程序样本程序。 ; * = $ C000定义源。 LDX#$ FF设置堆栈。 TXS加载堆栈指针。 LDA#$ F0加载Hex F0。 sta asave拯救了asave。 ; ;分配保存区域。 ; * = $ 0000 asave * = * 。结尾

关于标签和装配语句的开始列的规则实际上更加放松,因为来自C64 Kernal的这一非常压缩示例:

;命令串行总线设备侦听 ; Listn Ora#20美元;让听听ADR JSR RSP232;保护自我来自RS232 NMI' s list1 pha.

由于所有MNEMOS和寄存器名称都是保留的关键字,并且不能用于标签,因此汇编程序不会强制缩进汇编语句。在第一列开始的JSR RSP232是合法的。事实上,甚至标签也可能缩进。此示例将在语句之后添加注释,这是合法的,因为汇编程序无论如何陈述后忽略了所有内容。

如果您想获得最大可读性(并且不关心源的大小),您还可以缩进上面的示例:

;命令串行总线设备侦听 ; Listn Ora#20美元;让听听ADR JSR RSP232;保护自我从RS232 NMI' s list1 pha.

标签长度最多可达6个字符,因此可以使用7个字符的缩进进行语句,以便它们总是排队。这也是LST输出的格式化方式,这将在稍后描述。

装配语句的已接受语法与6502编程手册中的一个匹配。这包括将累加器作为参数的语句的语句:

一个附加功能是间接,y索引寻址模式的替代语法。此外

装配声明的操作数可以使用十六进制($),八进制(@),二进制(%)和十进制(无前缀)常量。使用+, - ,*和/是可能的数学表达式,但它们始终以左右进行评估,没有操作员优先级,没有括号分组。字符/字符串文字以&#39为前缀。

与20世纪70年代的大多数开发工具一样,汇编程序可以在装配期间创建所谓的列表文件(建议的文件扩展名为.lst),该文件显示源和并排生成的字节,并在纸上打印。以下是手册的示例:

卡#LOC代码卡 1 Cr = 15 2 lf = 12 3;低核心数据区域 4 0000 E7 06 Temtbl .Word G3TEM,G1TEM 5 0002 E7 05 6组= B10 7 0004 00 THI .BYTE 0 8 0005 00 TLO .BYTE 0 90006 00 00 00 00 3per .Word 0 *****错误**标签并在字母字符中开始 - 靠近第1列 10 0009 B1 0E下一个LDA(Savil)y [...] 269 07C9 C9 3B CMP#&#39 ;; 270 07CB 00 00 BEQ完成 *****错误**未定义的符号 - 第18栏附近 280 MOS / Technology的结尾650x装配版本4 错误= 2,警告数= 0

第一列(卡#)是源中的行号。 LOC字段是存储器地址,后跟输出字节(代码)和源行(卡),该汇编器重新缩进可读性。

卡命名法从20世纪60年代的主机源,其中每行文本由一个打卡表示。

错误消息显示为导致错误的行后的额外行。请注意,汇编程序将不惜此操作继续通过文件工作,并且将输出具有错误的行的占位符字节。

作为用户手册的一部分的Kim-1 ROM的原始LST打印输出是一个1200线LST文件的真实示例,符号表和末尾的Mnemo统计信息(.opt计数)。

汇编程序的主输出是二进制程序,它以所谓的“接口文件”的形式,具有建议的文件扩展名.obj。

交叉汇编程序在所有平台上运行的不同平台具有不同的单词大小,而且它们中的许多只能用文字测量存储器,并且甚至没有概念(8位)“字节”。因此,汇编程序无法输出二进制文件,而是写入便携式的十六进制编码的文本文件,如下所示:

最后一行是*; 00:上行的标识符* 4字符:前一行的数量* 4字符:校验和

仅此文本文件独立于平台,可以在不同的计算机系统之间轻松传输,例如,可以在不同的计算机系统之间传输。从时间共享系统下载,以便将其写入EPROM。

交叉汇编器用于MOS以创建第一6502代码,如KIM-1 ROM(如上所示)或TIM ROM(MCS6530-004)。

已经保留了大量原始Commodore源代码,1984年之前的所有代码都是一种非常类似于跨汇编器和驻留汇编程序支持的原始MOS定义的格式。所以一见钟情,它不太清楚哪种汇编商Commodore用于开发PET,VIC-20等和磁盘驱动器的ROM。