Raspberry Pi PicoでVGA出力

Raspberry Pi PicoのVGA出力(アナログRGB)を試してみました。VGA出力の回路図は「Hardware Design with RP2040」という公式のドキュメントで公開されています。

https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf

この中の「Chapter 3. VGA, SD Card & Audio Demo Board」と互換性のある回路が、Pimoroniという会社から「Pico VGA Demo Base」という名前で売られています。実売価格は2970円。、、、うーむ、ちょっと高い。

今回はVGA出力回路を自作する事で、これを買わずに済ませます。

 

f:id:nicotakuya:20220403013435j:plain

材料は次の通り。

・抵抗(5種類×3組)。

・D-subコネクタ(15pin)

・ピンソケット(1列80pinを切断)

・ユニバーサル基板(Cタイプ。ドリルで穴を空けました。)

Raspberry Pi Pico。テクノロジアで購入しました。

 

もしUSBホスト機能(キーボード接続など)を使う場合には次の部品を用意します。

・USBコネクタ

ショットキーバリア・ダイオード

・ポリスイッチ

 

f:id:nicotakuya:20220404015845p:plain

「Demo Board」を勝手にアレンジした回路図。この抵抗を並べただけのDA変換が面白いです。

RGB各5ビットなので、32×32×32=32768色という計算になります。オリジナルは499/1k/2k/4k/8k ohm抵抗を使っていますが、抵抗値を変更しています。このため、発色が微妙に違うかもしれません。

「VSYS」端子は1.8〜5.5Vの電圧を入れると、内部で3.3Vを作り出してくれるというDC/DCコンバータになっています。ショットキーバリア・ダイオードは逆流防止用として使っています。

Pico側のUSBポートにキーボード/ゲームパッド(要USBホストケーブル)が刺さっていた場合、「VBUS」端子から給電します。オリジナルはジャンパーピンで接続していますが、ポリスイッチで大電流で切断するようにアレンジしてます。

オリジナルはI2Sオーディオ出力(PCM5101A)とSDカードスロットが付いているのですが、今回は節約して付けません。

 

f:id:nicotakuya:20220403013537j:plain

f:id:nicotakuya:20220403013628j:plain

完成。

 

f:id:nicotakuya:20220404015115j:plain

公式のサンプルの中にVGA出力のデモ(scanvideo)があります。自分の場合はラズパイ4でソースをビルドしました。

https://github.com/raspberrypi/pico-playground

Picoにuf2ファイルを書き込みます。BOOTSELボタンを押してPicoをラズパイ4のUSBポートに接続すると、仮装ドライブとしてマウントされるので、uf2ファイルをドラッグ&ドロップします。

 

f:id:nicotakuya:20220404015507j:plain

「demo1」。ラズパイのマークが画面内を移動するデモです。

ちなみにこのVGAケーブルは10年以上放置してた物ですが、まさか今になって活躍するとは。

 

f:id:nicotakuya:20220404015557j:plain

「mandelbrot」。マンデルブロ集合のデモ。図形が果てしなく拡大されます。

 

f:id:nicotakuya:20220404015051j:plain
「hscroll_dma_tiles」。画面が横方向にスクロールするデモ。この左側に出てるドット絵って、権利的にアウトな気が、、、。

 

f:id:nicotakuya:20220403013709j:plain

「sprite_demo」。スプライトのデモ。Ebenさんの顔が動き回ります。

というわけで、難なくVGA出力に成功しました。PicoじゃないRaspberry Piには予めhdmiポートが付いていて、安価に画面表示することができます。そうなると、PicoでわざわざVGA出力することにどんな意味があるのか? 改めて問題になってくるかと思います。

VGA出力の使い道として、2つの例を紹介します。


youtu.be

VGA出力の例、その1。

液晶が故障したゲームボーイから信号を取り出して、TV出力するという装置。Element14の動画で、アンディ・ウエストさんという方が製作してました。ソースはGitHubに公開されているのですが、370行くらいで書かれていて驚きです。

 

www.raspberrypi.com

VGA出力の例、その2。

Picoで動く「DOOM」です。「DOOM」はオープンソース化されていて、もう珍しいゲームではありませんが、500円くらいのマイコンで動いてしまうのは技術的興味がそそられます。どういうわけか、GitHubにはuf2ファイルがなくて、ソースしか置いてありません。ラズパイ4でビルドを試みたのですが、エラーが出てうまくいきませんでした。まだバージョン0.1なので、今後改善されるかもしれません。

 

(2022/4/21追記) 無理やりビルドしてみましたが、この直後に画面が真っ暗になってしまいます。うまく動きません。あと、ディスプレイが非対応の解像度を使っているみたいです。

 

nicotakuya.hatenablog.com

日経ソフトウエア2022年5月号

f:id:nicotakuya:20220324074739j:plain

日経ソフトウエア2022年5月号で「PCエンジンで動くゲームを作ろう」の第三回目を書かせて頂きました。今回で完結です。

 

youtu.be

自作ゲームを実機で動かしている様子。

 

f:id:nicotakuya:20220324093225j:plain

PCエンジンの自作メモリカードの試作版。当初はこんな感じにピンソケットが付いてました。

 

f:id:nicotakuya:20220324093529j:plain

写真右がフラッシュメモリライターの試作版です。この時はメモリカードとピンヘッダ/ソケットで接続してました。手作業で配線してたので、めちゃくちゃです。

写真左が雑誌掲載版です。PCエンジン用コネクタを搭載することで、外見がスッキリしました。性能は試作版と同じです。PCエンジン用コネクタは雑誌に載った時にはもう売り切れてしまいました。

 

(2022/3/28追記)

f:id:nicotakuya:20220328090521p:plain

日経BP SHOPを使えば、バックナンバーの記事を部分的に読む事も可能です。価格は440円です。

 

バンダイ アルカディアのソフト開発

f:id:nicotakuya:20220310032951j:plain

バンダイの「アルカディア(1983年)」。その昔、自分が小学生だった頃に買ってしまったゲーム機です。

 

f:id:nicotakuya:20220311135324j:plain

当時、遊んだソフト。「ホッピーバグ」は簡単すぎ、「エスケープマン」は意味不明すぎでした。買った直後にファミコンが発売されてしまい、自分の心に深い傷を残しました。

 

ググった感じでは、Emerson Radio社が「Arcadia 2001(1982年)」というゲーム機を出していて、これをライセンス供給したのがアルカディアだそうです。その約4年前にInterton社が「VC 4000(1978年)」というゲーム機を出していて、これがArcadia 2001と搭載CPUが同じで、外観も似ています。なにかつながりがあるのか?

 

アルカディアエミュレータは「WinArcadia」がおすすめです。開発元のWebサイトはこちら。

amigan.yatho.com

すごい熱意にあふれるサイト。しかし、ファイルによっては注意が必要。「Games(games.rar)」というROMイメージの詰め合わせは、どう考えても違法なので、ダウンロードしないようにお願いします。

 

f:id:nicotakuya:20220414220336p:plain

エマーソンのサービスマニュアルより。勝手に色を付けました。

これが読めるのはありがたいです。抵抗の一本一本まで仕様が載っています。

 

f:id:nicotakuya:20220310133817p:plain

アルカディアエミュレータ「WinArcadia」の起動画面。「VC 4000」にも対応しています。

メニューから「Help→Coding Guide」を選択すると、ソフト開発用の資料が表示されます。これによると、開発には「VACS」というアセンブラを使うとのこと。

ググったら出てきました。

github.com

VACSの正式名は「Verschueren Assembler Construction Set」。最初の作者はA.C. Verschuerenさんという方で、その後、Dennis D. Spreenさんという方が移植しています。

「Dist¥Examples」フォルダにサンプルのソースが3つほど入っています。

たとえば、「helloworld.asm」をビルドしたいという場合は次のコマンドを実行します。(カレントディレクトリがExamplesの場合)

..¥asm32 helloworld.asm

そのままだと「Line Too Long(行が長すぎる)」というエラーが出てしまうのですが、改行コードに問題があるようです。テキストエディタで「helloworld.asm」「arcadia.h」を開いて、改行コードを「LF」→「CR+LF」に変換します。

なお、asm32.exeはそのままだとWindowsの保護が働いて「不明な発行元」となり、実行できません。実行できるように設定します。

ビルドに成功すると「helloworld.bin」というROMイメージが生成されます。

 

f:id:nicotakuya:20220310191649p:plain

「helloworld.bin」の実行結果。「HELLO WORLD」と表示されました。

文字がめりこんでいるのが気になるので、次のコードを追加します。

      lodi,r0      0EFh         ;;;Screen Start
      stra,r0      CRTCVPR      ;;;Vertical Offset

 

f:id:nicotakuya:20220311141052p:plain

ビルドをやり直して、再実行。

文字の位置が直りました。「0EFh」が水平方向のオフセットです。どの値が正しいのかよくわかりません。

 

f:id:nicotakuya:20220310191842p:plain

アルカディアはROMの領域が0x0000~0x0FFF番地と0x2000~0x2FFF番地に分かれているという特殊な仕様になっています。両方を合わせて、容量は8KB。

RAM容量は1KBってことになっていますが、CPUやUVI(Universal Video Interface)に使われる分を差し引くと、ほとんど残っていません。

アドレスバスがA0〜A14までなので、0x0000~0x7FFFのメモリ空間をアクセス可能ですが、そこまで使ったソフトって存在するのでしょうか。

 

f:id:nicotakuya:20220310133534p:plain

Amigan Softwareで公開しているサンプル「examples.rar」の「arcadia¥Trauner」フォルダの中に「Tetris.bin」というROMイメージがありました。

アルカディア版の「テトリス」です。作者はPeter Traunerさんという方。2003年の作品です。容量はわずか4KB。

ドキュメントが付属していませんが、起動時に「プライベートまたは利益なしの使用を許可」と表示されるので、フリーソフトだと思われます。合法的に遊べます。

 

f:id:nicotakuya:20220310133604p:plain

プレイ中の様子。2プレイのゲームのようです。

 

f:id:nicotakuya:20220414220255j:plain

(2022/04/14追記)

実機を分解してみると、中身がジャンパ線だらけでした。赤色のリード線でGNDにつないでいたり、アバウトな作りに感じます。

緑のリード線は「A14」です。これによって、カートリッジ内の0x4000~0x7FFF番地にアクセスできるという重要な端子。この配線はサービスマニュアル内の「WIRING DIAGRAM」には載ってない謎です。

 

(2022/04/17追記)

arcadia 2001 teardown」で検索して出る画像を見ると、A14が配線されていません。バンダイアルカディアと食い違います。Arcadia 2001の発売後、バンダイアルカディアは、より大きなROMを搭載できるように仕様変更したと考えられます。

 

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

プチコン11周年

あと2日で初代「(DSi Ware)プチコン」の発売から11周年です。

f:id:nicotakuya:20220307140307j:plain

ついでにプチコンシリーズの発売日を一望できるプチコン4用のプログラムを作ってみました。公開キーは4AENE8V3V。

実行するとこんな感じに発売からの年数が表示されます。1~2年おきに何らかのソフトを出しているところがエライです。

今、気が付きましたが「Pasocom Mini MZ-80C」を忘れてました。あとで入れておきます。

 

f:id:nicotakuya:20220307172354j:plain

久々に初代「プチコン」を触ってみましたが、使いにくすぎてビックリです。ファイルの転送がローカル通信だけ(SENDFILEとRECVFILEコマンド)。コマンドのサジェストもなし。メニュー画面もファイルセレクタもありません。LOAD/SAVE時はファイル名をいちいち打ち込む必要があります。それでも楽しく遊んでいましたが。

 

プチコンmkII」は前作から劇的にパワーアップして、処理速度が上がりました。QRコードにも対応しました。

プチコン3号」はサーバーにファイルをアップできるようになったり、さらに使い勝手が向上しました。立体視に対応したのも面白かったです。「高度サウンドユニット」とか超マニアックな追加コンテンツも発売されました。ナムコのIPは一部が発売されずに終わってしまったような気が。

プチコンBIG」は念願の物理キーボードに対応したり、3号とファイルを交換できたり、優秀なソフトでした。「プチコンBIG」のためにWii Uを買いましたが、原稿の依頼は来なかった。

「Pi STARTER」や「プチコン4」までくると、進化しすぎて不満点はありません。手軽にプログラミングができて、幸せな時代になったなと思います。

来年には「プチコン3号」と「プチコンBIG」がショップで購入できなくなります。

 

f:id:nicotakuya:20220308082600j:plain

(2022/3/8追記)

配信終了までの残り日数を追加。配信終了の日時が不明ですが、3/31と仮定してみました。

セガマーク3用ゲームをメガドライブで動かす

www.youtube.com

セガマーク3用カートリッジをメガドライブで動かしてみました。

「メガアダプタ(1989年)」がプレミア価格になっているので、作ってみました。

今回の回路はオリジナル要素は全くなくて、Webサイト「raphnet」で公開しているRaphael Assenatさんの「SMS to Megadrive/Genesis cartridge adaptor」を参考にさせて頂きました。

こちらです。

www.raphnet.net

 

f:id:nicotakuya:20220301020820j:plain

動作原理を説明します。

メガドライブには「68000」と「Z80」という2種類のCPUが搭載されています。通常はメインCPUが68000、サブCPUがZ80として機能します。

ただし、カードエッジコネクタの「M3」端子がLowの場合、Mark3モードで起動します。このMark3モードではメインCPUがZ80に切り替わって、データバスが8ビットになります。68000側の動作は止まっているのでしょうか? どうなっているのかは不明です。

このモードはメガアダプタでも使われています。メガドラは旧機種との互換性を保てるように設計されていたわけです。

 

f:id:nicotakuya:20220228001026j:plain

動作確認用にセガマーク3用のカートリッジを用意します。

自分の場合は、「ザ・プロ野球ペナントレース」を400円で購入しました。

 

f:id:nicotakuya:20220217131707j:plain

最も厄介なのが、3.175mmピッチのカードエッジコネクタ(44pin)の入手。自分はAliExpressで購入しました。

 

f:id:nicotakuya:20220228001245j:plain

アダプタの組み立て。

以前作ったメガドラ用のカートリッジ基板の使いまわしです。

 

f:id:nicotakuya:20220228001115j:plain

アダプタを挿し込んで電源オン。

問題なくセガマーク3のゲームが動きました。

 

f:id:nicotakuya:20220301014357p:plain

回路図を書いてみましたが、raphnetで公開されているものと大体同じです。

この回路、ADR21とADR23をプルアップして、ADR22をプルダウンしている部分。どういう働きをしているのか謎のままです。もし、68000が生きていたら、バスが衝突してしまって危険なのでは? と思って、最初はプルアップ/プルダウンを省略していたのですが、それだと起動してくれませんでした。

raphnetによると、この回路だと不完全で、Z80のスタックポインタを初期化したほうがいいみたいです。そのため、マイコンを追加する方法が紹介されています。

 

f:id:nicotakuya:20220301020038p:plain

MasterSystemとMark3のカードエッジコネクタのピンアサインはEnriさんのWebサイトの情報を参考にさせて頂きました。

Enri's Home PAGE

これによると、MasterSystemとMark3とで「MREQ」の端子番号が1つズレています。

海外版MasterSystemは実質的にはMark3ですが、ピンアサインが違いします。

そして、日本版MasterSystemと仕様が違っているという、複雑なことになっています。

 

f:id:nicotakuya:20220301073956j:plain

(追記) 全然安くないのが難点ですが、商品説明にメガドライブ本体で遊べると書いてありますので、同じことができるかも。

 

nicotakuya.hatenablog.com