| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 705 人关注过本帖
标题:GW--BASIC 懂得人请进来
只看楼主 加入收藏
zjw807882628
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-22
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
GW--BASIC 懂得人请进来
小的最近做一个项目,由于用的仪器很老了,一个程序是用GW--basic写的,由于这个语言很多年不用了,在网上搜了很多帖子,没有。那个大牛能帮忙给解释一下,十分的感谢。代码将在下一个帖子里附上。
搜索更多相关主题的帖子: 仪器 网上 项目 
2013-04-04 17:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
我了个去,确实够老的,回想起了我的小霸王学习机。

从来不来这里,鬼使神差的想来这里看看,发上来我看看,也许可以帮到你

重剑无锋,大巧不工
2013-04-04 21:40
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
gw-basic 的确够老了。我记得 GWBASIC 没有与硬件打交道的部分,它的代码,可以稍修改后用在 VB 里。

授人于鱼,不如授人于渔
早已停用QQ了
2013-04-04 21:46
zjw807882628
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-22
收藏
得分:0 
我现在补发一下那个代码
代码.zip (2.71 KB)
,希望能给解释一下代码意思
2013-04-10 20:04
zjw807882628
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-22
收藏
得分:0 
这个代码是我copy 的凭我的编写程序的直觉,这个代码好像有问题的,能不能帮我看看
2013-04-10 20:21
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
100 '*********************************************        
110 '*        
120 '* R9211 FLOPPY data reading program        
130 '*        
140 '* for VIEW FILE data        
150 '*        
160 '*  REV 1.00        
170 '*        
180 '***********************************************        
190 OPTION BASE 1        '最小下标 1
200 '        '定义数组
210 DIM D(13000),SCL#(3),DATAX(3),PNT(3),DTYP(3)                '定义数组
220 '        
230 CLS 3        '清屏
240 '        
250 ' input read file name.        
260 'FL$ = "c:vfe__001.vfe":GOTO  1240        
270 INPUT "CURRENT DRIVE ?",DRIVE$        '提示,并要求输入一个字符串
280 INPUT "FILE FUNCTION ?",FUNC$        '提示,并要求输入一个字符串
290 INPUT "FILE NUMBER   ?",FILENM$        '提示,并要求输入一个字符串
300 IF LEN(FILENM$) = 0 THEN FILENM$ = "000"        '如果输入为空,则生成默认值
310 IF LEN(FILENM$) = 1 THEN FILENM$ = "00"+FILENM$        
320 IF LEN(FILENM$) = 2 THEN FILENM$ = "0"+FILENM$        
330 FL$ = DRIVE$+":vf"+FUNC$+"__"+FILENM$+".vf"+FUNC$        '字符串连接
340 PRINT "input file name is ",FL$        '显示内容
350 '        
360 '*************************************************        
370 ' read data from floppy.        
380 '        
390 'GOSUB 2000               'read floppy data        
400 '        
410 '************************************************        
420 'set control flag        
430 '        
440  GOSUB 510        '调用 510 行开始的子程序
450 '        
460 '=================data display =====================        
470 GOSUB 1130        '调用 1130 开始的子程序
480 '        
490 END         '程序结束
500 '***************************************************        
510 '***********************************************        '子程序入口,注释
520 ' set control flag        
530 '        
540 AOF = 513        
550 '        
560 '=======top of X axis data array ==        
570 '        
580 P= 145        
590 GOSUB  1680   ' 32bit ineger        '调用 1680行的子程序
600 XTOP = INTX*256 +1        
610 '        
620 '===size of array ==        
630 P = 149        
640 GOSUB 1680      '32 bit integer        '调用 1680行的子程序
650 DATAN = INTX/4        
660 '        
670 '=== X axis scale and offset value ==        
680 N = 153        
690 GOSUB 1420  'IEEE float format         '调用 1420 行的子程序
700 XSCALE# = A#        
710 '        
720 N =157        
730 GOSUB 1420  ' IEEE float format -- float data         '调用 1420 行的子程序
740 XOFSET# = A#         
750 '        
760 '=== top of Y axis data array ==        
770 P= 161         
780 GOSUB 1680  '32  bit integer        '调用 1680行的子程序
790 YTOP = INTX*256 +1        
800 '        
810 '=== Y axis scale and offset value ==        
820 N =169         
830 GOSUB 1420 ' IEEE floating format         '调用 1420 行的子程序
840 YSCALE# =A#        
850 '        
860 N = 173         
870 GOSUB 1550 ' IEEE float format         '调用 1550 行的子程序
880 YOFSET# =A#        
890 '        
900 '======display scale ===========        
910 AOF = 513         
920 VM = AOF +D(AOF)*256+D(AOF+1)+ 768 +112  'VIEW INFORMATION         
930 '        
940 N = VW+60        
950 GOSUB  1550  'IEEE 64 bit floating format         '调用 1550 行的子程序
960 XMAX = ID#        
970 '        
980 N = VW +68         
990 GOSUB 1550        '调用 1550 行的子程序
1000 XMIN =ID#        
1010 '        
1020 N = VW + 76        
1030 GOSUB  1550            'IEEE 64 bit floating format         '调用 1550 行的子程序
1040 YMAX = ID#        
1050 '        
1060 N = VW + 84         
1070 GOSUB 1550    ' IEEE 64 bit floating format        '调用 1550 行的子程序
1080 YMIN =ID#        
1090 '        
1100 RETURN         '子程序结束,返回调用
1110 '**********************************************        
1120 'display view file data         
1130 '        
1140 CLS:CLS 2:SCREEN 2,0,0  'graphics mode ON        '清屏,清屏,设置屏幕为 2 号类型。2号类型要去查表,此命令 VB不支持,可以查 QB
1150 GOSUB 1730         '调用 1730 行的子程序
1160 DMAX = -YMAX:DMIN = YMAX        
1170 STPN = 4        
1180 XN = XTOP : YN =YTOP        
1190 N =XN        
1200 GOSUB 1420   'IEEE floating format        '调用 1420 的子程序
1210 NX = A#*YSCALE# + XOFSET#        
1220 '        
1230 N=YN        
1240 GOSUB 1420   'IEEE floating format         '调用 1420 的子程序
1250 NY = A#*YSCALE# -YOFSET#        
1260 '        
1270 FOR I=1 TO DATAN-1        '循环
1280 N= XN + I*SPTN        
1290 GOSUB 1420      'IEEE format --> 32 bit floating data.        '调用 1420 的子程序
1300 XP = A# *XSCALE# + XOFSET#        
1310 '        
1320 N =YN +I*STPN        
1330 GOSUB 1420      'IEEE format --> 32 bit floating data.        '调用 1420 的子程序
1340 YP = A# *YSCALE# - YOFSET#        
1350 '        
1360 LINE (XP,YP)-(NX,NY),2        '画线
1370 NX = XP : NY = YP        
1380 NEXT I        
1390 '        
1400 RETURN        
1410 '******************************************************        
1420 ' IEEE 32 bit floating format --> floating data        
1430 '        
1440 X1 = D(N) : X2 = D(N+1) :X3 = D(N+2) :X4 =D(N+3)        
1450 IF (X1=0) AND (X2=0) AND (X3=0) AND (X4=0) THEN 1460 ELSE 1480        '这句没看懂。感觉少了 goto 命令,没用过这种的用法,也许是可以省略goto 命令。用作分支选择。
1460  A# = 0!        
1470 GOTO 1530        '跳转到 1530 行执行
1480 SIGN =(-1)^((X1 AND 128)/128)        
1490 EXP1 =((X1 AND 127)%2 + (X2 AND 128)/128)127        
1500 EXPO#= 2^EXP1        
1510 FRAC#= ((X2 OR 128)+(X3 +X4/256)/256)/128        
1520 A# = SIGN*EXPO#*FRAC#        
1530 RETURN        '子程序结束,返回调用
1540 '******************************************************        
1550 'IEEE 64 bit floating format --> double data        
1560 X1 = D(N) : X2 = D(N+1) :X3 = D(N+2) :X4 =D(N+3)        
1570 X5 = D(N+4) : X6 = D(N+5) :X7 = D(N+6) :X8 =D(N+7)        
1580 IF (X1=0) AND (X2=0) AND (X3=0) AND (X4=0) AND (X5=0) AND (X6=0)      AND (X7=0) AND (X8=0) THEN 1590 ELSE 1610        '同样,goto 分支选择
1590 ID# = 0!        
1600 GOTO 1660        
1610 SIGN =(-1) ^((X1 AND 128)/128)        
1620 EXP1 =((X1 AND 127)%16 + (X2 AND 240)/16)-1023        
1630 EXPO#= 2^EXP1        
1640 FRAC#=(((((((X8/256)+X7)/256+X6)/256+X5)/256)+X4)/256+X3)/256+((X2 AND 15) OR 16)/16        
1650 ID# = SIGN*EXPO#*FRAC#        
1660 RETURN        '子程序结束,返回调用
1670 '*******************************************************        
1680 '32 bit integer data        '1680 调用的子程序
1690 '        
1700 INTX = ((D(P)*256)+D(P+1))*256 + D(P+2))*256+ D(P+3)        
1710 RETURN        '子程序结束,返回调用
1720 '        
1730 '********************************************************        
1740 ' view scale        
1750 WINDOW (XMIN,YMIN)-(XMAX,YMAX)        '设置更新区域??这条命令不清楚
1760 VIEW (50,40)-(600,160),,1        '设置显示区域??这条命令不清楚,TB 好像才支持这条命令
1770 LINE (XMIN,YMIN)-(XMAX,YMIN)        '画线
1780 LINE (XMAX,YMIN)-(XMAX,YMAX)        
1790 LINE (XMAX,YMAX)-(XMIN,YMAX)        
1800 LINE (XMIN,YMAX)-(XMIN,YMIN)        
1810 FOR X=XMIN TO XMAX STEP(XMAX-XMIN)/10        
1820 LINE (X,YMIN)-(X,YMAX)        
1830 NEXT X        
1840 FOR Y=YMIN TO YAMX STEP (YMAX-YMIN)/10        
1850 LINE (XMIN,Y)-(XMAX,Y)        
1860 NEXT Y        
1870 '        
1880 '----------SCALE-----------        
1890 LOCATE 6,2        '屏幕定位到第6行,第2列
1900 PRINT YMAX        '显示内容
1910 LOCATE 20,2        '定位
1920 PRINT YMIN        '显示内容
1930 LOCATE 5,2        
1940 PRINT XMIN        
1950 LOCATE 5,60        
1960 PRINT XMAX        
1970 LOCATE 1,1        
1980 RETURN        '子程序结束,返回调用
1900 '***************************************************        
2000 'data read from floppy        
2010 OPEN "RB",#1,FL$        '打开文件
2020 FIELD #1,64 AS X$,64 AS Y$        '设置文件结构,我没用过这种的写法
2030 '        
2040 GET #1        '读数据
2050 GET #1        
2060 FOR N=1 TO 64        
2070 D(N+128)=ASC(MID$(X$,N,1))   'TRANSFER BIN  TO VALUE        '解出每个字符为 BYTE
2080 NEXT N        
2090 FOR N= 1 TO 64        
2100 M=N+64        
2110 D(N+128)=ASC(MID$(Y$,N,1))  'TRANSEFER BIN TO VALUE        
2120 NEXT N        
2130 '        
2140 ' check data size        
2150 P=177        
2160 GOSUB 1680        '调用 1680行的子程序
2170 MAXBUF =INTX*2        
2180 '        
2190 FOR L=3 TO MAXBUF        
2200 GET #1        '读数据
2210 FOR N=1 TO 64        
2220 M=128*(L-1)+N+64        
2230 D(M)=ASC(MID$(X$,N,1))        
2240 NEXT N        
2250 FOR N=1 TO 64        
2260 M=128*(L-1)+N+64        
2270 D(M)=ASC(MID$(Y$,N,1))  'TRANSFER        
2280 NEXT N        
2290 NEXT L        
2300 GOTO 2400        '跳转到 2400 行执行
2310 FOR I=1 TO 2048 STEP 24        
2320 'IF(I>1) AND (((I-1) MOD 512)=0) THEN INPUT DMY        
2330 ANS$=""        
2340 FOR J=0 TO 23        
2350 AD$=HEX$(D(I+J)):IF LEN(AD$)=1 THEN AD$="0"+AD$        
2360 ANS$ =ANS$+AD$        
2370 NEXT J        
2380 PRINT HEX$(I-1),ANS$        
2390 NEXT I        
2400 RETURN

授人于鱼,不如授人于渔
早已停用QQ了
2013-04-11 08:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
以前 学 GW-BASIC 时,只学了一些皮毛,图形这一块的基本没教。
文件那一块,就是学了二种文件,没有学过带结构的文件。
与硬件打交道的根本不知道。

这种的程序,结构很乱,需要把一块一块的切出来,然后再去分析之间的调用,才能明白程序的执行流程。
如果找不到 GW-BASIC时,
有可能 QBASCI 能运行这个程序, QB 能大部分情况下兼容 GW-BASCI。
如果QB不行的话,那就得去找 TURBO BASIC 。TB 与 GWBASIC 差不多是同时期的程序。
BASICA 应该不用去试了, GWBASIC 是 BASICA 的汉化扩展集。

授人于鱼,不如授人于渔
早已停用QQ了
2013-04-11 09:05
zjw807882628
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-22
收藏
得分:0 
这个是一个软盘读写数据的程序,我想请教一下,能帮我解释一下它读入数据的类型,和转换之后的类型吗?程序是我从技术手册上copy 的,我看不懂,谢谢
2013-04-11 14:27
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
静态分析这个代码,好烦啊。

1680行的子程序 :根据 P 的位置,在D 从P 开始向后取4位,生成一个长整数据,生成 INTX 。
1420行的子程序: 根据 N 的位置,在D 中从N开始后取 4位,然后需要进行运算,生成 A 。
      1490 行有错误。

1900行的子程序:读数据。
      先读 128 个字节,丢弃。
      再读 128 个字节,解析成字节,然后从 129 (1+128) 位置开始放入,通过二轮,均放入数组 D 中,      2100 行或 2110 行 有错误。
再取 数据大小,保存到 从 177 开始的 位置。
把 177 开始的4字节转为整数后,乘以2,得到数据总个数。然后再循环读取。数据依次向后保存。
最后还有一个 显示数据的部分。
+---------------

程序静态分析 很烦的。现在都习惯了 动态调试了。

授人于鱼,不如授人于渔
早已停用QQ了
2013-04-11 15:25
快速回复:GW--BASIC 懂得人请进来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025007 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved