VX-1 クローンデータ保存/書き込みプログラム

SAVEVX1.BAS(ダウンロードはこちら)

10000 '**********************************************************
10010 '
10020 'VERTEX STANDARD VX-1
10030 'クローンデータ読み出しプログラム Ver1.00 (Sep 22 2002)
10040 '
10050 'Copyright by Heian Software Engineering
10060 '(C)2002 H.S.E. Allrights reserved.
10070 '
10080 '**********************************************************
10090 '
10100 '
10110 '
10120 '
10130 '
10140 '
10150 *START
10160 CLEAR
10170 DEFINT A-Z
10180 WIDTH 80,25:CONSOLE 0,25,1,1:COLOR 7,0,0,7,2:CLS 2
10190 '
10200 RX.BUFF.SIZE=32000:'受信バッファサイズ
10210 DISP.SKIP.N=200:'表示スキップ点
10220 '
10230 COMPORT.NAME$="COM1:N81NN":'通信ポートファイルディスクリプタ
10240 COMPORT.SPEED=0:'通信速度 8:19200,0:SPEEDコマンドによる
10250 '
10260 GOTO *MAIN
10270 '
10280 'HEX.CHR$
10290 GOTO *MAIN
10300 *READ.HEX.CHR
10310 DIM HEX.CHR$(255)
10320 RESTORE *READ.HEX.CHR
10330 FOR READ.HEX.CHR.W=0 TO 255:READ HEX.CHR$(READ.HEX.CHR.W):NEXT
10340 DATA 00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F
10350 DATA 10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F
10360 DATA 20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F
10370 DATA 30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F
10380 DATA 40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F
10390 DATA 50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F
10400 DATA 60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F
10410 DATA 70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F
10420 DATA 80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D,8E,8F
10430 DATA 90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F
10440 DATA A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF
10450 DATA B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF
10460 DATA C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF
10470 DATA D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,DB,DC,DD,DE,DF
10480 DATA E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,EA,EB,EC,ED,EE,EF
10490 DATA F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,FA,FB,FC,FD,FE,FF
10500 RETURN
10510 '
10520 *RX.BUFF.INIT
10530 DIM RX.BUFF(RX.BUFF.SIZE-1)
10540 GOSUB *RX.BUFF.CLEAR
10550 RETURN
10560 '
10570 *RX.BUFF.CLEAR
10580 G.RX.BUFF.RP=0:'読み出しポインタ
10590 G.RX.BUFF.WP=0:'書き込みポインタ
10600 G.RX.BUFF.N=0 :'バッファ内データ数
10610 G.RX.BUFF.OV=0:'バッファオーバーフロー
10620 G.RX.BUFF.EM=0:'バッファ内エンプティ
10630 RETURN
10640 '
10650 *RX.BUFF.WRITE
10660 IF G.RX.BUFF.N>=RX.BUFF.SIZE THEN G.RX.BUFF.OV=-1:RETURN
10670 RX.BUFF(G.RX.BUFF.WP)=G.RX.WRITE.DATA
10680 G.RX.BUFF.WP=(G.RX.BUFF.WP+1) MOD RX.BUFF.SIZE
10690 G.RX.BUFF.N=G.RX.BUFF.N+1
10700 G.RX.BUFF.OV=0
10710 RETURN
10720 '
10730 *RX.BUFF.READ
10740 IF G.RX.BUFF.N=0 THEN G.RX.BUFF.EM=-1:RETURN
10750 G.RX.READ.DATA=RX.BUFF(G.RX.BUFF.RP)
10760 G.RX.BUFF.RP=(G.RX.BUFF.RP+1) MOD RX.BUFF.SIZE
10770 G.RX.BUFF.N=G.RX.BUFF.N-1
10780 G.RX.BUFF.EM=0
10790 RETURN
10800 '
10810 '
10820 *COMPORT.INIT
10830 OPEN COMPORT.NAME$ AS #1
10840 IF COMPORT.SPEED=0 THEN GOTO *COMPORT.INIT.1000
10850 OUT &H75,COMPORT.SPEED MOD 256
10860 OUT &H75,COMPORT.SPEED \ 256
10870 *COMPORT.INIT.1000
10880 G.COMPORT.ERROR=0
10890 ON COM GOSUB *COMPORT.INT
10900 RETURN
10910 '
10920 *COMPORT.INT
10930 *COMPORT.INT.1000
10940 IF LOC(1)=0 THEN RETURN
10950 G.RX.WRITE.DATA=ASC(INPUT$(1,1))
10960 GOSUB *RX.BUFF.WRITE
10970 IF G.COMPORT.ERROR=0 THEN G.COMPORT.ERROR=G.RX.BUFF.OV
10980 GOTO *COMPORT.INT.1000
10990 '
11000 '
11010 *STOP.INT
11020 IF G.COMPORT.ERROR<>0 THEN PRINT #2,"**エラー**"
11030 COM OFF
11040 CLOSE
11050 COLOR 7
11060 END
11070 '
11080 '
11090 *MAIN
11100 INPUT "出力(ログ)ファイル名:",OUT.FILE.NAME$
11110 GOSUB *READ.HEX.CHR
11120 GOSUB *RX.BUFF.INIT
11130 GOSUB *COMPORT.INIT
11140 ON STOP GOSUB *STOP.INT
11150 STOP ON:COM ON
11160 '
11170 *MAIN.1000
11180 COM OFF
11190 CLOSE 2
11200 OPEN OUT.FILE.NAME$ FOR OUTPUT AS #2
11210 OFFSET.ADRS=0
11220 GOSUB *RX.BUFF.CLEAR
11230 COM ON
11240 PRINT:PRINT "--準備OK--"
11250 '
11260 *MAIN.1500
11270 COM STOP:GOSUB *RX.BUFF.READ:COM ON
11280 IF G.COMPORT.ERROR<>0 THEN COLOR 2
11290 IF G.RX.BUFF.EM=-1 THEN GOTO *MAIN.2000
11300 OUTPUT.STR$= HEX.CHR$(OFFSET.ADRS \ 256)+HEX.CHR$(OFFSET.ADRS MOD 256)+" : "+HEX.CHR$(G.RX.READ.DATA)
11310 PRINT #2,OUTPUT.STR$
11320 IF DISP.SKIP.N=>G.RX.BUFF.N THEN PRINT OUTPUT.STR$
11330 OFFSET.ADRS=OFFSET.ADRS+1
11340 *MAIN.2000
11350 K$=INKEY$
11360 IF K$="" THEN GOTO 11270
11370 IF K$=CHR$(0) THEN GOTO *MAIN.1000
11380 PRINT #1,K$;
11390 GOTO *MAIN.1500

LOADVX1.BAS(ダウンロードはこちら)

10000 '**********************************************************
10010 '
10020 'VERTEX STANDARD VX-1
10030 'クローンデータ書き込みプログラム Ver1.00 (Sep 22 2002)
10040 '
10050 'Copyright by Heian Software Engineering
10060 '(C)2002 H.S.E. Allrights reserved.
10070 '
10080 '**********************************************************
10090 '
10100 '
10110 '
10120 *START
10130 CLEAR
10140 DEFINT A-Z
10150 WIDTH 80,25:CONSOLE 0,25,1,1:COLOR 7,0,0,7,2:CLS 2
10160 '
10170 RX.BUFF.SIZE=32000:'受信バッファサイズ
10180 TX.BUFF.SIZE=32000:'送信バッファサイズ
10190 '
10200 COMPORT.NAME$="COM1:N81NN":'通信ポートファイルディスクリプタ
10210 COMPORT.SPEED=0:'通信速度 8:19200,0:SPEEDコマンドによる
10220 G.SEND.DATA.TO.TRX.W=1000:'送信時間調整
10230 '
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 *RX.BUFF.INIT
10500 DIM RX.BUFF(RX.BUFF.SIZE-1)
10510 GOSUB *RX.BUFF.CLEAR
10520 RETURN
10530 '
10540 *RX.BUFF.CLEAR
10550 G.RX.BUFF.RP=0:'読み出しポインタ
10560 G.RX.BUFF.WP=0:'書き込みポインタ
10570 G.RX.BUFF.N=0 :'バッファ内データ数
10580 G.RX.BUFF.OV=0:'バッファオーバーフロー
10590 G.RX.BUFF.EM=0:'バッファ内エンプティ
10600 RETURN
10610 '
10620 *RX.BUFF.WRITE
10630 IF G.RX.BUFF.N>=RX.BUFF.SIZE THEN G.RX.BUFF.OV=-1:RETURN
10640 RX.BUFF(G.RX.BUFF.WP)=G.RX.WRITE.DATA
10650 G.RX.BUFF.WP=(G.RX.BUFF.WP+1) MOD RX.BUFF.SIZE
10660 G.RX.BUFF.N=G.RX.BUFF.N+1
10670 G.RX.BUFF.OV=0
10680 RETURN
10690 '
10700 *RX.BUFF.READ
10710 IF G.RX.BUFF.N=0 THEN G.RX.BUFF.EM=-1:RETURN
10720 G.RX.READ.DATA=RX.BUFF(G.RX.BUFF.RP)
10730 G.RX.BUFF.RP=(G.RX.BUFF.RP+1) MOD RX.BUFF.SIZE
10740 G.RX.BUFF.N=G.RX.BUFF.N-1
10750 G.RX.BUFF.EM=0
10760 RETURN
10770 '
10780 '
10790 *TX.BUFF.INIT
10800 DIM TX.BUFF(TX.BUFF.SIZE-1)
10810 GOSUB *TX.BUFF.CLEAR
10820 RETURN
10830 '
10840 *TX.BUFF.CLEAR
10850 G.TX.BUFF.RP=0:'読み出しポインタ
10860 G.TX.BUFF.WP=0:'書き込みポインタ
10870 G.TX.BUFF.N=0 :'バッファ内データ数
10880 G.TX.BUFF.OV=0:'バッファオーバーフロー
10890 G.TX.BUFF.EM=0:'バッファ内エンプティ
10900 RETURN
10910 '
10920 *TX.BUFF.WRITE
10930 IF G.TX.BUFF.N>=TX.BUFF.SIZE THEN G.TX.BUFF.OV=-1:RETURN
10940 TX.BUFF(G.TX.BUFF.WP)=G.TX.WRITE.DATA
10950 G.TX.BUFF.WP=(G.TX.BUFF.WP+1) MOD TX.BUFF.SIZE
10960 G.TX.BUFF.N=G.TX.BUFF.N+1
10970 G.TX.BUFF.OV=0
10980 RETURN
10990 '
11000 *TX.BUFF.READ
11010 IF G.TX.BUFF.N=0 THEN G.TX.BUFF.EM=-1:RETURN
11020 G.TX.READ.DATA=TX.BUFF(G.TX.BUFF.RP)
11030 G.TX.BUFF.RP=(G.TX.BUFF.RP+1) MOD TX.BUFF.SIZE
11040 G.TX.BUFF.N=G.TX.BUFF.N-1
11050 G.TX.BUFF.EM=0
11060 RETURN
11070 '
11080 '
11090 *COMPORT.INIT
11100 OPEN COMPORT.NAME$ AS #1
11110 IF COMPORT.SPEED=0 THEN GOTO *COMPORT.INIT.1000
11120 OUT &H75,COMPORT.SPEED MOD 256
11130 OUT &H75,COMPORT.SPEED \ 256
11140 *COMPORT.INIT.1000
11150 G.COMPORT.ERROR=0
11160 ON COM GOSUB *COMPORT.INT
11170 RETURN
11180 '
11190 *COMPORT.INT
11200 *COMPORT.INT.1000
11210 IF LOC(1)=0 THEN RETURN
11220 G.RX.WRITE.DATA=ASC(INPUT$(1,1))
11230 GOSUB *RX.BUFF.WRITE
11240 IF G.COMPORT.ERROR=0 THEN G.COMPORT.ERROR=G.RX.BUFF.OV
11250 GOTO *COMPORT.INT.1000
11260 '
11270 '
11280 *SEND.DATA.TO.TRX
11290 PRINT #1,CHR$(G.SEND.DATA.TO.TRX);
11300 FOR SEND.DATA.TO.TRX.W=0 TO G.SEND.DATA.TO.TRX.W:NEXT
11310 RETURN
11320 '
11330 '
11340 *STOP.INT
11350 *FINISH
11360 IF G.COMPORT.ERROR<>0 THEN PRINT #2,"*****ERROR*****"
11370 COM OFF
11380 CLOSE
11390 COLOR 7
11400 END
11410 '
11420 '
11430 *MAIN
11440 INPUT "入力(データ)ファイル名:",IN.FILE.NAME$
11450 INPUT "出力(ログ)ファイル名:",OUT.FILE.NAME$
11460 GOSUB *READ.HEX.CHR
11470 GOSUB *RX.BUFF.INIT
11480 GOSUB *TX.BUFF.INIT
11490 GOSUB *COMPORT.INIT
11500 ON STOP GOSUB *STOP.INT
11510 STOP ON:COM ON
11520 '
11530 *MAIN.1000
11540 CLOSE 2
11550 OPEN OUT.FILE.NAME$ FOR OUTPUT AS #2
11560 CLOSE 3
11570 OPEN IN.FILE.NAME$ FOR INPUT AS #3
11580 OFFSET.ADRS=0
11590 '
11600 '送信データ準備
11610 *MAIN.1300
11620 COLOR 4
11630 IF EOF(3) THEN GOTO *MAIN.1400
11640 INPUT #3,INPUT.LINE$
11650 'PRINT INPUT.LINE$
11660 IF INPUT.LINE$="" THEN GOTO *MAIN.1300
11670 IF LEFT$(INPUT.LINE$,1)="'" THEN GOTO *MAIN.1300
11680 IF LEN(INPUT.LINE$)<>9 GOTO *MAIN.1380
11690 INPUT.DATA$=MID$(INPUT.LINE$,8,2)
11700 IF HEX.CHR$(VAL("&H"+INPUT.DATA$))<>INPUT.DATA$ THEN GOTO *MAIN.1380
11710 G.TX.WRITE.DATA=VAL("&H"+INPUT.DATA$)
11720 GOSUB *TX.BUFF.WRITE
11730 IF G.TX.BUFF.OV<>0 THEN PRINT:PRINT "**入力(データ)ファイルが大きすぎます**":GOTO *FINISH
11740 GOTO *MAIN.1300
11750 '
11760 '送信データエラー
11770 *MAIN.1380
11780 PRINT:PRINT "**入力(データ)ファイルに誤りがあります**":GOTO *FINISH
11790 *MAIN.1400
11800 PRINT "--データの準備ができました。スペースバーを押してください--"
11810 *MAIN.1410
11820 K$=INKEY$:IF K$<>" " THEN GOTO *MAIN.1410
11830 GOSUB *RX.BUFF.CLEAR
11840 COLOR 7
11850 G.SEND.BLOCK.N=4818:G.SEND.BLOCK.ACK=&H21:GOSUB *SEND.BLOCK
11860 IF SEND.BLOCK.ERROR=-1 THEN PRINT SEND.BLOCK.ERROR.MES$:GOTO *FINISH
11870 *MAIN.1450
11880 PRINT:PRINT "--書込み終了--"
11890 GOTO *STOP.INT
11900 '
11910 '
11920 'ブロック送信
11930 *SEND.BLOCK
11940 SEND.BLOCK.ERROR=-1
11950 SEND.BLOCK.ERROR.MES$=""
11960 SEND.BLOCK.N=G.SEND.BLOCK.N
11970 '
11980 'データ送信動作
11990 *SEND.BLOCK.0500
12000 IF SEND.BLOCK.N=0 THEN GOTO *SEND.BLOCK.1000
12010 GOSUB *TX.BUFF.READ
12020 IF G.TX.BUFF.EM=-1 THEN SEND.BLOCK.ERROR.MES$="**入力(データ)ファイルが不足しています**":RETURN
12030 'PRINT #1,CHR$(G.TX.READ.DATA);
12040 G.SEND.DATA.TO.TRX=G.TX.READ.DATA:GOSUB *SEND.DATA.TO.TRX
12050 *SEND.BLOCK.0550
12060 COM STOP:GOSUB *RX.BUFF.READ:COM ON
12070 IF G.RX.BUFF.EM=-1 THEN GOTO *SEND.BLOCK.0550
12080 OUTPUT.STR$= HEX.CHR$(OFFSET.ADRS \ 256)+HEX.CHR$(OFFSET.ADRS MOD 256)+" : "+HEX.CHR$(G.RX.READ.DATA)
12090 PRINT #2,OUTPUT.STR$
12100 PRINT OUTPUT.STR$
12110 OFFSET.ADRS=OFFSET.ADRS+1
12120 SEND.BLOCK.N=SEND.BLOCK.N-1
12130 GOTO *SEND.BLOCK.0500
12140 *SEND.BLOCK.1000
12150 *SEND.BLOCK.1050
12160 COM STOP:GOSUB *RX.BUFF.READ:COM ON
12170 IF G.RX.BUFF.EM=-1 THEN GOTO *SEND.BLOCK.1050
12180 OUTPUT.STR$= HEX.CHR$(OFFSET.ADRS \ 256)+HEX.CHR$(OFFSET.ADRS MOD 256)+" : "+HEX.CHR$(G.RX.READ.DATA)
12190 PRINT #2,OUTPUT.STR$
12200 PRINT OUTPUT.STR$
12210 OFFSET.ADRS=OFFSET.ADRS+1
12220 IF G.RX.READ.DATA<>G.SEND.BLOCK.ACK THEN SEND.BLOCK.ERROR.MES$="**不正なACKです**":RETURN
12230 SEND.BLOCK.ERROR=0
12240 '
12250 PRINT:PRINT "--ブロック送信完了--"
12260 RETURN

N88-BASIC(86)の同時OPENファイル数について

 N88-BASIC(86)(MS-DOS版)は、パラメータをつけずに起動した場合、同時にOPENできるファイルは2個になり、LOADVX1.BASは動作しません。3個以上のファイルを同時にOPENできるようにしてください。

 同時OPEN可能なファイル数は、つぎのように指定します。

A:>N88BASIC /f:n [CR]

nは同時にOPENするファイルの数。

使用上の注意

注意

 ここに記載された情報は、私が独自に収集したものです。内容の正確性については保証しません。特に、この実験については、ハードウエアの製作を伴うものであり、パソコンや無線機に不可逆的な損傷を与える可能性を否定するものではありません。
 以上の点をご理解のうえ、あなたの自己責任でご利用ください。

戻る


Copyright by Heian Software Engineering (C)H.S.E. 2002 Allrights reserved.
2002年9月22日 制作 2002年9月22日 修正