SSブログ
English Version

Pic24MC68Kマイコン(その9)ehBASICの移植 [68K]

 MC68Kのチップサイズ(DIP64)と同程度のプリント基板で CP/M-68K を動かす今回の試みに関して前回の記事でケース作成について書きました。

 今回作成したものは以前作成した Pic24CPM68K と比べて
  • クロックが 8MHz から 16MHz に速くなっている
  • バス幅が 8bit から 16bit になっている
なのでかなり高速になっているのではないかという期待があります。

 速度の評価ということでは BASIC 言語で記述されている ASCIIART.BAS の実行時間を計るのが一般化しつつあります。
 しかし、CP/M-68K に付いているデジタルリサーチ社製の CBASIC Compiler ではコンパイルしても実行時間が 1分43秒(103秒)でそれほど速くはありません。CBASICはBCD演算しているので誤差が発生しにくく、当時は会計などの計算によく使われていたようですが、ASCIIART の実行時間は MBASIC 等と比べるとかなり遅く感じます。

 68K系の BASIC では Enhanced BASIC が高速なインタープリタとして有名ですが、CP/M-68K 用のものはネットで探しても見つかりませんでした。
 また、CP/M-68Kで動作する他の BASIC もないかネットで探してみましたが見つかりませんorz

  Enhanced BASIC はソースの入手性も良く、個人ユースであれば自由に配布もできるようなのでありそうで見つからない CP/M-68K へのポーティングを行ってみました。
 CP/M-68K のアセンブラは struc や offset が使えないので(ソース内では offsetが使われている)使用メモリを固定にして ASCIIART.BAS が動作するようになりました。但し、BASIC のソースは コピペできるのでセーブ/ロード機能まではポーティングしていません(細かい動作確認も行っていません)。

★追記 2022/02/06 {
 CP/M-68K の アセンブラ(AS68)が offset に対応していました。しかし、offset を使用するとリンク時に下記のエラーが発生して対処方法が不明です。
L>a:lo68 -r -x -o basic68k.rel basic68k.o
: File Format error: Invalid symbol flags = 100100

 link68では同様に下記のエラーが発生します。
L>a:link68 basic68k.o
--------------------------------------------------
LINK68 Overlay Linker Release 0.f
Serial No. XXXX-0000 All Rights Reserved
Copyright (c) 1983 Digital Research, Inc.
--------------------------------------------------

basic68k.o
LINK68: INVALID SYMBOL FLAG IN BASIC68K.O, SYMBOL: "ram_strt@"

}

 以前作成したPic24CPM68Kと今回のもので実行時間を測定した結果が下表になります。

ehBASIC での ASCIIART.BAS 実行時間
No.machineexecute time
1 Pic24CPM68K
CPU:MC680008 8MHz
OS:CP/M-68K 1.3
2min54sec
(174sec)
2 Pic24MC68K
CPU:MC68HC000 16MHz
OS:CP/M-68K 1.3
47sec


 クロックが倍なのでクロック分で倍速、あとはバス幅が倍になったのである程度速くなるだろうと思っていましたが、更に倍近く(合わせて4倍近く)速くなっています。

 Pic24MC68K で実行した時の画面キャプチャが下図になります。コマンドは大文字で入力する必要があります。

Enhanced BASIC での ASCIIART.BAS 実行画面


★追記 2022/02/06 {
 CP/M-68K に移植した ehBASIC で使用メモリを実装メモリに合わせて動的に変更するようにしました(上記追加コメントで書いたように offset コマンドを使用するとリンクでエラーが発生するので EQU で対応)。
 また、SYSTEM コマンドで CP/M に戻れるようにしました。

}


 今回のポーティングは EASy68K 用のV3.52 のソースから CP/M-68K で動作するものを作り、下記の URL で公開しました。著作権に関してはソース内の記述等を参照してください(商用目的以外で個人使用であれば自由に使用可能)
[history]
*2023/05/08 V3.52c The archive file had a header error, so I recompressed this zip file again. *2022/02/12 V3.52c Fixed a bug that an error occurs in array declaration.
*2022/02/07 V3.52b Returned BSS area declaration from EQU to ds to improve the maintainability
*2022/02/06 V3.52a Memory dynamic allocationSupport & "SYSTEM" command addition
*2022/02/05 V3.52 First public release of CP/M version


★追記 2022/01/07
 アセンブラのソース内で offset で宣言したシンボルがリンカーでエラーになる問題への対処として object ファイル内の offset 属性シンボルを EQU 属性に変換するツールを作りました。 object ファイルをこのツールで変換したものをリンカーに掛けると問題無く実行ファイルが作成されます。
 詳細は「Pic24MC68Kマイコン(その10)CP/Mアセンブラの謎」の記事を参照して下さい。


★追記 2022/02/13
 TeraTerm の TEK4010エミュレーション機能を使って表示した3Dグラフィック画面を貼っておきます。yanataka さんのツイート内容を参考にして試してみました。実行時間は2分34秒でした。

TeraTermでのTEK4010端末機能を使ったグラフィック表示例


★追記 2022/02/16 {
 TeraTermのTEK4010端末エミュレーションでグラフィック描画ができるようになったのでタートルグラフィックスで記述されたシェルピンスキーのギャスケットをBASICに移植してみました。自前のスタックでローカル変数を保存してリカーシブコールしています。

シェルピンスキーのギャスケット

 ULproject さんの VL-BASIC の説明サイトの「有名なフラクタル図形のシダを描く」のページで紹介されているフラクタル図形のシダを ehBASIC で描いてみました。

フラクタル図形 シダの葉
}

★追記 2022/02/18 {
 自己相似フラクタルの有名どころであるレヴィのC曲線を描いてみました。C曲線自体の記述部分は極めて単純ですね。相変わらず上下逆のままですw(bmpファイルも中身が上下逆だけどテクトロ端末等の影響なのかな?)

Levy C curve
}

★追記 2022/02/23 {
 再帰深度7の場合の出力をテキスト化してみました。TaraTerm の Terminal 設定画面で "Auto switch(VT<->TEK)"をチェックした状態にして下記のリンクからダウンロードしたテキストを表示すると C カーブが表示されます。
}

★追記 2022/02/24 {
 自己相似フラクタルでは最も有名と思われるドラゴンカーブを描いてみました。かなり前に ASCII 誌に掲載された BASIC プログラムを真似てドットインパクトプリンタで出力した記憶があります。

Dragon Curve
}


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。