找回密码
 注册
搜索
查看: 3326|回复: 4

[转帖] 学习机时代 (作者:李凡希)

[复制链接]
发表于 2011-2-28 12:50 | 显示全部楼层 |阅读模式
http://f.ppxclub.com/115344-1-13

 那是15年前没有电脑用的年代。那时,在中国市场上,基于任天堂FC(Family Computer)的所谓“电脑学习机”曾经风靡一时,借着“学习”两字,欺骗了无数望子成龙的家长,大家争先恐后的把这种新型的家电引入家中,结果发现,家里又多了一台浪费时间、浪费视力的游戏机。
  对于我来说,我是先看书学了电脑,然后才拥有了学习机,所以虽然学习机担负着游戏机的重任,更多的,它还是担负着模拟电脑的作用。在上面,我最多时间都花在写BASIC程序上面,其次是练打字(包括五笔字型),再其次是LOGO语言。我的学习机是金字塔的PEC-9388,跟下面这个图除了型号以外一模一样。金字塔是当年我觉得最有技术含量的一个学习机品牌,在我的印象中,它有很多创新的地方,比如,它可以外接打印机、软驱,可以扩展内存,可以通过图中那个简单的“声像转换器”播放“普里奇声像带”。然而,市场一次又一次的证明,技术不能代表一切。在“你拍一,我拍一,小霸王出了学习机”的广告声中,金字塔这个牌子很快消失在大众的视野中。
 楼主| 发表于 2011-2-28 12:51 | 显示全部楼层
  前几天跟一朋友聊天,他说,小时候玩学习机的时候一个很大的遗憾就是说明书上有一个很长的游戏程序一直没有成功运行起来过。
  这个话题似乎很容易引起共鸣。要在学习机上成功运行这个最大行号达到2770的程序(实际上也就200来行)几乎每个人都会遇到共同的困难:打字可能还不够熟练;不熟悉F-BASIC语言;早期的学习机没有外存(或者虽然有存磁带的功能,但你没有一个可靠的录音机),断电输入的程序就没有了;程序运行出错不会调试;有些学习机说明书上的程序印刷存在错误……
  迄今为止我总共把这个程序输入过4次,第一次完全没运行成功,一堆错误;第二次运行后在过第一关时出现逻辑错误,无法继续;第三次通过自己修改和调试,成功运行,并把它存入到磁带中;第四次,这几天在电脑上的学习机模拟器中把它又输入了一次,存入到虚拟磁带中。到现在我还清楚得记得前两次录入这个程序后把要学习机关机前的那种不舍的心情。
  为了重温这个程序,上网找了一大圈,但毫无所获,只好辛苦母亲把当年那本学习机的说明书找出来,拍成照片传给我。真没想到这本书已经被我看得这么破了,上面还写着那时试图分析代码而写上去的注释。现在来看,这些注释写得真傻,完全不能帮助理解代码。Code Reading也是一门本领,还是要多多修练才是。
 楼主| 发表于 2011-2-28 12:55 | 显示全部楼层
  要找一个完美的模拟器,也不是一件容易的事,网上有很多小霸王学习机的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上都没有。这是一种可以用普通的磁带和立体声录音机,通过适当的设备,在电视上播放出画面(主要是静态的图像,过一段时间翻一页)和声音的技术。原理是在立体声磁带的两个声道上,一个声道录正常的单声道音频信号,另一个声道上录调制过的数据信号(听起来跟调制解调器发出的声音类似),然后由转换设备把数据信号解调出来并转换成图像显示出来。
文章来源:学习机时代 - 李凡希的Blog
 楼主| 发表于 2011-2-28 12:56 | 显示全部楼层
  要找一个完美的模拟器,也不是一件容易的事,网上有很多小霸王学习机的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上都没有。这是一种可以用普通的磁带和立体声录音机,通过适当的设备,在电视上播放出画面(主要是静态的图像,过一段时间翻一页)和声音的技术。原理是在立体声磁带的两个声道上,一个声道录正常的单声道音频信号,另一个声道上录调制过的数据信号(听起来跟调制解调器发出的声音类似),然后由转换设备把数据信号解调出来并转换成图像显示出来。
文章来源:学习机时代 - 李凡希的Blog
 楼主| 发表于 2011-2-28 12:56 | 显示全部楼层
maxzhou88 回复:
       首先,非常感谢李凡希博主介绍我改写的小霸王FBASIC。当年更改它主要是要恢复被小霸王无知改掉了的磁带记录功能和一些BUG,那个年代要在学习机上输入一段BASIC程序也真叫吃力的,日本原版的FBASIC本来就有磁带记录功能,可就因为小霸王别出心裁地修改了键盘定义,才造成读磁带的BUG啊!其实你小霸王真的没有必要更改键盘定义,还改名叫什么GBASIC,它一切是为了商业保护(防止别的学习机也能用它的ROM)而置广大用户的利益于不顾哦!
       那个“英雄救美女”的FBASIC源代码是我在当年一本介绍FBASIC的说明书中抄录的,最后加上的一段在通关以后播放音乐的子程序是另一个程序中的代码,正如博主所说的内存不够,我才将代码优化了很多,变得不太可读了啊!
       为了使用者方便,我将这个FBASIC程序做了一个内藏版本,就是在主菜单中可以直接调入并运行[参见我的博文:早年我改的一个FC学习机软件(综合了小霸王,金字塔,GMT,小百科等卡带的内容)],为了这个BASIC程序的内藏,我算是花了不小的功夫,首先要在学习机上非常耐心地敲入代码,再将存放该代码的SRAM内存(型号6264,8KB)加上掉电保护电池,然后卸下该SRAM,将它放在EPROM读入器上将内容读出,这样才能获得代码数据啊,最后还得修改BASIC解释器的代码,使它能被调入内存,分配变量空间并自动运行。不过由于今天的模拟器不能模拟学习机的STOP按键,我当时又忘记改为BREAK按键,所以在程序运行中不能按键中断它,这有点遗憾了。
       现在有了模拟器的虚拟磁带文件功能,我们可以很方便地调入FBASIC程序并修改它,然后再保存在新的虚拟磁带文件中,但最方便的办法还可以利用模拟器的即时存档功能,通过存档和调档要比用虚拟磁带文件快得多。
       在我的ABM学习卡带的主菜单中:
B.声像教学 -- 就是“普里奇声像带”功能,可惜现在我没法获得磁带数据将它做成模拟器可用的“虚拟磁带文件”。
C.程序范例 -- 就是这个“英雄就美女”的内藏版本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|虎纹猫家园

GMT+8, 2024-11-25 21:30 , Processed in 0.018680 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表