学习机时代

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

游戏截图

游戏截图

那是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上都没有。这是一种可以用普通的磁带和立体声录音机,通过适当的设备,在电视上播放出画面(主要是静态的图像,过一段时间翻一页)和声音的技术。原理是在立体声磁带的两个声道上,一个声道录正常的单声道音频信号,另一个声道上录调制过的数据信号(听起来跟调制解调器发出的声音类似),然后由转换设备把数据信号解调出来并转换成图像显示出来。

折腾WD My Book World Edition

在同事鼓动下,跟他一起买了一个WD My Book World Edition II。这是一个小型的家用NAS (Network-attached Storage, 网络存储设备),它采用ARM 926系列的芯片,具备32M内存、千兆网卡,使用改造过的GNU/Linux系统。说白了,就是一个没有输入输出设备、很弱的、不太贵的、很省电的小电脑。由于采用的是GNU/Linux系统,而且WD开放了相关的源代码,所以,这个东东具有相当的可折腾性。

WD My Book World Edition II

WD My Book World Edition II

盒子买回来了就是一个空盒子,于是自己买了一块640G的硬盘装上。这个盒子直接采用主硬盘来存放它的操作系统,而不是采用Flash ROM,所以可以随便搞,不用担心会把系统刷死。

商家提供了一张系统恢复光盘,可以把WD官方的系统和网友改造过软件包一次性恢复到硬盘上,很方便,不对于追求完美而且又有点自虐倾向的我来说,这个系统太不好,原因在于它集成的东西太多了,包括Web管理界面在内的很多东西对于我来说都不实用,却要占用很多的宝贵的系统资源。而且它的专有系统也导致了可以再装的软件比较有限,而且很多时候需要自己编译,麻烦。

在论坛上看到有人找到了方法把EABI版的Debian跑在了盒子上,这显然是个利好消息。于是我就开始折腾……

省略具体过程N万字,总之经过三周多时间的折腾,终于成功的把Debian 5 (Lenny) GNU/Linux装在了盒子上,目前运行一切正常,盒子可以提供以下的功能:

PPPoE拨号上网、防火墙和路由,FTP/CIFS(Windows共享)/NFS数据访问,脱机BT/eMule/HTTP/FTP下载。

其它的功能,比如HTTP Server,比如Subversion,显然也是可以很容易实现的,简单apt-get安装一下即可。如果有PSP的话,还可以给它装上nethostfs。

盒子整体性能欠佳,FTP最快访问速度也就在9MB/s左右,平均CIFS的访问速度只有6M/s左右,如果打开NAT做路由会降到4M/s左右。eMule和BT的下载速度倒还都比较理想,2M的ADSL基本上可以达到线速。aMule消耗内存较严重,如果换用mldonkey会好一些,速度也比较快,但mldonkey不支持eMule混淆协议,不是很完美 :-P

还有几个小问题没有搞定:

1. 使用IDE硬盘:试了两种IDE->SATA转接卡,其中JM20330芯片的可以成功的转接一块4G(汗!)的硬盘,但320G那块还是不成功。看来只能用USB了。

2. 内存扩容:可以用64M的内存颗粒去替换板子上32M颗粒,10块钱的成本,性价比很好,就是这是个要求很高的技术活,不敢乱搞,以免因小失大。

折腾过程中总结了一些东西,发在论坛上了,这里就不罗嗦了,索引一下:

折腾盒子时还收获一个副产品,可能不少朋友不知道,在这里分享一下:

电信的一些ADSL套餐是可以支持多终端同时拨号上网的,也就是说,把ADSL Modem接在交换机上,然后同一个交换机上的多台电脑可以同时分别拨号上网,这对于路由器性能不佳(比如常常被BT下载轰到断流/常常DNS解析故障)或者需要多个IP的人,还是很有价值的。收费的问题,南京电信e8套餐是按从第一台终端连上到最后一台终端断线时长计算,不会重复计费。但具体的情况视套餐不同可能不同,最好与电信客服确认一下。

Blog更新

终于把Blog更新了。

上个月一直没有发布新的文章,原因有三:

1.前面在用的Blog存在很多不足之处,急需改。不想在烂摊子上再盖楼。

2.重装了Fedora 8以后Emacs+Muse的Blog创作环境一直没有搭建起来。

3.很忙。

最近还是很忙,但用零零散散的时间终于把新的Blog页面完成并调试好了创作环境。这次的改进主要包括:

1. 更新了页面,参考了Open Source Web Design网站上的Indigo设计。页面开始用XHTML 1.1。目前页面在IE7和Firefox 2.0上工作正常,IE6上有一点小问题,凑合吧,没有精力再去照顾IE6了。

2. 加上了一个菜单,终于可以从文章页面返回首页了。增加了“我的作品”和“我的兴趣”两个专题。

3. 提高了一点点Usability。

4. 象征性的做了一点点SEO,重新调整了页面的组织方法,所有页面用静态页面实现,抛弃了原来的基于自动转向的permalink。

其实十一月份还是有不少值得一记的事情的,后面再慢慢补上吧。

QSL卡

用零散的时间做了一张QSL卡,如图。请大家拍砖。

正面

正面

反面

反面

QSL在通信用Q简语中是“我已收到你的信息”的意思,QSL卡是用于在业余电台之间互相确认通信成功的证明卡。每一个业余电台都必须承担交换QSL卡的义务。当成功完成一次通联后,通联双方的一方向对方寄出本台的QSL卡,另一方收到卡片后回寄他的卡片。通联双方以外的第三人如果在收听双方的通联的话,可以向双方寄送QSL收听报告卡,同样通信双方收到卡片后也可要回寄确认收听卡片。QSL卡收集是业余无线电运动员的一项重要活动,也是执照升级的一个重要途径。同时,由于各个业余电台都有自己不同的QSL卡,收集QSL卡也如同集邮一样,吸引着众多的电台和收听者。QSL卡也是国际业余无线电运动竞赛中一项重要的内容。

这张QSL卡用的素材是我9月10日在南京东站(尧化门)附近的沪宁线上行线拍摄的D430通过,经过PS以后就成这个样子了。因为呼号要下个月才可以拿到,卡片上的呼号就只能先用BG4???代替一下了。卡片反面的内容就不解释了,估计感兴趣的人不多。请大家就视觉感受提点建议吧,拿到呼号后才会去印,有足够的时间来完善它。

这列CRH2的鼻子有点脏,实在是没有功力再把它PS到很干净了,先只能这样凑合了。车头有点模糊也没有什么办法了,不能调快门速度的卡片机拍成这样已经很幸运了。

PS以后的图片有一个明显的技术错误,能看出来的请留言。答案在点击文章标题后可以在文章的单独页面中看到,首页和RSS中都没有输出。

技术错误就是:CRH动车组列车需要通过轨道上方的接触网供电,这个卡片的图片上把接触网PS掉了,没电这车动不了啊。

附言:今天居然把紫金山爬了两遍,怀疑脑子出问题了。

小游戏

前几天琢磨了一个古老的在线小游戏,虽经好友一同协助,仍然未能解开最后一关。意犹未尽中,自己也模仿着写了一个。

开始游戏已失效

如果完过先前的那个,这个游戏中大部分关卡应该难不倒你,有兴趣的朋友试试吧:-) 不需要编程工具,但可能需要一个十六制的查看工具来帮你。浏览器嘛,想要增加难度就用IE吧:-P

同时又想起了几年前玩过的“米勒山庄”的在线Flash游戏,又找出来玩了一把,推荐对探索和推理有兴趣的朋友试试。第一辑的四个段落还是比较有可玩性的,续集中的八个段落则有些部分难度过大,没有功略的话,要完成真不是一件容易的事情。