技術少年出版のWEBサイトへ訪問いただきありがとうございます。
Legacy8080に搭載するCP/M-80互換OSの動作検証として偉大な先駆者達が開発した有名ソフトウェアを動かしてみましたのでご紹介いたします
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言語でした。ここまで来ると当時のミニコンに近い能力をマイコンで実現できるようになりました。
ビル・ゲイツ氏と高校の先輩だったポール・アレン氏は、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のテストユーザーである猪様に作成いただきました。お忙しい中動作検証レポートを作成いただきましたことに感謝いたします。
以下の動作検証レポートはLegacy8080の量産試作機(E80)にて動作検証を行ったものです。
MBASIC(BASIC-80)を海外のダウンロードサイトから入手します。
ダウンロードサイトのURLはLegacy8080の購入者へお知らせします。
ダウンロードするプログラム「Mbasic.com Microsoft BASIC Interpreter v5.21」です。
「1」で入手した「Mbasic.com」をコンソールPC内のE80フォルダの中に作成されたファイル交換用のzフォルダにコピーを保存します。
「zb3dose(Enter)」と入力してZB3BASICを起動し、引き続き「/CPM(Enter)」と入力してCP/M互換OSを起動します。
(Legacy8080をBASICモードで起動して、BASICモードからCP/M互換OSモードへモードチェンジする操作方法です)
ここで、「DIR Z: (Enter)」と入力すると、ファイル交換用のZフォルダの内容が表示されます。
続いて「COPY Z:MBASIC.COM A:」と入力すると「2」でZフォルダへ保存された「Mbasic.com」が、
CP/M互換OSに取り込まれ、仮想フロッピーディスクドライブ(V-FDD)のAドライブに保存されます。
これで、MBASIC(BASIC-80)の実行環境が整ったことになります。
引き続き、「MBASIC(Enter)」と入力すれば、BASIC-80が起動します。
BASIC-80が起動してタイトルとバージョンが表示されました。
このBASIC-80のバージョンがRev.5.21で作成日が1981年7月28日であることが解りました。
テストとして次のようなプログラムを入力しました。
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のキーボード操作により直接プログラムを入力することもできます。
入力プログラムを確認するためにLISTでプログラムを画面に表示しました。
RUNで実行しました。
IとSQRの値が一致していません。50の行を修正して再度実行しました。
『SAVE "MBTEST",A』と入力して
入力したプログラムを「SAVE」コマンドで「MBTEST」という名前のアスキーコードファイルに保存しました。
『SYSTEM』と入力して
BASIC-80からCP/M互換OSに「SYSTEM」コマンドで戻りました。
CP/M互換OSの「TYPE」コマンドで「MBTEST」ファイルを表示すると正しくアスキーコードで保存されているのが確認できます。
再度、MBASICを起動し、「9」で保存した「MBTEST」を読み込んで実行しました。
「SYSTEM」コマンドでMBASICを終了し、「ZB3」コマンドでCP/M互換OSを終了しました。
「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
一括処理実行のログリストです。
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関連情報をご説明いたしました。