- 注册时间
- 2006-5-15
- 最后登录
- 1970-1-1
|
原作者:立天(litianzzk)
这个这么强作品出来这么久了,一直没人移植到其它机型上,看来我不移植就没有人去做了
所有文件全部包含在PAC中
下面引用立天说明:
NC3000 GVBASIC+再次增强版说明:
为方便以后加强版本的命名,我(litianzzk)将这个版本的GVBASIC+命名为BAISC2_1.bin(代表增强版第一版)
我将之前版本的PLAY语句的残留代码删除了,空出几百个字节,于是加入了一些常用子程序以及三个新指令,他们是:
-------------------------------------------------------------
NEW
用法 NEW ADD
说明 指定地址ADD到 $6000为用户内存,即系统不占用这段内存.ADD的值必需大于批量法地址适当值
否则会因为变量没有或不足内存存放而出错,
批量法地址:当BAS文件小于8K时,为8192+BAS文件大小;当BAS文件大于等于8K时为9216
使用该指令可能导至某些变量丢失,建议在没有定义任何变量前使用
举例
5 A=20480:NEW A
-------------------------------------------------------------
RUN
用法 RUN FILE$
说明 运行一个BAS文件(这个bas文件的后缀名不一定是".bas"),运行后不会返回原来的文件
举例
50 RUN "A.BAS"
-------------------------------------------------------------
LOAD
用法 LOAD FILE$,DES[,LENGTH]
说明 将文件名为FILE$的bin代码文件载入LENGTH字节到地址DES,载入长度缺省为 $800,载入后关闭文件
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
5 A=20480:NEW A OAD "BIN.DAT",A:IF NOT PEEK(44908) THEN END
--------------------------------分-----隔-----线----------------------------------------------------------------------
BIN.DAT文件说明:
将这个文件下载到"/BASIC文件"中.
这个文件中,我写了一些比较常用的函数,使用这些函数必须先运行以下代码,以定义程序存放的用户内存,载入文件,定义地址:
5 A =20480:ERR =44908
6 NEW A: LOAD "BIN.DAT",A: IF PEEK(ERR) THEN 10 ELSE END
10 FOPEN =PEEK(A) +PEEK(A +1) *256
11 FREAD =PEEK(A +2 *1) +PEEK(A +2 *1 +1) *256
12 FWRITE =PEEK(A +2 *2) +PEEK(A +2 *2 +1) *256
13 FCLOSE =PEEK(A +2 *3) +PEEK(A +2 *3 +1) *256
14 OPENDIR =PEEK(A +2 *4) +PEEK(A +2 *4 +1) *256
15 DELDIR =PEEK(A +2 *5) +PEEK(A +2 *5 +1) *256
16 DELFILE =PEEK(A +2 *6) +PEEK(A +2 *6 +1) *256
17 OUTTXT =PEEK(A +2 *7) +PEEK(A +2 *7 +1) *256
18 WRITEBLK =PEEK(A +2 *8) +PEEK(A +2 *8 +1) *256
19 DATAMOVE =PEEK(A +2 *9) +PEEK(A +2 *9 +1) *256
20 FADEIN =PEEK(A +2 *10) +PEEK(A +2 *10 +1) *256
21 FADEOUT =PEEK(A +2 *11) +PEEK(A +2 *11 +1) *256
22 SETGB =PEEK(A +2 *12) +PEEK(A +2 *12 +1) *256
23 SCRX =PEEK(A +2 *13) +PEEK(A +2 *13 +1) *256
24 DATAFILL =PEEK(A +2 *14) +PEEK(A +2 *14 +1) *256
25 PROBAR =PEEK(A +2 *15) +PEEK(A +2 *15 +1) *256
26 HELP =PEEK(A +2 *16) +PEEK(A +2 *16 +1) *256
27 NANDREAD =PEEK(A +2 *17) +PEEK(A +2 *17 +1) *256
28 REFRESH =PEEK(A +2 *18) +PEEK(A +2 *18 +1) *256
29 CLSGB =PEEK(A +2 *19) +PEEK(A +2 *19 +1) *256
带参数的call函数调用方法一般是CALL 程序地址[,参数1[,参数2...]]
其中用中括号括起来的参数为可缺省值,参数的类型可以是STR :字符串,WORD:字数据(0-65535),BYTE:字节数据(0-255)
BIN.DAT文件中的函数有以下这些:
-------------------------------------------------------------
FOPEN
原型 CALL FOPEN,STR FILE,BYTE MODE[,BYTE ATTR1,BYTE ATTR2]
功能 打开文件
说明: 以方式MODE打开文件FILE
MODE的意义与汇编中打开文件中断int$0515的参数$08c9相同,例如为112新建,192修改,追加,128只读
属性ATTR1,ATTR2意义与汇编打开文件时的参数$08ca,$08cb相同,可以缺省,但以新建方式打开时最好指定属性(例如239,239为RWX,其它属性可参考汇编相关帖子),否则可能会生成无法删除的文件
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 CALL FOPEN,"/sysdir/xh_graph",128
50 IF PEEK(44908) THEN PRINT "打开成功" ELSE PRINT "打开失败"
-------------------------------------------------------------
FREAD
原型 CALL FREAD,WORD DES,WORD LENGTH[,WORD FSEEK1[,WORD FSEEK2]]
功能 读文件
说明 读取当前打开的文件的LENGTH字节到目标地址DES
文件指针FSEEK=FSEEK2*65536+FSEEK1,FSEEK2缺省时为0,FSEEK1,FSEEK2均缺省时为当前值
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 CALL FREAD,12288,32,64
50 IF PEEK(44908) THEN PRINT "读取成功" ELSE PRINT "读取失败"
-------------------------------------------------------------
FWRITE
原型 CALL FWRITE,WORD DES,WORD LENGTH[,WORD FSEEK1[,WORD FSEEK2]]
功能 写文件
说明 将目标地址DES的LENGTH字节写入到当前打开的文件
文件指针FSEEK=FSEEK2*65536+FSEEK1,FSEEK2缺省时为0,FSEEK1,FSEEK2均缺省时为当前值
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 CALL FWRITE,12288,32,64
50 IF PEEK(44908) THEN PRINT "写入成功" ELSE PRINT "写入失败"
-------------------------------------------------------------
FCLOSE
原型 CALL FCLOSE
功能 关闭文件
说明 关闭由FOPEN打开的文件
举例
40 CALL FCLOSE
-------------------------------------------------------------
OPENDIR
原型 CALL OPENDIR,STR DIR
功能 打开文件夹,不存在则创建
说明 打开文件夹DIR
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 A$="/文本文件":CALL OPENDIR,A$
50 IF PEEK(44908) THEN PRINT "打开成功" ELSE PRINT "打开失败"
-------------------------------------------------------------
DELDIR
原型 CALL DELDIR,STR DIR
功能 删除空文件夹
说明 删除空文件夹DIR
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 A$="/文本文件":CALL DELDIR,A$
50 IF PEEK(44908) THEN PRINT "删除成功" ELSE PRINT "删除失败"
-------------------------------------------------------------
DELFILE
原型 CALL DELFILE,STR FILE
功能 删除文件
说明 删除文件FILE
使用后检查地址$AF6C(44908)的值,为1成功,否则失败
举例
40 A$="/文本文件/a.txt":CALL DELDIR,A$
50 IF PEEK(44908) THEN PRINT "删除成功" ELSE PRINT "删除失败"
-------------------------------------------------------------
OUTTXT
原型 CALL OUTTXT,STR STRING,BYTE X,BYTE Y,BYTE FONT[,BYTE MODE]
功能 输出文字到屏幕
说明 将字符串STRING以方式MODE,字体FONT输出到坐标X,Y(不折行)
font为0:8*16字体,为1:6*12字体
MODE 的意义参考函数WRITEBLK
举例
40 A$="DEMO1":CALL OUTTXT,A$,13,25,0,0:REM 以copy方式直接输出到屏幕
40 A$="DEMO2":CALL OUTTXT,A$,68,25,1,0+64:REM 以反显(not)方式输出到图形缓存
-------------------------------------------------------------
WRITEBLK
原型 CALL WRITEBLK,WORD DES,byte X,byte Y,byte WIDTH,byte HIGHT[,byte MODE]
功能 贴图
说明 以方式MODE将图片地址为DES,长宽为WIDTH,HIGHT的图片输出到坐标X,Y
MODE 缺省时为0(copy写到屏幕)
当MODE的bit6=1时向缓冲区作图,否则直接画在屏幕上
bit 0-2:
0:Copy
1:Not
2:Or
3:And
4:Xor
举例
40 CALL FOPEN,"/sysdir/xh_graph",128
50 IF PEEK(44908) THEN 60 ELSE PRINT "打开失败":END
60 CALL FREAD,12288,1600
70 CALL FCLOSE
80 CALL WRITEBLK,12288,0,0,160,80,1
-------------------------------------------------------------
DATAMOVE
原型 CALL DATAMOVE,WORD DES,WORD SOR,WORD LENGTH
功能 数据移动
说明 将源地址为SOR,长度为LENGTH的内存内容移动到目标地址DES
举例
40 CALL 12288,6592,1600
-------------------------------------------------------------
FADEIN
原型 CALL FADEIN
功能 屏幕淡入
说明 注意,先将要显示的内容发送到图形缓冲区,再调用
举例
40 CALL CLSGB:REM 清除图形缓存
50 CALL OUTTXT,"DEMO",34,28,0,0+64
60 CALL FADEIN
-------------------------------------------------------------
FADEOUT
原型 CALL FADEOUT
功能 屏幕淡出
说明 注意,运行后屏幕内容将会转移到缓冲区
举例
40 CALL OUTTXT,"DEMO",34,28,0,0:CALL FADEOUT
-------------------------------------------------------------
SETGB
原型 CALL SETGB,WORD DES
功能 设置图形缓冲区(默认为$59c0,即十进制的22976)
说明 将DES设置为图形缓冲区首地址
举例
40 CALL SETGB,12288
-------------------------------------------------------------
SCRX
原型 CALL SCRX,BYTE MODE[,WORD DES,BYTE WORH]
功能 滚屏一个像素
说明 指定地址DES中的宽或高(以字节计算,上下滚屏时为高(此时宽为20字节),左右滚屏时为宽(此时高为80))为WORH的图片一起参与滚屏
该图片将滚屏入屏幕(或图形缓冲区),缺省为空白图片
MODE的bit6=1为缓冲区滚屏,否则为直接在屏幕上滚屏
bit0-1意义是:
0,1,2,3分别为上,下,左,右滚屏
举例
60 CALL CLSGB
70 A$(0) ="我的每个幻想"
71 A$(1) =" 总在每一个秋天飞扬"
72 A$(2) ="我的每个悲伤"
73 A$(3) =" 总在每一个夜里生长"
74 A$(4) ="我的每次飞翔"
75 A$(5) =" 总在漫无目的的路上"
80 FOR X =0 TO 5: CALL OUTTXT,A$(X),5,0,1,64 +0
90 FOR B =1 TO 13: CALL SCRX,0,22976,12: FOR C =1 TO 100: NEXT : NEXT
100 NEXT
110 CALL FADEOUT
120 FOR A =1 TO 160
130 CALL SCRX,2,22976,20
140 NEXT
-------------------------------------------------------------
DATAFILL
原型 CALL DATAFILL,WORD DES,WORD LENGTH,BYTE DATA
功能 数据填充
说明 用数据DATA填充开始地址为DES长度为LENGTH的内存
举例
40 CALL DATAFILL,16384,320,255
-------------------------------------------------------------
PROBAR
原型 CALL PROBAR,WORD TOTAL,WORD NOW,BYTE MODE
功能 进度条
说明 总长度:TOTAL
当前长度:NOW
MODE=0 百分比显示,=1数字显示
举例
40 A=200:B=98:CALL PROBAR,A,B,0
-------------------------------------------------------------
HELP
原型 CALL HELP,WORD DES
功能 帮助文字
说明 将地址DES处的内容(以$00,$00结尾)显示为帮助信息
举例
40 CALL HELP,16384
-------------------------------------------------------------
NANDREAD
原型 CALL NANDREAD,WORD DES,WORD LENGTH,WORD NANDNUM,WORD OFFSET
功能 读NAND
说明 读取nand块号为NANDNUM的OFFSET处的LENGTH字节数据到地址DES
举例
40 CALL NANDREAD,16384,16,3171,16
-------------------------------------------------------------
REFRESH
原型 CALL REFRESH
功能 将图形缓冲区的内容发送到屏幕
说明 略
举例
40 CALL CLSGB:REM 清除图形缓存
50 CALL OUTTXT,"DEMO",34,28,0,0+64
60 CALL REFRESH
-------------------------------------------------------------
CLSGB
原型 CALL CLSGB
功能 清除图形缓冲区的内容
说明 略
举例
参考FADEIN
--------------------------------分-----隔-----线----------------------------------------------------------------------
源文件说明:
BAS+.65s是BASIC2_1.bin中新增代码的源文件,该文件编译后放在BASIC2_1.bin的偏移$7975处.
详细内容自己看文件.
bin.65s是BIN.DAT文件的源文件,你也可以自己修改新增你想要的函数,带参数CALL程序的编写也是很简单的(前提是你会6502汇编),因为取参子程序已经写好,可取的参数有字符串(GetSting),字数据(GetWord),字节数据(GetByte),这些子程序的用法已经在源文件中给出.
--------------------------------分-----隔-----线----------------------------------------------------------------------
其它文件说明:
demo.BAS是一个简单的演示文件,hello.txt是示例.
--------------------------------分-----隔-----线----------------------------------------------------------------------
最后,因为全部的文件都没有经过严格的debug,难免有bug,欢迎提出,当然,你也可以自己自己修改啊,源文件已经附上了嘛,呵呵.
同时当然欢迎移植到其它机型上,发挥你的想像力和动手能力,做一个我们自己的超强GVBASIC+吧!
还是那句,自己动手,丰衣足食!
立天
2006.8.9 0 :
5 A =20480:ERR =44908
6 NEW A: LOAD "BIN.DAT",A: IF PEEK(ERR) THEN 10 ELSE END
10 FOPEN =PEEK(A) +PEEK(A +1) *256
11 FREAD =PEEK(A +2 *1) +PEEK(A +2 *1 +1) *256
12 FWRITE =PEEK(A +2 *2) +PEEK(A +2 *2 +1) *256
13 FCLOSE =PEEK(A +2 *3) +PEEK(A +2 *3 +1) *256
14 OPENDIR =PEEK(A +2 *4) +PEEK(A +2 *4 +1) *256
15 DELDIR =PEEK(A +2 *5) +PEEK(A +2 *5 +1) *256
16 DELFILE =PEEK(A +2 *6) +PEEK(A +2 *6 +1) *256
17 OUTTXT =PEEK(A +2 *7) +PEEK(A +2 *7 +1) *256
18 WRITEBLK =PEEK(A +2 *8) +PEEK(A +2 *8 +1) *256
19 DATAMOVE =PEEK(A +2 *9) +PEEK(A +2 *9 +1) *256
20 FADEIN =PEEK(A +2 *10) +PEEK(A +2 *10 +1) *256
21 FADEOUT =PEEK(A +2 *11) +PEEK(A +2 *11 +1) *256
22 SETGB =PEEK(A +2 *12) +PEEK(A +2 *12 +1) *256
23 SCRX =PEEK(A +2 *13) +PEEK(A +2 *13 +1) *256
24 DATAFILL =PEEK(A +2 *14) +PEEK(A +2 *14 +1) *256
25 PROBAR =PEEK(A +2 *15) +PEEK(A +2 *15 +1) *256
26 HELP =PEEK(A +2 *16) +PEEK(A +2 *16 +1) *256
27 NANDREAD =PEEK(A +2 *17) +PEEK(A +2 *17 +1) *256
28 REFRESH =PEEK(A +2 *18) +PEEK(A +2 *18 +1) *256
29 CLSGB =PEEK(A +2 *19) +PEEK(A +2 *19 +1) *256
40 CALL OUTTXT,"Hello World!",12,28,1,0 |
|