マイクロコンピュータメーカーのSWTPの機関誌で仕様とソースコードが公開され普及したBASICです。
ソースファイルの取得
以下のWEBページで紹介されており、上記の機関誌をPDF化した文書や、ソースコード、ソースコードのバグ修正情報など公開されています。
- https://deramp.com/swtpc.com/NewsLetter1/MicroBasic.htm
- 紹介ページ
- https://deramp.com/swtpc.com/NewsLetter1/MicroBasic.pdf
- 公表されたBASICの仕様とソースコード
このページでは、Micro Basic は2進化10進数を使用していると書かれていますが、それは、次の節で紹介するMicroBasic Plusと間違えたものと思われます。Micro Basicは他のTinyBasicと同様に2バイトの2進整数を使用しています。
このBASICもTinyBasic に分類されるタイプの整数型BASICですが、コードサイズが3KBを超える程度で大きめなので、TinyではなくMicroと呼ばれているようです。
プログラムの修正とアセンブル
MicroBasicの移植法の概要を以下に示します。
- Source Code (27k TXT)というリンクで、Micro.txtという名前でソースプログラムが公開されているのでダウンロードします。
- ソースプログラムを修正・アセンブルするために、拡張子をASMに変更します。
- まずソースプログラムをアセンブルして、エラーを確認し、図\ref{fig:mb13-modify}の修正を行います。
- WEBのページに書かれている「ソースファイルの修正箇所」の3行の修正を行います。
アークピットのクロスアセンブラを使用してソースプログラムをアセンブルする例を以下に示します。
% msdos x6801 /LS Micro.ASM,Micro.SREC,Micro.LST;
X6801でのアセンブル
拡張子を変えただけのMicro.ASMをアセンブルすると、ブランチ先ラベルの参照で1か所エラーが出ますが、それ以外はなんとエラーなしでアセンブルできてしまいます。
ブランチ先ラベルの誤りは下記リストの上側の様な記述が156行にあります。
このラベル誤りを下側の様に修正します。
BNE KEYBD11REC
V
BNE KEYBD1
ブランチ先ラベルの誤りと修正
これで、まずはエラーなしのソースプログラムになりました。
次に、WEBページに示されている「ソースファイルの修正箇所」の3行の修正を行います。
060C 26 F9 BNE NXTL12
0961 81 1E PRINT4 CMP A #$1E
0BAE E7 00 STA B 0,X
ソースファイルの修正箇所
最後に、BREAKルーチンの処理を無効にします。
もともとのBREAKルーチンはPIAをモニタするもので、PIAを使用していない 6800-COREでは正しく動きません。
「BREAKの無効化」のように、単にサブルーチンリターンするようにします。
BREAK JMP BREAK1
V
BREAK RTS
BREAKの無効化
なお、このプログラムには、以下のような記述がファイルの最後にあるので、このプログラムのSレコードファイルを読み込むとプログラムの実行開始アドレスの$0100が$A048に設定され、ファイイルの読み込み後は単純にGコマンドを入力すれば、BASICが起動されるようになっています。
ORG $A048
FDB PROGM
実行開始番地のMIKBUGへの登録
改良
もともとのBREAKルーチンはPIAをモニタするもので、PIAを使用していない 6800-COREでは役に立ちません。
ACIAの入力をモニタして、CTRL-Cが押された際にプログラムを中断できるように変更する例を以下に示します。
BREAK
PSHA
LDAA $CC00
ANDA #$01
BEQ BREAK1
LDAA $CC01
CMP A #$03 ; CTRL-C
BNE BREAK1
JMP READY
BREAK1 PULA
RTS
BREAKルーチンの置き換え
WEBページに示されているほかに、プログラムの冒頭部分の作業領域の値を以下のように修正します。
BACKSP FCB $08 ; 一文字削除をBSにする
MEMEND FDB $8FFF ; 作業領域の最後
削除キーと作業領域の変更
KEYB55 CMP A BACKSP
BNE KEYBD3
CPX #BUFFER
BEQ KEYBD1
DEX
LDA A #' ' ;
BSR OUTCH ;
LDA A #$08 ;
BSR OUTCH ;
BRA KEYBD1
BREAKルーチンの置き換え