samさんに割込式BIOSを調整して頂いてS1-CP/M80のBIOSが割込で動作するようになりました^^
フラグチェック式のポーリング版BIOSで101分かかっていたマンデルブロ集合のASCIIARTが4分3秒で完了できるようになりました。
CP/M80版 Microsoft MBASIC Rev. 5.11
割込式にすることで約25倍速くなったことになります。
ポーリング式は安定して動作していますが、今のところ割込式は少し不安定です。
しかし、この速度は魅力的・・・
とりあえす、ポーリング式BIOS版と割込式BIOS版の2種類を作って楽しみたいと思います^^
関連
View Comments
おお!すばらしい!
MZ-2500の6MHz動作と同等の速度が出ていますね!
さっそくうちのページに追加しようと思います。
M-BASICは5.11なんですか?5.21じゃなくて?
samがkabikenさんに提供したモトネタFDイメージに入れたものがたまたまそれでした。バージョンアップしますかねぇ?(^^;
掲載しました。
タイプアヘッドがあるかないか不明でしたので、とりあえず無しとしましたが、
問題ありましたらお知らせください。
ASCIIARTベンチマークのサイト拝見致しました。掲載どうもありがとうございます。
皆様はMBASIC VER5.22や5.21で確認されておられるようなので、大きな違いは無いと思いますが
次回Ver5.22でも確認してみたいと思います。
「タイプアヘッドあり/なし」とはどのようなものでしょうか?
キー入力の先行入力機能です。今のBIOS09の実装で先行入力は可能でした。S1の「システム」の機能によるものです。
やはりシステムコールお使いでしたか。それですとタイプアヘッドありですね。WEBは訂正しておきます。
これはOFFにできるんでしたっけ?
Web確認しておきました(^^;
0x41, 0x02 ;KBDINP
ですね。コンソール入力にはこれがぴったりだと思います。
で、samは先行入力がOFFにできるかわかりません。
ワーク領域になにか設定するとたぶん先行入力分をチャラにできたり
OFFになるのではと思っているのですが。
タイプアヘッドとはキーの先行入力の事で了解しました^^
POLKBDでもKBDINPでも先行入力は効いてしまうようですね。
初めは知らなかったので、BIOS09内にキー入力用のバッファを入れましたがS1内部で大きなキー入力バッファを持っているようなのでBIOS09内のバッファは全く不要のようでした・・・
オフにする方法は見つかりませんね^^
キーの先行入力をしない方法としてはたぶん
https://seesaawiki.jp/mb-s1/d/KB-Whttps://seesaawiki.jp/mb-s1/d/KB-W
にあるレジスタを使用するのではないでしょうか?
KBレジスタの機能(ライトモード)($FFE0)
のSSビット(bit6)を1→0とすると(Breakキーを除く)キー入力があっても
キー割込み(IRQ)が発生しなくなるらしいです。
→そうか、ゲームなどのキー入力の場合はこれをいじるんですね。
で、samはMANDELの結果には影響しないと予想してます・・。
実際に試すにはSSビットを0→1に戻す考慮が必要なことに注意ですね。
さもなくばおそらく永遠にキー入力ができなくなります。(^^;ゞ
SSビットを0にするとキー入力バッファの入力が一切なくなるようなので、キーコードからキャラクタコードに変換する部分も自前で実装する必要がありそうですね。
(ゲーム等ではキャラクタコードに変換せずにキーコードだけ使うような使い方だと思いますが・・)
今のS1-CP/M80のBIOSではインターバルタイマのような割込みは使っていないのでキー入力が無い場合、MANDELのベンチマークには影響無さそうですね