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に上げておきます。