SHARP PC-1600KでCP/M80!その1

すでにTwitterでご報告した通り、PC-1600KでCP/M80が起動した!

f:id:PocketGriffon:20210426224444j:plain

 

本当に起動しただけのハリボテ状態なので、まだ発表するべき時期では無かったのかも知れないが、画面が出たのが嬉しくてツイートしてしまったw

そして今日は「出先に1MBのメモリを忘れてきた」という事情で作業が進まないため、ここまでの作業報告も含めてつらつらと情報を書いてみたい!

 

なぜCP/M80なのか!?

Bad Apple!!の開発検討している時に、メモリマップについて詳しく調べてみたら、どうもこのPC-1600K、オールRAMにする機能があるらしいと気がついた。

特にBad Apple!!を作る上ではオールRAMの必要がないので頭の片隅に置いてある程度だったが、64KBオールRAMに出来るんだったら何かできそうだなぁ…と感じていた。

 

まずぱっと思ったのが、CE-1600Fとの組み合わせでCP/M80を立ち上げる事だった。ただ、ディスクが片面64KBという記録容量なので、あんまり凝ったことは出来ないな…とも思った。

そしてCE-1600Fは標準では1セクタが512バイトであり、1セクタ128バイトのCP/M80とは少しだけ相性が良くない。その辺りの差をBIOSで埋めていけば出来なくはないけど…うむむ…

 

2014年8月、いきなり「CP/M80で遊んでた"あのゲーム"をやりたい!」という動機だけで、Z80エミュレータをスクラッチから書き、その上でCP/M80を動かした。当時の開発日記があり、それを見るとコードを0から書き始めて、6日後にはCP/M80が起動していた!若い頃の自分すげーw

この時の作業で、CP/M80の内部構造は相当なレベルで詳しくなっていたので、OSの移植については気持ち的な敷居が低い状態だった。

 

そんな事を心に秘めていたところに1MB増設メモリの話が立ち上がってきた。なんか頭の中でいろんなもののピースがパチっとハマった!これは…作るしか無いでしょう!!Bad Apple!!が終わったらCP/M80の移植をやってみよう…と心のなかで決めたw

 

CP/M80を移植するための具体的な検討

まず、CP/M80自体は64KBのオールRAM空間が必要というわけではない。世の中には20KB CP/Mなどもあるらしいので、起動させるだけならば32KBもメモリがあれば起動はさせられる。しかし何か有名なソフトを動かそうとした場合は、48KBくらいのメモリがないと厳しい現実がある。

せっかくなのでPC-1600Kの機能を最大限に使ってオールRAMのCP/Mを立ち上げてみよう。

ここで決まったのは「メモリは64KBオールRAMで動かす」という事。

 

次にPC-1600Kが持っているIOCSを使うかどうか。

実は64KBオールRAMとIOCSの使用というのは非常に相性が悪いのだ。PC-1600Kは標準では0000h〜7FFFhがROMの状態で動くようになっている。IOCSが呼び出されるたびにメモリの状態をROMに戻して呼び出すような仕組みが必要になる。MSXのインタースロットコールみたいなもん??

 

PC-1600Kのような巨大なシステムを持っているマシンを、全て乗っ取って独自にコードを書くのは容易では無い。出来なくないけど、ここは「しない選択」をしたいw 用意されてるものを積極的に利用して、まずは動かす事が大事だ。

ここでは「IOCSの機能を利用する」と決めた。

 

CP/M80は割り込みがなくても起動する。以前スクラッチから開発したCP/M80システムでは割り込みをサポートしていなかった。だが…今回はIOCSを使うと決めた流れがある。IOCSの中には割り込みで処理される事を大前提としてるサービスもあり、割り込み自体を止めるとPC-1600Kというシステム全体が破綻する可能性がある。停めてパッチを当てまくるくらいなら、割り込みはそのまま使う方向で、どうやったら動かせるかを検討した方が良い。

というわけで「割り込みを使う」と決めた。

 

そしてディスクについてはCE-1600Fの利用をすっぱり諦めた。1MBの増設メモリがあれば、そこにRAMディスクを作りファイルを書き込んでいく方が遥かに実装が楽ちん!最終的にはイメージを書き込めば自動実行…なんて芸当も出来るかも知れない!

ディスクは「RAMディスクのみの運用とする」とした。

 

表示について、標準では26桁×4行しか表示が出来ない。BIOSを拡張して表示フォントを変えたり仮想画面を用意して80桁x24行を実現したりも楽しそう。

だが…果たしてPC-1600Kの画面でワードマスターやTurbo Pascalなどを動かしたい人がいるのだろうか(^^;; 動いたらこっけいで楽しそう…は同意するけど、そこに達するまでの労力がすごそうw 私としてはM80やBDS Cが走る方が興味ある!

表示についてはIOCSのサービスを利用して、当面は何も考えないでおこう。

画面は「26桁x4行の標準サイズのみをサポート」とする。

 

構想としてはこんな感じ(^-^)

これから少しずつ実装について書いていこうと思う。

 

今日のところはこのへんで!

ではまた次回!(^o^)ノ