2015年03月28日 20:27

↑ここ、タイトルの「WentWayUp: WebLog」の部分にリンクを付けました。
押すと、ブログのTOPページ(http://wentwayup.tamaliver.jp/)に飛びます。ごく普通の挙動です。
ブログ開設当時、世のブログに付いてるあのリンクが嫌いだったんですよ。リンクっぽくないんでうっかりクリックしちゃって。
なのでデフォルトでは付いてるのをわざわざ消して、代わりに「▲ブログTOPへ▲」を付けました。
でも年月が経ってふと気づくと、どのサイトも上か左上にタイトルがあってクリックでTOPへ飛ぶ作りが当たり前で、自分自身その動きを期待するようになってました。
あとうっかりクリックしてウザい筆頭が「見た目よりクリック範囲の広い広告」に取って代わられて、ブログタイトルの誤クリックなんぞ気にならなくなったというのもあります。
そんなわけで、ブログタイトルをクリックするとTOPに飛ぶという普通の動作を実装することにしました。
「▲ブログTOPへ▲」の方は必要なくなったわけですが、あえて消す必要は無いかな…。使ってる人いるかもしれないし。
なお、これそのままリンクにしたら色が変わっちゃって、<a>タグに直接style指定といういきあたりばったりな方法で色を戻してます。
他にも色々HTML/CSSの構造は直したい所があるんでそのうち直すかもしれません。
2015年03月28日 13:04

ファミコン、Atari2600、GBAに続いて、ゲームボーイにも手を出してみた。
やっと最近の話になった。冒頭の画像ができたのが今年の2/11である。
GBは実機で動作させるのが簡単そうな気がするのが嬉しい点。
たぶんFlashROMを1個用意してカートリッジの線につなげばできると思う。
これがファミコンだと2個要るし、GBAだとなんだか特殊な回路が入ってるようなことを見た記憶がある。
CPUは80系ということで初めて触るCPUだった。
8080→8086→80x86なのでx86と同系統なのだが、x86は触ったことがあったがレジスタ名に多少面影を感じる程度であった。
新しいCPUのアセンブラを触るのは楽しいのでこれはこれでよい。
開発環境はググって見つけたGBDKというものを。
ルートに展開せよと書いてあるがどうせパスの日本語に非対応という事だろうといつもの場所に置いてみたが、どうもパスの指定の関係でルート直下でないと動かないようだ。
C言語コンパイラもついてるけど、やっぱりアセンブラだよねー。
アセンブラのサンプルコードも(1個だけ)ついてるので安心。
アセンブラの起動方法はなんだかんだで手間取ったが分かってみれば簡単だった。
..\bin\lcc -Wa-l -Wl-m -o temp.gb temp.s
ちょっと困ったことに、この開発環境でアセンブルすると先頭のヘッダあたりを自動で生成してくれるのだが、その中の割り込みハンドラ部分が使い方がよく分からない。
このようなことはよくある。
CPU自体の割り込みの扱いはそのCPUを使おうとしている時点で大抵理解しているし、分からなかったらいくらでも資料があるので調べればよいだけなのだが、ある特定の開発環境でだけ使われるコードなど知らないし、調べようにもその付属のドキュメントが不足していたらそれまでである。だいたい、CPUが使いたいのであって開発環境を使いたいわけでもないのに、それを調べなくてはいけないというのはなかなかやる気を殺がれるものである。
まあコードを追って一応使える程度には理解した。
GBの面白いところとして、全画面に任意の画像が「頑張れば」表示できるという点がある。
ファミコンのようにキャラクタ数が足りず明らかに不可能でもなく、
GBAのようにビットマップモードがあって容易に可能でもない。
GBの全画面を覆うには20*18=360キャラクタ必要。
しかしGBで背景面に一度に表示できるキャラクタ数は256個。普通には不可能。
だが、表示する256個のキャラクタは384個の内から2通りの選び方ができる。
これを、画面の中程で切り替えることで、全画面に任意の表示ができるのである。
それで全画面表示をしたのが冒頭の画像なのだが、ユニークタイル数を数えてみたら181。普通にも表示できた画像であった。
単純に減色した画像では芸がないと思って綺麗にベタ塗りにしたのが災いした。
なおGBカラーになると同時表示キャラクタ数が512個になるので全画面に別のキャラクタを表示することが容易に可能になる。その代わり色数の面で全画面任意とはいかなくなるのだが。
あと画像表示の前に試したハローワールド

と、7×7(8×8)ドットでは芸がないので5×7ドットのテキストを表示…してみようとしたが2文字で力尽きた。

あとエミュレータはGBAでも使っていたので何も考えずVisualBoyAdvanceを使ったが、どうもGBエミュレータではBGBなるものが再現度が高いようだ。
2015年03月24日 01:19

ファミコンとGBAに続き、Atari2600の開発を始めてみた。
…と思っていたのだが、Twitterのログやファイルの日付を見ると2011年5月あたり、GBAより前だった。やってすぐに書かないとこういうことになる。
Atari2600と聞いてもピンと来ない人もいるかもしれない、というか自分自身始める前はおぼろげに名前を聞いたことがあるかという程度だった。
日本では流行らなかったけれどアメリカの方ではファミコンの前世代機として一時代を築いた名機らしいのだが。
このAtari2600、当然(総合的な)性能はファミコンを大きく下回るわけだが、画面の描画方法が他のゲーム機には無い独特なもので、挑戦しがいのある機械である。
詳細な仕様については別に書こうかと思うが、ごく簡単にまとめると以下のようになる。 (4/13追記: 書いた→Atari2600詳細)
・画面解像度は横160ドット
・背景面は横4ドット単位でしか描けない
・スプライトは計5個
横8ドットの絵が描けるものが2個
横1ドットが3個
(スプライトは複製or拡大できるが、詳細は割愛)
縦は? と思うだろうが、ここがAtari2600最大のポイント。なんとVRAMを走査線1本分しか持っていないため、何もしなければ縦縞しか描けない。絵を作るには1ラインごとにVRAMを書き換える必要がある。
さらに走査線の描画中でもお構い無しにVRAMを書き換えることができて、スプライトの3倍複製モードで描画するそばから書き換えることで6キャラクタ分48ドットの任意の画像を表示する高等テクニックがある。(実際にはそれだけでは書き換え速度が足りないので裏レジスタを使うというさらにひとひねり必要。詳細は割愛)
そのテクニックを使って描いたのが冒頭の画像。
Atari2600のCPUはファミコンと同じ6502(正確にはその機能削減版の6507)なのでプログラムは楽であった。
なお開発環境はdasm、エミュレータはz26。
dasmでアセンブルするとなぜか出力ファイルの頭に謎の2バイトが付いてそれを消さないとz26で動かなかった。なんだかよく分からないがとりあえず備忘録的に書いておく。
あとつい最近またAtari2600をやりたくなって描いた絵を2枚。


プログラムもちょこちょこ変えているが外見はただ絵が変わっただけ。下の数字はエミュレータの機能。
はちゅねミクの絵で分かる人には分かると思うが、次はアニメーションさせたい。
2015年03月23日 02:04

ファミコンに続き、ゲームボーイアドバンス(以下GBA)の開発を始めてみた。3年前に。
Twitterのログやファイルの更新日時を見るに、2012年5/30~6/6くらいにやっていたようである。
なぜ今頃書くのかというと、そろそろネタを書きためているテキストファイルの見通しが悪くなってきたので整理するためだ。前回のCボタンユニットもそれである。
開発環境はdevkitProというもの。これが環境を整えるのがすごく楽だった。インストーラの指示に従ってあとは環境変数を書くだけ。
言語はとりあえずC言語。まあARMくらいの性能になると敢えてアセンブラを使う理由も薄いだろう。
ARMの命令セットは条件実行機能が面白そうだから使ってみたいんだけどね。
GBAではフルスクリーンの1枚絵を何の制限もなく表示できる。GBカラーやファミコンではできなかった芸当だ。

GBAの画面モードは色々あるが、これはGBAの最大色数である15bitカラー表示。背景数は1枚のみである。
使用した画像データはこちら。

GBAの色データはxBBBBBGGGGGRRRRRであるが、GIMPで出力する15bitカラーはxRRRRRGGGGGBBBBBしか出せず、RとBを入れ替えて書き出しているため、不気味な色になってしまった。上下反転はBMP画像の特徴。
もう1枚、こちらは256色インデックスカラー。このモードでは背景面が2枚持てる。

次はGIF画像を表示したり簡単な落ち物ゲームを作ろうかと思っていたようだが力尽きたようだ。
その後最近になって(14年8月~11月あたり)、1カートリッジプレイで無改造で実機で動作させることを目指してPICで通信実験などしていた。
そのうち再開したい。
2015年03月19日 01:56
「ニンテンドウ64のコントローラの特徴は?」と問えば十人が十人「3Dスティック」と答えるであろう。
アナログスティックを標準搭載したことでまさに「ゲームが変わる、ロクヨンが変える」を実感したものだ。
だが、3Dスティックの陰に隠れて重要な脇役がある。「Cボタンユニット」だ。
今日はCボタンユニットへの愛を語ろうと思う。
Cボタンユニットはただの4つのボタンでしかないのだが、配置の妙によってさまざまな使い方ができる。
よって4つのモノを選択するのに使用できる。
同様のことは十字キーでもできるだろうが、十字キーと違い斜め入力をしてしまう危険がないという利点がある。
またゲームキューブのABXYボタンでも可能だが、4つが整然と並んでいること、主となるABボタンが残せることが優っている。
例: ポケモンスタジアムのバトル中の技選択

ポケモンの4つの技を上下左右に対応付けることで、すべての技を1動作で選択することができる。
これにより、本編での十字キーでカーソルを動かしAで決定する形と異なり、画面上に選択肢を表示する必要がなくなる。1画面でポケモン対戦をするために相手の技選択を見せないことは必須事項である。
ゲームキューブのABXYボタンでも4つの選択は可能だが、並びが整然としていないため画面上の表示が不恰好になってしまうし、技の使用以外の動作がRやLなどの不自然なボタンに飛ばされてしまうだろう。
例: パイロットウィングスのカメラ

3Dスティックで自機を動かし、Cボタンユニットでカメラを動かせる。
十字キーでも同様の操作は可能だが、コントローラー左側には十字キーとLボタンしかないのに対し、右側にはCボタンユニットとRボタンに加えA・Bボタンがあるため、上位互換と言える。
コントローラーの左と真ん中を持つレフトポジションを使うソフトがほとんど存在しないことからその優位性は明白だ。
そして、必要な分だけ切り売りして自由な組み合わせで使える。

左右で回り込み
上下で寄り・引き
これは十字キーでも可能だが、斜めを押してしまう危険が無い分、上下と左右に別の動作を割り振るにはCボタンユニットの方が向いている。

上は視点変更
左右はカメラ操作
下はブレーキ

左下右で3つのアイテムを使用
上は視点変更および妖精の呼び出し
このような細かい分割もお手の物。
さらには、絶妙な配置によりA・Bボタンとも組み合わせることすら可能である。

A、下、右、左、上の5ボタンがこの順で音高に対応している。
Cボタンユニットが無ければこのオカリナ操作は生まれなかっただろう。
実際、のちのシリーズでも音楽を演奏するギミックは毎回のように入っているのだが、
風のタクトの風のタクトも、トワイライトプリンセスの遠吠えも、スカイウォードソードの琴も、皆オカリナのような自由演奏は不可能である。
(夢幻の砂時計の笛はまあ頑張れば演奏できなくもないかな…)
また64版ゼルダの移植版も、ゲームキューブは単純にA+Cスティックに対応させただけで操作しづらい上に音高の並び順が直感に反しており、3DS版では順にLRYXAと広範囲に散らばってしまっている

この作品では当時主流であった「6匹を見せ合い、相手を見た上でバトルに出す3匹を選ぶ」という対戦形式を公式に取り入れた。
このために、Cボタンユニットに加えA・Bボタンを合わせた6つのボタンを6匹のポケモンに割り当て、3匹の選択を行う。
ここでABとCボタンユニットがほぼ2×3の長方形に並んでいるため、順番が分かりやすい。
技の選択と同じく、ここでも相手に見せずに確実に選択することが必要になる。これもCボタンユニットにしかできない芸当だろう。
十字キーやアナログスティックで6方向を選ぶのはきちんと押せているか不安になる。GCのABXYLRでも可能だが並びが不自然である。
ポケモンスタジアムではオプションやメニューを開くのにC右や上が使われたり、
GBの操作でスタート・セレクトボタンをC左・下に割り振ることができる。
スマッシュブラザーズではCボタンはすべてジャンプに割り当てられている。
・6点で点字を打つのに便利そうだ。
アナログスティックを標準搭載したことでまさに「ゲームが変わる、ロクヨンが変える」を実感したものだ。
だが、3Dスティックの陰に隠れて重要な脇役がある。「Cボタンユニット」だ。
今日はCボタンユニットへの愛を語ろうと思う。
Cボタンユニットはただの4つのボタンでしかないのだが、配置の妙によってさまざまな使い方ができる。
単純4ボタン
まず第一に、Cボタンユニットは実体としてあくまで4つの別々のボタンである。よって4つのモノを選択するのに使用できる。
同様のことは十字キーでもできるだろうが、十字キーと違い斜め入力をしてしまう危険がないという利点がある。
またゲームキューブのABXYボタンでも可能だが、4つが整然と並んでいること、主となるABボタンが残せることが優っている。
例: ポケモンスタジアムのバトル中の技選択

ポケモンの4つの技を上下左右に対応付けることで、すべての技を1動作で選択することができる。
これにより、本編での十字キーでカーソルを動かしAで決定する形と異なり、画面上に選択肢を表示する必要がなくなる。1画面でポケモン対戦をするために相手の技選択を見せないことは必須事項である。
ゲームキューブのABXYボタンでも4つの選択は可能だが、並びが整然としていないため画面上の表示が不恰好になってしまうし、技の使用以外の動作がRやLなどの不自然なボタンに飛ばされてしまうだろう。
4方向指示
4つのボタンが正方形に並んでいるため、3Dスティックに次ぐ第2の方向入力として使える。その用途を示すように上下左右のマークも付いている。例: パイロットウィングスのカメラ

3Dスティックで自機を動かし、Cボタンユニットでカメラを動かせる。
十字キーでも同様の操作は可能だが、コントローラー左側には十字キーとLボタンしかないのに対し、右側にはCボタンユニットとRボタンに加えA・Bボタンがあるため、上位互換と言える。
コントローラーの左と真ん中を持つレフトポジションを使うソフトがほとんど存在しないことからその優位性は明白だ。
そして、必要な分だけ切り売りして自由な組み合わせで使える。
2方向指示×2
例: マリオ64のカメラ
左右で回り込み
上下で寄り・引き
これは十字キーでも可能だが、斜めを押してしまう危険が無い分、上下と左右に別の動作を割り振るにはCボタンユニットの方が向いている。
2方向指示+1+1
例: F-Zeroの操作
上は視点変更
左右はカメラ操作
下はブレーキ
3ボタン+1ボタン
例: ゼルダの伝説のフィールド上操作
左下右で3つのアイテムを使用
上は視点変更および妖精の呼び出し
このような細かい分割もお手の物。
さらには、絶妙な配置によりA・Bボタンとも組み合わせることすら可能である。
4ボタン+A
例: ゼルダの伝説のオカリナ(など楽器)操作
A、下、右、左、上の5ボタンがこの順で音高に対応している。
Cボタンユニットが無ければこのオカリナ操作は生まれなかっただろう。
実際、のちのシリーズでも音楽を演奏するギミックは毎回のように入っているのだが、
風のタクトの風のタクトも、トワイライトプリンセスの遠吠えも、スカイウォードソードの琴も、皆オカリナのような自由演奏は不可能である。
(夢幻の砂時計の笛はまあ頑張れば演奏できなくもないかな…)
また64版ゼルダの移植版も、ゲームキューブは単純にA+Cスティックに対応させただけで操作しづらい上に音高の並び順が直感に反しており、3DS版では順にLRYXAと広範囲に散らばってしまっている
4ボタン+A+B
例: ポケモンスタジアムのポケモン選択
この作品では当時主流であった「6匹を見せ合い、相手を見た上でバトルに出す3匹を選ぶ」という対戦形式を公式に取り入れた。
このために、Cボタンユニットに加えA・Bボタンを合わせた6つのボタンを6匹のポケモンに割り当て、3匹の選択を行う。
ここでABとCボタンユニットがほぼ2×3の長方形に並んでいるため、順番が分かりやすい。
技の選択と同じく、ここでも相手に見せずに確実に選択することが必要になる。これもCボタンユニットにしかできない芸当だろう。
十字キーやアナログスティックで6方向を選ぶのはきちんと押せているか不安になる。GCのABXYLRでも可能だが並びが不自然である。
その他
4つ使い切る必要もない。ポケモンスタジアムではオプションやメニューを開くのにC右や上が使われたり、
GBの操作でスタート・セレクトボタンをC左・下に割り振ることができる。
スマッシュブラザーズではCボタンはすべてジャンプに割り当てられている。
余談
・ストリートファイターが64に出てたら弱中強×パンチ・キックの6ボタンがAB+Cボタンユニットに綺麗に収まったろうに。・6点で点字を打つのに便利そうだ。