易码技术论坛

 找回密码
 加入易码
搜索
查看: 244787|回复: 5

[工具] TC808的GVBASIC++移植版

[复制链接]
发表于 2007-5-22 21:08:56 | 显示全部楼层
Shafa~~~
It seems that no one has made a useful program under the Gvbasic++ for Nc3000...
I really hope someone will write some programs under the NEW Gvbasic++ for Tc808...
 楼主| 发表于 2007-5-22 21:16:31 | 显示全部楼层
希望它不只是一个观赏性的程序......
发表于 2007-5-22 22:30:22 | 显示全部楼层
老兄,顶你一下。高考顺利啊
发表于 2007-5-23 17:41:08 | 显示全部楼层
顶一下!!!!
 楼主| 发表于 2007-5-22 20:53:06 | 显示全部楼层 |阅读模式
  原作者:立天(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 AOAD "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

BASIC2_1.rar

26 KB, 下载次数: 400

发表于 2008-8-8 14:15:17 | 显示全部楼层
顶tc808~
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 14:31 , Processed in 0.012434 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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