最近发现有些人想用NC3000的批量法,但却不知道如何得到变量储存地址,所以我发了这一帖,希望新手能看的懂。
如果对批量法不了解的,可以在空间站上看这一帖
虾米们看的批量法
关于批量法,最主要的就是找到变量储存地址,NC3000的变量储存地址在$2000(十进制的8192,也就是显存后面)+文件长度。一般的程序,用到批量法的都是把程序写完后再到资源管理里面查看长度,这样在编程序时很不方便,每修改一次都要重新查看,所以我想,是不是文件长度都在内存里面存着呢?于是就写了下面的程序:
10 K=00000:HI=INT(K/256)O=K-HI*256 //K用来储存文件长度
20 FOR W=2000 TO 3000
30 IF PEEK(W)<>LO THEN 60
40 IF PEEK(W+1)<>HI THEN 60
50 PRINT W
60 NEXT
70 END
80 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
90 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
100 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
110 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //用来占位置
编好后储存,再到资源管理中得到文件大小,我的是294,然后修改程序 ,把K=00000改为K=00294(前面的0不能去掉!),程序变为:
10 K=00294:HI=INT(K/256)O=K-HI*256
20 FOR W=2000 TO 3000
30 IF PEEK(W)<>LO THEN 60
40 IF PEEK(W+1)<>HI THEN 60
50 PRINT W
60 NEXT
70 END
80 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
90 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
100 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
110 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
然后运行程序,便可得到储存文件长度的内存地址了。我运行后是显示了三个地址:2246,2276,2299。经测试, 三个地址都表示文件长度。
所以,在批量法中,就可以直接在程序中写 DZ=PEEK(2246)+PEEK(2247)*256+8192了,修改了程序也不需要重新再查看文件长度了,是不是方便多了?
顺便说一下如何在GVB 中贴图
其实贴图就是用到了系统函数 INT $CA09,而LINE则调用了INT $CA0B,并且它们参数的地址相同,于是就可以把GVB 中的$CA0B改为$CA09,如此就可以实现贴图。同样的,我们用上面类似的寻找程序中的INT $CA0B所在的位置:
10 K=00294:A=00:B=11:C=202 //INT $CA0B的机器码
20 FOR W=16384 TO 65535
30 IF PEEK(W)<>A THEN 60
40 IF PEEK(W+1)<>B THEN 60
45 IF PEEK(W+2)<>C THEN 60
50 PRINT W
60 NEXT
70 END
运行后便可得到地址34666
因此我们POKE 34667,9,然后LINE X,Y,X+HIGHT,Y+WIDTH就可以贴图了,再POKE 34667,11 便可以用LINE话直线了。图象信息的地址需要POKE到146,147。
例如,你的图片存在地址5000,长16,宽16,要显示在(10,10)的位置,则程序如下:
HI=INT(5000/256)
LO=5000-HI*256
POKE 34667,9
POKE 146,LO
POKE 147,HI
LINE 10,10,10+16,10+16
END
行了,就讲到这了,希望大家能看的懂。<img src="http://www2.emsky.net/bbs/Skins/Default/emot/em01.gif">
[em01]
[此贴子已经被作者于2005-11-5 17:26:06编辑过]
|