当你看一下为几台80年代的老电脑编写的程序,比如commodore64、atari和NES,它们的尺寸都非常小,大多数都是几百千字节。
更不用说这些计算机没有多少内存可以运行了,就像商品64有64 os的RAM,但却成功地运行了GUI操作系统一样!
这些程序是怎么写成这么小的?
考虑到他们拥有的硬件限制,他们中的许多人似乎令人难以置信。在一个商品64上,其320 x 200 @4bpp的分辨率将消耗掉其64k mem的一半。
而Atari 2600只有128字节的ram
发布于 2016-07-31 11:39:06
发布于 2016-08-16 01:06:05
我不能代表其他系统,但是代表C64 (和C128).
正如@pojo-guy所说,我们经常直接去组装,这降低了操作系统的开销,因为操作系统在ROM中,所以它不使用RAM。此外,您可以通过玩内存寄存器来翻转ROM,几乎将可用内存“加倍”(尽管其中一些“可用”内存是只读的,关键是您没有在操作系统例程上浪费宝贵的RAM )。通过使用ROM例程,并使用直装配,大量(内存)开销被消除。
对于位图,你有两个选择:高分辨率,或多色模式。在高分辨率(320 X 200),每个像素显示前景,或背景,颜色-所以你只需要320 x 200 = 64,000位或8000字节。
标准的多色模式以牺牲水平分辨率为代价提供四种颜色.引用C64程序员参考手册:
多色模式下的每个点可以是4种颜色之一:屏幕颜色(背景颜色寄存器#0)、背景颜色寄存器#1中的颜色、背景颜色寄存器#2中的颜色或字符颜色。唯一的牺牲是水平分辨率,因为每个多色模式点的宽度是高分辨率点的两倍。最小分辨率被多色模式的额外能力所补偿。
开销的减少,一个更简单的操作系统(可以完全换掉)和更简单的功能(例如,允许你有四种颜色的2位颜色),使得事情变得更小了。随着技术的改进,编码器也应用了覆盖:加载部件,而其他部分正在播放。
此外,更先进的架构(例如C128)有单独的视频RAM ( 16K或64K取决于您的C128模型),这给您更大的空间来弯曲您的编码肌肉,因为图形(或文本)没有占用处理空间。
查找4k演示竞赛中的任何一个,看看一个内存占用这么小的机器到底能做些什么。
发布于 2016-08-18 23:05:00
由于C64是8位计算机,所有汇编语言命令都有8位长.除此之外,它们还可能有0-2个数据字节。因此,每个命令都需要1-3字节的ram。
现在,当我们转向更现代的系统时,CPU通常已经是64位了。
基本上,所有CPU都有一些变量的“首选大小”(它可以有效地处理这些变量),而且通常,它与处理器的“位”数完全相同。这通常是C中的"int“(除了保证始终至少为16位,而8位CPU上的”首选“大小显然是8位)。
所以对于一个整数,不管它有多小,使用这个“首选大小”是最有效的。所以在8位系统上,那将是8位(显然不能是int),而在64位系统上,则是64位。所以这是8倍的大小。
当然,您可以使用较小的类型,但通常情况下,它的效率较低,而且通常,这也会影响结构填充。
但是有了指针,您通常会被CPU所拥有的位数所困(因为您需要能够处理整个内存范围)。
虽然数据值通常更大,汇编语言命令也是如此。另一方面,这允许更复杂的命令,可以执行操作,这将需要更多的8位命令。
当然也有例外,比如手臂上设置了拇指命令。
我的意思是,在现代平台上高效的汇编语言代码比C64汇编语言占用更多的空间(但限制较少,并且可以做一些花哨的事情,如乘/除等)。
至于C64上的图形操作系统,最著名的两个是GEOS和康蒂基。3也有一个内置的窗口系统,但是iirc只允许内置程序,而且没有任何有用的东西。
GEOS是相当“受限”的,不做任何真正的多任务处理(您可以选择哪个程序显示在窗口的主区域,但f.ex )。时钟总是在运行),基本上就是这样。即使它受到限制,也有f.ex。很不错的文字处理器(GEOWrite),我以前用过。
Contiki更“现代”(实际上大部分是用C iirc编写的),它实际上比您想象的简单得多。它以字符gfx模式运行(所以屏幕上的图形是1000字节,字符集是0 2k,彩色ram是1k ),所以这只是浪费了4k。
我想说,Contiki与其说是实际有用的操作系统,不如说是“概念的证明”,但与GEOS不同的是,它是真正的(合作的)多任务处理。
我想你是严重高估了一个非常简单的图形操作系统所需要的东西。相反,您可以与AmigaOS进行比较,后者在当时非常现代,而且仍然相当小,并且运行在CPU上(内部)32位,非常接近现代处理器。
https://stackoverflow.com/questions/38683325
复制相似问题