2018年8月2日木曜日

MS-BASICがLOAD, SAVEコマンド付きで動きました

6809SBDでMicrosoft BASICを動かしてみました


VintagechipsさんのSBC6809でMS-BASICが動いています。(移植されたのはtomi9jpさん
私のメイン環境であるFlex9上ではTSC社のBASICコンパイラなどもありますので、特に必要はないのですが、PC-8801の頃に使っていたMS-BASICですので、懐かしさもあってFlex9に移植してみました。

まずはVintagechipsさんのOneDriveからBASIC9.zipをダウンロードし、その中のBASIC9.asmのACIAのアドレスを$F0BC,BDに変え、さらにスタートアドレスを$A000に、メモリ末を$9FFFに変えてFlexDrvWinに放り込み、Flex9のアセンブラASMBでアセンブルします。
アセンブラの書式の違いから大量のエラーが出ますので、手作業で修正していきます。
例 CMPA #'E' -> CMPA #'E

また、Flex9のASMBにはラベルを6文字まででしか区別していないという問題があり、例えば、TOK_INPUTとTOK_INKEYが同じラベルだという分かりにくいエラーが出ます。
衝突している3つのラベルの名称を変更します。
例 TOK_INPUTと衝突しているので TOK_INKEY  -> TOK_IK

その他、多少の修正はありましたが、無事にアセンブルできてBASIC9.CMDができました。実行すると懐かしいMicrosoft BASICのメッセージが。。。


BASIC9

しかし何と、PRINT USING が動作しない!!!(ROMサイズの制限で削ったのでしょうか?)
また、作ったプログラムをSAVE, LOADできないのはつらい!

ということで、元になっているGrant'sさんのサイトにあるExBasRomを移植し、SAVE, LOADコマンドを追加してみました。


ExBasRomを移植し、SAVE, LOADを追加しました


まずGrant'sさんのサイトからExBasRom.zipをダウンロードし、その中のExBasRom.asmを取り出します。ACIAのアドレスを$F0BC,BDに変え、SAVE, LOADルーチンが増えますのでスタートアドレスを$9000に、メモリ末を$8FFFに変えます。その他の修正も上記と同様に行います。

次に、SAVE, LOADルーチンを追加するために、590行あたりにある、
  FCC "EDI" 9E
  FCB $80+'T
の次に以下の4行
  FCC "SAV" 9F
  FCB $80+'E
  FCC "LOA" A0
  FCB $80+'D
を追加します。それに伴って、これ以降の"TAB”~TOK_USINGまでがずれてきますので、$9F->$A1, ... $B1->$B3 のように12ヶ所ほどを+2した値に変更します。
さらに、745行あたりにある、
  FDB EDIT 9E と
  TOK_HIGH_EXEC EQU ... の間に、以下の2行
  FDB SAVE 9F
  FDB LOAD A0
を挿入します。
最後に、5400行あたりにある、
*LINE
LINE CMPA ...
  LBEQ ...
  JMP LB277
の次に SAVE, LOADルーチンの本体を置きます。

SAVEの範囲ですが、プログラム本体はワークエリアのTXTTAB($0019,1A)に先頭番地が、VARTAB($001B,1C) に最終番地+1が入っていますが、他のワークエリアの値も保存するために、$0000番地からVARTABの値-1までを保存しています。     

以上の修正を行ったExBasRom.asmをFlexDrvWinに放り込み、Flex9のアセンブラASMBでアセンブルします。
これでPRINT USING が機能し、SAVE, LOADコマンドが使えるMS-BASICが完成です。
サイズですが、$9000~$B595の$2596(9622)バイトでした。

ExBasRom

SAVE, LOADルーチンも正常に動作しています。保存先は、ドライブを指定していない場合はFlex9のワークドライブです。

SAVE, LOAD付きExBasRom

この移植にあたっては、Vintagechipsさん、tomi9jpさんの移植作業が大変参考になりました。これらの方々の努力と成果が無ければもっともっと手間がかかっていたと思います。感謝いたします。

このFlex9用に改変したPRINT USING, SAVE, LOAD付きのソースExBasROM_KAI.TXTをMicrosoftのOneDriveに上げておきます。

6 件のコメント:

  1. 6800用のBASIC COMPILER 「A/BASIC」がSIMHのSWTPC用FLEX02で動きました。

    https://www.datadeliver.net/receiver/file_box.do?

    fb=f5e84f980a79472094e27fa8b2d73ae2&rc=6fc5473bae5942c397c9cd968970cd24&lang=ja

    PASSWORD:ABC123
    A/BASIC 1.0C(6800カセット・バージョン)をFLEX 02対応にした
    ものが、簡単に動作確認出来るようになりました。

    SWTPC EMULATOR 6800/6809では、以前より動作していましたが
    今回「SIMH版」のSWTP6800 FLEX02で動かしました。
    「RT/68 MX」モニターROMは不要です。

    「WORK」フォルダーを解凍して、「SWTP.EXE」を実行。
    「D」大文字の「D」の入力で、FLEX02が起動します。
    ドライブ0は、ライトプロテクトされていますので、書き込みの
    必要な場合には、ドライブ1を指定します。

    簡単な動作確認ですが、FLEX02のプロンプトから
    +++GET 1.TEST18   (TEST18.BIN)
    +++1.JUMP 0100
    FLEX02の唯一の内部コマンド「GET」「MON」
    1.JUMP 0100の代わりに「MON」で、$(モニター)に戻り
    J 0100 でも実行出来ます。
    これで、TEST18.BINが実行出来ます。

    A/BASICの動作は、以下で確認出来ます。
    O,1.TEST20.LST 1.ABASIC 1.TEST20.BAS 1.TEST20.BIN
    今回、SWTPC EMU 6800/6809版にある「floppyMaint.EXE」で、
    1.44MBのFLEX.DSKのインポート、エクスポートが出来ました。

    返信削除
  2. 訂正:PASSWORDは「abc123」です。

    返信削除
  3. downloadは、3日間のみです。

    返信削除
  4. A/BASIC6800+RT68MXの組み合わせをみたモトローラ社が
    次期6809の開発、ソフト開発に、MICROWARE社の協力を求め
    BASIC09+OS-9が生まれました。
    MICROWARE社長のケン・カプラン氏の「A/BASIC」6809版もあり
    40年近く使っています。FLEX版、OS-9版があります。
    社長はBASIC09の普及に影響しないように、こっそりとFHLから
    販売しています。(FHL=Frank Hogg Labs)

    返信削除
  5. A/BASIC 6809 FLEX版 1.5は FLEX USER GROUPから入手可能。
    検索:FLEX USER GROUP FLANK HOGG LABS
    ABASIC_1.DSKなどに、あります。 マニュアルは無いですが、自分でPDF化した
    ものを、所有しています。 DSKを確認するには、SWTPC 6800/6809にある
    TOOLが使えます。

    返信削除
    返信
    1. Unknownさま
      6800用のA/BASIC FLEX版の紹介をありがとうございます。6809用のA/BASIC FLEX版の方は動かしてみたことがありますが、6800用は名前を聞いたことがあるだけで触ったことはありません。
      FLEX上でのプログラミングはほとんどアセンブラ、時々Micro-Cを使うぐらいでして、BASICやMicroBASICには言語的な関心があるだけで、ツールとして使うことはありません。
      それにしても、MPUの機能もメモリも貧弱な6800の時代に本格的なBASICのコンパイラが作られて、使われていたということには感心しますね。

      削除