喫茶XRAYトップページ


[7028] TurboPASCALで苦闘中返信 削除
2013/10/15 (火) 22:30:45 たてぐや
 皆さんお久しぶりです。たてぐやです。
 仕事で、PC-98のMS-DOS上で動くプログラムを作らなくちゃならなくなりま
した。PC-98で作ったテキストデータをRS-232CでDOS/V機に取り込むものです。
最初はDOSのバッチを書いて済まそうと思ったのですが、ダメ出しが来て、は
てさてどうやって書こうかとPC-98を見れば、N88-BASICとTurboPASCALの古い
バージョンが入っています。ここはBASICはないなと、TurboPASCALで書き始め
たのですが、これがなかなか大変。もう20数年使っていなかったもので、プロ
シジャもファンクションもすっかり忘れている…。当たり前のようにIntToStr
と書いてコンパイルエラー。さすがにこの時代の資料はネット上にもなく、お
ぼろげな記憶と某パソコン通信ホストプログラムのソースを参考にしながらポ
ツポツと書いています。改めてDelphiの便利さを痛感しました。


[7029] Re:TurboPASCALで苦闘中返信 削除
2013/10/17 (木) 20:20:54 宮 〔HomePage
▼ たてぐやさん

>  仕事で、PC-98のMS-DOS上で動くプログラムを作らなくちゃならなくなりま
> した。


こんにちは。
今時N88BACKの資産を活用やリメークをすることが仕事なら仕方がありませんね。
1991年頃、私が昔会社勤めの頃、ソフト開発部門にお客からあるソフトの
開発打診があったけど「そんなのに関わっている時間がないからと
場違いな技術部門に「どう?やってみない?」ということがありました。
メカニックが個人的にN88BASICをいじっている者はいたけど、
とてもBASICで商品にして売るなんて考えられないと思っているとき、
見つけました。BASICので組めて、インタプリタ不要でコンパイルしてexeを作成し
中を見られないようにして、
フロッピーでコピープロテクトが可能なものでした。
それが電脳組のBASIC/98でした(当時は電脳組の前身の会社でした)。
それでやってみようということになりました。
依頼のあった会社は皆さんも知っている大きな会社ですが、
デモンストレーション・コンペで勝ち注文をいただいたことがあります。
その会社でも開発チームを組んで作成していたのですが、それも押さえての
優勝です(*^_^*)(C言語も知らないメカニック作が)。
後で質問攻めでした、処理が早い、インタプリタがない、ISAMも高速、
いったいどんな言語で組んだんですがという質問がありました。
恥ずかしくて言いにくかったけどBASICで組んだといったら、
唖然としていましたよ。
だってBASICしか知らないプログラマなんていませんよね。
でもこれは商品も組めることを証明しました。

考えてみればDelphiに似ている。
いまでもあるのかなと久しぶりに探したら、まだやっているみたいです。
http://www.dennougumi.co.jp/products/basic98/ver5/index.html
これなら今でもサポート、マニュアル、サポートがあるのでは。
現在でも通用しているなんて信じられないが。ご参考までに。では。


[7035] Re2:TurboPASCALで苦闘中返信 削除
2013/10/23 (水) 21:15:06 たてぐや
 なんとかものになりました。
 扱うデータは、DXFファイルです。ご存じの方もいらっしゃると思いますが、
DXFファイルというのは、せいぜい8bytesの行が千数百行もあるデータです。最
初のバージョンでは…

while not eof(f) do begin
 readln(f,s);
 Lineout(s)
end:

 といったように1行読んではそれをRS-232Cに出力する、というオーソドック
スなやり方をしていました。だけどこれだとやたら遅いんですね。「もっと速
くならないの?」とダメ出しが来ました。そこで考えました。

whilenot eof(f) do begin
 s := '';
 repeat
  readln(f,s1);
  s := s + s1 + #$0D + #$A;
 until (Length(s)> 240) or (eof(f));
end;
lineout(s);

 これで240bytes程度のデータを一気に送ることができそうです。やってみた
ところ、これは速い! 計測してみると1行読んで1行送る方式の10倍以上速く
送信できます。ところが、TurboPASCALにサンプルとして入っていたRS-232C
BIOSがヘボなのか、大量にデータを送ると、メモリを食いつぶしてしまうのか、
テキストのアトリビュートがおかしくなってしまいます。いろいろ試行錯誤し
ましたが、ふと思いついて1行送信するたびにRS-232Cポートを開閉するように
したところ、この不具合は解決しました。明日さっそく実稼働に入ります。
 FDとVzエディターとTPCの世界をしばらく楽しみました。かれこれ四半世紀
前のテクノロジーです。


[7036] Re3:TurboPASCALで苦闘中返信 削除
2013/10/24 (木) 18:08:21 たてぐや
 うまく動いたと安心して今日実稼働機に持って行ったらダメでした。送信を
繰り返しているうちにメモリを壊してしまうようで、テキストのアトリビュー
トがめちゃくちゃになります。
 結局アセンブラで書かれているRS-233Cを制御するものが悪いんだと思いま
す。どこかにTurboPASCALのRS-232C制御ユニットがないだろうかとググって見た
のですが、さすがにこの時代の資料は見つかりません。んー、困りました。


[7037] Re4:TurboPASCALで苦闘中返信 削除
2013/10/26 (土) 10:05:48 taki
▼ たてぐやさん

>  結局アセンブラで書かれているRS-233Cを制御するものが悪いんだと思いま
> す。どこかにTurboPASCALのRS-232C制御ユニットがないだろうかとググって見た
> のですが、さすがにこの時代の資料は見つかりません。んー、困りました。


お疲れ様です。

PUG BOOKS ターボパスカル・エキスパートマニュアル(小林r史)が手元に
残っています。
その中に「第10章ターボ通信」があり、RS-232Cについて載っています。
コンテンツは

10-1 RS-232C
10-2 RS-232CのBIOS -> PC9800に用意されているRS-232C関係のBIOSの紹介
 (a)RS-232Cの初期化
 (b)フロー制御を伴う初期化
 (c)受信データ長入手
 (d)データ送信
 (e)データ受信
 (f)コマンド出力
 (g)RS-232Cステータス入手
10-3 パソコン通信
10-4 日本語の問題 -> シフトJIS <-> JIS 変換の話?

です。
お役にたちますか。


[7041] Re4:TurboPASCALで苦闘中返信 削除
2013/10/27 (日) 21:40:46 snail
▼ たてぐやさん

> のですが、さすがにこの時代の資料は見つかりません。んー、困りました。

こんなサイトがありました
http://www.synchrondata.com/pheaven/www/area9.htm

実際の comm_tp5.zip は
http://www.filewatcher.com/m/comm_tp5.zip.30802-0.html
の↓のリンクから落とせました。
2009-07-22  ftp://ftp.oldskool.org/pub/simtel_msdos/msdos/turbopas/comm_tp5.zip

落としただけでチェックはしていません。コメントを覗くと

{ This program works with Turbo Pascal 4.0 and 5.x.  See Comm_TP4.DOC for the } { No code extends beyond the }
{ instructions.  Comm_TP3, by the same author, works under Turbo Pascal 3.0,  } { 80th column, so a simple   }
{ and Comm_TC2 works with Turbo C.  Upcoming is a Turbo Assembler Comm_TA1.   } { program could be used to   }

こんなんです。


[7042] Re4:TurboPASCALで苦闘中返信 削除
2013/10/28 (月) 21:44:59 たてぐや
takiさん、本の紹介有難うございます。さすがにDOS時代の書籍は処分してしま
ったかどこかにしまい込まれてしまっているので、資料がなくて歯痒い思いを
しています。

snailさん、情報ありがとうございます。残念ながらIBM互換機用なので使えま
せん。互換機用ならいくつか資料も見つかったのですが、さすがにPC-98となる
と見つかりません。

 で、その後ですが、TurboPASCAL付属のRS-232Cがやはりヘボで、メモリをヒ
ープに取ったり、スタックを増やしたりと小手先の技ではどうにもならないと
いうことで、通信部分だけN88BASICで書きました。N88BASICだとRS-232Cの入出
力がファイルを扱うのと同じ感覚で使えるので楽でした。
 例えばOPEN "COM1:N81XN" AS#1とすればPRINT#1,文字列と言った具合です。
ファイルリストを作るのは逆に不便なのでこの部分はTurboPASCALで、転送する
必要のあるファイルのリストをテキストファイルに出力しておいて、N88BASIC
でこれを読み込ませて送信する方式にしました。バッチを書いておけばうまく
連携して動きます。N88BASICはかれこれ30年も前なので、文法も忘れているし、
予約語や組み込み関数もあやふやに覚えているだけなので、少々手こずりまし
たが、なんとか書き上げました。明日実稼働機に持って行ってのテストになり
ます。今度こそはうまく動いてくれるように…。



[7043] Re5:TurboPASCALで苦闘中返信 削除
2013/10/28 (月) 23:00:31 snail
▼ たてぐやさん
> snailさん、情報ありがとうございます。残念ながらIBM互換機用なので使えま
> せん。互換機用ならいくつか資料も見つかったのですが、さすがにPC-98となる
> と見つかりません。


最初にPC98と書いてありましたね。またボケをかましてしまいました。

ベクターにパソコン通信用のソースがありました。 KTBBS
 モデムを制御するためにRS-232Cを触っていると思いますがアセンブラで
書いてあるようで私にはちんぷんかんぷんでした。

http://www.vector.co.jp/vpack/filearea/dos/net/comm/host/ktbbs/

Turbo Pascal 7.0 でコンパイルできるみたいです。
もう必要ないと思いますが、一応情報としてあげておきます。



[7044] Re6:TurboPASCALで苦闘中返信 削除
2013/10/29 (火) 22:14:25 たてぐや
▼ snailさん

snailさん、情報ありがとうございます。KTBBSは、setrsという独自のRS-232C
ドライバーを使っています。その上あちこちインラインアセンブラで書かれて
いるので、手元にあるTurboPASCAL5.5ではコンパイルできないんです。

 で、今日仕上げてきました。
 ファイラー部分はTurboPASCAL、送信部分はN88BASICで書いてコンパイルした
もの、これらを起動するためのバッチファイルと3つのモジュールになりました。
バッチファイルというのもあまり格好良くないのですが、探せばあるもので、
バッチをCOMファイルにするものが見つかったので、さっそく利用。3つそれぞ
れ違う言語で書かれた、いわばハイブリッドのシステムの完成です。
 今度は何の問題もなく動きました。心配した速度ですが、プログラムの実行
速度よりもRS-232Cの転送速度で頭打ちになっていて、PASCALで書いたものと変
わりない速度が出ています。
 送信側が成功したところ、受信側のプログラムにも新たな要求が出てきて、
今度はDelphiに戻ってコーディングです。しばらくMS-DOSの世界に入りっきり
だったので、頭の切り替えに少々煩わしい思いをしそうです。


[7045] Re5:TurboPASCALで苦闘中返信 削除
2013/10/29 (火) 22:26:34 taki
▼ たてぐやさん

> takiさん、本の紹介有難うございます。さすがにDOS時代の書籍は処分してしま
> ったかどこかにしまい込まれてしまっているので、資料がなくて歯痒い思いを
> しています。


本の紹介だけ!みたいになってすみません。

必要な個所をスキャナーで読み取ってzipでアップ…ってすると、著作権に
違反しますよね。

本自体を郵送してもいいのですが、それぞれ都合があるかもですね。

結局、N88BASICのプログラムで自己解決されたようなのでホッとしています。

> 今度こそはうまく動いてくれるように…。

お祈りしています。


[7046] Re6:TurboPASCALで苦闘中返信 削除
2013/10/30 (水) 22:00:58 たてぐや
▼ takiさん

> お祈りしています。

 ありがとうございます。
 昨日の時点で既にうまく動いていましたが、さらに少しでも効率を上げよう
といじっていました。一度表示された文字列を消去するのにFORループでスペー
スを出力していたのをループ回数分のスペースを一回で出力するようにしまし
た。と、ある時点からLine buffer overflowが出て止まるようになってしまい
ました。原因が解らず、あれこれいじっているうちに夕方になってしまいまし
た。もうわけが分からず、悩んでいるうちに、この文字列を消去するルーチン
をコメントアウトするとうまく動きました。原因はなにげなく変更したスペー
ス出力の部分だったのです。まさかこんな単純な部分で引っかかっているとは
気付かず、一日潰してしまいました。記憶を手繰り寄せてみるとBASICには、
SPACE$(n)(n個のスペースを表示)とかSTRING$(n,m)(コードmの文字をn個出
力する)など思いの外便利な関数がありました。BASICもなかなか捨てたもので
はない、と思いました。
 さて、明日からDelphiに戻らないと…。


INCM/CMT
Cyclamen v3.82