12種類に対応するパッド変換器の自作

こちらの続きです。

nicotakuya.hatenablog.com

 

f:id:nicotakuya:20210525033559j:plain

メモ

前回はメガドラ専用でしたが、それをPCエンジンとかX68000でも使えるように考えてみました。上の図はアイデア段階のメモです。PC/ゲーム機からはXE-1APとして認識する予定です。

 

f:id:nicotakuya:20210527181019p:plain

まだ構想段階

そこから欲が出てしまって、

セガマウスにも対応させて、さらにファミコンスーファミのコネクタも追加しました。機能選択用のディップスイッチを足して、液晶パネルを足して、、、収集が付かなくなってしまいました。

f:id:nicotakuya:20210527180203p:plain

PADコンバータの基板

基板にするとこんな感じ。XE-1APはスイッチでPCかメガドラかを切り替える仕様ですが、手間がかかりそうなのでコネクタを別にしました。一度に一台のハードにしか接続できません。

マイコンはいつものATmega328P。SCL/SDA端子には秋月製のAE-AQM1602Aという液晶を接続する予定です。

下にある「74HC157」はマイコンソフトの「XHE-3」相当の回路です。XHE-3は入手が難しく、大変なプレミア価格になっていますが、中に70円のICが1つ入っているだけです。

PCエンジンから来るSEL信号のタイミングがわからないので、ICで解決しています。ソフト的に解決できたら、ICが不要になるのですが。

 

f:id:nicotakuya:20210528143521p:plain

コネクタの位置を修正

コネクタが並ぶように修正したバージョン。

この段階で全11種類のパッドとして認識できるようになってます。

1: MD-DPAD(メガドラの3/6BUTTONゲームパッド)

2: MD-ANALOG(メガドラのXE-1AP)

3: MD-MOUSE(セガマウス)

4: PCE-DPAD(PCエンジンゲームパッド

5: PCE-ANALOG(PCエンジンのXE-1AP)

6: PCE-MOUSE(PCエンジンのマウス)

7: X68K-DPAD(X68000ゲームパッド

8: X68K-ANALOG(X68000のXE-1AP)

9: SFC-DPAD(スーファミゲームパッド

10: SFC-MOUSE(スーファミのマウス)

11: FC-DPAD(ファミコンの外部ゲームパッド

メガドラゲームパッドスーファミゲームパッド、マウスは過去に作ったので技術的には問題なし。

PCエンジン用XE-1APとX68000用XE-1APは内部の処理は全く同じです。

f:id:nicotakuya:20210124224759p:plain

雀皇登竜門

セガマウスの通信仕様はSGDKのreadmouse関数を読めばわかるはず。「雀皇登竜門」がセガマウス対応です。

PCエンジンマウスの通信仕様が一番の謎ですね。測定器で調べないといけません。

 

f:id:nicotakuya:20210528173358p:plain

アルカノイドに対応

最後にCN6の9番ピンをつないで、ファミコン用のアルカノイドコントローラとして認識できるようにしてみました。アナログスティックの傾きでバウスを動かすことになります。果たして快適に遊べるのか?

これで12種類目。

そのかわり、シリアルポートの受信ができなくなってしまいました。完全にArduino非対応です。

便利で使い勝手のいいものは世の中に一杯売ってますので、そうじゃないものを作りたいです。

f:id:nicotakuya:20210529140017j:plain

プレステ用のアナログスティック。駿河屋より

 デュアルショック2以外にも、こういうアナログスティックを接続すれば、サイバースティックっぽくなるかもしれません。

 

(2021/05/30追記)

f:id:nicotakuya:20210530080312j:plain

プレステパッド用コネクタ

プレステパッドの受け側となるコネクタを買ってみました。ピンが抜けているのですが、これは8番ピンで、使用しません。CADデータと8番ピンの位置が逆だ? と思ったら、CADのほうが間違ってました。

 

f:id:nicotakuya:20210530080220p:plain

プレステパッドのピンアサインを反転

というわけで、プレステパッドのピンアサインをひっくり返しました。何か月もミスに気が付かなかったです。

 

(2021/6/1)

f:id:nicotakuya:20210531181410p:plain

最終版

見直すたびにミスが出てきて終わらなかったのですが、今度こそ最終版です。

複数の機器を接続した時、VCCが逆流しないように対策してみました。もう5mmくらい基板を小さくできますが、1円も安くならないので、このままにします。

 

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

NES→ファミコンのカートリッジ変換基板

f:id:nicotakuya:20210525035626j:plain

NES用カートリッジをファミコンに変換

NES用カートリッジをファミコンに挿すには変換器(72pin→60pin変換)が必要です。

上の写真は、サイバーガジェット製のNESカートリッジコンバータです。実際はレトロフリーク向けの製品ですが、ファミコンでも問題なく使えます。

nicotakuya.hatenablog.com

 

f:id:nicotakuya:20210525231521p:plain

NESコンバータがプレミア化

しかしこの製品、もう生産を終了してしまったのか、公式の通販サイトにありません

元々の値段は2,000円くらいですが、今は10,000円くらいに跳ね上がってます。いくらなんでも値上がり過ぎ。

 

f:id:nicotakuya:20210228232812p:plain

72pin→60pin変換基板

そこで、自作しようと思って、カートリッジの変換基板を設計していたのですが、、、

 

ja.aliexpress.com

そうしたら、KING WORLDさんで普通に売ってるじゃないですか!?
価格は1,000円ちょっとです。送料を考えても安すぎる。なので、もう自作する必要がなくなってしまいました。

今度、これが生産を終了するようなことがあったら、計画を再開したいです。

アーサー・C・クラーク「未来のプロフィル」

f:id:nicotakuya:20210519042510j:plain

未来のプロフィル

偉大なSF作家にして科学者、アーサー・C・クラークさんの「未来のプロフィル」 。未来予想を扱ったエッセイです。原書は1958年、日本語版は1966年に出版されています。

執筆当時の1958年はスプートニクショックの翌年。アポロの月着陸の約11年前です。未来を語った本が世界中で求められていたんじゃないでしょうか。本の中では空飛ぶ車や通信衛星など様々な未来の技術が予想されています。

昔、これを読んだ時、空飛ぶ車は荒唐無稽すぎてスルーしましたが、2021年のCESにGMが空飛ぶ車のコンセプトモデルを公開しています。やっと時代が追い付いたのかも。

 

f:id:nicotakuya:20210524225748j:plain

未来の地図(アーサー・C・クラーク「未来のプロフィル」より)

本の最後には「未来の地図」という付録があり、未来の技術について簡単に書かれています。ただし、簡単に書かれすぎです。

たとえば、2000年の項目にあるのが「人工知能」「全地球図書館」。

人工知能」は2010年代からブレイクしたので、ほぼ予想どおり。ただ、クラークさんは2001年宇宙の旅」のHAL9000みたいなものを想定していたと思いますが、、、。

あと、「全地球図書館」は意味不明です。本編でこれについて言及しているページがありません。

 

手がかりを探すため、「未来のプロフィル」の原書「Profiles of the future」を読んでみました。昔だったら、原書を読むには大変な手間がかかりましたが、今だと一瞬で読むことができます。 

archive.org

Archive.orgにあるのは1958年版ではなく、1962年版とのこと。

ログインして「Borrow」ボタンを押すと、1時間だけ本を読むことができます。しかも無料。インターネットの図書館ですね。

全地球図書館」ってまさにコレでは?!

   

f:id:nicotakuya:20210525130415j:plain

原文との比較

原書によると、「人工知能」は「Artificial intelligence」。今現在の人工知能と同じつづりが使われていて驚きです。

全地球図書館」は「Global library(世界的な図書館)」でした。、、、結局、よくわからないです。クラークさんお得意の通信衛星と組み合わせた技術だったかもしれません。

 

ちなみに1970年代に登場と予想されていた「燃料電池」は原書だと「Efficient electric storage(効率的な電気貯蔵)」。翻訳の結果、的中率が上がってしまったパターンかもしれません。

あと、1980年代に登場と予想されていた「トランシーバーの普及」は原書だと「Personal radio(パーソナル無線)」です。

f:id:nicotakuya:20210525130928p:plain

簡易版年表(「Profiles of the future」)

書き方が2種類あって、原書の簡易版年表では「personal radio」じゃなくて、「personal radiophones」です。昔の電話は有線しかなかったので、わざわざ無線(radio)と書く必要があるわけですね。

本書に通信衛星を使った技術の一つとして出てくるのが「世界的通話システム」。その可能性については、次のように紹介しています。

まず考えられるのが、個人用受信機トランシーバーである。 だれもが、 腕時計同様に手がるに持ち歩きできる、 小型受信機だ。
(中略)

この装置一つだけでも、その原始的な祖先である電話がすでにやってのけたのと同じくらい大きく社会と経済形態を変貌させるかもしれない。

(中略)

 これが実現すれば、人が行方不明になるということがけしてなくなる。 現在のレーダー航路標識の原理に基づいたごく簡単位置方向探知装置が受信機と合わせ用いられ るようになるからである。そこで、危険や事故に遭遇したときは、 非常ボタンを一つ押すだけで救いを求めることができるようになるのだ。

(中略)

コミュニケーションの分野の進歩は、輸送の必要性を減少させるだろう。かつては何百万もの人間が都会の職場へ出かけるのに、毎日数時間も押し合いへし合いを演じなけ ればならなかったこと-そして職場は職場で遠隔通信の組織から疎外されると、しばしば手も足も出なくなったと聞かされても、われわれの孫たちはほとんど信じることさえできないだろう。

、、、トランシーバーというより、携帯電話ですね。1958年にこれを考えたのは凄いと思います。

通信技術の普及で交通量が減ると予想してたみたいですが、21世紀になっても渋滞もラッシュもありますし、まだ完全実現は難しいです。晩年のクラークさんはスリランカに移住したり、ワープロを導入したりと、いちはやくテレワークを実践していました。

 

なお、「未来の地図」には刺激的なフレーズが2100年まで書かれています。

あまり深読みすると、MMRノストラダムスみたいなことになるので危険です。クラークさん自身も「本気で受け取られると困る」と最初に断りを入れてます。

興味のある方は読んでみてはいかがでしょうか。

日経ソフトウエア2021年7月号

f:id:nicotakuya:20210523191607j:plain

日経ソフトウエア2021年7月号

次の記事を書かせて頂きました。

・特集「ゲームボーイで動くゲームを作る」第1回目。

・連載「ゲームプログラミング質問箱」第3回目。

f:id:nicotakuya:20210524000943p:plain

ゲームボーイ用のプログラムのイメージ

今回はボタン操作を紹介したところで終わりです。次回に続きます。

ゲームプログラミング質問箱は今回で最終回です。すごい不完全燃焼ですが、まあ仕方なし。

 

nicotakuya.hatenablog.com

WonderSwanのソフトをどう自作するか

こちらの続きです。

nicotakuya.hatenablog.com

WonderSwan用ソフトを自作する方法を検討します。希望する条件は以下の通りです。

・開発環境がフリーであること。

・対応OSがWindows10であること。

WonderWitchを使わないこと。

f:id:nicotakuya:20210522120707j:plain

WonderWitchは使いません

、、、さすがに都合良すぎかな、と思って検索したら、すぐに見つかりました。

 Sebastian Mihaiさんという方が、WonderSwan Color用のプログラム「Swan Driving」を自作されていました。車をボタンで操作するソフトです。

 

sebastianmihai.com

公開しているROMイメージをダウンロードして、エミュレータで実行するとソフトが動きます。ソースコードも公開しています。素晴らしいです。

これを参考にさせて頂こうと思います。

「Dev Kit」のリンク先から開発ツールもダウンロードすることができますが、今回はbatファイルやexeファイルは使わず、ソースファイルと画像データだけを使わせて頂きます。

 

続いて、開発環境を入手します。

アセンブラは「NASM(Netwide Assembler)」を使います。x86系のアセンブラです。

f:id:nicotakuya:20210524111503j:plain

NASMをWindows10で動かした場合

NASMはDOSプログラムなのでWindows10では動きません。そこで、エミュレータで動かすために16bit版を入手します。自分は以下のサイトから2005年公開のVersion 0.98.39をダウンロードしました。 ファイルは「NASM.EXE」だけ使います。もう、サポートが終了しているので、行儀の良くない使い方です。

sourceforge.net

 

「Swan Driving」をビルドします。

適当なフォルダを作って、ソースファイルを置きます。  

f:id:nicotakuya:20210522200813p:plain

ファイルの一覧
  • 「swandriving.asm」はアセンブラのソースファイルです。
  • WonderSwan.inc」はOrion_さん(http://onorisoft.free.fr/)という方が作られたインクルードファイルです。アドレス等が記述されています。
  • 「gfx」フォルダの中身は画像/パレットデータのバイナリファイルです。

さらに「NASM.EXE」と「MSDOS Player(msdos.exe)」をソースファイルと同じ階層に置きます。MSDOS Playerは16bit版DOSプログラムを動かすエミュレータです。DOSBoxでも実行可能だと思います。ここではexeファイルを同じ階層に置きましたが、パスを設定して、別のフォルダに置いたほうがスマートだと思います。

それから、テキストエディタでビルド用のバッチファイル(_build.bat)を作ります。内容は以下の通りです。

echo off

set SRCFILE=swandriving.asm
set ROMFILE=swandriving.wsc

msdos nasm -f bin -o %ROMFILE% %SRCFILE%

pause

 

アセンブラを呼び出してバイナリを生成します。

「_build.bat」を実行すると、コマンドプロンプトが立ち上がって、ビルドを行います。

ビルドに成功すると、「swandriving.wsc」というROMイメージが出来上がります。

f:id:nicotakuya:20210522195858p:plain

ROM情報

参考までに生成したROM情報です。ROMイメージの最後の16バイトにROM情報が記録されています。Sumが0x0000だったり、ROMのサイズが間違っていますが、問題なく動くようです。 

 

f:id:nicotakuya:20210522024756p:plain

WonderSwanエミュレータでの実行結果

 WonderSwanエミュレータで実行すると、上のような画面が動きます。

この技術を応用すれば、WonderSwan用ソフトを自作できるようになります。

ROMイメージをフラッシュメモリに書き込めば、実機でも動くのでは?、、、と期待しています。

 

f:id:nicotakuya:20210522200249p:plain

画像データの例1

f:id:nicotakuya:20210522202339p:plain

画像データの例2

ちなみに「gfx」フォルダには画像データと、パレットデータのバイナリファイルが格納されています。16色モードを使っています。

タイル1枚あたり8x8pixel x4bit=32Byte。

パレット1つあたり2Byte x16色=32Byteです。

将来的には変換ツールを自作したいです。

 

(2021/05/23追記)

以下のページにモノクロ版「Swan Driving」が公開されていましたので、こちらも動かしてみました。初代WonderSwan用プログラムです。

sebastianmihai.com

先ほどと同じく、ソースコードをダウンロードします。

次のようにビルド用のバッチファイルを作ります。ファイル名を変更するだけです。

 

echo off

set SRCFILE=swandrivingBW.asm
set ROMFILE=swandrivingBW.ws

msdos nasm -f bin -o %ROMFILE% %SRCFILE%

pause 

 

ただし、このままビルドして実行すると、画面が灰色のまま固まってしまいます

そこで、次のようにソースを修正してみました。

 

f:id:nicotakuya:20210523001050p:plain

機種のチェックを外す

機種のチェック処理を丸ごとコメントアウトしました。

カラー機の場合、ここで無限ループに落ちてしまうので、それを防ぎます。

 

f:id:nicotakuya:20210523001122p:plain

色の設定を修正

画面モード設定の処理で「VMODE_16C_CHK」を削除しました。あてずっぽで対応したので、間違っているかもしれません。

 

f:id:nicotakuya:20210523001013p:plain

モノクロ版Swan Driving

ビルドし直すと、このように動きました。タイル1枚あたり4階調の表現ができます。

WonderSwanのプログラムを作る場合、初代専用カラー専用両対応のうちどれかを選択しないといけません。

 

f:id:nicotakuya:20210523000931p:plain

画像データの例3

f:id:nicotakuya:20210523001221p:plain

画像データの例4

モノクロの場合、タイルは8x8pixel x2bit=16Byte。パレットは4bit(実質3bit) x4色 =2Byteです。