易码技术论坛

 找回密码
 加入易码
搜索
查看: 603446|回复: 31

GVB显图4法(总结)[分享]

[复制链接]
发表于 2005-6-19 09:41:00 | 显示全部楼层
第3法是余大哥滴批量法~在当时引起很大滴轰动滴说~怎么可以叫做欺骗法……
另第4法应该是反侵略的办法吧~具体有点忘掉~原理是改下BASIC的BOX语句~使其成为类似LAVA的WriteBlock()函数~然后用POKE设置下参数就可以很方便滴画图了……
发表于 2005-6-19 10:10:00 | 显示全部楼层
第2种也是偶的~~~~~
 楼主| 发表于 2005-6-19 13:57:00 | 显示全部楼层
因为改变记录地址,所以在我看来是骗了星星.....呵呵
第四法主要是怎么poke参数不知道,要不就不会怎么废气了!
发表于 2005-6-19 16:37:00 | 显示全部楼层
第四法~你去tgclc找找把~有说明滴~
发表于 2005-6-21 19:03:00 | 显示全部楼层
是啊.......就是那个说批量法是LJ的帖子......
发表于 2005-6-25 12:06:00 | 显示全部楼层
将DAT图片文件的载入起点设在显存,载入长度为1600,调用文件打开中断,谁够我快?
发表于 2005-6-25 12:35:00 | 显示全部楼层
楼上的方法有局限性,不能随意显图,而只能显示160*X分辨率的图。
发表于 2005-6-25 19:48:00 | 显示全部楼层
4A,但速度还不是一般地快.
发表于 2005-6-25 21:32:00 | 显示全部楼层
废话~汇编当然快~而且我有办法让它更快~不过已经没有意义了~够了……
发表于 2005-7-4 23:08:00 | 显示全部楼层
补充一下,DATA文件的格式是二进制,可以用SEESTAR来转化图片
 楼主| 发表于 2005-7-7 14:47:00 | 显示全部楼层
第4法以更新................
注:仅测试过NC2600c
地址说明:
6592~8191图形缓冲区)
24575~24575-NGVB数据存储区.N为数据长度.注:该区数据由尾至头存储)
1.直接POKE图片缓存:
如:
10 FOR Q=6592 TO 8191
20 POKE Q,A:REM A为图片数据
30 NEXT
该法速度较慢,但简单.
该法单图DATA文件大小为:3200(min)-6400(max)
2.直接读取极速显图法)
如:
10 OPEN "XXX" FOR RANDOM AS#1 LEN=100
20 POKE 26254,192OKE 26258,25:REM 读到图片显存
30 POKE 26262,64OKE 26267,6:REM 每次读的大小
40 P=LOF(1)/1600-1:REM 图片张数
50 FOR Q=0 TO P
60 SE=Q*1600:REM 读文件的位置.当SE以20为步长递增或递减时可以实现滚图(SE=定值*1600+N:N=N+20)
70 H=INT(SE/256)=SE-H*256
80 POKE 47446,LOKE 47447,H:CALL 26207
90 NEXT:GOTO 20
注:贼快的方法.简单强大.显示b16图片效果也不错.该法单图DATA文件大小:1600
3.批量法(有点难度.理解了就没问题了)
说明:当GVB中出现A$="XXX"等语句时GVB会把A$写入缓存.并记录A$的地址.此法要做的就是改变GVB记下的A$地址.
例:
10 CLEAR:CLS
20 A$="":B$=""
30 A=47302S=PEEK(A)+PEEK(A+1)*256:REM DS---第20条语句中A$&B$等的开始地址
40 POKE DS+2,200:REM A$的字符串长度
50 POKE DS+3,LD:POKE DS+4,HD:REM HD*256+LD=字符串开始地址
60 POKE DS+7,200: REM B$字符串的长度
70 POKE DS+8,192:POKE DS+9,2:REM 2*256+192=704(字符缓存开始地址)
80 LEST B$=A$:POKE 914,1:PRINT:POKE 914,0:END
注:POKE 914,1(显示小字体)POKE 914,0(显示大字体.GRAPH模式下不可用)DATA文件大小1600
4.矩行作图法:(研究中...)
10 GRAPH:CLEAR
20 CLSIM A$(16)
30 OPEN "XXX" FOR RANDOM AS#1 LEN=100:FIELD #1,100 AS P$:REM 假设打开的图片文件为1600个字节
40 FOR Q=16 TO 1 STEP -1:REM 因为GVB的缓存由24575向前存储.要想让图片是正的就要倒着让数据存进去
50 GET #1,Q:A$(Q)=P$
60 NEXT Q:CLOSE #1
70 POKE 34731,9:REM 改BOX函数
80 D=PEEK(254)+PEEK(255)*256-100:REM 254是地址低位.255是地址高位.(该地址为图片开使地址.相当于24575-文件长度).为什么减100那就要研究一下FOR函数了
90 H=INT(D/256)=D-H*256
100 POKE 146,L:POKE 147,H:REM 可以算一下H*256+L;是不是等于24575-文件长度呢?
110 BOX 1,0,159,79,1
120 POKE 34731,10:END
注:用来显示32字节(16*16)大小的图片无论是速度还是调用都再好不过.只是感觉这个找起地址来还有点麻烦.因为GVB的缓存中一有东西存入时地址大多会变.而且还要是倒着存放.晕...  第100条的146&147可改为152&153,但H&L就不是这样找了.别看我.我也还不知到呢.
●其实每个程序都有很大的拓展空间.我就不举例了.

发表于 2005-7-7 18:08:00 | 显示全部楼层
寒~第4种你就将它当做 LAVA 里的WriteBlock 用吧。找地址其实很简单。。。
霸善安255 该用户已被删除
发表于 2005-7-11 08:58:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-7-11 13:50:00 | 显示全部楼层
第二法其实就是调用打开文件中断将数据读取到显存。你需要先将图片存成文件才可以的。
而滚屏的具体方法?用批量法可以实现较实用的上下滚屏。而左右滚屏虽然BASIC其实也能办到……但那个速度……所以推荐用汇编。你可以在汇编版找到所有4方向滚屏的汇编代码。
 楼主| 发表于 2005-7-12 23:02:00 | 显示全部楼层
其实第2法滚图只是改变了图片载入的地址!下一张图位置为20*80!滚图则是20*N!
发表于 2005-7-25 21:27:00 | 显示全部楼层
好啊!不错哦!~~~~~~~~~
发表于 2005-9-8 17:16:00 | 显示全部楼层
有没有NC1020n可以用的?
 楼主| 发表于 2005-9-18 10:58:00 | 显示全部楼层
呵呵,把那些地址/中断.....改为1020的不就可以了吗![em07]
发表于 2005-9-18 11:33:00 | 显示全部楼层
116205035那个方法1020不可以用 改了地址也不行
发表于 2005-9-25 11:25:00 | 显示全部楼层
1020的图片缓存是2496~4095吧

可是有人知道1020的显存地址么?能否告诉在下,谢谢!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-28 06:04 , Processed in 0.011726 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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