黙っていられない性格

インターネットをさまようとたまにCP/MとかBASICとか、このブログと共通の話題を提供している人がいてちょっと嬉しくなる。以前ぼくが挑戦したのと同じ課題で苦労していたりするとついコメントしたくなるが、パズルを楽しんでいる人に横から口出しするのはヤボというか余計なお節介だと思ってなるべく自重している。自重してはいるものの知っていることをいわないのは結構ストレスがたまるので、ここでいってしまう。パズルを楽しんでいる人が検索してここへたどりつく可能性があるが、それは横から口出ししたことにはならない。

CP/Mのアプリケーションを自作のマイコンで動かすには、とりあえずBDOSの体裁を整える。これで8割ほどのアプリケーションが動作する。2割ほどは動作しない。MBASICやdBASEやいくつかのエディタはBDOSのほかにBIOSも呼び出している。こういうアプリケーションを動かすにはBIOSの体裁も整えてやる必要がある。肝腎なことはBIOSの機能を記述したコードではなくBIOSジャンプテーブルとその位置を特定する仕組み。

BIOSジャンプテーブルはアドレスxx00hからJMP命令を連続的に並べる。構造はCP/M Basic Input/Output Systemに説明されている。たぶんBOOT(ダミーでよい)、WBOOT、CONST、CONIN、CONOUTに対応すればほかは省略しても何とかなると思う。そして、アドレス0000hにBIOSジャンプテーブルの2番めのエントリ(WBOOT)へのJMP命令を置く。これでアプリケーションがBIOSジャンプテーブルの位置を知り、BIOSを呼び出すことができて、正しく動作する。あースッキリした。

ただし、アプリケーションとBDOSとBIOSをROMに焼くとなると少し問題がある。アドレス0000hはリセットベクタであり、リセットの直後ここはWBOOTではなくてBOOTへの分岐をしなくてはならない。RAMだとBOOTで起動したあとWBOOTへの分岐に書き換えることができるがROMではそうもいかない。WBOOTの働きをBOOTと同じにするのが一案。もっと良い方法を考えるのがパズルのお楽しみ。今日の投稿は完全に普通の人を置いてけぼりにしているな。

広告
カテゴリー: 世間話 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中