HOME
Legacy8080 NEWS No.5  2014年3月26日公開

Legacy8080 CP/M互換OS動作検証 「 BASIC-80 」

(このページの内容はニュースリリースです。このページの文書と写真は転載自由です)

技術少年出版のWEBサイトへ訪問いただきありがとうございます。

Legacy8080に搭載するCP/M-80互換OSの動作検証として偉大な先駆者達が開発した有名ソフトウェアを動かしてみましたのでご紹介いたします

・BASIC-80とは

BASIC-80はマイクロソフト社が1977年から1980年代前半まで販売していたCP/M-80用BASIC言語です。8080系のCPUで動作します。
機能的には「16Kbyte Extended BASIC」となります。DEC社のミニコンDEC-10用BASICとほぼ同じ機能ですのでBASIC言語としては最上級の機能があります。

BASIC-80の基礎になったのはMITS社のALTAIR8800用AITAIR BASICです。AITAIR BASICはビル・ゲイツ氏(当時18歳)本人が開発していました。BASIC-80発売時のマイクロソフト社ではビル・ゲイツ氏(当時20歳)も自らプログラミングを行っていたのでBASIC-80のかなりの部分はビル・ゲイツ氏がプログラムコードを書いていたと思われます。

BASIC-80のルーツは、ビル・ゲイツ氏が1975年にMITS社のAltair8800用に開発した最初のBASICに遡ることができます。
Altair8800用のBASICとして、ビル・ゲイツ氏が最初に開発した「ALTAIR 4K BASIC」は、BASIC言語の基本的な機能を備えていました。

次に開発した「ALTAIR 8K BASIC」は、「ALTAIR 4K BASIC」に基本的な関数計算機能などを付加しました。

次に開発した「ALTAIR 16Kbyte Extended BASIC」では、DEC社のミニコンで動作したDEC BASICの機能のほぼ全てを格納しました。
この段階でミニコンで動いていた本格的なBASIC言語がマイコンでも利用可能であることが証明されました。

「4K BASIC」の「4K」というのはBASICの大きさが4Kbyteあるという意味ではありません。当時の標準だった4Kbyteの容量を持つRAMボード1枚で動かすことが出来るBASICのことを意味します。

4Kbyte RAMボード1枚で動くということはBASIC本体の大きさは3Kbyteぐらいで、ユーザープログラムエリアが約1Kbyte程度確保できるという意味です。「8K BASIC」も同様で8KbyteのRAMボードが1枚あればギリギリのユーザープログラムエリアが確保できて8K BASICが動くという意味でした。

「16K Extended BASIC」は、最低限の実行環境で16Kbyteのメモリ容量が必要だったのでMITS社では「16Kbyte Extended BASIC」と呼んでいました。

「ALTAIR DISK BASIC」は、「16K Extended BASIC」に普及し始めたフロッピーディスクを外部ファイルとして利用できる機能を付加した画期的BASIC言語でした。ここまで来ると当時のミニコンに近い能力をマイコンで実現できるようになりました。

参考資料】1978年のマイコン雑誌の広告。

【参考資料】1978年のマイコン雑誌の広告。MITS社の日本代理店がマイコン誌に掲載したALTAIR8800bやBASIC言語の広告。写真のALTAIR8800bはALTAIR8800の改良型。紙テープリーダーとフロッピーディスクの両方が並んでいます。「TIMESHARING BASIC」というミニコンと同じ利用方法を行う製品の広告もあります。1978年時点のMITS社は既に創業者のエド・ロバーツ氏からミニコンメーカーのPertec社に経営が譲渡されてALTAIR8800bはマイコンではなくミニコンとして売り出されていました。マイコン時代の幕開けに逆行する戦略によりMITS社は2年後に消滅しました。

【参考資料】1978年のマイコン雑誌の広告。

【参考資料】1978年のマイコン雑誌の広告。当時のマイコン少年の憧れだった4K BASIC、8K BASIC、16K Extended BASICの広告が並んでいます。いつかこんな凄いマイコンを自作するぞと闘志を燃やしてミニコンのジャンク部品を買い集め、BASICインタプリタの仕組みを研究したのは遠い思い出になりました。左下にある「月刊コンピュータノート」はMITS社がALTAIR8800ユーザー向けに発行していたニュースレターです。「月刊コンピュータノート」には一般ユーザーに混ざりビル・ゲイツ氏やポール・アレン氏もソフトウェアやハードウェア記事を執筆していました。

ビル・ゲイツ氏と高校の先輩だったポール・アレン氏は、MITS社のソフト部門に在籍しながらマイクロソフト社を設立して、ほぼ同じBASICをM-BASICとして販売しました。MITS社とマイクロソフト社の関係はかなり緩い関係だったようです。

1978年から1982年までに発売された8bitマイコンにはマイクロソフト社のBASIC言語が搭載され、それぞれ12K BASICや16K BASICとか、拡張BASICと自称していましたが、これらのBASICの基本機能はMITS社のALTAIR 8K BASICとほぼ同じです。

BASICの容量が8Kbyteより増えた分は、グラフィック表示機能やモニタ機能、各マイコンのBIOS部分でした。よって、1978年から1982年までに発売された8bitマイコンでBASAICを十分楽しんだ方でも、当時のミニコン用BASICの機能を持った本物の「Extended BASIC」は未体験と思われます。8bitマイコンのBASAIC経験者でも「BASIC-80」を動かすと新しい体験ができる可能性があります。

マイクロコンピュータ用のOSとしてCP/M-80が普及してくると、マイクロソフト社はM-BASICをCP/M上で動くように改良して「BASIC-80」という名称で販売を開始してヒット商品にしました。

「BASIC-80」は、1981年頃まで改良が続けられて、Ver5.0で安定した完成レベルとなりました。「BASIC-80」の最終版ではBASIC-80 Ver5.21まで進化しました。現在このBASIC-80 Ver5.21が入手可能です。

1979年には、インタプリタ方式だった「BASIC-80」と互換性があるBASICコンパイラ「BASCOM」が開発されました。

開発が容易なインタプリタ方式の「BASIC-80」で動作確認を行ってから、同じBASICソースプログラムを「BASCOM」でコンパイルして高速に実行するという理想的な開発環境が揃いました。この「BASCOM」も現在入手可能です。

但し、「BASIC-80」と「BASCOM」は完全互換ではありません。「BASIC-80」にあるインタプリタ固有の機能は「BASCOM」で利用できません。その他、一部異なる機能もあります。

マイクロソフト社のBASICは、ビル・ゲイツ氏が高校・大学時代にコンピュータの基礎を学んだDEC社のミニコンのBASIC「DEC BASIC」に似た仕様になっています。AppleⅡを開発したスティーブ・ウオズニアク氏はHP社のミニコン上で走る「HP BASIC」を参考にしたのでAppleⅡのBASICが「HP BASIC」の仕様に似ているのと対照的です。

Legacy8080で「BASIC-80」の世界を是非体験してください。

・Legacy8080 CP/M互換OS動作検証レポート 「 BASIC-80 」

謝辞:この動作レポートはLegacy8080のテストユーザーである猪様に作成いただきました。お忙しい中動作検証レポートを作成いただきましたことに感謝いたします。

以下の動作検証レポートはLegacy8080の量産試作機(E80)にて動作検証を行ったものです。

  1. MBASIC(BASIC-80)を海外のダウンロードサイトから入手します。

    ダウンロードサイトのURLはLegacy8080の購入者へお知らせします。
    ダウンロードするプログラム「Mbasic.com Microsoft BASIC Interpreter v5.21」です。

  2. 「1」で入手した「Mbasic.com」をコンソールPC内のE80フォルダの中に作成されたファイル交換用のzフォルダにコピーを保存します。
    「zb3dose(Enter)」と入力してZB3BASICを起動し、引き続き「/CPM(Enter)」と入力してCP/M互換OSを起動します。
    (Legacy8080をBASICモードで起動して、BASICモードからCP/M互換OSモードへモードチェンジする操作方法です)

    BASIC-80画面
  3. ここで、「DIR Z: (Enter)」と入力すると、ファイル交換用のZフォルダの内容が表示されます。
    続いて「COPY Z:MBASIC.COM A:」と入力すると「2」でZフォルダへ保存された「Mbasic.com」が、
    CP/M互換OSに取り込まれ、仮想フロッピーディスクドライブ(V-FDD)のAドライブに保存されます。
    これで、MBASIC(BASIC-80)の実行環境が整ったことになります。

    BASIC-80画面
  4. 引き続き、「MBASIC(Enter)」と入力すれば、BASIC-80が起動します。
    BASIC-80が起動してタイトルとバージョンが表示されました。
    このBASIC-80のバージョンがRev.5.21で作成日が1981年7月28日であることが解りました。

    BASIC-80画面
  5. テストとして次のようなプログラムを入力しました。

    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "I=",I,"SQR=",SQR(A)
    60 NEXT I
    70 END
    

    このとおり、コンソールPCのキーボード操作により直接プログラムを入力することもできます。

  6. 入力プログラムを確認するためにLISTでプログラムを画面に表示しました。

    BASIC-80画面
  7. RUNで実行しました。

    BASIC-80画面
  8. IとSQRの値が一致していません。50の行を修正して再度実行しました。

    BASIC-80画面
  9. 『SAVE "MBTEST",A』と入力して
    入力したプログラムを「SAVE」コマンドで「MBTEST」という名前のアスキーコードファイルに保存しました。

  10. 『SYSTEM』と入力して
    BASIC-80からCP/M互換OSに「SYSTEM」コマンドで戻りました。

  11. CP/M互換OSの「TYPE」コマンドで「MBTEST」ファイルを表示すると正しくアスキーコードで保存されているのが確認できます。

    BASIC-80画面
  12. 再度、MBASICを起動し、「9」で保存した「MBTEST」を読み込んで実行しました。

    BASIC-80画面
  13. 「SYSTEM」コマンドでMBASICを終了し、「ZB3」コマンドでCP/M互換OSを終了しました。

    BASIC-80画面
  14. 「2」のCP/M互換OSの起動から「13」ののCP/M互換OSの終了までを、「BAT」コマンドで一括処理を実行してみました。
     「/CPM」の代わりに「/BAT MBASIC.BAT(Enter)」と入力します。次は、一括処理のリスト「MBASIC.BAT」です。

    /CPM
    DIR Z:
    COPY Z:MBASIC.COM A:
    MBASIC
    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "I=";I,"SQR=";SQR(A)
    60 NEXT I
    70 END
    LIST
    RUN
    50 PRINT "A=";A,"SQR=";SQR(A)
    LIST
    RUN
    SAVE "MBTEST",A
    SYSTEM
    TYPE MBTEST.BAS
    MBASIC
    LOAD "MBTEST"
    RUN
    SYSTEM
    ZB3
    
  15. 一括処理実行のログリストです。
    CP/M互換OSにはコンソールPCと入出力した内容をテキストファイルでログ記録する便利な機能があります。
    このログファイルを利用して入出力した内容を他のPCからプリント出力することも出来るのでLegacy8080にプリンターが接続されていなくてもプリント出力することができます。
    画面に表示する「PRINT」の内容はログファイルに含まれますが、「LPRINT」などのようにプログラムから直接プリンターへ出力する処理には対応しません。

    logfile e80log\03142202.txt open
    
    E-80に接続しました
    loading e80mon3e.bin ...7b80(31616)bytes loaded
    monitor start ok
    zb3basic core entry
    mode check
    mode data is 38
    
    *** ZB3 basic ****
    >/BAT MBASIC.BAT
    >/CPM
    loading ezbds1a.bin ...1a13(6675)bytes loaded,from CC00 to E612
    drive D ................................
    drive C ................................
    drive B ................................
    drive A ................................
    
    A>DIR Z:
    Z: MBASIC   COM
    A>COPY Z:MBASIC.COM A:
    MBASIC  COM to MBASIC  COM......................................................
    ................................................................................
    ......................................................... done
    
    A>MBASIC
    BASIC-80 Rev. 5.21
    [CP/M Version]
    Copyright 1977-1981 (C) by Microsoft
    Created: 28-Jul-81
    28728 Bytes free
    Ok
    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "I=";I,"SQR=";SQR(A)
    60 NEXT I
    70 END
    LIST
    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "I=";I,"SQR=";SQR(A)
    60 NEXT I
    70 END
    Ok
    RUN
    I= 1          SQR= 1 
    I= 2          SQR= 1.73205 
    I= 3          SQR= 2.44949 
    I= 4          SQR= 3.16228 
    I= 5          SQR= 3.87298 
    I= 6          SQR= 4.58258 
    I= 7          SQR= 5.2915 
    I= 8          SQR= 6 
    I= 9          SQR= 6.70821 
    I= 10         SQR= 7.4162 
    Ok
    50 PRINT "A=";A,"SQR=";SQR(A)
    LIST
    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "A=";A,"SQR=";SQR(A)
    60 NEXT I
    70 END
    Ok
    RUN
    A= 1          SQR= 1 
    A= 3          SQR= 1.73205 
    A= 6          SQR= 2.44949 
    A= 10         SQR= 3.16228 
    A= 15         SQR= 3.87298 
    A= 21         SQR= 4.58258 
    A= 28         SQR= 5.2915 
    A= 36         SQR= 6 
    A= 45         SQR= 6.70821 
    A= 55         SQR= 7.4162 
    Ok
    SAVE "MBTEST",A
    Ok
    SYSTEM
    
    A>TYPE MBTEST.BAS
    10 '********** TEST **********
    20 A=0
    30 FOR I=1 TO 10
    40 A=A+I
    50 PRINT "A=";A,"SQR=";SQR(A)
    60 NEXT I
    70 END
    
    A>MBASIC
    BASIC-80 Rev. 5.21
    [CP/M Version]
    Copyright 1977-1981 (C) by Microsoft
    Created: 28-Jul-81
    28728 Bytes free
    Ok
    LOAD "MBTEST"
    Ok
    RUN
    A= 1          SQR= 1 
    A= 3          SQR= 1.73205 
    A= 6          SQR= 2.44949 
    A= 10         SQR= 3.16228 
    A= 15         SQR= 3.87298 
    A= 21         SQR= 4.58258 
    A= 28         SQR= 5.2915 
    A= 36         SQR= 6 
    A= 45         SQR= 6.70821 
    A= 55         SQR= 7.4162 
    Ok
    SYSTEM
    
    A>ZB3
    end of ZBDOS
    >
    
    /BAT end
    >/EXIT
    
    リモート接続を終了しました
    logfile closed at Fri Mar 14 22:03:47 2014
    

以上、2014年3月26日時点でのLegacy8080関連情報をご説明いたしました。

本件NEWSとLegacy8080に関しましてご質問、ご意見等がありましたら以下のメールアドレスまでEメールをお送り願います。

株式会社 技術少年出版  
HOME