易码技术论坛

 找回密码
 加入易码
搜索
查看: 107209|回复: 1

[转帖]在一个BASIC程序中调用其他多个程序的方法!

[复制链接]
发表于 2006-5-3 21:43:00 | 显示全部楼层
经典,记下了
 楼主| 发表于 2005-12-30 11:53:54 | 显示全部楼层 |阅读模式
此方法结合汇编,速度很快,让你觉察不到程序的切换,并且可以调用多个文件,非常方便,其思想如下:
1.设定一个变量,比如Z,通过给它赋不同的值来选择执行不同的BASIC文件

2.结合汇编将选择到的文件读取到¥2000开始的地址,读取长度是0x2000(主要步骤)

3.开始执行该文件

主程序如下:(本人的星星是1020n,所以以下程序只保证1020n能用)

0  :

5  z=1:REM 文件开关

10  FOR I=1 TO 42:READ P:POKE I+5599,P:NEXT

20  DATA  169,0,141,20,18,0,2,147,176,27,169,0,141,13,18

30  DATA  169,32,141,14,18,169,0,141,15,18,169,32,141,16,18

40  DATA   0,4,147,0,7,147,96,169,0,133,199,96

50  ON Z GOTO 55,60,65:REM 文件选择(Z=1,2,3……)

55  F$="EXPa":GOTO 70

60  F$="EXPb":GOTO 70

65  F$="EXPc":GOTO 70:F$为文件名,根据Z的不同值得到不同的文件名

70  F$=F$+ "。bas":IF LEN(F$)=16 THEN 80

75  FOR I=1 TO 16 - LEN(F$):F$=F$+ " ":NEXT

80  FOR I=1 TO 16:POKE I+4635,ASC(MID$(F$,I,1)):NEXT

90  CALL 5600:IF PEEK(199)=0 THEN GRAPH:PRINT  "无法打开";F$:END

95  REM 请从100行开始写程序,并注意不要随意改动100行以前的程序!

100 :

注:使用时可以根据具体情况修改一下主程序,但应保证要调用的程序文件的前100行跟主程序相同!也就是说,在100行后写完程序后不要删掉100行以前的部分,直接退出保存!

例子:

主程序文件——LEADER

0  :

5  z=1

10 FOR I=1 TO 42:READ P:POKE I+5599,P:NEXT

20  DATA  169,0,141,20,18,0,2,147,176,27,169,0,141,13,18

30  DATA  169,32,141,14,18,169,0,141,15,18,169,32,141,16,18

40  DATA   0,4,147,0,7,147,96,169,0,133,199,96

50  ON Z GOTO 60,65

60  F$="EXPa":GOTO 70

65  F$="EXPb"

70  F$=F$+ "。bas":IF LEN(F$)=16 THEN 80

75  FOR I=1 TO 16 - LEN(F$):F$=F$+ " ":NEXT

80  FOR I=1 TO 16:POKE I+4635,ASC(MID$(F$,I,1)):NEXT

90  CALL 5600:IF PEEK(199)=0 THEN GRAPH:PRINT  "无法打开";F$:END

100 :

调用程序文件1——EXPa

0  :

5  z=1

10 FOR I=1 TO 42:READ P:POKE I+5599,P:NEXT

20  DATA  169,0,141,20,18,0,2,147,176,27,169,0,141,13,18

30  DATA  169,32,141,14,18,169,0,141,15,18,169,32,141,16,18

40  DATA   0,4,147,0,7,147,96,169,0,133,199,96

50  ON Z GOTO 60,65

60  F$="EXPa":GOTO 70

65  F$="EXPb"

70  F$=F$+ "。bas":IF LEN(F$)=16 THEN 80

75  FOR I=1 TO 16 - LEN(F$):F$=F$+ " ":NEXT

80  FOR I=1 TO 16:POKE I+4635,ASC(MID$(F$,I,1)):NEXT

90  CALL 5600:IF PEEK(199)=0 THEN GRAPH:PRINT  "无法打开";F$:END

100  PRINT "Right":IF ASC(INKEY$)=27 THEN END

110  Z=2:GOTO 50

调用程序文件2——EXPb

0  :

5  z=1

10 FOR I=1 TO 42:READ P:POKE I+5599,P:NEXT

20  DATA  169,0,141,20,18,0,2,147,176,27,169,0,141,13,18

30  DATA  169,32,141,14,18,169,0,141,15,18,169,32,141,16,18

40  DATA   0,4,147,0,7,147,96,169,0,133,199,96

50  ON Z GOTO 60,65

60  F$="EXPa":GOTO 70

65  F$="EXPb"

70  F$=F$+ "。bas":IF LEN(F$)=16 THEN 80

75  FOR I=1 TO 16 - LEN(F$):F$=F$+ " ":NEXT

80  FOR I=1 TO 16:POKE I+4635,ASC(MID$(F$,I,1)):NEXT

90  CALL 5600:IF PEEK(199)=0 THEN GRAPH:PRINT  "无法打开";F$:END

100  PRINT "Wrong":IF ASC(INKEY$)=27 THEN END

110  Z=1:GOTO 50

执行结果:运行LEADER,按键则屏幕上Rright跟Wrong交替显示,当按<跳出>键时结束退出程序

最后再强调一点:一定要保证调用的程序文件的前100行跟主程序相同!,至于为什么,相信大家已经明白了吧!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2025-6-16 19:22 , Processed in 0.013982 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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