学习机时代

不知道有没有朋友对下面的这个画面有所记忆。

游戏截图

游戏截图

那是15年前没有电脑用的年代。那时,在中国市场上,基于任天堂FC(Family Computer)的所谓“电脑学习机”曾经风靡一时,借着“学习”两字,欺骗了无数望子成龙的家长,大家争先恐后的把这种新型的家电引入家中,结果发现,家里又多了一台浪费时间、浪费视力的游戏机。

对于我来说,我是先看书学了电脑,然后才拥有了学习机,所以虽然学习机担负着游戏机的重任,更多的,它还是担负着模拟电脑的作用。在上面,我最多时间都花在写BASIC程序上面,其次是练打字(包括五笔字型),再其次是LOGO语言。我的学习机是金字塔的PEC-9388,跟下面这个图除了型号以外一模一样。金字塔是当年我觉得最有技术含量的一个学习机品牌,在我的印象中,它有很多创新的地方,比如,它可以外接打印机、软驱,可以扩展内存,可以通过图中那个简单的“声像转换器”播放“普里奇声像带”。然而,市场一次又一次的证明,技术不能代表一切。在“你拍一,我拍一,小霸王出了学习机”的广告声中,金字塔这个牌子很快消失在大众的视野中。

学习机照片

学习机照片

前几天跟一朋友聊天,他说,小时候玩学习机的时候一个很大的遗憾就是说明书上有一个很长的游戏程序一直没有成功运行起来过。

这个话题似乎很容易引起共鸣。要在学习机上成功运行这个最大行号达到2770的程序(实际上也就200来行)几乎每个人都会遇到共同的困难:打字可能还不够熟练;不熟悉F-BASIC语言;早期的学习机没有外存(或者虽然有存磁带的功能,但你没有一个可靠的录音机),断电输入的程序就没有了;程序运行出错不会调试;有些学习机说明书上的程序印刷存在错误……

迄今为止我总共把这个程序输入过4次,第一次完全没运行成功,一堆错误;第二次运行后在过第一关时出现逻辑错误,无法继续;第三次通过自己修改和调试,成功运行,并把它存入到磁带中;第四次,这几天在电脑上的学习机模拟器中把它又输入了一次,存入到虚拟磁带中。到现在我还清楚得记得前两次录入这个程序后把要学习机关机前的那种不舍的心情。

为了重温这个程序,上网找了一大圈,但毫无所获,只好辛苦母亲把当年那本学习机的说明书找出来,拍成照片传给我。真没想到这本书已经被我看得这么破了,上面还写着那时试图分析代码而写上去的注释。现在来看,这些注释写得真傻,完全不能帮助理解代码。Code Reading也是一门本领,还是要多多修练才是。

说明书

说明书

要找一个完美的模拟器,也不是一件容易的事,网上有很多小霸王学习机的ROM,但真正能在上面完全正常的运行这个程序的却并不好找。最后终于找到了一个可用的ROM,而且这个ROM中恢复了被小霸王学习机去掉了的存取磁带的功能。更让人惊喜或郁闷的是:这个ROM的压缩包里还带了一个虚拟磁带文件,读入内存后发现,这就是我踏破铁鞋无觅处的这个游戏程序,只不过做了一些修改。令人有点费解的是,这份代码的可读性很不好,比如:FOR循环的NEXT子句都放在一个语句的后面用冒号隔开而不单独写一行;很多语句中省略了很多空格:

2400 IF XPOS(4)>222ORXPOS(4)<24ORMOVE(4)=0 THEN ERA4:POSITION4,0,0

这种语法对于BASIC来说好像是不合法的,不过学习机可以正常的解析。

不过当我看到这个程序最后被加上了一段在通关以后播放音乐的子程序的时候,我马上就理解了为什么要把程序改得如此没有可读性:学习机的F-BASIC环境中可用的内存只有4030个字节,这个程序原本就很长,基本上已经到了内存用光的程度,为了加上这段子程序,就必须从前面的代码中省出内存来,所以,少打几个空格,把多行程序并入一行,都是为了省出宝贵的内存啊。这在现在这种内存跟大白菜一样便宜的年代,哪怕就是在做嵌入式相关的开发,也不太可以想象吧。

对于我自己来说,学习机给我留下的最大的遗憾是我一直没有搞明白它的汇编语言和调试环境。所以它的BASIC语言中PEEK/POKE和CALL这几个语句,对于我来说也是没有什么用而又异常神秘的。在那个资源和信息缺乏的年代,我抄过一本讲6502汇编的小册子,但这本书最终并没有帮助我学会6502汇编。如今,我有足够的积累和足够的信息可以去弄明白6502,但却是缺少了动力和精力去研究它,也许这个东西就已经永远的成为记忆的一部分了吧。

PS. 几个背景知识:

学习机中可以用来写游戏程序的BASIC环境,叫F-BASIC,也就是Family BASIC。可是小霸王偏要把它改叫G-BASIC(Game BASIC),而把F-BASIC用于Float BASIC,也就是指可以支持浮点运算的BASIC语言环境,结果就把这两个名词给搞混乱了。本文中的F-BASIC是指Family BASIC。

有关普里奇声像带,这个东西现在应该很多人都不知道了,好像连Wikipedia上都没有。这是一种可以用普通的磁带和立体声录音机,通过适当的设备,在电视上播放出画面(主要是静态的图像,过一段时间翻一页)和声音的技术。原理是在立体声磁带的两个声道上,一个声道录正常的单声道音频信号,另一个声道上录调制过的数据信号(听起来跟调制解调器发出的声音类似),然后由转换设备把数据信号解调出来并转换成图像显示出来。

学习机时代》上有12条评论

  1. 以前在las310(不知道拼的对不对)和cec-i上一行行的敲这种,就怕突然断电

  2. 请博主提供模拟器和ROM下载,好像重温一下!我那会用的是中华学习机和APPLE ][

  3. 希希总结的不错,我当时(初中)就用的小霸王,还按照手册上,抄写了一段程序,可是当时不懂这个事什么东西,只知道按照书上写的打到电视机(当时的显示器)上就可以了。最后运行成功了,出来了个小卡通人物,在电视上按照不同的路线活动着。可是这些对我计算机的启蒙没有起到任何作用。不过,用了小霸王的最大成就就是我温习了打字(早期,我有一个英文打字机的),使得我现在打字都是盲打,而且很快。

  4. 首先,非常感谢博主介绍我改写的小霸王FBASIC。当年更改它主要是要恢复被小霸王无知改掉了的磁带记录功能和一些BUG,那个年代要在学习机上输入一段BASIC程序也真叫吃力的,日本原版的FBASIC本来就有磁带记录功能,可就因为小霸王别出心裁地修改了键盘定义,才造成读磁带的BUG啊!其实你小霸王真的没有必要更改键盘定义,还改名叫什么GBASIC,它一切是为了商业保护(防止别的学习机也能用它的ROM)而置广大用户的利益于不顾哦!

    那个“英雄救美女”的FBASIC源代码是我在当年一本介绍FBASIC的说明书中抄录的,最后加上的一段在通关以后播放音乐的子程序是另一个程序中的代码,正如博主所说的内存不够,我才将代码优化了很多,变得不太可读了啊!

    为了使用者方便,我将这个FBASIC程序做了一个内藏版本,就是在主菜单中可以直接调入并运行(参见我的博文:早年我改的一个FC学习机软件(综合了小霸王,金字塔,GMT,小百科等卡带的内容)http://hi.baidu.com/maxzhou88/blog/item/37da4d2a9782fe29d52af161.html),为了这个BASIC程序的内藏,我算是花了不小的功夫,首先要在学习机上非常耐心地敲入代码,再将存放该代码的SRAM内存(型号6264,8KB)加上掉电保护电池,然后卸下该SRAM,将它放在EPROM读入器上将内容读出,这样才能获得代码数据啊,最后还得修改BASIC解释器的代码,使它能被调入内存,分配变量空间并自动运行。不过由于今天的模拟器不能模拟学习机的STOP按键,我当时又忘记改为BREAK按键,所以在程序运行中不能按键中断它,这有点遗憾了。

    现在有了模拟器的虚拟磁带文件功能,我们可以很方便地调入FBASIC程序并修改它,然后再保存在新的虚拟磁带文件中,但最方便的办法还可以利用模拟器的即时存档功能,通过存档和调档要比用虚拟磁带文件快得多。

  5. 在我的[早年我改的一个FC学习机软件(综合了小霸王,金字塔,GMT,小百科等卡带的内容)]博文介绍的ABM学习卡带的主菜单中:
    B.声像教学 -- 就是“普里奇声像带”功能,可惜现在我没法获得磁带数据将它做成模拟器可用的“虚拟磁带文件”。
    C.程序范例 -- 就是这个“英雄就美女”的内藏版本。

  6. 勾起了当年的回忆,有关BASIC名字的问题,确实比较混乱,比如GBASIC也可作:graphic basic,当时日本市场的SORD M5就是这么称呼的。。。这台机器上似乎也有FBASIC,(FLOAT BASIC).

  7. 好熟悉的画面。。。。。。

    当初也有这么一台学习机,94年初中毕业时750元买的。不过好象和你的版本不完全相同,可以用音频线连接录音机,并把程序录到录音带里,之后读取。不过好像没有打印电缆。而且也没听说过什么“普里奇声像带”。但是外观和你这个非常像,而且说明书里也有这样一个游戏程序。还有,我印象里这个游戏两层之间的梯子是竖着的,而不是这样斜着的。

    说明书(不知道是不是和你说明书的完全一样)里的这个游戏的确不能运行,至少不能正常运行。当初疯狂的迷上编程,所以买了学习机后差不多一年,竟然把这个程序读懂了。这个程序里有几个错误,印象里好象是初始化时有一个错误,还有判断子弹是否打倒敌人的地方还有一处。(20多年了,记不太请了)。当初把这些错误修改后来后就可以运行了。

    • 如果也是金字塔的学习机的话,可能是上一代的9288,好像是没有打印功能(好像可以通过扩展卡外接)和普里奇声像带的,时间隔得太久,已经记不清了。如果是别的牌子的话,那没有这两样也很正常。

      看了下程序,金字塔说明书上的梯子确实是直的,取决于2650行有没有TX=TX+1。当然,梯子改成直的以后,精灵上楼动画的的运动方向也要改。

      我当时遇到的问题是精灵上楼后会出错,应该是某个坐标算错了或者是边界条件处理不对。具体的我也忘了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据