80年代的计算机程序如此小?

时间:2016-07-31 11:07:44

标签: memory-management programming-languages hardware

当你看到80年代的几台旧计算机上编写的程序时,比如commodore64,atari和NES,它们的尺寸非常小,大多数都是几百千字节。

更不用说这些计算机上运行的内存非常少,就像Commodore 64有64KB的RAM并且设法运行GUI操作系统一样!

这些程序如何编写得如此之小?

鉴于他们的硬件限制,其中许多似乎令人难以置信。 在商品64上,它的分辨率为320 x 200 @ 4bpp,它会耗尽其64k内存的一半

虽然Atari 2600只有128字节的ram

2 个答案:

答案 0 :(得分:2)

  1. 在今天的应用中,80%或更多的磁盘大小是图形元素。

  2. 如果相对于程序员时间而言空间昂贵,程序员花费更多时间来优化大小,并经常进行原始组装。如今,空间便宜,因此为公司节省空间并不值钱。

  3. 将记事本与Edlin比较。对于他们的范例来说,两者都是最简单的合理文本编辑器。 Edlin可以轻松地将程序和数据放入不到64 K.但是没有人可以声称记事本是图形Edlin。

  4. C64没有gui操作系统。它有一个基本的菜单系统,熟练的程序员可以使用自定义硬件精灵来覆盖小图形图标。

  5. 在低分辨率模式下,每像素有4位(16种颜色)。在高分辨率模式下,每像素1位(单色)。今天的系统假设每像素16位或更好,1080p(大约1900 x 1080像素)。甚至单色显示器也从8k膨胀到超过1MB。对于期望24位色深或更好的现代显示器,单帧所需的最小存储量是数兆字节。除此之外,还有用于缓冲和其他现代显卡的工作空间,并且您的图形需要很长时间才能运行到千兆字节。这一代计算机上的高分辨率模式很少被使用是有原因的。

  6. 加载程序时,卸载了操作系统。你一次只运行一个程序。今天我经常运行二十个或更多应用程序,更不用说完成我的工作所需的几十个后台进程。

答案 1 :(得分:0)

由于C64是8位计算机,所有汇编语言命令都是8位长。除此之外,它们之后可能有0-2个数据字节。因此每个命令需要1-3个字节的ram。

现在,当我们向更现代化的系统发展时,CPU已经是64位了。

基本上,所有CPU都有一些"首选尺寸"对于变量(它可以有效地处理),并且通常,它与多少"位"完全相同。你的处理器有吗?这通常是" int"在C中(除了它保证总是至少16位,而显然"首选" 8位CPU上的大小是8位)

因此,对于一个整数,无论​​它多么小,使用这个"首选大小"是最有效的。 所以在8位系统上,这将是8位(显然不能是int),而在64位系统上,那将是64位。所以它的大小是8倍。

当然,您可以使用较小的类型,但效率通常较低,而且通常也会影响结构填充。

但是使用指针,你经常会遇到CPU的位数(因为你需要能够解决整个内存范围)

虽然数据值通常较大,但汇编语言命令也是如此。另一方面,这允许更复杂的命令,这些命令可以执行操作,需要更多的8位命令。

当然也有例外,例如ARM上的拇指命令集。

我所说的是,现代平台上的高效汇编语言代码比C64汇编语言占用更多空间(但受限制较少,并且可以做很多花哨的东西,例如乘法/除法等)。

对于C64上的图形操作系统,最着名的2个是GEOSContiki。 Final Cartridge 3还有一个内置的窗口系统,但iirc只允许内置程序,并且没有任何有用的东西。

GEOS相当"限制",没有进行任何真正的多任务处理(您可以选择在窗口的主区域中显示哪个程序,但f.ex.时钟始终在运行) ,基本上就是这样。即使它受到限制,也有f.ex.相当不错的文字处理器(GEOWrite),我在当天用过它。

Contiki更多"现代" (实际上大多是用C iirc编写的),它实际上比你想象的要简单得多。它以字符gfx模式运行(因此屏幕图形为1000字节,字符集为0 2k,色彩为1k),因此只有4k浪费。

而且我说Contiki更像是"概念证明"比实际有用的操作系统,但与GEOS不同,它是真正的(合作)多任务处理。

我猜你认真地高估了一个非常简单的图形操作系统所需要的东西。相反,你可以比较AmigaOS,它在当时是非常现代的,而且还很小,并且在CPU(内部)32位上运行,非常接近现代处理器。