10000 '********************************************************** 10010 ' 10020 'VERTEX STANDARD VX-7 10030 'クローンデータ読み出しプログラム Ver3.00 (Sep 29 2002) 10040 ' 10050 'Copyright by Heian Software Engineering 10060 '(C)2002 H.S.E. Allrights reserved. 10070 ' 10080 '********************************************************** 10090 ' 10100 *START 10110 CLEAR 10120 DEFINT A-Z 10130 WIDTH 80,25:CONSOLE 0,25,1,1:COLOR 7,0,0,7,2:CLS 2 10140 ' 10150 KEY 2,"system"+CHR$(&HD) 10160 ' 10170 COMPORT.NAME$="COM1:N81NN":'通信ポートファイルディスクリプタ 10180 COMPORT.SPEED=8:'通信速度 8:19200,0:SPEEDコマンドによる 10190 ' 10200 RXD.MAX=&H3FFF 10210 ACK=&H6 10220 ' 10230 VERSION$="SAVEVX7A.BAS VER 3.00" 10240 GOTO *MAIN 10250 ' 10260 'HEX.CHR$ 10270 *READ.HEX.CHR 10280 DIM HEX.CHR$(255) 10290 RESTORE *READ.HEX.CHR 10300 FOR READ.HEX.CHR.W=0 TO 255:READ HEX.CHR$(READ.HEX.CHR.W):NEXT 10310 DATA 00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F 10320 DATA 10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F 10330 DATA 20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F 10340 DATA 30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F 10350 DATA 40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F 10360 DATA 50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F 10370 DATA 60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F 10380 DATA 70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F 10390 DATA 80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D,8E,8F 10400 DATA 90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F 10410 DATA A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF 10420 DATA B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF 10430 DATA C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF 10440 DATA D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,DB,DC,DD,DE,DF 10450 DATA E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,EA,EB,EC,ED,EE,EF 10460 DATA F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,FA,FB,FC,FD,FE,FF 10470 RETURN 10480 ' 10490 *READ.ERROR.MES 10500 DIM ERROR.MES$(100) 10510 RESTORE *READ.ERROR.MES 10520 *READ.ERROR.MES.1000 10530 READ ERROR.MES.W 10540 IF ERROR.MES.W<0 THEN RETURN 10550 READ ERROR.MES$(ERROR.MES.W) 10560 GOTO *READ.ERROR.MES.1000 10570 DATA 0,"--- 正常終了(000) ---" 10580 DATA 1,"*** 受信データが多すぎます。(001) ***" 10590 DATA 2,"*** ブロック受信に失敗しました。(002) ***" 10600 DATA 3,"*** 強制中断(003) ***" 10610 DATA 4,"*** チェックサムが一致しません。(004) ***" 10620 DATA 5,"*** ブロック受信に失敗しました。(005) ***" 10630 DATA -1,"" 10640 ' 10650 ' 10660 *COMPORT.INIT 10670 OPEN COMPORT.NAME$ AS #1 10680 IF COMPORT.SPEED=0 THEN GOTO *COMPORT.INIT.1000 10690 OUT &H75,COMPORT.SPEED MOD 256 10700 OUT &H75,COMPORT.SPEED \ 256 10710 *COMPORT.INIT.1000 10720 RXD.NX=0 10730 RXD.IHBT=0 10740 DIM RXD(RXD.MAX) 10750 ON COM GOSUB *COMPORT.INT 10760 RETURN 10770 ' 10780 *COMPORT.INT 10790 *COMPORT.INT.1000 10800 IF LOC(1)=0 THEN ERROR.CX=0:RETURN 10810 IF RXD.NX>&H3F52 THEN ERROR.CX=1:RETURN 10820 COMPORT.INT.W=ASC(INPUT$(1,1)) 10830 IF RXD.IHBT<>0 THEN IF COMPORT.INT.W=ACK THEN RXD.IHBT=0:ERROR.CX=0:RETURN ELSE RXD.IHBT=0:ERROR.CX=5:RETURN 10840 RXD(RXD.NX)=COMPORT.INT.W 10850 RXD.NX=RXD.NX+1 10860 GOTO *COMPORT.INT 10870 ' 10880 ' 10890 *STOP.INT 10900 ERROR.C=3 10910 *FINISH 10920 IF ERROR.C<>0 THEN COLOR 2:BEEP 10930 PRINT 10940 PRINT ERROR.MES$(ERROR.C):PRINT 10950 COM OFF 10960 CLOSE 10970 COLOR 7 10980 END 10990 ' 11000 ' 11010 *MAIN 11020 ON STOP GOSUB *STOP.INT 11030 STOP ON 11040 GOSUB *READ.ERROR.MES 11050 GOSUB *READ.HEX.CHR 11060 INPUT "出力(ログ)ファイル名:",OUT.FILE.NAME$ 11070 LINE INPUT "コメント:",RMKS$ 11080 PRINT 11090 PRINT "[MON]を押しながらVX−7の電源を入れてください。":PRINT 11100 PRINT "VX−7のLCDに”CLONE”と表示されたら、パソコンのスペースバーを押してください。":PRINT 11110 *MAIN.0100 11120 IF INKEY$<>"" THEN GOTO *MAIN.0100 11130 *MAIN.0150 11140 IF INKEY$<>" " THEN GOTO *MAIN.0150 11150 GOSUB *COMPORT.INIT 11160 COM ON 11170 PRINT "VX−7の[BAND]キーを押してください。":PRINT 11180 ' 11190 *MAIN.1000 11200 PRINT.N=0 11210 PRINT:PRINT "第1ブロック受信":PRINT 11220 *MAIN.1010 11230 IF ERROR.CX<>0 THEN ERROR.C=ERROR.CX:GOTO *FINISH 11240 RXD.N=RXD.NX 11250 IF PRINT.N&HA THEN ERROR.C=2:GOTO *FINISH 11280 RXD.IHBT=-1:PRINT #1,CHR$(ACK); 11290 ' 11300 *MAIN.2000 11310 PRINT:PRINT "第2ブロック受信":PRINT 11320 *MAIN.2010 11330 IF ERROR.CX<>0 THEN ERROR.C=ERROR.CX:GOTO *FINISH 11340 RXD.N=RXD.NX 11350 IF PRINT.N&H12 THEN ERROR.C=2:GOTO *FINISH 11380 RXD.IHBT=-1:PRINT #1,CHR$(ACK); 11390 ' 11400 *MAIN.3000 11410 PRINT:PRINT "第3ブロック受信":PRINT 11420 *MAIN.3010 11430 IF ERROR.CX<>0 THEN ERROR.C=ERROR.CX:GOTO *FINISH 11440 RXD.N=RXD.NX 11450 IF PRINT.N&H3F52 THEN ERROR.C=2:GOTO *FINISH 11480 ' 11490 *MAIN.4000 11500 PRINT:PRINT "チェックサムを検証しています。":PRINT 11510 MAIN.W.SUM=0:MAIN.W=0 11520 FOR MAIN.W=0 TO &H3F51 11530 MAIN.W.SUM=(MAIN.W.SUM+RXD(MAIN.W)) MOD 256 11540 IF MAIN.W MOD 100=0 THEN PRINT "*"; 11550 NEXT 11560 PRINT 11570 IF RXD(&H3F52)<>MAIN.W.SUM THEN ERROR.C=4:GOTO *FINISH 11580 IF ERROR.CX<>0 THEN ERROR.C=ERROR.CX:GOTO *FINISH 11590 PRINT:PRINT "チェックサムが一致しました。":PRINT 11600 ' 11610 COM OFF 11620 CLOSE 1 11630 ' 11640 *MAIN.5000 11650 OPEN OUT.FILE.NAME$ FOR OUTPUT AS #1 11660 PRINT "データファイルを作成します。":PRINT 11670 PRINT #1,"' "+VERSION$ 11680 PRINT #1,"' "+DATE$+" "+TIME$ 11690 PRINT #1,"' "+RMKS$ 11700 FOR MAIN.W=0 TO &H3F52 11710 PRINT #1,HEX.CHR$(MAIN.W \ 256)+HEX.CHR$(MAIN.W MOD 256)+" : "+HEX.CHR$(RXD(MAIN.W)) 11720 NEXT 11730 ERROR.C=0:GOTO *FINISH