我注意到大多数Nes / Atari等游戏都是用汇编语言编写的,但是那个时候C、COBOL和FORTRAN存在,我认为这些高级语言会使编码更容易,那么为什么他们选择使用汇编语言而不是这些可用的高级语言呢?
我注意到大多数Nes / Atari等游戏都是用汇编语言编写的,但是那个时候C、COBOL和FORTRAN存在,我认为这些高级语言会使编码更容易,那么为什么他们选择使用汇编语言而不是这些可用的高级语言呢?
当时的游戏使用了8位CPU芯片和微小的内存,例如2kB。这个答案会占用超过一半的RAM。
编译代码是不可能的。即使在具有“大”内存(例如“64K”)的8位CPU上,编译代码也很难使用;直到16位微处理器出现后才普遍出现。
此外,唯一有用的语言是C语言,但它尚未成为主流。当时,8位微型机上几乎没有C语言编译器。
但即使使用C语言,也没能帮上太多忙。那些游戏中有可怕的廉价hack技巧,几乎需要特定于时间的指令循环...例如,精灵的Y坐标可能取决于(在视频扫描中)何时写入其控制寄存器。(发抖...)
现在有一种不错的解释字节码语言,在那个时候或稍晚一些出现:运行在UCSD P-System上的UCSD Pascal。虽然我不是Pascal的粉丝,但对于那些早期的处理器来说,它比其他语言都要先进得多。但是,它无法适用于游戏或足够快地运行游戏。
"让编码更容易做对"
这并不重要。
高性能,最小内存使用是必要的。
易于编码是无关紧要的。
请记住,早期游戏在非常缓慢的处理器上只有微小的内存,并且没有实际设备。东西基本上是直接连接到CPU芯片。
过去的编译器不如我们现在拥有的编译器那么优秀。因此,许多人感到,无论是正确还是错误,他们都可以超越编译器进行优化。
在它们被开发的时候,高级语言还没有出现或者在它们必须运行的平台上表现不佳。
内存和速度一直是游戏中至关重要的因素。我的姐夫拥有一套远远超过我运行虚拟服务器和桌面电脑的系统,他抱怨游戏的刷新率。汇编代码可以提供优化代码的能力,而旧编译器可能无法实现这种优化。现代优化编译器可以进行优化,使得生成的代码比手写代码更快。
旧游戏在计时方面严重依赖CPU速度。它们在现代CPU上运行几倍于原来的速度,会导致运行出错。其中一种延迟方法是运行一个循环,递增或递减一个计数器一定次数。(这些可能会被编译器优化掉。)