PIOS803 (MSXハードウェアエミュレートノートパソコン)

1992年

  <概要>
 これは大学入学時、買えと言われたポケコン購入費用をあてて代りに製作したものです。微積の授業の時使って、周囲に物議を醸しました。OSはmicrosoftのMSX-ROM-BASICが搭載されています。MSX初(で、最後・・)のA4ノートタイプで、バッテリー駆動で最大120分(バックライトon時)使用可能です。CPUは10MのZ80×3CPU構成であり、単純計算だと元のMSX(Z80/3.58MHz)の10倍近いハードウェア演算リソースを持っている(とも言えます)。またリモートデバッガをつなげるためにRS232Cインタフェースを搭載しています。全RAMは96KBでした。



<構成>  かなりイレギュラーな構成を取っています。これだけバスに手を加えるのは他にはICEぐらいでしょう。
始めから、MSXBASICはMSXに搭載されているものをコピーする予定でしたが、ノートタイプにするに際して、ジャンクの液晶を使ったりだとか、キーボードの配置が違うだとか、その他もろもろの違いがあり、いわゆる今で言う、”ドライバ”を全て変更する必要がありました。始めのうちはMSXのROMの解析を始め、フック番地の資料などと共に、ドライバ修正を試みましたが、なんせ貧弱な開発環境の中、逆アセンブラもなく、さらに256kbitのROMにシステムを収めるために、MSX-BASICのROMの中身はスーパースパゲッティ状態であることがわかり、早々解析をあきらめ、物量戦術の3CPU構成で”ハードウェアエミュレーション方式”で作ることにしました。


<中身>
3CPUのわけですが、左の写真のうち、一番右の基板がMSX-BASICボードとなっています。ここに載っているROMはMSXのROMをそのままコピーしたものです。このROMのプログラムは、計算やメモリアクセスを行ってるうちはなんら問題なく動きますが、I/Oアクセスを行った場合、この機器では元祖MSXと構成が全く異なるので問題が生じます。そこで、BASICボードで/IORQ信号が発生したとき、無条件に/WAITを入れてしまいます。/WAITで止めている間に、写真中央の基板のI/Oコントロールユニットで、I/Oアクセスされたデータ内容に従って、オリジナルのI/Oを動かし、結果を返すようなことを行っています。あくまで、BASICボード側からは、MSX仕様でI/Oを動かしているように見えますが、それをうまくごまかしてやっています。画面表示の例では、MSX仕様ではCRTC TMS9918を使用した、256*192ドットですが、ここでは480*64ドットのLCDに、240*64*2画面というように変換しています。 (なお、一番左の基板はLCDコントロール用です。これにもZ80を使用しています。)  
<苦労した点>
 Z80を本格的に使ったのはこれが始めてで、これを作る前段階として、ROMライタやバイナリエディタ、ROMイレーサーを作る作業があったため、当時としてはかなり大掛かりな”プロジェクト”でした。(ROMライタとROMイレーサーを両方作るのは難儀なもので、はたしてどっちが動いているのか動いていないのか確認ができない、ニワトリと卵な関係にあります)結局、4月過ぎから始めて、夏休み頃までかかって仕上げました。ただそのころからちょうど秋葉の部品店でのバイトが始まり、部品が安く手に入ったり、ジャンク情報が早く入手できました。
<これまためずらしい?MSXスロットに刺すROMライタ>

ROMライタは、16k〜1M(P-ROMピン配置も対応)EP-ROMに対応し、(←メインRAM256kのMSXで1MROM焼くことがあるのか今考えると明らかにオーバースペックですが@@)12.5,21,25Vの書きこみ電圧を選べました。ただし書きこみ方式が旧来のもの(50msec単発プログラムパルス方式)であり、また3.58M-Z80で動くインタプリタBASICの制御ソフトのため、256kのROMをフルに書きこむ場合は4時間かかり、ROMイレースの時間も考えると半日かかってしまいました。このため、デバッグ時は間違えたところをNOP(00h)に上書き、その先のまだ使ってないところにプログラムを書きこむと言ったことを日常茶飯事にしていました。
(ROMはイレース状態がFFであり、書きこむと00になります。00への上書きは可能なので、3E(LD A,xx)→00(NOP)などはROMイレースせずに、上書き可能です。)

ROMライタ拡大図 端に見える丸ピンソケットがROMを刺すところです。テキスツールなんて高いもの、知ってはいましたが使えません。
ROMイレーサです。これは、乾電池で動く小型蛍光灯のインバータ部分を取りはずし、555で20分のタイマーを作り、ケースに入れただけのものです。蛍光灯部分は4Wの殺菌灯です。殺菌灯はだいたい1本1000円位で買えますので、乾電池蛍光灯のジャンクをどこかで1000円くらいで見つけてくれば、全部で2000円台でROMイレーサは作れます。(ただ単に、15Wの殺菌灯を蛍光スタンドにつけて使ってる人を見たこともあるけれど・・あれはあぶないです>目に。このイレーサーも、ちゃんとケースの蓋が開けられると消灯するようにしてます)

電源部を高効率化した際の写真。マキシムのチョッパコントローラと、吟味した超低RDSパワーMOSFETの採用で、電源効率がほぼ90%になりました。また、外付け充電器で120分の急速充電が可能になりました。

なお、この後にソフトの更新もしています。当初は、プログラムのセーブが出来なかったのですが、それをできるように変えました。BASICボードのMSX-ROM BASICROMは"MSX1"で、フロッピーディスクドライブが標準でついていないため、プログラムのセーブはカセットテープでした。このため、プログラムのロード/セーブを行うためには、BASICボードから出てくるカセットテープ制御信号、データをI/Oコントロールユニットで解析してセーブしたりする必要があったのですが、それが技術的に問題があり、以下のようなことを行ってプログラムのロード/セーブを実現しました。

ロード:キーボード上であるキーを押します。このキーはBASICボードへは情報が伝わらず、コントロール側だけで使えるもので、このキーが押されたとたん、コントロール側は、プログラムセーブ領域からプログラムをテキスト形式でよみだし、BASICボードへは、あたかもキーからプログラム入力をしているように返します。(このとき、画面上ではキーを叩いていなくても、勝手にプログラム入力がされて行くように見えます。)

セーブ:LLIST命令を実行します。コントロール側では、BASICボードからプリンタ向けに出力されたテキスト形式のプログラム内容をキャプチャしてセーブします。

まったく、怪しさ大爆発状態ですが、それよりなによりこの部分を新しく作り込むのが大変でした。なんせハンドアセンブルで作ったものに後から変更を加えるとなると・・・こんな経験もあり、その後はプログラムを書く際にも独自のツールを使ってスマートに作ることを考え出すことになります。


<設計データの流用>

端から端までイレギュラーなところが多いのであまり流用できませんが、秋月のジャンクLCD(64*480DOT:今はなし)の制御ハード部分は流用できるかもしれません。これは、16bit入力のPISO、クロック同期シリアルI/O回路ですが、この頃はまだ"74シリーズ技巧の組み合わせ方式"が抜けきれていないので、これまた解りにくい、回路です。自分で今見てもどう動くのかわかりません。

回路図(ただし手書きできたない)
タイミング図と使用法(同上)



戻る