N88BASICとActivebasicの互換性について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
MASAO
記事: 2
登録日時: 2005年9月08日(木) 17:42

N88BASICとActivebasicの互換性について

#1 投稿記事 by MASAO »

はじめまして。
まず、作者様にお礼です。すばらしいソフトウェアを提供していただきありがとうございます。
ところで、このBasicはN88Basicと互換があるとされていますが、正式な互換表は存在するのでしょうか?
特に知りたいことは、RS232Cと、それに伴う割り込みなどの互換性を知りたいのですが、見つかりません。Win32Apiを使わないでシリアルが使えるのならば、過去の資産が使えるのでうれしい。

ちなみに、何も知識なしで、強引に次のようなコードを書きましたが、動作します。960Obpsで出力されました。

コード: 全て選択


#N88BASIC
10 Open "com1:n81" as #1
20 Print #1, "serial output"
30 close #1
40 end
ところが、ON COM1 GOSUB なんてのは許されないみたい。
シリアルが素直に動作するのであれば、PC9801を廃棄できるんですが。
ご存知の方よろしくお願いします。
バケさん

Re: N88BASICとActivebasicの互換性について

#2 投稿記事 by バケさん »

> ところで、このBasicはN88Basicと互換があるとされていますが、正式な互換表は存在するのでしょうか?
ちょっと、見たのですが良くわからないので他の方のレスをお待ちください。

> 特に知りたいことは、RS232Cと、それに伴う割り込みなどの互換性を知りたいのですが、見つかりません。Win32Apiを使わないでシリアルが使えるのならば、過去の資産が使えるのでうれしい。

割り込みはできません。
また通信をサポートしていたのはAB2.6までだったような気がします。
Win32Apiを使う必要があると思いますが、スレッドなどで受信バイト数もしくはターミネータのコード監視するようになるのではと思います。

> シリアルが素直に動作するのであれば、PC9801を廃棄できるんですが。
> ご存知の方よろしくお願いします。
ABはN88BASIC互換の路線を残していますが、他の互換ソフトに比べると劣ります。(と思います)
N88BAISC互換が目的ならば(特にRS232C)、他のソフトを探したほうがいいと思います。

ABにはN88BASIC互換以外にもすばらしい機能があるので、そちらの用途のときにまた検討してみたらと思っています。

通信はライブラリー化して、使いやすいようにしたいと思っていますが、なかなか進んでいないのが現状です。
tetsu

#3 投稿記事 by tetsu »

RS232Cだったらインタープリタですが99BASICを使ってみてはどうでしょう?
http://www.sagami.ne.jp/tadaka/99Basic/
河川屋

#4 投稿記事 by 河川屋 »

>ActiveBasicはN88Basicと互換があるとされていますが、正式な互換表は存在するのでしょうか?
見たことありません。あったとして、ものすごく長い表になるでしょう。
ヘルプなどで見る限り、見つけたのは、
N88BASIC:変数を型宣言無しで使うと、単精度整数となる。
AB:変数は全て型宣言する必要がある。
と、これだけ。

N88Basic互換の意味ですが、
・Windows式のプログラミングをとらずに(=FORMとかを作らなくても)
 Dos時代のやりかたでとりあえず画面表示などが可能である。
・MIcrosoft系の方言が使えるBasicである。(JIS規格のBasicではない)
という2つの意味でN88Basic互換なのであり、
本来の意味での互換
・N88Basicのソースを何も修正せず実行できる
については全く期待できません。(以下のリストの1~4いずれか1つですら致命的。)

で、Microsoft系Basic互換か、といえば、それともずいぶんと違っています。
以下、Microsoft系Basicならほとんど共通動作をする命令における違いです。
なお、ABのVerは4.00、MS系はMBasic5.2の動作で比較しています。
 ※MBasic:CP/M-80上のBASIC。MZ-80,PC-8001,FM-7等、8bit機の大半で動作した。
1.変数の型宣言(上記)
2.Log(-1)やゼロ割などの計算不能事態が生じたとき、
   MSはエラーメッセージを出して中止、
   ABは、永久ループの場合と、答としてゼロを返して先に進む。
   ※これはIEEE754の基準違反。
3.変数名について、MSは大文字小文字は同一視、ABは別扱い。
4.変数名について、XとX# (dim X as Doubleと宣言したとして)は
   MSは同一、ABは別扱い。
5.PRINT USINGで、指数表記の指定がABでは不可。
   また、文字列に対する適用不可。 (PRINT USING "NAME=& &";NAME$のような使い方)
6.単精度実数、倍精度実数の内部表現が異なる。
   N88Basic,MBasic等のQuiickBasic以前:MS独自形式
   QuickBasic以降およびAB:IEEE形式。
    なお、超越関数(logや三角関数)の計算結果の精度について、
コプロの命令を使えば最悪でも2bit以内の誤差(関数単独で)が保証されるが、
    ABは数式展開で計算しているため四則演算以外はbit保証されていない。
     ※QuicBasicあたりまでは MSもbit保証なし。
7.Rnd関数
MS(N88)は0~1の範囲で単精度の一様乱数を返す。
   ABは0~1の範囲で倍精度の一様乱数を返す....筈であるが、実は、
     有効桁は10進5桁。かつ、最終桁はランダムではないから、
     実質は10進4桁の関数となっており、有効桁は単精度以下である。
     ※スペックダウンしている。
     ※※しかも、頻度分布に癖がある。シミュレーションには使えない。
8.ランダムファイルに対するFIELD文
   MSは、1レコード内の変数の割り当てとバイト数を定義する。
     FIELD #1,8 AS A$,24 AS B$ '最初の8byteがA$,次の24byteがB$残りは未定義。
ABは、1レコードの長さを定義する???
     N88Basic不可。 MSは一般に、 OPEN FL$ AS #1 LEN=256(またはOPEN "R",#1,FL%,256)
             のようにレコード長を定義する。
9.STOP文(MSはプログラムの一時停止、ABはサウンド再生の停止。)
10.その他、MS系なら大抵動くが、ABではサポートされていない命令
  (ABヘルプに記載の無い命令はたとえ動いてもサポートなしとみなす)
・LINE INPUT文。  (掲示板に既出)
   ・SWAP文      (掲示板に既出)
   ・数値と文字をバイナリのまま相互変換する関数。
     CVI,CVS,CVD,MIK$(),MKS$(),MKD$()
   ・ON~GOTO(GOSUB)文。
     SELECT~CASE文が増えたから不要といえば不要。
   ・CLEAR文(全変数をゼロクリアする。また、文字列や機械語エリアの確保。)
   ・ERROR文(エラー発生のエミュレート。
      ON ERROR GOTOと組み合わせ IF ○○ THEN ERROR 45 のように使う。)

N88BASIC機種依存命令(他のMS系BASICと異なる命令。グラフ命令など。)については、
ほとんど使ったことがない(数値解析以外はめったに組んだことがない)ので省略します。

私の意見として、ABばどのくらいN88BASIC互換か、というと、
・十進BASICといい勝負。
  ※十進BASICはMicrosoftBasic非互換とはっきり宣言している。
   それといい勝負ということは、ABがN88互換というのが如何にトンデモかは想像にまかせます。

結論として、N88BASICのプログラムをそのまま走らせたいなら、他の互換ソフト
(できれば、インタプリタ形式のもの。)を使うことをすすめます。
問題はQuickBasicなんです。QBは、局所変数の概念があるから、今更N88に戻すのは
地獄だし、DOSレベルで動けば良いとして簡単に動かすにはどうするか?
選択肢が乏しいのです。

候補は3つ。
1.AB。 上記の12457810が、やってられない。
2.英語版Abasic(DOS6.xに付属) 漢字使用不可。
3.十進BASIC INPUT#文1回で1行のデータを読み込む必要がある。
    (十進BASICもマニュアルにコレは記載されていないが、記載されている
    どれより、コレに対する修正が面倒。
    コレさえ無ければ十進BASICを悩まず選ぶ。)

とまあ、そういう関係(個人的には。)です。
KAMATY

PC98エミュレータを使うという手も

#5 投稿記事 by KAMATY »

過去のN88BASICを改変なしで使いたいという事であれば、PC98エミュレータを使うという手もあると思います。
PC98をエミュレートするのだから、互換BASICよりは再現性が高いのではないでしょうか。

PC98エミュレータというカテゴリ自体は失速している感もありますが、それでもなお開発を続けている人達もいるようです。
中にはシリアル制御までサポートしているエミュレータもあると聞きました。

私も手持ちのPC98が次々と息絶えていく中で、過去のPC98資産をどう維持するかをちょっと悩ましく思っていて、エミュレータに手を出してみようかと思っているところです。
個人的には、最近見かけた「Neko Project II」あたりがちょっと気になるところ。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

ActiveBasicにN88互換を求めるとしたら2.X系を、ということになります。
少なくともAB3以降よりはずっとN88に近いものと思います。
http://web.archive.org/web/200410100706 ... index.html
MASAO
記事: 2
登録日時: 2005年9月08日(木) 17:42

#7 投稿記事 by MASAO »

皆様たくさんのRESありがとうございます。
N99BASICも検討したが、これも断念。

結局、WIN32APIで作り変えています。
でも、この山さえ越えれば、当分プログラム開発環境に困らなくなるんで、がんばりたいと思います。
パダワン

N88BASICとActivebasicの互換性について

#8 投稿記事 by パダワン »

私の場合、DSKI$,DSKO$を使ったものが多いのですが、難しそうですね。
互換表はほしいところですが数は膨大になると思います。
問題なく動く命令に関してはN88BASICのマニュアルを見てね!でいいとおもいますが、サポートしない命令や同じ名前の命令でも動作の違うもののみでも公表していただけると幸いです。
プラットフォームが違うので非互換部分があるのはしかたのないことです。
サポートしない命令や同じ名前の命令でも動作の違うものを、あらかじめわかるだけでも「ソフトの使いやすさ」として判断します。
返信する