参考:社内勉強会の発表資料
(Chrome推奨。枠内をクリックしてから、左右キーでページ送りします)
(Chrome推奨。枠内をクリックしてから、左右キーでページ送りします)
ソフトウェア編
テキストと画像をまとめてファミコンで動かせるプレゼンROMカートリッジを作るためのプログラムを書いてみました。データの圧縮しやすさにもよりますが、少なくとも20〜30枚分くらいのデータは入るかと思います。
こんなことができます
- 各ご家庭に1台はあるファミコンでプレゼンができます。
- もちろん、使いなれたコントローラでページ送り操作ができます。
- 日本語フォント(漢字・かな・英数・記号)の表示に対応します。
- ページ内に任意の画像を配置できます。
こんなことはできません(いまのところ)
- ページ遷移のときの画面エフェクト(フェードアウト・インに固定)
- 1画面表示中のアニメーション効果
- 文字の強調(色の変更、点滅など)
- もんたメソッド的なもの
- 動画の埋め込み
- Webなど、ネットワークが必要なサービスへのアクセス
ツールはgithubからダウンロードできます。Apache 2.0 Licenseにしています(一部、流用させていただいたライブラリはパブリックドメイン相当です)。
実行にはJavaコンパイラ(J2SE)と、CC65というコンパイラが必須です。
実行にはJavaコンパイラ(J2SE)と、CC65というコンパイラが必須です。
ツールの使いかた
ほぼREADMEにある通りですが書いておきます。重要なとこを太字にしています。
- スライドに表示するテキスト(必須)を用意します。ファイル名は「0000.txt」から始まる連番です。1ファイル=1ページです。文字エンコードはUTF-8で、英数記号を含め、全ていわゆる全角文字で記述したファイルです。全角英数文字をずっと眺めていると頭が破裂します。適宜休憩を入れてください。1ファイルは、横32文字 × 縦28行です。
- タイトルや挿絵などの画像を用意します。そのページに画像を付けないのであれば不要です。PNG形式で横256×縦224ピクセルです。テキストを画像化したものに加算合成されます。つまり「黒」は透過色扱いです。ファミコンは8×8ピクセルで1ブロックなので、そこを意識して画像を作ると良いかもしれません(適当な画像データでも変換はしますが)。
- この状態でターミナルからmake.shを実行すると各種変換処理が実行され、cc65というフォルダの中にmain.nesというファイルが生成されます。
- main.nesファイルをてきとうなエミュレータで開けば動作確認ができるはずです。Iコンの左右ボタンでページ送り・戻しができます。
ROMの種類はマッパー1(MMC1)です。FlashROMを作成して書き込めば実機で動作させることができます。FlashROMカートリッジの作成と書き込みについては、前回の記事を参照してください。
制限事項
いわゆる仕様です。
- CHRROMは128KBまで使えるように作っていますが、PRGROMは16KBのみを使っています。あまりにページ数が多いとこちら側の制限でデータが入らないかも。PRGROMのバンク切り替えの方法がわかれば、もっと入るのですが、頓挫しています。RLEでそこそこ圧縮できているので、個人的にはあまり不満はないかな、と。
- 一画面に255種類より多いキャラクタパターンがあると各種データ生成に失敗します。埋め込む画像を小さくするなりページを分けるなりで対応してください。(RLEかどうかのフラグとして一種類を使っているので、256ではなく255です)。
描画フォントは「美咲フォント」を使用しています。罫線など一部の文字を除いて、7x7ピクセルに収まっているので、ファミコンでも漢字が比較的読みやすいです。PNG形式でのデータ提供があるので、ソフトウェア的にも扱いやすかったです。
ハードウェア編
注意:ハードウェアの改造は自己責任で行ってください。
無線コントローラ
プレゼンをファミコン付属の有線コントローラでやると、動き回って解説したりできませんね。ダイナミックなプレゼンテーションをするためには、ここは無線での操作にするべきでしょう。
というわけで、赤外線リモコンをニューファミコンのコントローラにしてみます。手順は以下のような感じです。
- てきとうな赤外線リモコンを入手します。今回使ったのは日本橋のデジットさんで売っていた100円のリモコンです。ハードオフとかでも適当なリモコンが売っています。実際に付近で使われている家電のリモコンでやると、いろいろと誤爆するのでオススメしません。
- 赤外線受信モジュールを入手します。よく秋月のこれを使っていますが、似たような仕様の部品で良いでしょう。
- 4021というICを入手します。ファミコンコントローラに搭載されているシフトレジスタICです。あまり扱ってるところがないかも…?
- 赤外線受信モジュールをお好きなマイコンにつないで、赤外線リモコンの信号を解析します。ArduinoのIRremoteというライブラリのサンプルを使用すると楽ができます。
- プレゼンに必要なのは左右ボタン程度ですが、念のため8ボタン分(4方向+スタート・セレクト・A・B)を割り当てました。
- リモコン信号を受信したらファミコンを操作したという信号を4021(ファミコンコントローラに搭載されているシフトレジスタIC)に送るだけ、という簡単なコードを適当なマイコンで実装したら完了です。気をつけるのは負論理(ビットが0 → 押されていると判定)なことくらいです。ここでもArduinoを使うと楽に出来るでしょう。
こんな感じです
仕組み自体は正規のコントローラと同じなので、プレゼン専用コントローラというわけでもありません。パズルやテーブルゲーム程度ならプレイできるかもしれません。
モバイル電源化
ファミコンがノートPCと決定的に違うもの、それは電源環境(バッテリー)です。コンセントがないと発表ができないのでは、プレゼン環境としては力不足です。というわけで、ニューファミコンをバッテリーで動作するようにしてみます。
- ACアダプタの端子付近にある、三端子レギュレータ(7805)を外します。
- 三端子レギュレータのあったところからUSBケーブルを生やします。5VとGNDをつなぎましょう。
注意:ハードウェアの改造は自己責任で行ってください。
0 件のコメント:
コメントを投稿