- ベストアンサー
PC98で232c送信winndowで受信できない
- PC9801のDiskBasicでファイルをRS232C送信し、DOS/VのWinndowのRS232CのCOM1で正常受信ができません。
- ウィンドウXPで受信らしき様子はあるが、内容が異なる16進コードで表示されます。
- DOS N88BASICと同じように受信ができない原因は何でしょうか。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
PC-9801のシリアルポートの速度は、DiskBasicから設定はできません。メモリスイッチで設定します。(switch.n88が付いている) また、5インチのデータはプログラムソースですか? テキストファイルですか? バイナリファイルですか? プログラムソースなら、BASICでLoadして、「COM1:」にアスキーSAVEすれば良い。 テキストファイル(バイナリファイル)なら、ファイルを1バイトずつ読み込んで、16進2桁にしてシリアルポートに出力するようなプログラムを、BASICで作る必要があります。 この場合、受信側にも受信したデータを16進2桁から1バイトに戻してファイルに出力するするプログラムを用意する必要があります。
その他の回答 (8)
- SortaNerd
- ベストアンサー率43% (1185/2748)
ボーレートが間違っているように見えますがはっきりしないので、 まずどのようなデータが送られているのか確かめるのがよいと思います。 オシロスコープを持っているならそれで、無いなら十分に分圧してからオーディオ入力に入れればデータが取れるでしょう。 とりあえず0xFF,0xFE,...0x80,0x00あたりを送ってみてデータを見れば何がまずいかわかると思います。
- 麻野 なぎ(@asano_nagi)
- ベストアンサー率35% (42/120)
Windwos 側は、ターミナルソフトを使うとして、 N88Basic 側は、単に、 1) 転送しようとするプログラムを、一度 load して、 2) それを、 save "COM1:", a とすると、"COM:1" というファイル(正しくはファイルディスクリプタ)に、セーブする=RS232-C 経由で、一気に送信する という動作をします。
- KEIS050162
- ベストアンサー率47% (890/1879)
20年以上も前のことなので、細かい方法などは忘れてしましましたが、DOS版N88Basicが動く環境とN88Disk Basicが動く環境が揃っているなら、RS232Cで送るよりも、Disk BasicでアスキーセーブしたファイルをDOS版に変換した方が簡単な気がします。双方PC98ならば、そんなに難しくなかった記憶があります。 詳しい方法は忘れてしまいました。下記などを参考にしてみてください。 http://okwave.jp/qa/q2361331.html また、RS232Cの通信環境を確認するのであれば、PC9801をターミナルモードにして、ターミナル画面からタイプした文字をDOSマシンの方でちゃんと表示されるかどうか確認するのが良いでしょう。 これでちゃんと送受信できるのであれば、送信するBasicのプログラムが何か間違っているということでしょう。 PC98のマニュアルは未だ持っていますか?ターミナルモードという章を読んでみてください。 通信は、双方の通信モード(非同期、ボーレート、ビット長、ストップビット長、パリティ)が双方で合っていないと、文字化けなどします。結線が間違っていると、そもそもデータが送信されません。 取り急ぎご参考に。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19868)
N88BASICでクロスケーブルで受信できるなら 「Windows上で動くN88互換BASIC」 http://www.vector.co.jp/soft/dl/win31/prog/se025866.html でやっても受信できるのでは? で、Windows上で動くN88互換BASICに持って来れれば、アスキーセーブすればWindows上にファイルがセーブされるのでは? 試してないので「やってみる」しかないですけどね。 PC98は、ポートのボーレートは、本体のディップスイッチ等で設定するので「Windows上で動くN88互換BASIC」では「ボーレート設定」がオプションになっています。 当方は「Windows側で受信する方のボーレートが送信側と一致してない」と思ってるんですが。 送信と受信でボーレートが合って無いと、殆どのデータが「00」とか「80」とかになりますよ。 PC9801は「ボーレートは本体のディップスイッチで設定」します。プログラムでは指定出来ません。 Windowsパソコンは「ボーレートはCOMポートを開く時のオプションで設定」します。指定しないと「デフォルト」になります。 なお「ボーレート?何それ?」って場合は出直して来て下さい。お話になりません。 当方は「両方でボーレート合わせて、アスキーセーブしたの送信すれば、何の問題もなくXPで受信できる筈」って思ってるんですが。
- 麻野 なぎ(@asano_nagi)
- ベストアンサー率35% (42/120)
No.2です。 補足を見て、状況が全くわからなくなりました。 > 100 OPEN "COM1" FOR INPUT #2 '読み込むファイル > 200 OPEN "COM1:N81NN" for OutPut #1 > 400 INPUT #1,A$ '1文字づつ入力 または LINE INPUT #1 > で基本送信しています。 そもそも、書き込むファイル #1 に対して、 input で、"送信" しているのはなぜですか? ただ単に、「昔のソースを保存する」だけなら、ターミナルソフトと呼ばれるもので、受信してそのまま保存すれば楽ですよ。 たとえば、 http://sourceforge.jp/projects/ttssh2/ とか。 試してみた「フリーソフト」とは、たとえば、どういうソフトですか? 単に、「DOS の Basic で、RS232C をアクセスする方法がわからない」という質問ですか? 「同期して受信らしき様子がある」とは、どのようにして判断したのでしょう? いろいろと不明です。
補足
紹介して頂いたソフトは、すでにテストずみです。やはりだめでした。 9801のボーレートは9600でテストしています。受信側9821のDOSで行う9801の本体のボーレート スイッチを変えなくても正常に受信が行えます。しかし、その機種のウィンドウで(WIN95)紹介し ていただいたソフトでは、受信が正常にできませんでした。これはほかのDOS/VのOS XPで受信 したものと同様でした。 >当方は「両方でボーレート合わせて、アスキーセーブしたの送信すれば、何の問題もなくXPで受信 >できる筈」って思ってるんですが 小生もそう思いました、結果は残念ながら駄目でしたので、Helpした次第です。 前の捕捉で、ミスがありました INPUT #1,A$-->INPUT #2,A$ (送信Fileを呼び出すために使用) 最初はLINE INPUTで呼び 出していたのですが,1度に送るのが悪いかと思い,1文字づつの呼び出し、送信で行ったものです。 誤解を与えて申し訳ありません。(asano_nagi様へ) 紹介していただいた,ターミナルソフトもテストしてみます。 要するに、ウィンドウ上で正常に受信ができれば良いのです。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19868)
送信側と受信側で、ボーレート、キャラクタビット数、パリティの有無を一致させないと、文字化けします。 なお、BASICのプログラムは、COMに送るときに「アスキーセーブしたもの」を送らないといけません。 BASICのプログラムは、普通にセーブされた状態は「中間コード」と言う、バイナリコードで保存されています。 BASICでは「REM文は01、LET文は02、GOTO文は03、IF文は04」のように、命令文を「1バイトの内部コード」に変換して記憶します。 こうすると、どんなに長い綴りの命令文でも「1バイト」で済むし、実行時に「命令文かどうかを文字列で比較しなくて済む」からです。 実行時に「1文字目がエル、2文字目がアイ、3文字目がエヌ、4文字目がイーだから、これはLINEだな」と、判断してから実行していたのでは、遅くなってしまいます。 なので、行番号付きで打ち込んだ瞬間に「1文字目がエル、2文字目がアイ、3文字目がエヌ、4文字目がイーだから、これはLINEだな」って判断を先に済ませて、LINE文を意味する中間コードに変換して保存するのです。 実行時は、変換済みの中間コードを1バイトだけ見れば「これはLINE文だ」と判ります。 このような理由で、中間コードになっているプログラムをそのまま送ってしまうと「00」とか「80」とか、見た目とはまったく別のコードが送られてきます。
補足
送信コード 100 OPEN "COM1" FOR INPUT #2 '読み込むファイル 200 OPEN "COM1:N81NN" for OutPut #1 400 INPUT #1,A$ '1文字づつ入力 または LINE INPUT #1 で基本送信しています。 ファイルは、アスキーSAVEしたものを使用して、行ってみました。 (asano様とchie65535さま指摘) 結果は同じでした。 chie65535さんのコードは,どのように記述するのでしょうか。もともとBASICは 中間コードですので、説明を受けても,実行ができません。 j受信はDOS N88BASICで受けると正常に受信できます。 公開ソフト win95対応N88BASICを使用すると全く動きません。絵や文字などは処理 できるようで すが,通信は現在できていません。 他に VBのsample_0008なる公開ソフトがありますが、これでも正常に動作しません。 データは同期して入ってくるようですが, BASICコードとしては、受け取れていません。 16進で確かめたのですが,全く異なるようです。chieさんも指摘されているように あとは,tsunjiさんの結線を変える方法でうが,すぐには試せません。壊れないか心配もあります。
- 麻野 なぎ(@asano_nagi)
- ベストアンサー率35% (42/120)
どのような方法で、Disk Basic から送信しようとしているのでしょうか? Disk Basic のファイルは、独自のバイナリファイルですから、同じ(互換性のある)Diks Basic のシステムで受信しないと、意味のあるデータにはなりません。 Basic のプログラムということであれば、Load したあと、 save "COM1:", a と a オプションをつけるか、 list "COM1:" と list コマンドを使うかで、送信できた気がします。
補足
送信ソフト 10 ' 20 OPEN"COM1" FOR INPUT AS #2 30 ' 40 OPEN "COM1:n81nn" FOR OUTPUT as #1 50 ' 60 IF EOF(2) THEN 110 70 LINE INPUT #2,A$ 80 PRINT #1 ,A$ 90 PRINT A$ 100 GOTO 60 110 PRINT #1,"END":CLOSE #1:CLOSE #2:END が送信コードです。 送っているの90でモニタしています。内容はN88BASICprogramです。 このプログラムは昔,購入したグラフィックのサブルーチンです。 何故か、DISK BASICで記述されたものです。 送信すると,画面にリストがスクロールされます。当然ケーブルがクロスでないと送れません まず.PC9821XaタイプのDOS N88BASICを動作させて受信すると正常にできます。 この機種はほ殆ど使用していないので,使いたくないPCです。 同じ機種でwin95を動作させて、公開ソフト N88basic forwinndowで受信すると、何も出てきませ ん。ケーブルはDOSと同じDSUB25ピン クロス使用です。 次に、EPSONのXPウィンドウで別のクロスケーブルを接続(EPSONのはDSUB9ピンです。 ケーブルは、昔購入したリバースケーブルです。 この状態で 下記のフリーソフトを試しました。 RS232C_TEST RS232C_Fman samp_serialport COMT1_2 serial1020 sirialTester sample_0008 など、フリーソフトから入手してテストしました。VB ソースリスト付です。 C言語のものも1つあったとおみます。 最後の sample_0008がデータとしては、何やら入ってきます。 このソフトは、画面上部にリストボックスが3つあり ポード選択 ボーレート選択 パリティ+Xon/Off選択 が行え 傍に接続ボタンがあります。 下部には送信入力、その下に受信入力画面となっています。 送信はしないので,受信画面をチェックしています。 PC98の送信に合わせて、,正常ではありませんが上記受信画面にデータ?が亜羅列されます。 送信がおわると,同時に受信も停止します。 XPでもN88basic for windowは動作しますが,通信は、同じ結果動作しませんでした。 受信データをアスキーやHexなどに変換もできるソフトもあります。 他のソフトの説明は省略させていただきます。 asano_nagiさんの紹介していただいた,ターミナルソフトのttermproを動作させてみましたが、 不明の1文字が入ってくるだけでした。 winndow serial選択もしてみました。簡単には行きそうもありません。 keis050162のオシロで云々とありましたが,ケーブルをむき出しにしないと,できません。市販のを 壊したくないので。DSUB9ピンの箇所を作成増設すれば、できそうですが,.....現状ではソフトで 対応したいと思います。お金を掛ければ手段はあるようですが......... とりあえず、情報が不足とのありましたので、捕捉しました。他には、もうありません。 N88DISKBASICのファイルを DOSに簡単に落とせるのでしょうか? DOS環境の場 合DISKBASIC環境は動作しないし、逆も同じだと思うのですが? .
- tsunji
- ベストアンサー率20% (196/958)
PC98側のRTS-CTS信号を直結しないと、正常に送信できなかったと思う。
お礼
お忙しい中, 回答を寄せていただいた皆様に、心から感謝をいたします。 asano_nagi様、chei65535様,SorteNerd様には繰り返しのご回答へ感謝いたします。 KEIS050162様などいろいろお知恵を頂きありがとうございました。 なにしろ、皆様に感謝一杯です。
補足
早速、実行してみました。 データは、Graphicのサブルーチンソフトです、テキストファイル形式です。 >PC-9801のシリアルポートの速度は、DiskBasicから設定はできません。メモリスイッチで設定しま >す。(switch.n88が付いている) switch.n88で通信条件を、設定してみました。 デフォルトで ボーレートは 1200でした。パリティ8 スtップビット1 他は none port 1 ボーレートを9600にして見ました。 ようやく、動作しました。3,,4本のVBソフトでも動作しました。N88Basic for windowでも 動作しまし た。 原因は、DISK BASICの場合, 9801本体内部のボーレートに依存しているのが、よくわかりました。 che65535さん、SortNerdさん.KEIS050162さんの皆様がが指摘していたように、ボーレートをソフト で指定していたもので設定できなかったのが原因でした。 ちなみに、asano_nagiさまのターミナルソフトでも、難なく受信が行えました。 明確になった事: 本体のディップスイッチでは、ボーレートは設定できません。(マニュアルから) デフォルトでのボーレートがわかったので、このボーレートにDOS/V PCを合わせて実行して みました。(この場合 switch.n88は使わない) N88BASIC for WINDOW でも正常に動作することがわかりました。遅いですが。 他の serial02なるソフトでも動作する事がわかりました。 ようやく、前進できます。