稼動中の全景。
部品面。基板サイズはハガキより一回り小さいくらいです。。主な部品はH8/3052ボード、RAM628512BLP−5、ザイリンクスのCPLD XC95108です。
半田面。ほとんどの配線はCPUバス−CPLD間とRAM−CPLD間です。
液晶画面のアップ。縦64ドットってのはちょっとキツイですね。萌えゲー作るのは大変かも(^^;;;
※ご注意
・図ではCPLD用のパスコンが一箇所に5つまとめて書かれていますが、実際にはVCCINT、VCCIO端子の間近につなぎます。 |
※ これと同じ回路をつくってみたいという方、製作は各自の責任において行ってください。
回路図どおりにひたすら配線します。配線量は百数十本程度で、休日1日かければできると思います。
CPLDのPLCC84ピンソケットは、足の並びが一見不規則なので間違わないように気をつけましょう。慣れない人は「PLCCソケットを裏から見たときのピン番号の図」みたいなものを作っておくとよいかもしれません。
電子工作の基本ですが、電源を入れる前に、CPUボードやRAM、CPLDをソケットに挿さずに目視やテスターなどで間違った配線をしていないか、隣り合うピンなどがショートしていないか十分チェックします。
配線ミス等がなければCPUボード、RAM、CPLDを挿し(まだ液晶モジュールはつながない)、CPLDプログラム用JTAGケーブルをつないで電源を入れます。そしてテスターで5V電源がちゃんと出ているか確認します。
5Vが問題ないようであればパソコンでXilinx WebPackを実行し、CPLDを焼きます。Xilinx WebPackの使い方について、ここで詳しく解説する余裕はないので、各自で調べてください。
焼いたあと、オシロスコープを持っている人は、液晶モジュール接続用端子のCP1、CP2、M、FRMからちゃんとパルスが出ているか調べます。これらのパルスが出ていない状態で液晶モジュールをつなぐと、液晶が電気分解して永久破壊に到るおそれがあります。
上記が問題なければ液晶モジュールをつないで電源を入れます。うまく動いていればそのときたまたまRAM上にあったデータが液晶に表示されます。
なにも出ない場合即電源を切ります。そして液晶モジュールの裏側のコントラスト調整ボリュームを適当に回して再度電源を入れて見ます。ボリュームをどの位置にしても全く何も出ない場合は配線が間違っているか、またはCPLDを焼く手順等が間違っているので再度チェックします。
(たまたまRAMの内容がオール”0”だった、という可能性も皆無ではありませんが、私の今までの経験からするとそういうことは起こったためしがないです。628512は電源投入時ほぼランダムに”1”と”0”が入り混じったパターンになります)
次に「超ミニBASIC for H8/3048」に同梱されている暫定版3052用インタプリタ(cmb3052.mot)をH8/3052の内蔵ROMに焼いたあと、CPUモードを6にして以下のプログラムを実行します。うまく動いていれば画面全体が黒いドットで埋め尽くされます。
10 POKE &P1DDR,$FF:POKE &P2DDR,$FF 'ADDRESS BUS 20 POKE &P4PCR,$FF ' PULL-UP ON 30 POKE &P5DDR,$FF ' ADDRESS BUS 40 POKE &P6DDR,$FF ' OUTPUT 50 POKE &P8DDR,$FF ' OUTPUT (USE CS) 60 POKE &PADDR,$FF ' OUTPUT 70 POKE &PBDDR,$FF ' OUTPUT 80 POKE &WCER,$0 ' DON'T USE WSC 90 FOR I=$200000 TO $2007FF ' LCD RAM ADDR 100 POKE I,$FF ' FILL BLACK (BIT='1':BLACK) 110 NEXT |
とりあえずサンプルデータを表示するため、240×64ドットのBMPファイルをPOKE文スクリプトに変換するツールをDelphiで作りました。
こんなプログラムを吐いてくれます。もちろん行番号をつけることも可能です。
POKE $200000,$55,$55,$55,$55,$55,$55,$5D,$55,$56,$00 POKE $20000A,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 POKE $200014,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 POKE $200020,$AA,$AA,$AA,$AA,$AA,$BA,$AA,$AA,$AA,$00 POKE $20002A,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 POKE $200034,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 POKE $200040,$55,$55,$55,$55,$55,$55,$5D,$55,$55,$00 POKE $20004A,$00,$00,$00,$00,$00,$00,$00,$0F,$FF,$FF POKE $200054,$FF,$F0,$00,$00,$00,$00,$00,$00,$00,$00
(中略) POKE $2007F4,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 |
とりあえずの目標として、これを発展させてBASICが使えて、グラフィックも描ける「プログラム電卓」のようなものを目指そうと思います。あとはキーボードとストレージをつければ・・・
(できれば「PDA」にしたいところなんですが、バッテリーとかいろいろ大変そうなので・・・)
よく考えると、H8/3052ってのはX68000に匹敵する(ヘタすると凌駕する)程度のCPUパワーがあるわけで、そんなもんが個人で自作できるなんてすごい時代になったもんです。
やるべきことを列挙すると
キーボードはタクトスイッチを使った、テンキー+α程度のオリジナルキー配置のキーボードを考えています。あまりキーが多いとデカくなるし配線も大変です。アルファベットなども根性でそのキーボードから入力します。
PS/2キーボードをつなぐことも考えたのですが、デカくなるし、それにH8にPS/2キーボードをつなぐ、ってのは他にやっている人がいるので(有名なところではH8/OSの三岩さんなど)、同じことをやるのは芸がないと思います。
まずは手始めにシリアルEEPROM 24C1024を付けようと思います。容量は128Kバイトですが、「プログラム電卓」には十分な容量だと思います。将来的にはマルチメディアカードなどにも対応したいと思います。
「超ミニBASIC」にグラフィック関連の命令を追加し、またパソコンをつながなくても自前のキーボードでプログラムの入力・編集ができるようにします。