Home MindStorms Software Hardware Forum  
2000-6-1 更新

MindStorms/CyberMaster用制御言語であるNQC(Not Quite C)をDOSに移植しました。

昔作って放ったらかしになっていた,自家製シリアル通信クラスライブラリを使用しています。
PC/AT用とPC-98用の両方の通信機能を装備しており自動判別して動作します。

オリジナルのNQCは v1.3 です。最近 v2.0 が公開されましたが,こちらの移植にも挑戦したものの,どうもうまく動かせませんでした。
というわけで,DOS版は初お目見えにして早速,進化の望みが経たれてしまったかもしれません。^^;

言語の記述のしかたはもちろん,コマンドラインでの使い方も,既存のWin32版と同じです。
詳細は本家のページJinSatoさんNQC関連情報を参照してください。

以下のPCで動作を確認しました。

ダウンロード

最新版

NQC for DOS v1.3 (built Jun 01 2000, 21:48:05) (ソース同梱)

  • -firmwareコマンドでファームウェアのダウンロードができなかったのを修正。

    ヒュージモデルで再コンパイル。
    ファームウェア用バッファの確保を halloc/hfree で行うようにした。(srecord.cpp, srecord.h)

旧版

NQC for DOS v1.3 (built Sep 29 1999, 22:41:17) (ソース同梱)

  • シリアル通信中にプログラムの実行を中断したとき,割り込みベクタを戻していなかったのを修正。
  • PC-98のWindowsのDOSプロンプト上で実行したとき,ハングアップしていたのを修正。
  • シリアル通信のタイムアウトを計測する処理を変更。
    Windows上ではタイマLSI(8253) から直接カウント値を読み出せないようです。

  • PC/AT互換機でシリアル通信のタイムアウト計測方法を,BIOSのウェイトサービスを使うようにした。

    PC-98とちがってPC/ATでは,Windows上でもタイマLSI(8253)からカウント値を読み出せるのですが,
    せっかくBIOSでウェイト機能があるので,これを利用するようにしました。(今まで知らなかったのです)

開発環境

このプログラムは Watcom C/C++ 10.5 でビルドしました。
メイクユーティリティは Microsoft の nmake が相性が良いみたいです。

DOS用に移植するにあたって以下の点を変更しています。

16ビットDOSプログラムを作成できるC++コンパイラとなると,BorlandかWatcomといったところでしょうが,これらはもう既に開発は停止(または停滞?)しているので,C++の最新仕様を満たしていなかったり,非互換部分があったりして大変です。Borlandのコンパイラなら持っている方も多いと思うのですが,ソースコード parray,cpp の「void Destruct(char *p) { ((T*)p)->~T(); }」という部分が通りませんでした。怪しげなコードですが,最新の言語仕様では認められているのか知りません。Watcomの方は意外とあっさり通ってくれたのでこちらを採用しました。

ところでWatcom C/C++ 11.0はイマイチです。10.5が良いです。なぜかというと,11.0ではマルチバイト文字列のサポート強化のために,スタートアップルーチン内でコードページ周りの情報取得などをやっているのです。それでprintfなんかを使ったりするだけで,実行ファイルが以前より大きくなってしまいます。さらに悪いことにHP 100LXの日本語ドライバのバグ(だと思うのですが...)のために,なんと,Watcom11.0の実行ファイルは動かないのです。いや,もしかしたらドライバのバグは私の知らないうちに治っているかも...,治っていたら良いなぁ。誰か教えてください。それはともかく,個人的にはマルチバイト文字列サポートなんていらないから,Watcom C/C++ 10.5の方がお勧めです。

使用条件

オリジナルのNQCはMPL(Mozilla Pulibc License)のもとで配布されており,NQC for DOS もこれに従います。
このプログラムを使用したことにより,何らかの不利益が発生しても,責任を負いません。

Copyright (C) 1999-2003 S.Fuchita. All rights reserved.