批量法作图(速度奇迹)
余海林的创始原帖:
批量发送字节法:
先要了解字串变量在BASIC助手中的存放方式:
一旦程序中出现A$="XXX"之类的字串赋值语句时,在内存中用A$代表的字串
"XXX"就会被保存在内存中(内存是RAM,不要理解成闪存).并且保存的地址也
会记录在内存中,在使用A$时BASIC平台就会按记录的地址去取出"XXX".
总之,一旦出现类似A$='XXX"的语句时,BASIC助手会完成两件事:
①把"XXX"存放起来;②把"XXX"存放的地址登记下来.
对于第2步,"存放地址登记",在内存中格式是这样的
(第一个是地址,后面是该地址的值):
7659-64(表示这个变量的类型是字串)
7660-65(字符"A"的ASCII码值)
7661-3 (A$的长度,因为"XXX"长度为3)
7662-254(低位地址)
7663-63 (高位地址)
"高位"、"低位"是什么意思?由于1字节能表示的数值只有0-255,所以用1字节
来记录地址是不够的,所以用了2字节。将 "低位"+"高位"*256 所得的结
果就是存放实际地址。可以用以下方法取得:(BASIC助手运行)
]10 A$="XXX"
]20 ADD=PEEK(7662)+PEEK(7663)*256
]30 PRINT ADD
PRINT出来的数字就是"XXX"的存放地址,如果不相信,再接下去:
]40 PRINT PEEK(ADD),PEEK(ADD+1),PEEK(ADD+2)
运行结果显示:
88
88
88
查ASCII码表,X的ASCII值果然是88。
下面是具体方法:
我们对"XXX"存放在哪不感兴趣,我们的兴趣在于怎样控制内存中的某一端数
据。
第一步:报名。在程序第一句中出现X$="X"之类语句,让BASIC助手记录下字串
X$的存放地址。
第二步:修改记录地址。只要X$是第一个被赋值的字串,它的地址必定为7662和
7663,只要按高低位的方法用POKE改了它的记录地址,BASIC助手就会把修改的
地址当作X$的记录地址。这样,用X$就可以调用指定地址的字串,用LSET X$=" "
就可以修改那段地址的谌?/TD>
网友改善1:
作者: 立天
更简单批量法 FOR PC1010 NC2000 NC2600
在程序中用到批量法的时候,是否感到这个变动的批量法地址有点麻烦呢?
虽然这个地址可以很方便的求出来,但在每次修改完程序都要到资源管理器
去看一下程序大小,最终还是麻烦。现在,我可以在程序中极快的把它算出
来:它等于PEEK(A)+PEEK(A+1)*256(A=47302或47304或47757)
现在,我们用47302这个地址做一个实验吧!
10 A$="":B$=""
20 A=47302:D=PEEK(A)+PEEK(A+1)*256
30 POKE D+2,100:POKE D+3,0:POKE D+4,64
40 POKE D+7,100:POKE D+8,192:POKE D+9,2
50 LSET B$=A$:PRINT
可以看到,我们已成功把地址16384--16483这一百个地址的内容发送到了
地址704--803.
是不是方便很多呢?
以上程序在PC1010 NC 2000 NC2600 上通过测试,估计同样适用于PC2000.
网友改善2:
作者:SHEN(YUE)
首先来说说在NC2000A上使用批量法与其他型号的区别:
要想使用批量法,首先得知道存放“变量存放的高、低位地址”的地址在哪。
这就是NC2000A的特殊之处了。
NC2000A存放“变量类型,变量名,变量长度与变量存放的高、低位地址”的地址并不是一个固定的地址,它是一个不固定的,动态的地址。它存放在GVBASIC程序执行时在内存中的存放地址之后。所以在执行不同的GVBASIC程序的时,存放“变量类型,变量名,变量长度与变量存放的高、低位地址”的地址一般不同。
下面我将教大家找出这个动态的地址:(如果看不懂,文章最后还有修改实例)
把下面的语句加入要使用批量法的程序中:
0 9979
这里写要使用批量法的程序,程序中改存放“变量长度与变量存放的高、低位地址”的POKE语句还不知道具体地址,先用一个任意五位数(如:00000)代替。
9979 FOR A=8192 TO 65535:IF PEEK(A) THEN B=0 ELSE B=B+1:IF B=3 THEN PRINT A-69,A+1:END
9989 NEXT
然后运行程序得到两个数字
这两个数字都是存放程序中第一个变量的第一个数据(变量类型)的地址(一会儿再说这两个数的区别),通过它,往后顺延就可以知道每个变量的每个数据(变量类型,变量名,变量长度与变量存放的高、低位地址)的存放位置了。
下面说这两个数的区别:
第一个数是程序还在调试,没有最后完成时使用的。在用这个数时不必把加入程序的,找地址的语句(就是0 9979 , 9979 FOR A=8192 TO 65535:IF PEEK(A) THEN B=0 ELSE B=B+1:IF B=3 THEN PRINT A-69,A+1:END , 9989 NEXT)删掉,把行号0的语句改为:0 GOTO 你程序的第一行,注意要用四位数写。(比如你程序的第一行行号为10,那么就改为0 GOTO 0010)然后就可以执行你的程序了(别忘了把刚才得到的地址改入程序,注意要用五位数写)。
第二个数是程序制作完毕时使用的,用这个数时需把找地址的语句(就是0 9979 , 9979 FOR A=8192 TO 65535:IF PEEK(A) THEN B=0 ELSE B=B+1:IF B=3 THEN PRINT A-69,A+1:END , 9989 NEXT)删掉,其他的跟第一个数一样,只是不用把行号0的语句改为“0 GOTO 你程序的第一行”了(因为已经删了)。
注意:
1.在找地址时你的程序必须和使用这个地址时的程序必须一样!因为这两个地址都是动态的。(有一些可以改:比如改数字,只要位数不变,就可以。)
2.我写的程序要原样照抄,还是“动态”的缘故。
下面举一个例子方便理解:
我举的这个例子是把A$的存放地址改到NC2000A的存放秒的位置上,也就是地址1017,并显示不断变化的A$。
第一步:写程序
10 A$="A":POKE 00000,249:POKE 00000,3
20 PRINT A$:GOTO 20
第二步:把找地址的语句加入程序,变成
0 9979
10 A$="A":POKE 00000,249:POKE 00000,3
20 PRINT A$:GOTO 20
9979 FOR A=8192 TO 65535:IF PEEK(A) THEN B=0 ELSE B=B+1:IF B=3 THEN PRINT A-69,A+1:END
9989 NEXT
第三步:执行程序
显示出两个数
8238
8308
第四步:修改程序,这是我们使用第二个数,不删把找地址的语句。
通过知道存放程序中第一个变量的第一个数据(变量类型)的地址8308,就可以知道8309是变量名,8310是变量长,8311和8312就是我们要改的存放“变量存放的高、低位地址”的这个地址,把这两个地址代入程序,注意如果不够五位要在前面加“0”补位。然后把行号0的语句改为:0 GOTO 你程序的第一行(也就是行号为10的那行),并用“0”补齐4位。
把程序改为:
0 GOTO 0010
10 A$="A":POKE 08311,249:POKE 08312,3
20 PRINT A$:GOTO 20
9979 FOR A=8192 TO 65535:IF PEEK(A) THEN B=0 ELSE B=B+1:IF B=3 THEN PRINT A-69,A+1:END
9989 NEXT
第五步:试运行程序
发现程序按我所想象的那样显示不断变化的A$。
在程序全部完成并试运行正确的情况下,执行第六步
第六步:修改程序,把找地址的语句删除,并通过第一个数算出存放程序中存放“变量存放的高、低位地址”的这个两地址(8241和8242),并代入程序。
10 A$="A":POKE 08241,249:POKE 08242,3
20 PRINT A$:GOTO 20
这样程序就完成了,执行效果和第五步试运行时一样。
完成后,就不要做什么改动了,如果要改,那么就得从第一步开始算出新的地址。
最后献上用这个方法制作的NC2000A的速度检测程序,数越大,越快。
0 GRAPH:A$="A":POKE 8289,249:POKE 8290,3
1 B$=CHR$(PEEK(1017)):FOR A=0 TO 999:IF A$<>B$ GOTO 3
2 NEXT
3 LOCATE 1,1:PRINT A:GOTO 1
我的NC2000A是832,记得我以前的NC1020是772
批量法再提速--作者: 116205035
此法用于2000 ,2600 可能有用
结合批量法的使用:
POKE 34731,9
这样改了后呢,就可以用 BOX XX,YY,XX1,YY1,1,0
帖图了!
152,153 是图片数据的地址。
比批量法快 N 多。
一秒大概 10 多张图吧。
(我玩星星较晚,若先前有人发现过这样的做法,请谅解)
比如你有一张 16*16 的图片,它有 32 字节的数据对吧。
要你将它在屏幕上显示,怎么做呢?一般的话BAS 做这样的工作是很慢的。一张 16*16 的图也要 1 秒。
只需这样做: POKE 34731,9
这是第一步。
2。将图片数据 POKE 到内存。该地址为 :XX+YY*265
3。 POKE 152,XX:POKE 153:YY
4。 调用画矩形的函数:BOX XX,YY,XX+15,YY+15,1,0
如此即可将该 16*16 的图片显示到 以 (XX,YY) 为左上角的矩形上。
速度比一般的快的多啦!
附:结合批量法后即可方便地进行帖图了,可大大提高BAS 程序的画面质量,特别是游戏!
如需再画矩形则 POKE 34731,10。
分享到:
相关推荐
五点法作图,输入五个点,然后在数轴中连成线
在批量作图的场景下,GDI+可以被高效地利用来绘制大量图片或者进行复杂的图形操作。以下是对GDI+批量作图的知识点详解: 1. **GDI+基础**:GDI+的核心类是`Graphics`,它代表了一个绘图表面,可以用于绘制线条、...
透镜成像作图法是中学物理教学中的一个重要知识点,主要应用于光学部分的学习。通过本篇文章,我们将深入了解透镜成像的基本原理、作图方法及其应用。 ### 一、透镜的基本概念 #### 1.1 透镜的定义 透镜是由两个...
在传统的数据处理方法中,作图法往往与列表法结合使用,列表法通过计算将数据点以表格形式展示,而作图法则通过直观的方式,如点、线、曲线等图形来分析数据变化趋势和关系。 作图法在物理实验中的应用首先需要掌握...
在探讨如何提高机械CAD作图速度的方法时,我们可以从多个方面来考虑。首先,我们需要对CAD软件中各种命令有深入的了解。这包括熟悉绘图命令、修改命令以及其它常用命令,并掌握它们的使用技巧。以下是一些具体的知识...
(完整版)理想光学系统作图法练习题答案.pdf
作图法是实验数据分析中常用的一种方法,尤其在物理学中,它可以直观地揭示物理量之间的关系,例如在伏安法测电阻的实验中,通过绘制电压(U)与电流(I)的关系图,可以确定电阻的值。以下是利用作图法处理实验数据...
QTL定位的多区间作图法值得推广,李广军,李河南,数量性状基因座(quantitative trait loci: QTL)定位已成为研究数量性状基因的常规方法。然而,选择何种QTL定位方法却成为应用工作者的难题。
这份PPT教案主要针对小学五年级的学生,旨在通过作图法教授解决数学问题的策略。作图法是一种直观且有效的解决复杂数学问题的方法,尤其在处理数量关系和几何问题时非常有用。以下将详细解析其中涉及到的知识点: 1...
三角函数的图象与性质要点梳理五点法作图原理PPT课件.pptx
3. **掌握作图法**:学会通过绘制图表来分析数据并确定重力加速度的具体数值。 #### 实验原理 复摆是一种特殊的摆动系统,它由一个刚体组成,这个刚体可以围绕一个固定的水平轴自由摆动。复摆的主要特征是其周期...
PPT作图大全,最全的PPT作图素材,需要的童鞋速度了!!
MATLAB是一种强大的数值计算和数据可视化软件,尤其在数学建模和数学实验中,它的作图功能被广泛应用。MATLAB的绘图主要是基于点的坐标,通过连接这些点来形成曲线或曲面,使得复杂的数学模型得以直观地展现。 在三...
《中学物理作图工具》是一款专为中学生和教师设计的高效绘图软件,它集成了运动学、机械运动和电磁场等领域的图形绘制功能,是教学和学习过程中的得力助手。这款工具旨在帮助用户直观理解物理概念,增强对物理规律的...
海龟作图,程序虽短,但功能齐全!! 设置海龟类型的基本操作为:procedure StartTurtleGraphlcs ;{显示作图窗口,并在窗口内写出本人的姓名、上机号和实验题号。}procedure StartTurtle;{令海龟处于作图的初始...
例如,力的平衡图、速度与时间图、加速度与时间图、电流与电压关系图等,都是物理学中的基础图像。《Word版物理作图程序 V3.0》则提供了这些常见图的快速绘制选项,用户只需输入相关数据,程序就能自动生成对应的...
1. **重视程度不足**:尽管五种基本尺规作图法相对简单,但由于在考试中所占比例较小,师生往往不够重视。这导致学生在实际操作中熟练度不高,无法将理论知识与实践操作有效结合。 2. **加强练习的必要性**:为了...