首先要知道,玩这游戏真的不需要先学一遍汇编语言。没找到什么资料自己摸索了几个小时算是入门。
这个是第一关的截图,第一关相当友好,有demo。只需要复制一下代码修改一下就可以。写完后按“模拟即可连续运行”。“向前”执行一个时间单位,就是下面波形图的一竖格。“步进”单步执行代码。这里基本都是debug。把鼠标放在波形上可以看到波形预计值等信息。第一关预计值都是0或100。需要说一下P0和P1是简单I/O,值是从0到100的连续电平信号。想要输出数字信号高电平就是100。
语法在手册中有,第一关用到的只有mov和slp,字面意思,move a to b 把a的值给b,a和b可以是数值也可以是寄存器(图中的P0,P1,X0,X1),slp就是sleep,进入下一个时间单位,因为CPU通常比读写信号显示的速度快得多。
第一关:任务其实就是一个闪烁的LED,demo写的是灭6个单位(后面吧时间单位说成秒)亮6秒循环,所以先把0给p1(关灯),睡6秒,再把100(最大值)给P1(开灯),再睡6秒,然后运行会自动循环。下面那个只需要看着输出波形修改亮灭的时间。代码在图中。这里电路并不规范,p1没有连接输出,后面的关卡这样会报错。
第二关:打开第二关一脸懵逼,什么都没有。
任务就是把输入乘2然后输出。还是需要看手册,手册中提到,运算是在acc寄存器里进行。MC4000只有一个acc寄存器,MC600带一个dat寄存器。所以我们不能直接对IO直接运算,解决方法是先把IO的值给acc, “mov p0 acc”,输入连接p1就改为p1。然后我们要对数字进行乘法操作,还是翻手册。图在下面。
mul即乘法,R/I就是可以为数字也可以为存储器,看描述就是乘什么就写什么,乘2就是“mul 2”,最后的结果还是给acc,相当于c语言里面acc = acc*2 基本可以写出代码,将乘2的结果给p1输出就可以了。注意还是要slp一下。代码如下。
第三关:就是条件语句,按下一个开关就一直输出方波。还是翻手册。主要就是大于、等于、小于。+号就是满足条件执行该语句,-号就是满足条件不执行该语句。比如:
teq p0 50 #判断是否相等
- mov 100 p1#如果相等就不执行
代码很简单:判断p0是否等于100,是就执行下面三句话,和第一关一样闪烁led。注意可以通过步进来查看代码运行情况,灰色就是没执行。
第四关:要求很简单,就是5个不通频率和周期的波形输出。最简单的方法是弄三个芯片。分别输出。稍微复杂的方法在手册中:
通过XBus传数据给Dx300芯片,功能就是串口转并口,即输入用Xbus输入三位二进制如“110”输出P2 = 1 P1 = 1 P0 = 0,即从左到右对于从高位(P2)到低位(P0),使用DX300可以减少成本,到这个时候发现,我做出来的只是做出来了,成本比别人高,耗电量比别人高,代码比别人多。不断减少成本提高效率大概才是这个游戏的精髓。
看到这里基本上你可以愉快的玩游戏了。
下面这个并不是最好的只是一个破例子,这游戏不像我们之前的编程,特点就是成本低,资源少,所以在写程序之前一定要分配好资源。