PB-1000エミュレータ(Raspberry pi pico2版)をAIに作らせた 6月 09, 2026 リンクを取得 Facebook × Pinterest メール 他のアプリ ## 能書き ご存じ、カシオのポケコンの名機中の名機であるPB-1000ですが、1986年に発売された機種で、今年(2026年)でなんと発売40年が経過しています。 今でも動作する本体が存在しており、頻度や数は少ないもののオークションなどでも時々出回ることもありますが、やはり、長い目で見れば動作する個体は減っていくでしょう。 世の中にはレトロPCの復刻版(エミュレータベースのものが多い)などが発売されている機種もあるにはありますが、ポケコンという非常にマイナーなジャンルでは、復刻版をたとえ作ったとしても商業ベースで成立する可能性は低いといえます。 でも、このまま消えていってしまうのはさみしいものです。 ・・・という老害のノスタルジーを満たすためだけに、PB-1000のエミュレータをRaspberry Pi pico2ベースでAIに作らせてみました。 --- 単純にエミュレータということでいえば、PB-1000界隈では知らぬものがないと思われるPiotr PiatekさんのWindows版エミュレータがすでに存在しており、完成度も全く申し分のないものです。 [PB-1000 Emulator](https://www.pisi.com.pl/piotr433/pb1000ee.htm) --- そうなんですが・・・なんか・・・違うんですよね。やはり、Windowsの中で動く1アプリというのは・・・実機感がないというか。 MSXが令和にMSX0として復刻した際も、M5Stackベースのエミュレータではあるものの、それ自体が独立した実機だったので、なんというかすごく愛着があり、所有感もあり・・・ というわけで、実機っぽく動くものを作ってみたかったのです。 --- ## 何ができるか いちおう、基本的なPB-1000の通常動作は、ほぼ再現していると思います。 - キー入力はUSBキーボードを使えます(pico2に挿せるUSBホストアダプターが必要)。 - タッチキー(画面をタッチしてキー入力にできるPB-1000の特徴的な機能)も再現しています(タッチパネル機能のある液晶モジュールが必要)。 - MD-100相当の仮想FDDを内蔵しており、SDカードのディスクイメージをFDの代わりに使えます。 - RS-232CでのUART通信もできます。 - ROMは実機から吸い出したものを使うため、使い方としては基本的にPB-1000と同じように操作できます。 - BEEP音も(再現度は微妙ですが)出せます。 - 処理速度は実機より気持ち速いくらいの状態です(設定などで微調整の余地はあります)。 一方で、次の機能は実現されていません。 - カセットインターフェース - プリンタインターフェース ## 独自拡張機能 MSX0などを見ていて、やはり単純に再現するだけでなく、現代の技術もある程度使えたり、若干の機能拡張があったほうが楽しいかなと思いまして、いろいろ独自の機能拡張を行っています。 ### 1. ATARI9ピン(MSX互換)のジョイスティック入力をサポート ポケコンの醍醐味のひとつとして、ゲームソフトを楽しむことがあると思います。ゲームボーイ、NDS、PSP、Vitaなどがなかった時代は、ポケコンは持ち歩ける携帯ゲーム機としてのポテンシャルも兼ね備えていたものです。 ただ、心配になってしまうのが、ゲームに夢中になりすぎてキーを壊してしまわないか、ということです。全盛期なら、壊れても代替機を入手できるかもしれませんが、現状ではポケコンの実機を乱暴に扱うなんて、怖くてとてもできないですよね。エミュレータなら、キーボードも交換できるし、その点は心配ないところもありますが、どうせなら・・・ということで、ジョイスティックを繋げるようにしています。 といってもPB-1000にはもともとジョイスティックのサポートがあるわけではないので、ジョイスティックの入力をPB-1000のキーボードのキーにマッピングできるようにしています。 これで激しい操作のアクションゲームでも安心して楽しめます。 ### 2. RAM容量を100KB程度まで拡張 PB-1000は、発売当初から当時としては搭載可能なRAM容量が多く、標準では8KBですが、メモリモジュール(RP-32)を装着することで、最大40KBまで拡張ができます。これでも、当時としては十分ではあったのですが、PB-1000のCPUである日立のHD61700はメモリバンクシステムを持っており、理論上は64KBのメモリ空間を0~3の4つのバンクに切り替えることで、最大256KBのメモリ空間を持つことができます。もちろん、ROM、BIOSなどの領域も必要なので、全てをRAMにすることはできませんが、本エミュレータでは、比較的実現、操作がしやすいと思われるページ1(0x8000~0xFFFF)のページ2、ページ3に32KBずつのRAMを持たせることで、合計106KB程度のRAMを利用することができるようにしています。 ただ、PB-1000内部から直接このメモリにアクセスするには、マシン語での操作か、後述するサブルーチンフックを利用する必要があります。 ### 3. RAMプロファイル選択、保存機能 現在のRAMの内容をフォルダを分けてSDカードに保存する(RAMプロファイル)ことができ、かつそのSDカードに保存しているRAMを、起動時および起動中に切り替えたりできます。つまり、目的に応じてRAMを即座にそっくり入れ替えることができるのです。たとえば、あるゲームをメモリにロードした状態のRAMを保存しておけば、そのゲームをプレイしたくなったらそのRAMを読み込めばすぐに目的のゲームを起動できます。 ### 4. カラー表示対応 PB-1000はもともとモノクロ表示であり、色の情報をVRAM(相当の領域)に持っていません。ですが、次の2つの方法でカラー表示を行うことができます。 #### (1)前景色、背景色を指定して、その後の描画をその色に固定する このエミュレータではMMIO(メモリマップドI/O)を独自に拡張しており、0x0C23に前景色、0x0C24に背景色を渡すことができます。色は0~255の範囲で指定します(RGB332方式)。MMIO経由で色を渡した後の画面描画は、ここで指定した色で行われます。こちらは操作の簡便さを重視していて、スクロールやCLSなど全画面の再描画が走ると画面全体が最後に指定した前景色、背景色で書き直されてしまいますので、スクロールやCLSが起こらないようにプログラムを書く必要があります。 このあたりのサンプルや詳細は別途記事にしようと思います。 #### (2)カラーVRAMにピクセルデータを書き込む このエミュレータではPB-1000のメモリ空間とは独立したカラーVRAM領域を用意しています(192x64ドット分=12,288バイト)。このカラーVRAMにアクセスするためのMMIOが用意されており、1ドット単位で256色の色指定を行うことができます。ただ、BASICですと描画速度がかなり遅いですw これも、サンプルや詳細は別記事で書こうと思います。 ### 5. サブルーチンフック これが、中の人的にはこだわりの機能です。 PB-1000のメモリ空間には、ページ0(0x0000~0x7FFF)の中にかなりの範囲の未使用領域というのがあります。ここを単純にメモリとして使えるようにするというのも考えたのですが、ここを、BIOSのようにして使えないか?ということを思い立ちました。といっても、アセンブラでサブルーチンを新しく作るというのもなかなか手間ですし、いま現在出回っているIoTデバイスにアクセスしようとしても、PB-1000の基本機能だけで実現するのも無理があります。 そこで、エミュレータの機能として、特定のメモリアドレスにPCが到達(アセンブラのCAL命令やBASICのCALL文でそのアドレスを呼ぶなど)すると、任意のpico2側のC言語関数や、Pythonのコールバックメソッドが呼べるようにしました。 これによって、もともとのPB-1000の機能やBIOSだけでは実現が難しいI2Cデバイス(たとえば、温度センサーなど)へのアクセスを実現したり、既存のBIOSをコールした際に、前処理として全く別の処理を割り込ませることもできるようになります。このサブルーチンフックとPB-1000の間でのデータの受け渡しは、未使用領域の一部(256バイト)をワークエリア用のRAMとして実装しているので、このワークエリアを利用して実現できます。マシン語からのアクセスだけを念頭に置くなら、レジスタの値を使ってやり取りすることもできたのですが、サブルーチンフックをBASICからも使えるようにしたかったため、ワークエリア利用の方式を使えるようにしました。ちなみにコールバックされるPythonコードからPB-1000のレジスタにアクセスすることも可能なので、マシン語からサブルーチンフックを使う場合はレジスタ経由でのやり取りも可能です。 これまた、サンプルや詳細は別記事で紹介します。 --- エミュレータのコードやドキュメントは、GitHubで公開しています。自由にお試しください。 [PB-1000emu_pico2(GitHub)](https://github.com/MobileFF/PB-1000emu_pico2) 目下の課題としては、プリント基板がないことですね・・・中の人はユニバーサル基板で配線していますが、数が相当あるので、手作業で配線はかなり面倒です・・・なんとかしますのでお待ちください・・・ コメント
コメント
コメントを投稿