CP/KM web の紹介
2015年12月24日
CP/KM webは、ここから実行できます。
cpm.htmlにブラウザでアクセスすると、以下のように表示されます。
黒い画面が、80文字×24行の、ディスプレイです。 その下に、CPUの動作速度を示しています。最速で、2 MHzで動作します。 PCではほとんどの場合2 MHzで動作しますが、モバイル環境では少し遅くなるかもしれません。 その下、「Set File」のボタンは、ディスクイメージファイル及び、CP/Mファイルをセットする場合に使用します(後ほど説明します)。 「Help」は、ヘルプファイルを表示させるときに使います。
ディスプレイに表示されているとおり、この状態ではまだCP/Mが使用できません。CP/Mの実行には、別途ディスクイメージファイルを準備する必要があります。表示の通り、 http://www.rad51.net/projects/cpm/ を開き、そのページで指定されている方法でディスクイメージファイルを取得します。
なお、ここで得られるディスクイメージファイルは、 CpmtoolsGUI というツールで編集することが出来ます。CpmtoolsGUIをダウンロードした時に添付されているdiskdefsファイルが、そのまま使えます。
ディスクイメージファイルが取得できれば、"Set File"を押します。ファイル選択ダイアログになるので、取得したディスクイメージファイルを選択します。このファイルは、上記サイトからダウンロードしたZIPアーカイブそのままでも、解凍した約8M bytesのファイルでも、どちらでも構いません。次のような画面になるはずです。
この状態で、CP/M ver 2.2が起動しています。A, B, C, Dの4つの仮想ディスクドライブがあり、容量はそれぞれ1952K bytesです。ただし、Aドライブのうち8192 bytesは、CPM.SYSの読み込み用に使用されています。
別途用意したファイルを仮想ディスクに取り込みたい場合、上述のCpmtoolsGUIを利用することが出来ますが、CP/KM上で行なうことも出来ます。CCP(シェル: Console Command Processor)が実行中であることを確認して、"Set File"ボタンを押して下さい。ファイル選択ダイアログになるので、任意のファイルを選択します。ただしファイル名は、8+3規則に合致しているものを用いて下さい。
CP/Mを使用した後、ディスクイメージファイルを保存することも出来ます。"Save Disks"ボタンを押すと、ZIPアーカイブダウンロードの状態になります。このZIPアーカイブは、起動時にディスクイメージとして、"Set File"して利用することが可能です。
ここで実行されているCP/Mは、ver 2.2で、62k systemと呼ばれているものです。以下に、メモリーマップを示します。
PCとしては、以下のような概念図で構成されるものを使用しています。CPUは、Z80です。DisplayとKeyboardについては8255(パラレルI/Oインターフェース)の機能は使用しておらず、Z80 CPUとHTML5との間で直接やりとりすることで行なっています。従って、8255のうちこのエミュレーターで使用している機能は、Port C2のみです。Port C2はプルアップされており、リセット時はアドレス0x0000-0x7FFFの領域にROMが選択されるようになっています。ROM中のコードではBIOSを0xF200からの領域に構築し制御をBIOSに移します。CP/Mの実行中は、Port C2に0を出力することにより、0x0000-0x7FFFの領域にRAMを使用するような仕組みです。
もともと、このCP/KM webは、CP/MをケンケンさんのPIC32MXの1ボードコンピューター上や、自作のZ80マイコンボードで実行させるプロジェクトを遂行する途中で、副産物として出来たものです。このHTML5によるエミュレーターが完成したことで、このプロジェクトの成功が現実的になってきたように思っています。来年は、私の趣味の時間にとってCP/M年になりそうな気配です。
CP/KMを開発するにあたり、以下のページからライブラリーを取得したり、参考にしたりさせて頂いています。有用な情報やソフトウェアーの提供、どうも有り難うございます。
・ CP/M Main Page(John Elliott さん)
BIOSの構造などについて、詳しい解説があり、参考にさせて頂きました。
・ CP/Mコーナー(nekoさん)
CP/Mのディスク構造について、詳しく書かれています。CP/KMでも、同一のフォーマットを利用させて頂いています。
・ 6×8 ドット日本語フォント「k6x8」(門真 なむさん)
80x24文字のディスプレイ用のフォントとして、使わせて頂きました。
・ JSZip(Stuart Knightleyさん)
大容量(8M bytes)のファイルを快適に使用するために、このJavascriptによるZIPアーカイバーを使わせて頂いています。