易码技术论坛

 找回密码
 加入易码
搜索
查看: 685080|回复: 9

[转帖]NC3000 GVbasic超精华文章

[复制链接]
发表于 2006-7-4 08:54:00 | 显示全部楼层
沙发
发表于 2006-7-4 12:15:00 | 显示全部楼层
集3000万千精华于一体!赞!
发表于 2006-8-13 17:10:26 | 显示全部楼层
请教一个问题:切换目录上的以下语句:
35 POKE 8291,169: POKE 8292,0: POKE 8293,141
36 POKE 8294,92: POKE 8295,32: POKE 8296,0: POKE 8298,5: POKE 8299,144
……
2200 CALL 8291
能否转化成:
35 POKE 8284,0
36 POKE 8296,0: POKE 8298,5: POKE 8299,144
……
2200 CALL 8296

可以不?

还有一个问题
为什么在最后才POKE 8297,13
放在前面有什么问题么?

希望高人解答……
发表于 2006-8-14 14:44:25 | 显示全部楼层
不错啊,不过你反几个bin知道得比这个更多!!!
发表于 2006-8-14 15:55:19 | 显示全部楼层
呵呵,还有人研究BASIC呢啊~~
发表于 2007-7-30 20:32:17 | 显示全部楼层
支持
好多都不太懂
发表于 2007-9-30 11:20:24 | 显示全部楼层
nc3000已经支持litianzzk的BAS++了
用RUN便可调用BAS
 楼主| 发表于 2006-7-3 22:37:29 | 显示全部楼层 |阅读模式
NC3000 GVbasic超精华文章 必看!!
★☆★NC3000新技术发表: 在BASIC中动态调用程序★☆★
作者:Dojo
    上次在查laugj写的NC2600的PEEK表时意外知道CALL 17927可以运行文件,连忙在我的NC3000上试了一下,结果不行!
    经过好长时间的研究终于发现原来是因为NC2600和NC3000放当前运行程序文件名的地址不同害的:NC2600是2262--2275,NC3000是2189--2202。
方法是:
先新建一个BAS文件:
-------------------
10 B$="B.BAS"
20 L=LEN(B$)
30 FOR I=2189 TO 2202
40 POKE I,0
50 NEXT
60 FOR I=1 TO L
70 N=ASC(MID$(B$,I,1))
80 POKE I+2188,N
90 NEXT
100 CALL 17927
-------------------
将这个程序命名为A.BAS。
再建立一个BAS文件:
-------------------
10 GRAPH
20 FOR I=1 TO 10: BEEP : NEXT
30 PRINT "     恭喜!!!!!"," 你已成功调用本程序 感谢你对Dojo的支持!! ","        By DojoSoft";
40 FOR I=1 TO 10: BEEP : NEXT
50 W$= INKEY$
60 POKE 199,128: END
-------------------
运行A.BAS你会发现B.BAS被调用了!!!
本技术原理如下:
    第一步:修改当前运行程序文件名。即修改内存2189到2202的值,方法是求出被调用程序的文件名(包括后缀)的ASCII码值,再逐个按顺序POKE到2189到2202中。文件名不足15字节要把后面的地址POKE为0,当然你也可以像上面示例一样先把2189到2202POKE为0再去POKE文件名。做完这些后再写上CALL 17927就完了。
    第二步:制做被调用的程序(也可先做这个,没关系的)。这可以是任意程序,但要注意的是此时正常退出程序会关机或重启,我不知道是什么原因(高手知道原因告诉我啊)。解决的方法是退出程序改为"POKE 199,128:END"此时会跳到时间热键,也可改为其它热键。
PS.
1.允许运行被调用程序时再回到原程序中,允许多个程序以环状、星状、树状等方式“接力”,方法同上,退出时的问题同样要注意。还有以上都要用GVBASIC+运行。
2.“接力”程序时变量会清空,如后来要用必需先把它们写入文件或POKE到空闲内存中,要用时再读出来。
3.为防止被调程序被单独运行可采用以下两种方式:
一.在调用程序前几行把系统时间读出来(读出时、分、秒即可),再把它们POKE到空闲的内存地址中(或写入文件),调用完成后由被调程序读出来与系统时间对比,如不同(允许差1秒)则肯定单独运行,提示并自动退出即可。
二.把被调程序都放在另外目录下,由留在“BASIC文件”目录下的入口程序去调用。切换目录的方法我会马上贴上来。
4.如果要调用某程序不同的程序段则可在调用前把特定的数值POKE到空闲内存(或写入文件),在被调程序前写几个IF语句根据该数值GOTO相应的行号即可(可惜GOTO后面不能跟变量,不然方便多了)。
    没想到这么简单吧?快去试试!要调用其它程序改一下A.BAS中的B$就可。
    用这个方法使BAS完全能“拼凑”出大型程序。
    爽歪了吧?
    多顶我欧~~~


在NC3000中用BASIC程序删除文件
作者:Dojo
    我不懂汇编,这个方法是我在laugj的NC2600PEEK表中发现的,遂与大家分享。
    方法如下:
    1.先把要删除的文件名POKE到内存2189到2202中,不足的用0补足。方法可参见我的那篇《在BASIC中动态调用程序》,也可看下文示例。
    2.再POKE 8000,0OKE 8001,14OKE 8002,5OKE 8003,96:CALL 8000就好了!
    很简单吧?如果要删除正在运行的程序本身(卸载?)则可免去第1步。
    其中的道理我也不太懂,大家能用就行了。
    示例:假设被删的文件名称为“BEDEL.BAS”,者再建如下文件:
--------------
10 FILE$="BEDEL.BAS"
20 FOR I=2189 TO 2202
30 POKE I,0
40 NEXT :REM 20到40行是把2189到2202POKE为0可免去待会补0
50 L=LEN(FILE$)
60 FOR I=1 TO L
70 N=ASC(MID$(FILE$,I,1))
80 POKE I+2188,N
90 NEXT
100 POKE 8000,0:POKE 8001,14:POKE 8002,5:POKE 8003,96:CALL 8000
------------
保存一下,再运行...跳出后BEDEL.BAS是不是不见了啊?
   厉害吧。


在NC3000的BASIC上切换目录
作者ojo
    前面已经说过要介绍切换目录的方法,但还是那句话:我不懂汇编,所以待会不要问我为什么,因为我也不懂-_-!
看这个程序:
-------------
10 NA$ ="/应用程序"
15 POKE 199,0: GOTO 22
16 GRAPH : LOCATE 3,3: PRINT "请用GVBASIC+运行": GOSUB 101: END
17 REM 换算里的BASIC碰到POKE或CALL时会跳到下一行而忽略冒号后面的,故上文可判断是否为BASIC+
22 GRAPH : LOCATE 3,4: PRINT "翁敏峰2006制造": BOX 15,26,142,51,1,2: GOSUB 101
23 FOR I=1 TO 3000: NEXT
35 POKE 8291,169: POKE 8292,0: POKE 8293,141
36 POKE 8294,92: POKE 8295,32: POKE 8296,0: POKE 8298,5: POKE 8299,144
37 POKE 8300,3: POKE 8301,238: POKE 8302,92: POKE 8303,32: POKE 8304,96
38 REM 以上三行我全不懂,莫怪我
90 POKE 199,0: GOTO 2140
101 BOX 15,26,144,53: BOX 16,54,146,55: BOX 145,27,146,53: RETURN
150 REM 下文便是切换部分
2140 K =2189
2145 FOR XC=1 TO LEN(NA$)
2150 N=ASC(MID$(NA$,XC,1))
2160 IF N-31  THEN POKE K,N:K=K+1
2170 NEXT
2180 POKE K,0
2190 POKE 8297,13
2200 CALL 8291
2220 IF PEEK(8284) THEN GRAPH : PRINT "您还没有创建`";NA$;"'目录。请用其它软件创建。";
2230 W$ =INKEY$
2240 POKE 199,155: END
--------------
把它运行一下,是否切换到应用程序目录下去了?
    NA$表示要切换的目录名,前面要加“/”。
    相信对于切换部分大家一定发现其实也是把目录名POKE到2189后面吧(与我讲的运行、删除文件一样)。当PEEK(8284)不等于0表示无该目录。
    这个方法是我研究了Sleepy的XASM得到的,故中间的那一大堆POKE我也不懂,我都试过,不能少的,大家别删啊。
    由于切换目录后并没有跳出GVBASIC+所以可用这个运行任意目录下的BASIC程序。
    要调用程序则在最后加上调用语段即可(END那行要删掉啊!)。
    还有15、16行的那种判断运行环境的方法是我独创的,用的语句最少,很好用,大家多发扬!
    用这个道理我还做了一个《目录切换器.BAS》要密码才能切换(密码是你养的小猪的名字),这样可以把一些程序复制到另一个目录,用本程序切换目录后才能用,实现程序保密。下面会传上来。


NC3000PEEK、POKE表(超全)
作者:Dojo
关机状态下:
W+V+ON/OFF 系统检测
X+ON/OFF 系统数据传输(双机互修即是用这个。注意,没事别瞎玩)
时间状态下:
快速输入HQILPXHF即是系统内置的debug(不懂汇编的别乱闯,进去后千万别“先按F2再按输入”!!什么?!你做了?晕~Nand Flash is error恭候)
快速输入GEYMETRY则显示“test word in dict!”,我不知是什么东西。
PEEK、POKE 表
机器状态:0 (0关机,1开机)
系统复位(RESET):POKE 1,12
锁键盘:POKE 4,0
关闭显屏:POKE 12,0 (按两下ON/OFF恢复)
键盘映射:191--198以及202,203
上次按键:199
(键盘映射和上次按键详值可使用我的《3K超级工具.BAS》查看)
文字缓存:
大字:704--803
小字:704--859
纯英文:704--863
电压相关:904
字体大小:
小字 POKE 914,1:POKE 915,0
大字 POKE 914,0:POKE 915,1
光标控制:
形状:947 (0有,8,16,18,20,24,26,28,255无)
光标横座标:(948)+1
光标纵座标:(949)+1
字体显示:956 (0正常,1纯英文,2前两行纯英文后为小字,3第一行正常其余小字,4全屏小字)
切换菜单繁简:998 (0繁 1简)
切换内码:999 (32繁体、64简体)
屏幕亮度:(1000)+1
音量大小:1001
发音速度:1002 (0,1,2,3,4)
按键声音:1008 (0,255)
整点铃声:1009 (0,128)
系统时间
时:1015
分:1016
秒:(1017)/2
年:(1018)+1881
月:(1019)+1
日:(1020)+1
星期:1021
自动关机时间:1024 (15,45,75,150)
距上次按键时间:1025 (每4秒+1)
闹铃:
分:(1026)=(1198)
时:(1027)=(1197)
关闹铃:POKE 1027,134:POKE 1197,0
开机画面设定:1036 (0,1,2,3)
时间格式:1037 (0,255)
开机题词:1039--1050
定时器:1061--1072
计时
时:1061
分:1062
秒:1063
设置
时:1064
分:1065
状态:1072 (32停止 64启动)
中英数:1095 (0,英 1,数 2,中)INPUT中文后POKE 1095,0可除去显示不正常
输入反查:1103 (0,1,2,3,4)
输入联想:1119 (0有、1无)
计算器相关设置:1123--1131
密码开关:1160 (32,128)
豪斯
钱:(1501)+(1502)*256
方块世界
速度:1541
高度:1542
最高分:(1543)+(1544)*256
姓名:1545--1550
推箱子
当前关:(1553)+1 (MAX 170)
最大关:(1554)+1(NC3000上没用)
开机音乐开关:1571 (0,1)
闹铃铃声文件名:1594--1607
定时铃声文件名:1608--1621
整点铃声文件名:1622--1635
提醒铃声文件名:1636--1649
开机音乐文件名:1650--1663
倒数计日:
年:(1670)+1881
月:(1671)+1
日:(1672)+1
开关:1673 (0,1)

名片总数:(1850)+(1851)*256
名片显示组群:1866 (0,1,2,3,4,5,6,7,8)
名片显示格式:1871 (0,1,2,3,4)
网络热键:1886--1901
默认字库序号:(1910)+1 (从下往上数)
学习设置:1911--1945
开机动画文件名2525)--(2540)
中文输入法:2613 (160,161,163,164,165)
宠猪数据(2659--2688)
生死:2659 (1.生 2.死)
成长:2660 (MAX 20)
名字:2662--2669
精力:2670 (MAX 7)
饥饱:2671 (MAX 6)
清洁:2672 (MAX 5)
智力:2673
体重:(2674)/2
心情:2675 (0哭)
训练度:2676
生年:(2677)+1881
生月:(2678)+1
生日:(2679)+1
生时:2680
强状:2681
敏捷:2682
活力:2683
法力:2684
胜:2685
败:2686
清洁度评价:2687,2688  (邋遢:2687(10,2688(10;孤独:2687)9,2688(10;绅士:2687)9,2688)9)
游戏音乐开关:2706 (0,255)
开机文本:2816--3015(要进入过开机文本编辑状态有效,改了没用)
录音品制:2816 (0,1)
是不是觉的2816很奇怪啊,没办法,我编辑了开机文本发现它变开机文本第一个字节了,我又修改了录音品制发现变的又是它!不过假如POKE 2816,0或1又是对录音品制有效对开机文本无影响。我估计开机文本是放在闪存中的而2816--3015只是编辑时的导入的内存吧,至于当时为什么会对录音品制无影响你要问GGV去了。
名片显示剩余空间:4618(看过名片统计后有效)
辞典回顾数目
英汉:4992
汉英:4993
显存:6592--8191
屏幕左下角方向标:
上:7812
右:8012
左:8072
下:8132
发表于 2007-11-14 21:09:06 | 显示全部楼层
挖老帖......
发表于 2007-12-20 18:54:07 | 显示全部楼层
ding
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-19 15:44 , Processed in 0.013336 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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