首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >80年代的计算机程序怎么这么小?

80年代的计算机程序怎么这么小?
EN

Stack Overflow用户
提问于 2016-07-31 11:07:44
回答 3查看 198关注 0票数 0

当你看一下为几台80年代的老电脑编写的程序,比如commodore64、atari和NES,它们的尺寸都非常小,大多数都是几百千字节。

更不用说这些计算机没有多少内存可以运行了,就像商品64有64 os的RAM,但却成功地运行了GUI操作系统一样!

这些程序是怎么写成这么小的?

考虑到他们拥有的硬件限制,他们中的许多人似乎令人难以置信。在一个商品64上,其320 x 200 @4bpp的分辨率将消耗掉其64k mem的一半。

而Atari 2600只有128字节的ram

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-31 11:39:06

  1. 在今天的应用程序中,80%或更多的磁盘上大小是图形元素。
  2. 当空间相对于程序员的时间比较昂贵时,程序员就会花费更多的时间来优化大小,并且经常使用原始程序集。今天,空间很便宜,所以它不会为一家公司节省空间而付钱。
  3. 把记事本和Edlin比较一下。它们都是最简单、最合理的文本编辑器。Edlin将程序和数据轻松地放入不到64K,但不可能声称记事本是一个图形化的Edlin。
  4. C64没有gui os。它有一个基本的菜单系统,一个熟练的程序员可以使用自定义硬件精灵来覆盖小的图形图标。
  5. 在低分辨率模式下,每像素有4位(16种颜色)。在高分辨率模式下,每像素有1位(单色)。今天的系统假设每像素16位或更高,在1080 p(大约1900 x 1080像素)。即使是单色显示器也已经从8k膨胀到我们将超过1MB。随着现代显示器对24位颜色深度或更高的期望,单个帧所需的最小存储容量是多兆字节。再加上现代显卡用来缓冲和其他东西的工作空间,而且你的图形需要运行到千兆字节也不需要很长时间。这一代计算机上的高分辨率模式很少被使用是有原因的。
  6. 当您加载程序时,您将卸载操作系统。你当时只运行了一个程序。今天,我经常一次运行20个或更多的应用程序,更不用说做我的工作所必需的几十个后台过程了。
票数 2
EN

Stack Overflow用户

发布于 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演示竞赛中的任何一个,看看一个内存占用这么小的机器到底能做些什么。

票数 0
EN

Stack Overflow用户

发布于 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位,非常接近现代处理器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38683325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档