编写程序 :
BIN文件结构
我们要用汇编来编写一个WQX上的可执行文件-BIN文件
首先要熟悉BIN文件的结构
1.文件0-2字节 作用是BIN文件的标志,在NC1020中,可能有2种情况,1是AE EE EA,系统将把BIN文件装载到$04-$0F页中的任一页$4000开始的地址,然后跳转到这一页,运行之
另一种是"A5 55 5A",系统将把文件复制到内存$2000开始的地址,运行之
NC2k之后的系统则只有"AE EE EA"这种情况,系统将把文件复制到$80页XRAM的$4000开始的地址,运行之
2.文件3-6字节:是表示文件大小,实际上系统并不使用这一数据,因次可以不管,可以使其为"00 10 00 20"就好了
3.文件7-9字节:"4C XX YY",4C是固定的,$YYXX则是要文件的入口
比如是这样的"4C FF 40"那么在载入了BIN文件后,就会跳转到$40FF来执行之
4.文件A-F字节:系统版本标志,Nc1020必须为"70 03 10 03 FF FF",NC2k之后的机型一般为"70 03 31 03 FF FF",但若改为其它的也无影响
接着10-文件尾部,就是BIN文件的正式内容了,代码和数据都是在这里的
另外,NC机型上的BIN文件在传入电脑后,都会被加密,而传回WQX后则会被解密
因此若要在电脑端编辑BIN文件,则需使用BIN解密工具如BXSY的NC加解密
第一个汇编程序
我们现在来编写一个汇编程序,它的作用是显示一个信息框
首先是进入DEBUG工具
比如在NC1020上使用NC-TOOLS,NC2k上使用WQXDEBUG,TOOLS-2600,WQXHEXNC等
这里以使用TOOLS-2600在NC2600上为例,nc2000可用tools-2000
tool-2600可生成*.com文件,其格式和运行方式同第一节所说的nc1020的"aa 55 5a"相同 进入TOOLS-2600
进入HEX的界面后
按下求助,选择"6.清空内存",$2000-$3000的数据将被清除
输入V 2013,空格 //每次输入后都要按空格,下同按下"输入法"键,输入文字"Hello world!"
输入e c 201f,输入数据00 00 80 13 20 18 10 0c 02 27 20
到这里数据部分就完成了
输入
A 202a,空格
最底下会出现202a-
这时就会要输入汇编代码:
输入以下代码:
LDX#$21
LDY#$20
LDA#$00
INT$CA12
INT$C00A
RTS
输入a 2010
输入代码:
jmp$202a
输入中,方向上为"$",方向下为",",翻页上为"#",翻页下为"(",方向左为")",方向右为"y","."为"b",若输入不正确,可按"k"消去刚输入的一个符号
这样,一个程序就算是完成了,运行一下看看
输入G 2010
看到效果了吧!
接着按下"求助"->"应用程序",选择"制作程序",给这个程序起个名字,比如"message",确定,然后在COM程序目录下就会多了个message.com文件
用com平台运行它,就可看到效果了
程序分析
现在我们来分析上面说的那个程序,
首先,我们输入的信息"Hello World!"是待显示的信息
那些80 13 20....则是一个表,信息框的显示程序利用这个表来了解如何显示文字
表的格式是这样的:
80 ;固定标志
13 20 ;要显示文字的位置,这里即是$2013,文字的最要跟2个00
18 10 ;信息框的x,y轴位置
0c ;文字长度,不包括00
02 ;信息框行数x2,这共一行,因此是02,若是2行,则是04,3行是06...以此类推
27 20 ;是信息框文字显示类型的地址,这里是$2027,$2027为02,则显示类型为02,正常,修改02为其它值如82,可看到一些其它的效果,如反显,小字等等
接着输入的那段程序则是关键的程序部分了
ldx#$21
ldy#$20
这个是定义上一步那个表的地址,这里是$2021
lda#$00
这里是显示的信息框类型,00表示是普通的信息框
01表示单选框
02是是否选择框,图标为"!"
03是是否选择框,图标是"?"
接着是
int$ca12
int$c00a
这2个都是调用系统中断,int$ca12的作用是跟据前面设定的参数来显示文字信息框
int$c00a则是和gvbasic里的inkey$一样,获得一次按键停顿,然后才接着运行,好让用户看清显示
最后rts ;结束程序
样的代码称为中断调用(brk),其计算方法如下:
若设int$abcd(如int$0517,那么a=0,b=5,ab=05,cd=17)
1.若ab在$01-0f之间,a ab则从ab页的地址$4000+cd*2和$4001+cd*2取数据xx,yy,运行$yyxx
2.若ab=$0 则从0页地址$8000+cd*2和$8001+cd*2处取数据xx,yy,运行$yyxx
3.若a=$c,执行时$0a=b,从当前页$c000+cd*2和$c001+cd*2处取数据xx,yy,运行$yyxx
4.若ab=$ff,则播放$06页$b800开始的系统音乐的第cd首
以下是一些nc2k的常用的系统函数,更具体的函数表将会在以后章节(如文件操作)中和附录中说明:
int$c00a:按键停顿,按下的键在寄存器a中
int$c72a:清除屏幕
int$c719:刷新字符缓存,显示字符缓存中的文字
int$cb03:通用菜单程序,参数:寄存器x,y方参数表地址
参数表:
00:09/02 ;横向/纵向菜单
01,02:xx yy ;$yyxx为选择第一项要执行的代码地址
03,04:xx yy ;第一项的帮助
05,06:第2项代码
07,08:第2项帮助
....
第一项文字内容
ff
第二项文字内容
......
int$cb07:输入法
可输入字符
参数:x,y参数表地址
参数表:
00:xx ;光标位置
01:yy ;最大输入字符长度
02:zz ;输入过滤,可只允许输入数字或只允许输入汉字等,正常为20
03,04:xx yy ;$yyxx帮助信息地址
小试牛刀-给应用程序加密码
这节是初级篇的最后一节了,大家努力吧!
这节我们用学到的汇编知识来给BIN文件加密码
首先,我们须要一个工具,WQXDEBUG,UE,PACMANGER这些能编辑文件的工具都可以
这里,我使用wqxdebug 接着,我们选择一个须要加密的BIN程序,比如LAVA.bin
使用wqxdebug的"载入文件"功能,打开LAVA.bin
然后v 400080,再按下w 这样,这个文件的内容就以hex形式显示出来了
接着我们要确定文件入口
通过上一节的教程,我们知道bin文件的执行入口是在文件偏移0008处,我们看到LAVA.bin的是10 40,即是$4010
我们看到文件大小是小于16K的,我们来到16K的结尾,这里是空的,很好,我们就在$8000靠前的部分,就在$7FD0吧,写入加密代码
E 7FD0
输入数据:
00 04 06 90 03 4C 10 40 00 10 03
这段机器码的汇编代码为:
INT$0604 ;要求输入密码
BCC$L1 ;如果密码不正确就跳L1
JMP$4010 ;如果正确就跳向入口
L1:INT$0310; 不正确,返回网络
然后把$4008的入口更改一下,改为D0 7F,即$7FD0
最后"保存文件",保存为应用程序目录下的LAVA.bin,这就大功告成了!!
注意LAVA.bin小于16k,所以保存时输入文件块数(x16kb)=1.
BIN文件结构
我们要用汇编来编写一个WQX上的可执行文件-BIN文件
首先要熟悉BIN文件的结构
1.文件0-2字节 作用是BIN文件的标志,在NC1020中,可能有2种情况,1是AE EE EA,系统将把BIN文件装载到$04-$0F页中的任一页$4000开始的地址,然后跳转到这一页,运行之
另一种是"A5 55 5A",系统将把文件复制到内存$2000开始的地址,运行之
NC2k之后的系统则只有"AE EE EA"这种情况,系统将把文件复制到$80页XRAM的$4000开始的地址,运行之
2.文件3-6字节:是表示文件大小,实际上系统并不使用这一数据,因次可以不管,可以使其为"00 10 00 20"就好了
3.文件7-9字节:"4C XX YY",4C是固定的,$YYXX则是要文件的入口
比如是这样的"4C FF 40"那么在载入了BIN文件后,就会跳转到$40FF来执行之
4.文件A-F字节:系统版本标志,Nc1020必须为"70 03 10 03 FF FF",NC2k之后的机型一般为"70 03 31 03 FF FF",但若改为其它的也无影响
接着10-文件尾部,就是BIN文件的正式内容了,代码和数据都是在这里的
另外,NC机型上的BIN文件在传入电脑后,都会被加密,而传回WQX后则会被解密
因此若要在电脑端编辑BIN文件,则需使用BIN解密工具如BXSY的NC加解密
第一个汇编程序
我们现在来编写一个汇编程序,它的作用是显示一个信息框
首先是进入DEBUG工具
比如在NC1020上使用NC-TOOLS,NC2k上使用WQXDEBUG,TOOLS-2600,WQXHEXNC等
这里以使用TOOLS-2600在NC2600上为例,nc2000可用tools-2000
tool-2600可生成*.com文件,其格式和运行方式同第一节所说的nc1020的"aa 55 5a"相同 进入TOOLS-2600
进入HEX的界面后
按下求助,选择"6.清空内存",$2000-$3000的数据将被清除
输入V 2013,空格 //每次输入后都要按空格,下同按下"输入法"键,输入文字"Hello world!"
输入e c 201f,输入数据00 00 80 13 20 18 10 0c 02 27 20
到这里数据部分就完成了
输入
A 202a,空格
最底下会出现202a-
这时就会要输入汇编代码:
输入以下代码:
LDX#$21
LDY#$20
LDA#$00
INT$CA12
INT$C00A
RTS
输入a 2010
输入代码:
jmp$202a
输入中,方向上为"$",方向下为",",翻页上为"#",翻页下为"(",方向左为")",方向右为"y","."为"b",若输入不正确,可按"k"消去刚输入的一个符号
这样,一个程序就算是完成了,运行一下看看
输入G 2010
看到效果了吧!
接着按下"求助"->"应用程序",选择"制作程序",给这个程序起个名字,比如"message",确定,然后在COM程序目录下就会多了个message.com文件
用com平台运行它,就可看到效果了
程序分析
现在我们来分析上面说的那个程序,
首先,我们输入的信息"Hello World!"是待显示的信息
那些80 13 20....则是一个表,信息框的显示程序利用这个表来了解如何显示文字
表的格式是这样的:
80 ;固定标志
13 20 ;要显示文字的位置,这里即是$2013,文字的最要跟2个00
18 10 ;信息框的x,y轴位置
0c ;文字长度,不包括00
02 ;信息框行数x2,这共一行,因此是02,若是2行,则是04,3行是06...以此类推
27 20 ;是信息框文字显示类型的地址,这里是$2027,$2027为02,则显示类型为02,正常,修改02为其它值如82,可看到一些其它的效果,如反显,小字等等
接着输入的那段程序则是关键的程序部分了
ldx#$21
ldy#$20
这个是定义上一步那个表的地址,这里是$2021
lda#$00
这里是显示的信息框类型,00表示是普通的信息框
01表示单选框
02是是否选择框,图标为"!"
03是是否选择框,图标是"?"
接着是
int$ca12
int$c00a
这2个都是调用系统中断,int$ca12的作用是跟据前面设定的参数来显示文字信息框
int$c00a则是和gvbasic里的inkey$一样,获得一次按键停顿,然后才接着运行,好让用户看清显示
最后rts ;结束程序
样的代码称为中断调用(brk),其计算方法如下:
若设int$abcd(如int$0517,那么a=0,b=5,ab=05,cd=17)
1.若ab在$01-0f之间,a ab则从ab页的地址$4000+cd*2和$4001+cd*2取数据xx,yy,运行$yyxx
2.若ab=$0 则从0页地址$8000+cd*2和$8001+cd*2处取数据xx,yy,运行$yyxx
3.若a=$c,执行时$0a=b,从当前页$c000+cd*2和$c001+cd*2处取数据xx,yy,运行$yyxx
4.若ab=$ff,则播放$06页$b800开始的系统音乐的第cd首
以下是一些nc2k的常用的系统函数,更具体的函数表将会在以后章节(如文件操作)中和附录中说明:
int$c00a:按键停顿,按下的键在寄存器a中
int$c72a:清除屏幕
int$c719:刷新字符缓存,显示字符缓存中的文字
int$cb03:通用菜单程序,参数:寄存器x,y方参数表地址
参数表:
00:09/02 ;横向/纵向菜单
01,02:xx yy ;$yyxx为选择第一项要执行的代码地址
03,04:xx yy ;第一项的帮助
05,06:第2项代码
07,08:第2项帮助
....
第一项文字内容
ff
第二项文字内容
......
int$cb07:输入法
可输入字符
参数:x,y参数表地址
参数表:
00:xx ;光标位置
01:yy ;最大输入字符长度
02:zz ;输入过滤,可只允许输入数字或只允许输入汉字等,正常为20
03,04:xx yy ;$yyxx帮助信息地址
小试牛刀-给应用程序加密码
这节是初级篇的最后一节了,大家努力吧!
这节我们用学到的汇编知识来给BIN文件加密码
首先,我们须要一个工具,WQXDEBUG,UE,PACMANGER这些能编辑文件的工具都可以
这里,我使用wqxdebug 接着,我们选择一个须要加密的BIN程序,比如LAVA.bin
使用wqxdebug的"载入文件"功能,打开LAVA.bin
然后v 400080,再按下w 这样,这个文件的内容就以hex形式显示出来了
接着我们要确定文件入口
通过上一节的教程,我们知道bin文件的执行入口是在文件偏移0008处,我们看到LAVA.bin的是10 40,即是$4010
我们看到文件大小是小于16K的,我们来到16K的结尾,这里是空的,很好,我们就在$8000靠前的部分,就在$7FD0吧,写入加密代码
E 7FD0
输入数据:
00 04 06 90 03 4C 10 40 00 10 03
这段机器码的汇编代码为:
INT$0604 ;要求输入密码
BCC$L1 ;如果密码不正确就跳L1
JMP$4010 ;如果正确就跳向入口
L1:INT$0310; 不正确,返回网络
然后把$4008的入口更改一下,改为D0 7F,即$7FD0
最后"保存文件",保存为应用程序目录下的LAVA.bin,这就大功告成了!!
注意LAVA.bin小于16k,所以保存时输入文件块数(x16kb)=1.