バンダイ アルカディアのビデオ出力改造

www.youtube.com

 

バンダイの「アルカディア」にビデオ端子を付けてみました。元はRF出力しか搭載されていないので、今のTVでは映すことができません。

 

手順としては、本体を分解して、回路を追加して、外装にRCA端子を取り付けます。

 

関連

nicotakuya.hatenablog.com

Raspberry Pi PicoでDVI(HDMI)出力

前回の続き。

nicotakuya.hatenablog.com

 

f:id:nicotakuya:20220410134957j:plain

Raspberry Pi PicoでDVI(HDMI)出力を試してみました。上の写真はAdafruitが公開しているサンプル「hello_dvi」を実行中の様子です。

 

f:id:nicotakuya:20220410135348j:plain

使用した部品、「Adafruit DVIブレークアウトボード」です。スイッチサイエンスで330円(+送料)でした。

この他、「Raspberry Pi Pico用DVIアダプタ基板(990円)」という部品も使えます。商品説明が「HDMIっぽい」となってますが、HDMIです。

 

f:id:nicotakuya:20220410135510p:plain

説明文を元に書いた回路図。

VGA出力にくらべてシンプルです。Raspberry Pi公式もVGAじゃなくて、こっちを採用したほうが良かったのでは。

 

f:id:nicotakuya:20220410135556j:plain

完成。

 

f:id:nicotakuya:20220410135642j:plain

サンプルの「sprite_bounce」を実行中。

うちのディスプレイの仕様なのかもしれませんが、解像度が低い場合はこんな感じで額縁状態で表示されます。

 

f:id:nicotakuya:20220410135915j:plain

「moon」を実行中。

 

f:id:nicotakuya:20220410140030j:plain

「terminal」を実行中。

 

f:id:nicotakuya:20220410140119j:plain

「mandelbrot」を実行中。

f:id:nicotakuya:20220410135736j:plain

Shuichi TAKANOさんという方が開発したファミコンNESエミュレータ「pico-infones ver.0.1」を動かしてみました。試しに自作ファミコンゲームのROMを入れてみたら動きました。ドキュメントによると、対応するゲームパッドはBUFFALO BGC-FC801、SONY DUALSHOCK 4、SONY DualSenseの3種類とのこと。

以下のページでUF2ファイルとソースコードを公開されています。

GitHub - shuichitakano/pico-infones: infones for pico

 

f:id:nicotakuya:20220410233435j:plain

(追記)

バッファローのBSGP801を接続した場合、ボタンが複数反応してしまうという現象が発生していたのですが、次の方法で修正してみました。

まず「pico-infones-0.1」のソースをGitHubからダウンロードします。

「hid_app.cpp」の内の2箇所を変更。

・258行目「uint8_t axis[3];」→「uint8_t axis[2];」に変更。

・267行目「gp.axis[2] = rep->axis[2];」を削除。またはコメントアウト

これでZ軸が除外されて、十字ボタンのXY軸だけ読み取るようになります(たぶん)。

ターミナルを起動して「cd pico-infones-0.1」「mkdir build」「cd build」「cmake ..」「make」でビルドをやり直します。buildフォルダにpicones.uf2が作成されたら成功です。

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