ファミコンの仕様③ - テクニック編

乗算と除算
つい最近までコンピュータで乗算と除算をするのが大変だったなんて意外。さらにファミコンのCPUには乗算・除算の命令自体がないそうだ。そこで「シフト演算」なるものをつかうらしい。

シフト演算とは、ビットを左右にずらして(シフトして)「2乗」や「-2乗」を行うことみたい。そしてこの演算は高速が強味らしい。くわしくはこちら→シフト演算

シフト演算と加算を組み合わせることで「3倍」や「5倍」といった累乗倍以外の計算もできる。

 1倍:元の値
 2倍:シフト演算による2倍
 3倍:シフト演算による2倍 + 元の値
 4倍:シフト演算による4倍
 5倍:シフト演算による4倍 + 元の値
 6倍:シフト演算による2倍 + シフト演算による4倍
 7倍:シフト演算による8倍 ー 元の値
 8倍:シフト演算による8倍


その他に、あらかじめ出した結果を「テーブル」状に保存する方法もあるらしい。この方法ならば結果を参照するだけなので高速処理が可能。

「ドルアーガの塔」の迷路生成法
「ドルアーガの塔」は迷路情報のデータとして持たず、ステージ数を種とした「乱数」つかって生成しているらしい。毎回おなじ形の迷路になるのは「擬似乱数」だからだそうだ。以下のようなアルゴリズムで迷路を生成している。

①ステージ内に均等にならんだ「柱」を順番に選ぶ。
②0から3の乱数をつかい「壁」をつくる。「0→上」「1→右」「2→下」「3→左」
③もし「外壁」か「他の壁とすでに接触している柱」に接触したら①にもどる。それ以外は④へ。
④0から2の乱数をつかい、「0」なら「壁」をのばした進行方向左へ、「1」なら直進、「2」なら進行方向右へ、さらに壁を伸ばす。

これを「壁」と接触していない「柱」がなくなるまで繰り返す。

自動的に迷路を生成する方法の参考はこちら→自動生成迷路


ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー)
松浦 健一郎 司 ゆき
技術評論社
売り上げランキング: 256562

ファミコンの仕様② - プログラミング編

ゲームは60分の1秒を周期にして動く
たいていのゲームは60分の1秒ごとに一定の処理を繰り返している。なぜ60分の1秒かといえば、その理由はテレビの画面更新周期が60分の1秒だからだ。

テレビは画面の左上から右へ水平方向に画面の表示を更新していき、右上の端までいくと左端にもどりすこし下にさがってまた右へむかって画面を更新していく。それを繰り返し右下に到達し画面全体を更新するまでの時間が60分の1秒というわけだ。ゲームはその周期に合わせて処理をしている。合わせないと画面の乱れなどが生じてしまう。この周期を「フレームレート」という。

ゲームプログラムの処理の流れ
たとえばシューティングゲームの場合、以下のような処理を60分の1秒周期でループする。


  残機数を3にする
  スコアを0にする

    A.
    自機を出現させる
    敵機を出現させる

    B. 自機の処理
    コントローラの入力を読み取る
    入力にしたがって自機を移動させる(座標を変更する)
    自機が画面外に出たら:
      自機が画面内にもどるように座標を調整する
    ボタンを押したら:
      新しい弾を出現させる
    自機が弾に当たったら(当たり判定処理):
      自機を消す
      残機数を減らす
      残機数が0でなければ:
        A. にもどる
      残機数が0ならば:
        C. にジャンプ

    敵の処理(すべての敵について行う)
    敵を自機に近づく方向に動かす
    敵が弾に当たったら(当たり判定処理):
      スコアを加算する
      敵を消す
      弾を消す
      新しい敵をランダムな位置に出現させる
    敵が画面外に出たら:
      敵を消す
      新しい敵をランダムな位置に出現させる

    弾の処理(すべての弾について行う)
    弾を発射された方向に動かす
    弾が画面外に出たら:
      弾を消す

    スクロールの処理
    スクロールの位置を更新する
    最終画面に到達したら:
      D. にジャンプ

    画面の更新処理
    VBlankを待つ
    VBlankを検出したら:
      スプライトを更新する
      BGを更新する
      画面をスクロールさせる
    B. に戻って繰り返す

    C.
    ゲームオーバー画面を表示する
    もう一度プレイする場合は最初に戻る

    D.
    ゲームクリア画面を表示する
    もう一度プレイする場合は最初に戻る


ブラウン管テレビの場合、電子ビームをブラウン管表面に当てることで画面を発光させる。左上が画面に電子ビームを当てていき右下に到達して画面全体が更新されたあと、電子ビームを右下から左上に移動させる。このときわずかに時間がかかる。これを「垂直帰線期間」といい、ファミコンのプログラミングでは「VBlank」ともいう。

ファミコンのプログラムはアセンブリ言語で書かれている。当時、マシンもコンパイラも性能が充分ではなく、高級言語よりもアセンブリ言語でゲーム開発をしたほうがファミコンの限られた性能を最大限に引き出すことができた。

ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー)
松浦 健一郎 司 ゆき
技術評論社
売り上げランキング: 256562

ファミコンの仕様① - ハードウェア編

「ファミコンの仕様を知りたい!」と思ってたところにこんな本と出会った。

ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー)
松浦 健一郎 司 ゆき
技術評論社
売り上げランキング: 256562


CPU
ファミコンのCPUは米モステクノロジー社の「6502」(シンプルな機能で低価格なCPU)を使っている。さらにゲームで使わない機能を削りそこにサウンド機能を追加したカスタム仕様。8bit1.79MHz(現在のCPUの32bit3GHzと比べると6000倍程度の差がある)。

グラフィックス
ファミコン内部にはふたつのLSIが搭載されている。ひとつは上記の「6502」で「演算」と「サウンド」を担当している。もうひとつの「PPU(Picture Processing Unit)」はグラフィックスを担当している。

ファミコンのグラフィックス機能は「スプライト」と「BG」から構成されている。

「スプライト」はキャラクタを表示する機能。CPUが座標や属性といったわずかな情報を示すだけでPPUがスプライトを画面に表示する。CPUに負担をかけない仕組み。欠点は表示できるスプライトの数に制限があること。8×8ピクセルのスプライトを最大64個まで表示できる。ファミコンのキャラクタはスプライトを四つ使って16×16ピクセルで表現されているので最大16人まで表示できる。さらに水平方向にも制限があり8×8ピクセルのスプライトを最大8個までしか並べられない。16×16ピクセルのキャラクタでは最大4人のキャラクタまでは表示できる。「ドラクエ」でたまにキャラクタが「ちらつく」のは高速で表示・非表示くり返してキャラクタが消えてしまうのを防いでいるため。

「BG」はbackground、背景を表示する。画像を格子状にならべ画面全体を滑らかにスクロールさせる。これもCPUは表示したい画像の種類やスクロールの位置を指定するだけ。あとはPPUが行ってくれる。ファミコンの解像度は横256ピクセル縦240ピクセルなので8×8ピクセルのBGを32×30個ならべられる。

ファミコンは最大52色(13色4階調)の色しか使えない。そして実際に画面に表示できるのは25色。これを「パレット(色見本帳)」とつかって選択する。
スプライト用パレット(3色 + 透明色)× 4パレット = 12色
BG用パレット(3色 + 背景色)× 4パレット = 12色

スプライトやBGの絵柄データを「パターン」と呼び、スプライト256個、BG256個定義できた。

メモリ
ファミコン本体にはふたつのRAMが搭載されている。
ワーキングRAM(2KB)CPUに接続。プログラム作業用。
ビデオRAM(2KB)PPUに接続。グラフィックス描画用。

カートリッジにはふたつのROMが搭載されている。
プログラムROM(32KB)プログラムやデータを格納。
キャラクタROM(8KB)スプライトやBGのパターンを格納。

ビデオRAMには2画面分の領域が持てる(1画面1KB)。2画面を縦方向または横方向にならべてスクロールさせるため。のちに、カートリッジに追加のビデオRAMを搭載させて、4画面分の領域を持たせ「斜めスクロール」を実現させるゲームも登場。

サウンド
サウンド機能はCPUに内蔵されていて5系統の音源出力がある。
パルス波(矩形波)2系統。メロディラインに。
三角波ベースラインに。
ノイズドラムや効果音。
DPCM(サンプリング音源)ドラムや効果音。

ROMカートリッジの拡張
カートリッジ側でさまざまな機能が拡張できるところがファミコンの特徴のひとつ。
■スクロール
カートリッジにビデオRAMを搭載し4画面分の領域を持たせ「斜めへのスクロール」を可能にした。
■バッテリーバックアップメモリ
RPGやアドベンチャーゲームなどで途中のデータを保存する。小容量のRAMを搭載し電池をつかって通電する。
■割り込み
特定のタイミングでCPUに信号を送り通知する。ラスタースクロールなどの特殊な処理を実現。

電脳について考えてみる

「攻殻機動隊」や「マトリックス」というSFに出てくるような「電脳」が実現する可能性はどのくらいあるのか?

まずは「ブレイン・マシン・インターフェイス」という分野のレポート。
 ブレイン・マシン・インターフェイス最前線(1)
ここで重要なのは「思考」をトレースしているのではなく「運動神経系」の信号を電気信号に変換している、ということ。

「思考」とは、シナプスのネットワークの「瞬き」である。そして「思考」には統一の規格がない。同一の思考であってもそのシナプス・ネットワークの形には個人差があり、あまりにも千差万別すぎる。一人一規格な状況。仮にある人のある思考のシナプス・ネットワークの瞬きを別の人間の脳で再現できたとしても、まったく別の思考が生成されるだろう。個人差の壁を乗り越え、コンピュータがそんな「思考」を「読みとる」ことは不可能だ。これは、いくら電脳技術が発達しても人間同士がわかりあえる日は来ないということを意味している。なんちゃって。

話を戻す。

なので、情報がより単純な「運動神経系」であればコンピュータでも解析できる。人間の「出力」について考えてみれば、人間はなにかを表現する方法としてあるのは「筋肉」だけである。「話す」ことも筋肉の動きによってであるし、「文章を書いたり」「楽器を演奏したり」「絵を描いたり」することも結局は「筋肉」を動かなければ外に表現できない。まったく筋肉が動かせない人は客観的には「思考」があるのかないのかすらわからない(脳波を測ればわかるが)。

人間の「入力」は五感(視覚・聴覚・触覚・味覚・嗅覚)である。ここではとくに「視覚」と「聴覚」と「触覚」が問題になってくる。「入力」器官である「感覚神経系」も情報が単純なので機械との相性はいいだろう。

これらの技術が発達すれば、そう遠くない未来に「攻殻」の世界のようなディスプレイを視覚内に表示させたり、電脳で無線連絡したり、ネットワークにアクセスしたり、外部機器を遠隔操作したり、ができそうだ。

「感覚系」と「運動系」に接続できるなら、究極的には、小説「ニューロマンサー」や映画「マトリックス」に出てくるサイバーパンクSF最重要定番ガジェット「バーチャル空間へのダイブ!」も実現可能になるだろう。それはみんなの夢である「バーチャル・セックス」が可能になるということだ。ビデオやパソコンが普及した真の理由は「ポルノ」であるという指摘もあるくらいなので、これは重要な要素なのだ (キリッ!

こんな記事がある。
National Geographic News: 細胞を直接観察するナノワイヤー
ナノマシンが脳神経とコンピュータをつなぐ! これは、まさに「攻殻」の世界だ!

ここで疑問。コンタクトレンズ型ディスプレイとか開発されれば視界にディスプレイを表示できる。イヤフォン型携帯はすでにある。それでもモバイルフォンを体内に埋め込みたいと思うか? 脳内にナノマシンを注入するリスクを冒してまで電脳化したいと思うか? ……さあ?

ここから先はSFの世界だ。

サイバーパンク再考


英語版のwikiの「Cyberpunk」には渋谷のスクランブル交差点の写真がのっている。「東京」はサイバーパンクの聖地なのだ!

ゾンビランド



2009年アメリカ。

ゾンビ映画であり、コメディ映画であり、ロード・ムービーでもある。主役のジェシー・アイゼンバーグが「ソーシャル・ネットワーク」以前に出演した映画のはずなのに、劇内で「フェイスブック」ネタをやってるw。

ジェシーいいね! いい役者だ! ヒロインのエマ・ストーンもかわいかった! あと、ウディ・ハレルソンのリアルの父親がリアルに「殺し屋」てのがワロタ!

とにかくゾンビ映画という期待を裏切ってくれるジャンルのなかで、期待以上に面白かったYO!!!

サイバーパンク考

このあいだテレ東の昼の映画で「ブレードランナー(1982)」がやっていた。この映画はその斬新な近未来描写によって「サイバーパンク」というジャンルを決定付けた映画だ。

僕は「サイバーパンク」が好きだ。なのに、サイバーパンクの金字塔である「ブレードランナー」はあまり好きでもない。それに「ニューロマンサー(1984)」などのサイバーパンク小説の定番も読んだこともない。きっと、僕は「サイバーパンク」という言葉の響きが好きで、サイバーパンク的なビジュアルが好きなんだと思う。

それに元々がパンクロック好きってのもあるかもしれない。十代の多感なころにパンクロックに染まり、語感が似てる「サイバーパンク」にも興味もったのかもしれない。サイバーパンク・ムーブメントは80年代に起こった。「AKIRA」が映画化されたのが88年(「AKIRA」は絵柄がサイバーパンクだけど内容は超能力アクション)。「攻殻機動隊」がヤンマガで連載スタートしたのが89年。僕がパンクロックにガツンとやられてたころとシンクロする。というわけで内容や思想よりもイメージとビジュアルでサイバーパンク好きになったのだろう。

で、最近になって押井守の「イノセンス」を観た。これは「攻殻機動隊」のスピンオフみたいなものだが、原作者の士郎正宗の描く近未来像がサイバーパンクとは違うような印象を受けた。

そもそもサイバーパンクの世界とは、科学技術が高度に発達し、世界を覆うネットワークが肥大化している世界だと思う。いまのインターネットの世界がもっと過剰になって現実世界に投影されたような世界。その世界は、カオスであり、「持つ者」と「持たざる者」の格差がほとんどない世界であるはずだと、僕は夢想する。

インターネットの方向性は「無償化」と「平等化」だと僕は考える。サービスやデータは無料(フリー)が当然となり、誰もがあらゆる情報を共有し、特定の情報を囲って他者より有利に立つなんてことは難しくなる。誰もが「知識」と「力」を持つようになる。「個人」が強くなる。必然的に「組織」や「集団」は弱くなり小さくなっていく。企業も政府も。権力は分断され分散する。みんなが小さな権力を手にする。戦争はなくなるが、テロがその代用品になる。産業革命以後の資本主義の終着駅。経済は世界規模で慢性的不況。石油はとっくに枯渇し、エネルギーはほぼ100%原子力にたよっている。

僕の考えるネットワークが肥大化したサイバーパンク世界とはそういうイメージだ。同じ退廃的な近未来像でも「1984」的な全体主義社会とは真逆の世界。個人主義の極致みたいな未来だ。

それを思うと「アップルシード」も「攻殻〜」も企業や政府機関が権力を持ちすぎている世界だ。そこが僕には違和感を感じずにいられない。

と、「ニューロマンサー」も読んだことない奴が言ってみた。ペコリ