ぜんぜん日々更新ではない日記です
まぁ、ぼちぼちやっていきます。このページは最新7日分で、逆順(最新が上)で並んでいます。
過去のものは左のリンクから選べます。
人工衛星 2012-02-02 15:48:49 GEAR FAMILY
子供を迎えに行った、保育園の帰り道。
「おつきさまー」と長女が言うので、次女も「おつきさまー」と空を見上げる。
自転車練習中の長男も、一緒に迎えに行っていた。
長男ならわかるだろう、と「月の近くに明るく光ってる星が、木星ね。で、あっちが金星」などと教えると、長女も「どれ? どれ?」と探す。
そんなことをして、30秒ほど月の近くをみなで見ていたら、すーっと、明るく光りながら近づくものがあった。木星よりも明るい。
なんだろう? 飛行機にしては何かおかしい。でも、確定的でないので、子供に注意を促してみる。
「なんか動いてる明るいの見えるかな? 人工衛星かもしれない。…飛行機かもしれないけど、たぶん人工衛星」
自分でも自信のないまま話していたが、違和感が「点滅しない」ことだと気づいた。
人工衛星確定。
光は、やがて雲の中に入り…雲の中で急激に暗くなって視界から消えた。
---
家に帰り、長男が興奮気味に妻に報告。
「どっちから、どっちに飛んでた?」と僕が聞かれる。北西から南東、かな?
「じゃぁ、おそらく ISS。」と、即答。
以前も書いたが、震災のときに空が綺麗で、そのとき以来、妻はすっかり「星を見る人」。
ISS の見かけ上の動きは時期により異なるが、3日くらい前に調べたときは、日本上空では北から南だった、とのこと。
(一週間くらいは同じ向きなのだそうだ。)
そうか。自分が知っている衛星よりずいぶん明るかったけど、ISS は大きいから輝いているのか。
---
…と思ったら、翌日妻から訂正が入った。
「ごめん。調べたら、その時間はイリジウム。しかも、ほぼ最大輝度。みたかったなぁ。」
イリジウムは、太陽電池の形状などから、地上に強く光を反射する、というのは知っていた。
明るいときは昼間でも見えるそうだ。
妻も以前イリジウムを見て、「あれは、ハマる人の気持ちがわかるね」などと言っていたのだが、妻も最大輝度近いものは見たことがない。
子供たちといたときに皆で見れて、ちょっと運がよかった。
「おつきさまー」と長女が言うので、次女も「おつきさまー」と空を見上げる。
自転車練習中の長男も、一緒に迎えに行っていた。
長男ならわかるだろう、と「月の近くに明るく光ってる星が、木星ね。で、あっちが金星」などと教えると、長女も「どれ? どれ?」と探す。
そんなことをして、30秒ほど月の近くをみなで見ていたら、すーっと、明るく光りながら近づくものがあった。木星よりも明るい。
なんだろう? 飛行機にしては何かおかしい。でも、確定的でないので、子供に注意を促してみる。
「なんか動いてる明るいの見えるかな? 人工衛星かもしれない。…飛行機かもしれないけど、たぶん人工衛星」
自分でも自信のないまま話していたが、違和感が「点滅しない」ことだと気づいた。
人工衛星確定。
光は、やがて雲の中に入り…雲の中で急激に暗くなって視界から消えた。
---
家に帰り、長男が興奮気味に妻に報告。
「どっちから、どっちに飛んでた?」と僕が聞かれる。北西から南東、かな?
「じゃぁ、おそらく ISS。」と、即答。
以前も書いたが、震災のときに空が綺麗で、そのとき以来、妻はすっかり「星を見る人」。
ISS の見かけ上の動きは時期により異なるが、3日くらい前に調べたときは、日本上空では北から南だった、とのこと。
(一週間くらいは同じ向きなのだそうだ。)
そうか。自分が知っている衛星よりずいぶん明るかったけど、ISS は大きいから輝いているのか。
---
…と思ったら、翌日妻から訂正が入った。
「ごめん。調べたら、その時間はイリジウム。しかも、ほぼ最大輝度。みたかったなぁ。」
イリジウムは、太陽電池の形状などから、地上に強く光を反射する、というのは知っていた。
明るいときは昼間でも見えるそうだ。
妻も以前イリジウムを見て、「あれは、ハマる人の気持ちがわかるね」などと言っていたのだが、妻も最大輝度近いものは見たことがない。
子供たちといたときに皆で見れて、ちょっと運がよかった。
インフルエンザ 2012-02-01 10:04:52 FAMILY
インフルエンザが流行しています。気をつけましょう。
…といわれても、どっか他人事だった。
毎年この時期になると、子供が誰かしら風邪をもらってきて家族中に蔓延するのだけど、今年はみな元気だし。
そしたら先日、長男の小学校のPTA 緊急連絡網(携帯向けメールシステム)で、「5年●組 学級閉鎖」のお知らせが。
あらあら、他人事じゃなかった、と思った数日後、今度は「1年1組 学級閉鎖」というお知らせが。
…1組って、長男のクラスじゃない。
そんなわけで、長男は現在自宅待機中。
つまんない、遊びに行きたい、と言われても、ほかのクラスの近所の友達は学校行っているし、どうしようもない。
大体、学級閉鎖って子供同士の接触を減らして感染を防ぐ意味合いもあると思うので、友達と遊んでよいかすら不明。
そんなわけで、震災以来使っていなかった Wii が復活し、長男はおよそ1年ぶりに「ポケモンスクランブル」やってます。
十分に強いポケモンで最初のステージに挑み、一人で4人分あやつって、「すごい強い!」と笑ってます。
…といわれても、どっか他人事だった。
毎年この時期になると、子供が誰かしら風邪をもらってきて家族中に蔓延するのだけど、今年はみな元気だし。
そしたら先日、長男の小学校のPTA 緊急連絡網(携帯向けメールシステム)で、「5年●組 学級閉鎖」のお知らせが。
あらあら、他人事じゃなかった、と思った数日後、今度は「1年1組 学級閉鎖」というお知らせが。
…1組って、長男のクラスじゃない。
そんなわけで、長男は現在自宅待機中。
つまんない、遊びに行きたい、と言われても、ほかのクラスの近所の友達は学校行っているし、どうしようもない。
大体、学級閉鎖って子供同士の接触を減らして感染を防ぐ意味合いもあると思うので、友達と遊んでよいかすら不明。
そんなわけで、震災以来使っていなかった Wii が復活し、長男はおよそ1年ぶりに「ポケモンスクランブル」やってます。
十分に強いポケモンで最初のステージに挑み、一人で4人分あやつって、「すごい強い!」と笑ってます。
ゲームボーイの CPU 2012-01-23 17:22:01 OTHER
うかつな事に、1年近く前に「ゲームボーイシリーズが CPU に 8080 を採用」と書いてしまった。
その後、WEB 上の各種ソースをあたるも、みな「Z80」と書いてある。
おかしいなぁ、自分の記憶では、大学時代にバイトしていた会社で閲覧した任天堂公式資料に「8080カスタム」とあった気がするのだが。
(もっとも、社外秘の資料なので当然現在持っていないし、古い記憶なので思い違いかもしれない)
しかし、探せばあるもので、ゲームボーイ(以下 GB と書く)の CPU を詳しく解説した資料があった。
家には Z80 の資料はある。これで比較できる…
と思ったけど、それじゃ片手落ち。8080 も調べなくては。
で、調べたら、8080 と Z80 の機械語コードを、対比させて網羅しているページがあった。
これで比較ができる。
---
えーと、比較しながら、8080 / Z80 / GB CPU の動作詳細をまとめた資料を作ったのだけど、公開はしないでおきます。
長いばかりでつまらないから。知りたい人は、上のリンクを読んで自分で調べてね。
概要だけまとめます。
まず、GB CPU Manual は良い資料なのだけど、冒頭のほうにある CPU 機能のオーバービューは結構間違えているので注意するように。
後ろの CPU 命令の詳細資料は、ほぼ正しいと思われるけど、CB prefix 系の、BIT SET RES 命令のオペコードなどは間違えているようだ。
(疑問があったのでほかのソースも当たって判断)
で、8080 と Z80 と GB CPU の違いを、GB 主体で書くと次のような感じだ。
・Z80 で追加されたレジスタは、GB CPU には存在しない。
・当然、上記レジスタに関連する Z80 の追加命令は GB CPU には存在しない。
・Z80 で追加された命令のうち「ED prefix」系の命令は GB CPU には存在しない。
ED prifix 命令には、I/O命令、16bitメモリロード命令、16bit キャリー付加減算命令、割込み制御命令、Aレジスタビット反転命令、メモリ 4bit ローテート命令、ブロック転送命令、ブロックサーチ命令が含まれる。
以上は、「Z80 で追加されたものは、GB CPU にはない」と言う話だ。つまり、単に 8080 互換。
・8080 から存在し、Z80 で拡張された「レジスタ交換命令」は、GB CPU には存在しない。
・8080 から存在し、Z80 で拡張された「I/O命令」は、GB CPU には存在しない。
・8080 から存在し、Z80 で拡張された、6個の「フラグ」を整理統合。
8080 由来3個、Z80由来1個の4つになった。
整理されたフラグを使用した「条件ジャンプ命令」(8080に存在)は GB CPU には存在しない。
以上は、「8080 に存在したものが存在しない」と言う話だ。8080 のサブセットになった。
Z80由来のフラグが増えたが、実はこのフラグを使用する命令は、Z80 では増えていない。
そのため、GB CPU でもフラグが増加したにもかかわらず、命令は増えていない。
じゃぁ、なんのためにこのフラグが用意されたのか、という理由は次で述べる。
・Z80 で拡張された「CB prifix」系の命令(ビット操作命令)は、GB CPU にすべて存在する。
ビットテスト、ビットセット、ビットリセット、シフト、ローテートが含まれる。
(8080 には、A レジスタのローテートのみ存在した)
・Z80 で拡張された「相対ジャンプ命令」は GB CPU にほとんど存在する。
ただし、相対ジャンプと同時にカウントを行う「ループ命令」は存在しない。
・8080 では BCD 演算補助命令が加算時しか使用できなかった。
Z80 では、同命令の動作が変更され、加算だけでなく減算でも使用できるようになった。
GB CPU では、Z80 と同様の機能が存在する。
(先に説明した、Z80 でフラグが増加したのに命令が増えていないのは、この命令の動作変更のため)
以上が、「Z80 で拡張されたものが存在する」と言う話だ。
Z80 での拡張を含むので、GB CPU は Z80 のサブセット、と言えなくもない。
しかし、Z80 と比較した場合、「存在しない命令」がはるかに多く、8080 と比較した場合「追加・削除された命令」がわずかにある程度だ。
これで Z80 相当、と呼ぶのはつらい気がする。
---
GB CPU には、独自の拡張命令もある。
まずは、スタックポインタの演算命令。
8080/Z80 とも、スタックは「特別なもの」扱いなので、演算命令を用意していない。
スタックポインタをセットする方法は用意されていても、読み出す方法はない。
ここら辺を補って、スタックポインタも普通のレジスタの一種にしている。
メモリと A レジスタ間での読み書き命令も拡張された。
8080 の A レジスタと、アドレス直値で指定されたメモリとの読み書き命令は、「HL で示したアドレスに読み書きした後、HL を増減」という命令に変更された。
ポストインクリメント/デクリメント・アドレスレジスタ間接アドレッシングだ。8080 相当の CPU に付加するには、かなり強力な機能。
元の命令は、なぜか違う命令コードになったが、ちゃんと残っているのでご安心を。
また、アドレス FF00 に 1byte 数字、もしくは C レジスタの内容を足したアドレスに読み書きする命令も作られた。
これは、ファミコンで慣れた 6502 の0ページアドレッシングがほしかったのだろう。便利だからね、あれ。
と同時に、Z80 に存在する I/O 命令相当のこともこなしている(だから、Cレジスタでアドレス指定なのだろう)。一石二鳥の拡張命令だ。
(GB では、FF00 からの領域に、I/O と CPU 内部 RAM が配置されている)
レジスタの上位 4bit と下位 4bit を交換する、と言う命令もある。Z80 の 4bit ローテート命令とも動作が違う。
普通のローテート4回と同じだが、ゲームなので高速性が求められるだろうし、4bit 単位と言うのは、実際よく使うのだ。
携帯ゲーム機用らしく、省電力のための拡張命令も2つある。
ひとつは、8080 から存在する「CPU 停止命令」だ。本来の命令は、プログラムの実行が停止するだけで、CPU の機能自体はすべて動き続ける。
GB CPU では、CPU と ROM へのクロック供給を停止し、本当に CPU を止めてしまう。
これにより、電力消費を抑え、バッテリーを長持ちさせる。携帯機に必要な機能を CPU に追加しているのだ。
もうひとつは、「システム停止命令」だ。これは新設された命令。
GB の画面表示回路への通電を切った上、上に書いた CPU 停止状態に入る。いわゆる、サスペンドモードだ。
CPU 停止状態は割り込みがかかると終了するのだが、通常一番使われるのが画面表示関連の割り込みだ。ところが、システム停止中は画面表示が停止しているため、これらの割り込みもかからない。
サスペンドモードは、ボタンを押すことで終了する。実は、GB では、ボタンはI/Oポートにつなげられているが、押すことで割り込みを発生することもできる設計なのだ。
割り込みの話ついでに、「割込みルーチンからの復帰」命令。
8080では、割り込みからの復帰は「サブルーチンからの復帰」命令で行う。割り込みというのは、強制的なサブルーチン呼び出しのことだからね。
Z80 では、割込み復帰命令と言う専用の命令が作られた。しかし実は、この命令の動作は「サブルーチンからの復帰」とまったく同じなのだ。実際、多くのシステムで、割り込みからの復帰にサブルーチンからの復帰命令を使って構わない。
じゃぁ、割り込みからの復帰命令っていうのは何なのか、って説明はややこしいので省略。
GB CPU では、割り込みが起こったときの CPU の動作が 8080 や Z80 とは違う。だから、サブルーチンからの復帰命令で戻ると、その後の動作がおかしくなる。そのために専用命令が準備された。動作が Z80 と異なるだけでなく、命令コードも違う。
GB CPU Manual では、この命令は「Z80 の命令コードを変えて残された命令」という扱いになっているが、これは GB CPU 独自の拡張命令と見たほうがよいだろう。
(アセンブラのニーモニックは RETI で同じだけど、これは RETurn Interrupt の意味にすぎない。Z80 と同じ命令だとする根拠としては弱すぎる。)
---
で、散々比較して思った。
元ゲームプログラマとしては、この CPU がゲーム向きに巧妙にカスタマイズされているのが、よくわかる。
特に、消費電力を抑える仕組みとか、割込み処理の変更とか、地味だけどよくできている。
GB CPU を作ったのはシャープ(LR35902という型番がついている)。
ザイログと仲がよく、Z80 のセカンドソース品も作っていたし、Z80 を使用した PC もたくさん出していた。
シャープは任天堂とも仲がよかった。
ファミコンは 6502 だったが、次のゲーム機ではぜひ Z80 を、と薦めたのではなかろうか。
でも、Z80 でアセンブラをやったことがある人ならわかると思うが、Z80 の拡張命令には、遅いものが多い。
便利でいいのだけど、速度が重視されるゲームではあまり使えない。
だから、ゲームを作るときは、ほとんど 8080 相当の命令しか使わないのだ。
Z80 の拡張部分は、CPU の回路を複雑にしているだけで、ゲームを作る場合にはほとんどが無駄。
その一方、ゲームにほしい割込み処理とかは貧弱で、まともな処理をしたければ周辺 IC を追加しないといけない。
回路規模が小さくなれば、CPUサイズも小さくなり、コストは下がる。周辺 IC が不要になれば、コストも下がるし機械も小さくできる。
「おもちゃメーカー」である任天堂が、携帯機を設計しているのだ。コストやサイズは気になるところだ。
だから、シャープの思惑通り Z80 を採用する交換条件として、大幅に機能を削り、CPU 単体で割込み処理などを行えるようにするカスタマイズを依頼したのではないだろうか。
この場合、任天堂の目指したのは「8080 カスタム」だろう。公式資料にそう書いていたとしても、おかしくはない。
むしろ、Z80 と書いてしまうと、機能を削除した部分が貧弱になったと批判されかねず、「8080 に機能追加した」としたほうが、いろいろな意味で穏当であっただろう。
一方、実際の回路は、シャープがザイログからライセンスを受けた Z80 の回路から、大幅に削除、追加して作られたはずだ。
というか、シャープはおそらくインテルのライセンスは受けていないので、政治的な理由で「8080互換」は謳えない。
だから、シャープの立場で言えば「Z80 カスタム」と言うのが正しい。
つまり、技術面では 8080 カスタムと呼ぶべきで、政治面では Z80 カスタムと呼ぶべき。
どちらで呼ぶかは、個人の感性(信条の)問題だ。
---
ところで、最初に「WEB 上の各種ソースをあたるも、みな「Z80」と」と書いた。
wikipedia にも、そう書いてある。(ゲームボーイだけでなく、シリーズ機種すべて、Z80 扱い)
ふと思ったが、wikipedia は、「印刷資料」を基に記事を書かないと、独自研究扱いなのではないの?
Z80 って書いてある印刷資料、どこかにあったのかな?
でも、日本の wikipedia は間違いだらけだから、と思って、英語版記事を見た。
そうしたら、Z80 とは書いていなかった。
「8080 に酷似した、SHARP の 8bit カスタム LR35902」とした上で、「Z80 の追加命令のいくつか、特にビット操作命令が存在する」と説明している。
事実をそのまま書いた冷静な記事。
主に日本語版の wikipedia に疑念を抱いて、Z80 なのか 8080 なのか躍起になって調べたのだが、日本語版の wikipedia の内容が「根拠なく書かれていた」と言うだけの話でした。
海外でも、ゲームボーイの CPU は「GBZ80」と呼ばれることが多いようです。
で、技術系の解説サイトを見るたびに、「GBZ80 と呼ばれてるけど、8080 のほうが近いから」と断っていることが多いです。
上に書いた wikipedia での CPU 解説も、一部分のみ翻訳したけど、「Z80 じゃないから」と念を押すような文面でした。
こちらのサイトでは、「アセンブラはZ80構文を使うことが多いけど、同じじゃないから」という表記も見られます。
…つまり、「アセンブラがザイログ表記で書かれることが多いから、Z80だ」と考える人が多いのですね。
言語と CPU アーキテクチャは無関係なのに。
そういえば、自分のページに情報くれた方も、「ニモニックがZ80」だったから、Z80だと思っていた、と書いていました。
ザイログニーモニックは Z80 の全命令を網羅したものですが、その中には 8080 の命令セットも含まれるので、ザイログニーモニックで 8080 のプログラムを書くことも可能です。
「CPU メーカーがニーモニックを決定する」のであれば、ザイログのライセンスしか受けていないシャープとしては、ザイログニーモニック互換にするのが最も順当な方法となります。
さらに、ゲームボーイ発売時は Z80 プログラマが多数いましたので、8080 相当の機能しかないとしても、そのアセンブラに「普及言語」としてザイログニーモニックを選ぶのは、自然な流れであったのだろう、と思います。
しかし、ザイログニーモニックだから Z80 だろう、という類推をする人が多いのは、心情としても理解できます。
これで、疑問がひとつ解けた感じ。
もうひとつ、Z80 は知っているけど 8080 は知らない人も多いようです。
この人たちに、「むしろ 8080 に近い」という言葉はまったくの無意味。
Z80 のほうが有名だから、と言う理由だけで「Z80 カスタム」と信じ込んでいます。
こちらの書き方をしているページは、技術を知らないのにスペックを書きたがる人に多いみたい。
正確さを必要とする wikipedia などでは、この書き方はどうかと思いますが…
いずれにしても、自分としては「Z80 カスタム」と思われている傾向について、調査を通じて納得ができました。
ゲームボーイの CPU は Z80 と言い切っていたり、リコーが Z80 をカスタムしたものと言っている人を見ても、寛容な気持ちでいられそうです。
その後、WEB 上の各種ソースをあたるも、みな「Z80」と書いてある。
おかしいなぁ、自分の記憶では、大学時代にバイトしていた会社で閲覧した任天堂公式資料に「8080カスタム」とあった気がするのだが。
(もっとも、社外秘の資料なので当然現在持っていないし、古い記憶なので思い違いかもしれない)
しかし、探せばあるもので、ゲームボーイ(以下 GB と書く)の CPU を詳しく解説した資料があった。
家には Z80 の資料はある。これで比較できる…
と思ったけど、それじゃ片手落ち。8080 も調べなくては。
で、調べたら、8080 と Z80 の機械語コードを、対比させて網羅しているページがあった。
これで比較ができる。
---
えーと、比較しながら、8080 / Z80 / GB CPU の動作詳細をまとめた資料を作ったのだけど、公開はしないでおきます。
長いばかりでつまらないから。知りたい人は、上のリンクを読んで自分で調べてね。
概要だけまとめます。
まず、GB CPU Manual は良い資料なのだけど、冒頭のほうにある CPU 機能のオーバービューは結構間違えているので注意するように。
後ろの CPU 命令の詳細資料は、ほぼ正しいと思われるけど、CB prefix 系の、BIT SET RES 命令のオペコードなどは間違えているようだ。
(疑問があったのでほかのソースも当たって判断)
で、8080 と Z80 と GB CPU の違いを、GB 主体で書くと次のような感じだ。
・Z80 で追加されたレジスタは、GB CPU には存在しない。
・当然、上記レジスタに関連する Z80 の追加命令は GB CPU には存在しない。
・Z80 で追加された命令のうち「ED prefix」系の命令は GB CPU には存在しない。
ED prifix 命令には、I/O命令、16bitメモリロード命令、16bit キャリー付加減算命令、割込み制御命令、Aレジスタビット反転命令、メモリ 4bit ローテート命令、ブロック転送命令、ブロックサーチ命令が含まれる。
以上は、「Z80 で追加されたものは、GB CPU にはない」と言う話だ。つまり、単に 8080 互換。
・8080 から存在し、Z80 で拡張された「レジスタ交換命令」は、GB CPU には存在しない。
・8080 から存在し、Z80 で拡張された「I/O命令」は、GB CPU には存在しない。
・8080 から存在し、Z80 で拡張された、6個の「フラグ」を整理統合。
8080 由来3個、Z80由来1個の4つになった。
整理されたフラグを使用した「条件ジャンプ命令」(8080に存在)は GB CPU には存在しない。
以上は、「8080 に存在したものが存在しない」と言う話だ。8080 のサブセットになった。
Z80由来のフラグが増えたが、実はこのフラグを使用する命令は、Z80 では増えていない。
そのため、GB CPU でもフラグが増加したにもかかわらず、命令は増えていない。
じゃぁ、なんのためにこのフラグが用意されたのか、という理由は次で述べる。
・Z80 で拡張された「CB prifix」系の命令(ビット操作命令)は、GB CPU にすべて存在する。
ビットテスト、ビットセット、ビットリセット、シフト、ローテートが含まれる。
(8080 には、A レジスタのローテートのみ存在した)
・Z80 で拡張された「相対ジャンプ命令」は GB CPU にほとんど存在する。
ただし、相対ジャンプと同時にカウントを行う「ループ命令」は存在しない。
・8080 では BCD 演算補助命令が加算時しか使用できなかった。
Z80 では、同命令の動作が変更され、加算だけでなく減算でも使用できるようになった。
GB CPU では、Z80 と同様の機能が存在する。
(先に説明した、Z80 でフラグが増加したのに命令が増えていないのは、この命令の動作変更のため)
以上が、「Z80 で拡張されたものが存在する」と言う話だ。
Z80 での拡張を含むので、GB CPU は Z80 のサブセット、と言えなくもない。
しかし、Z80 と比較した場合、「存在しない命令」がはるかに多く、8080 と比較した場合「追加・削除された命令」がわずかにある程度だ。
これで Z80 相当、と呼ぶのはつらい気がする。
---
GB CPU には、独自の拡張命令もある。
まずは、スタックポインタの演算命令。
8080/Z80 とも、スタックは「特別なもの」扱いなので、演算命令を用意していない。
スタックポインタをセットする方法は用意されていても、読み出す方法はない。
ここら辺を補って、スタックポインタも普通のレジスタの一種にしている。
メモリと A レジスタ間での読み書き命令も拡張された。
8080 の A レジスタと、アドレス直値で指定されたメモリとの読み書き命令は、「HL で示したアドレスに読み書きした後、HL を増減」という命令に変更された。
ポストインクリメント/デクリメント・アドレスレジスタ間接アドレッシングだ。8080 相当の CPU に付加するには、かなり強力な機能。
元の命令は、なぜか違う命令コードになったが、ちゃんと残っているのでご安心を。
また、アドレス FF00 に 1byte 数字、もしくは C レジスタの内容を足したアドレスに読み書きする命令も作られた。
これは、ファミコンで慣れた 6502 の0ページアドレッシングがほしかったのだろう。便利だからね、あれ。
と同時に、Z80 に存在する I/O 命令相当のこともこなしている(だから、Cレジスタでアドレス指定なのだろう)。一石二鳥の拡張命令だ。
(GB では、FF00 からの領域に、I/O と CPU 内部 RAM が配置されている)
レジスタの上位 4bit と下位 4bit を交換する、と言う命令もある。Z80 の 4bit ローテート命令とも動作が違う。
普通のローテート4回と同じだが、ゲームなので高速性が求められるだろうし、4bit 単位と言うのは、実際よく使うのだ。
携帯ゲーム機用らしく、省電力のための拡張命令も2つある。
ひとつは、8080 から存在する「CPU 停止命令」だ。本来の命令は、プログラムの実行が停止するだけで、CPU の機能自体はすべて動き続ける。
GB CPU では、CPU と ROM へのクロック供給を停止し、本当に CPU を止めてしまう。
これにより、電力消費を抑え、バッテリーを長持ちさせる。携帯機に必要な機能を CPU に追加しているのだ。
もうひとつは、「システム停止命令」だ。これは新設された命令。
GB の画面表示回路への通電を切った上、上に書いた CPU 停止状態に入る。いわゆる、サスペンドモードだ。
CPU 停止状態は割り込みがかかると終了するのだが、通常一番使われるのが画面表示関連の割り込みだ。ところが、システム停止中は画面表示が停止しているため、これらの割り込みもかからない。
サスペンドモードは、ボタンを押すことで終了する。実は、GB では、ボタンはI/Oポートにつなげられているが、押すことで割り込みを発生することもできる設計なのだ。
割り込みの話ついでに、「割込みルーチンからの復帰」命令。
8080では、割り込みからの復帰は「サブルーチンからの復帰」命令で行う。割り込みというのは、強制的なサブルーチン呼び出しのことだからね。
Z80 では、割込み復帰命令と言う専用の命令が作られた。しかし実は、この命令の動作は「サブルーチンからの復帰」とまったく同じなのだ。実際、多くのシステムで、割り込みからの復帰にサブルーチンからの復帰命令を使って構わない。
じゃぁ、割り込みからの復帰命令っていうのは何なのか、って説明はややこしいので省略。
GB CPU では、割り込みが起こったときの CPU の動作が 8080 や Z80 とは違う。だから、サブルーチンからの復帰命令で戻ると、その後の動作がおかしくなる。そのために専用命令が準備された。動作が Z80 と異なるだけでなく、命令コードも違う。
GB CPU Manual では、この命令は「Z80 の命令コードを変えて残された命令」という扱いになっているが、これは GB CPU 独自の拡張命令と見たほうがよいだろう。
(アセンブラのニーモニックは RETI で同じだけど、これは RETurn Interrupt の意味にすぎない。Z80 と同じ命令だとする根拠としては弱すぎる。)
---
で、散々比較して思った。
元ゲームプログラマとしては、この CPU がゲーム向きに巧妙にカスタマイズされているのが、よくわかる。
特に、消費電力を抑える仕組みとか、割込み処理の変更とか、地味だけどよくできている。
GB CPU を作ったのはシャープ(LR35902という型番がついている)。
ザイログと仲がよく、Z80 のセカンドソース品も作っていたし、Z80 を使用した PC もたくさん出していた。
シャープは任天堂とも仲がよかった。
ファミコンは 6502 だったが、次のゲーム機ではぜひ Z80 を、と薦めたのではなかろうか。
でも、Z80 でアセンブラをやったことがある人ならわかると思うが、Z80 の拡張命令には、遅いものが多い。
便利でいいのだけど、速度が重視されるゲームではあまり使えない。
だから、ゲームを作るときは、ほとんど 8080 相当の命令しか使わないのだ。
Z80 の拡張部分は、CPU の回路を複雑にしているだけで、ゲームを作る場合にはほとんどが無駄。
その一方、ゲームにほしい割込み処理とかは貧弱で、まともな処理をしたければ周辺 IC を追加しないといけない。
回路規模が小さくなれば、CPUサイズも小さくなり、コストは下がる。周辺 IC が不要になれば、コストも下がるし機械も小さくできる。
「おもちゃメーカー」である任天堂が、携帯機を設計しているのだ。コストやサイズは気になるところだ。
だから、シャープの思惑通り Z80 を採用する交換条件として、大幅に機能を削り、CPU 単体で割込み処理などを行えるようにするカスタマイズを依頼したのではないだろうか。
この場合、任天堂の目指したのは「8080 カスタム」だろう。公式資料にそう書いていたとしても、おかしくはない。
むしろ、Z80 と書いてしまうと、機能を削除した部分が貧弱になったと批判されかねず、「8080 に機能追加した」としたほうが、いろいろな意味で穏当であっただろう。
一方、実際の回路は、シャープがザイログからライセンスを受けた Z80 の回路から、大幅に削除、追加して作られたはずだ。
というか、シャープはおそらくインテルのライセンスは受けていないので、政治的な理由で「8080互換」は謳えない。
だから、シャープの立場で言えば「Z80 カスタム」と言うのが正しい。
つまり、技術面では 8080 カスタムと呼ぶべきで、政治面では Z80 カスタムと呼ぶべき。
どちらで呼ぶかは、個人の感性(信条の)問題だ。
---
ところで、最初に「WEB 上の各種ソースをあたるも、みな「Z80」と」と書いた。
wikipedia にも、そう書いてある。(ゲームボーイだけでなく、シリーズ機種すべて、Z80 扱い)
ふと思ったが、wikipedia は、「印刷資料」を基に記事を書かないと、独自研究扱いなのではないの?
Z80 って書いてある印刷資料、どこかにあったのかな?
でも、日本の wikipedia は間違いだらけだから、と思って、英語版記事を見た。
そうしたら、Z80 とは書いていなかった。
「8080 に酷似した、SHARP の 8bit カスタム LR35902」とした上で、「Z80 の追加命令のいくつか、特にビット操作命令が存在する」と説明している。
事実をそのまま書いた冷静な記事。
主に日本語版の wikipedia に疑念を抱いて、Z80 なのか 8080 なのか躍起になって調べたのだが、日本語版の wikipedia の内容が「根拠なく書かれていた」と言うだけの話でした。
翌々日追記
海外でも、ゲームボーイの CPU は「GBZ80」と呼ばれることが多いようです。
で、技術系の解説サイトを見るたびに、「GBZ80 と呼ばれてるけど、8080 のほうが近いから」と断っていることが多いです。
上に書いた wikipedia での CPU 解説も、一部分のみ翻訳したけど、「Z80 じゃないから」と念を押すような文面でした。
こちらのサイトでは、「アセンブラはZ80構文を使うことが多いけど、同じじゃないから」という表記も見られます。
…つまり、「アセンブラがザイログ表記で書かれることが多いから、Z80だ」と考える人が多いのですね。
言語と CPU アーキテクチャは無関係なのに。
そういえば、自分のページに情報くれた方も、「ニモニックがZ80」だったから、Z80だと思っていた、と書いていました。
ザイログニーモニックは Z80 の全命令を網羅したものですが、その中には 8080 の命令セットも含まれるので、ザイログニーモニックで 8080 のプログラムを書くことも可能です。
「CPU メーカーがニーモニックを決定する」のであれば、ザイログのライセンスしか受けていないシャープとしては、ザイログニーモニック互換にするのが最も順当な方法となります。
さらに、ゲームボーイ発売時は Z80 プログラマが多数いましたので、8080 相当の機能しかないとしても、そのアセンブラに「普及言語」としてザイログニーモニックを選ぶのは、自然な流れであったのだろう、と思います。
しかし、ザイログニーモニックだから Z80 だろう、という類推をする人が多いのは、心情としても理解できます。
これで、疑問がひとつ解けた感じ。
もうひとつ、Z80 は知っているけど 8080 は知らない人も多いようです。
この人たちに、「むしろ 8080 に近い」という言葉はまったくの無意味。
Z80 のほうが有名だから、と言う理由だけで「Z80 カスタム」と信じ込んでいます。
こちらの書き方をしているページは、技術を知らないのにスペックを書きたがる人に多いみたい。
正確さを必要とする wikipedia などでは、この書き方はどうかと思いますが…
いずれにしても、自分としては「Z80 カスタム」と思われている傾向について、調査を通じて納得ができました。
ゲームボーイの CPU は Z80 と言い切っていたり、リコーが Z80 をカスタムしたものと言っている人を見ても、寛容な気持ちでいられそうです。
最近のうちの子 2012-01-05 10:26:54 FAMILY
次女(4歳)は、練習が好き。
クリスマスに、サンタさんから自転車をもらった。
早速練習して、最初はペダルをこぐのもたどたどしかったが、翌日には暴走族になっていた。
1週間経った年明けには、補助輪をはずしてみたが、これはちょっと時期尚早。また戻した。
---
2ヶ月くらい前から、「口笛」が次女のブーム。
暇さえあれば、所構わずピーピー口笛を吹いている。
2ヶ月前には、音は出なかった。
音は出ないけど、「口笛を吹きたい」と急に言い出して、練習を始めたのだ。
今では綺麗な音が出る。音程はまだあまり出せない。
---
口笛ブームの前は、「逆立ち」が2ヶ月くらい続いた。
これも、最初は逆立ちできなかったのが、壁を支えにいつでもすぐに逆立ちできるようになり、ご飯を食べている最中でも席を離れて逆立ちするので怒られ続け、口笛ブームで熱が冷めた。
逆立ちブームの途中から現在まで、「ひらがな」もブームである。
子供によくある「お手紙書くの」とかではなく、ひたすら同じ字を練習し続ける。
読めなかったのが読めるようになり、怪しいながらも書けるようになり、現在はカタカナが一部読める。
こちらはまだ飽きていない。
---
長男(7歳)は、練習が嫌い。
新しいことを始めるのに勇気がいるようで、「できるとわかっていること」しか、しようとしない。
自転車は2年ほど前に買って、去年の春に補助輪をはずした。
しかし、少し練習して、「難しい」と投げ出していた。
夏休みにも少し練習したが、続かない。
乗れなくはないのだが危なっかしい、と言う状態だった。
それが、
次女が自転車の練習をしていて、急に目覚めたらしい。
「やる」と言い出して猛練習。1日で乗れるようになってしまった。
---
「そういえば最近逆立ちしなくなったね」と次女に言ったところ、急に逆立ちを始める。
これを見て、今まで逆立ちをしようとしなかった長男、急に逆立ちを始める。
一生懸命がんばって、壁を支えに逆立ちできたところで「見てみて」と大喜び。
小学生なのだから、これくらいできても普通なのだが、すごいじゃん、とほめておく。
ある程度勘が出来上がると、長男も猛練習するタイプなんだけどね。
新しいことを始めるのが、恥ずかしいのか、多少怖さもあるのか、なかなかできないようだ。
クリスマスに、サンタさんから自転車をもらった。
早速練習して、最初はペダルをこぐのもたどたどしかったが、翌日には暴走族になっていた。
1週間経った年明けには、補助輪をはずしてみたが、これはちょっと時期尚早。また戻した。
---
2ヶ月くらい前から、「口笛」が次女のブーム。
暇さえあれば、所構わずピーピー口笛を吹いている。
2ヶ月前には、音は出なかった。
音は出ないけど、「口笛を吹きたい」と急に言い出して、練習を始めたのだ。
今では綺麗な音が出る。音程はまだあまり出せない。
---
口笛ブームの前は、「逆立ち」が2ヶ月くらい続いた。
これも、最初は逆立ちできなかったのが、壁を支えにいつでもすぐに逆立ちできるようになり、ご飯を食べている最中でも席を離れて逆立ちするので怒られ続け、口笛ブームで熱が冷めた。
逆立ちブームの途中から現在まで、「ひらがな」もブームである。
子供によくある「お手紙書くの」とかではなく、ひたすら同じ字を練習し続ける。
読めなかったのが読めるようになり、怪しいながらも書けるようになり、現在はカタカナが一部読める。
こちらはまだ飽きていない。
---
長男(7歳)は、練習が嫌い。
新しいことを始めるのに勇気がいるようで、「できるとわかっていること」しか、しようとしない。
自転車は2年ほど前に買って、去年の春に補助輪をはずした。
しかし、少し練習して、「難しい」と投げ出していた。
夏休みにも少し練習したが、続かない。
乗れなくはないのだが危なっかしい、と言う状態だった。
それが、
次女が自転車の練習をしていて、急に目覚めたらしい。
「やる」と言い出して猛練習。1日で乗れるようになってしまった。
---
「そういえば最近逆立ちしなくなったね」と次女に言ったところ、急に逆立ちを始める。
これを見て、今まで逆立ちをしようとしなかった長男、急に逆立ちを始める。
一生懸命がんばって、壁を支えに逆立ちできたところで「見てみて」と大喜び。
小学生なのだから、これくらいできても普通なのだが、すごいじゃん、とほめておく。
ある程度勘が出来上がると、長男も猛練習するタイプなんだけどね。
新しいことを始めるのが、恥ずかしいのか、多少怖さもあるのか、なかなかできないようだ。
あけましておめでとうございます 2012-01-05 10:10:47 COOK FAMILY
毎年のことながら、「営業開始日」になってやっとご挨拶です。
子供の世話していると、ゆっくりPCに向かえないから。
ゆっくりPCに向かえないので、年賀状も出していません。
これも例年通りのことだけど、くれた方たちすみませぬ。
---
今年のおせち料理。
豚の角煮、ゆで卵、鳥ハム、伊達巻、栗金団、松前漬け、いくら。
以上は僕が作ったもの。いくらは、秋に筋子から作って冷凍しておいた。
ゆで卵は、角煮の煮汁に漬け込んだもの。
田作り、酢蓮、菊の酢の物、煮しめ。
以上は妻が作ったもの。菊の酢の物は、秋に庭に咲いた菊で作って冷凍しておいた。
黒豆、白花豆、かまぼこ。
以上は買ってきたもの。正月用ではない、安物。
年末の29日に風邪で熱を出した。
翌日には治ったのだが、いろいろと計画が狂い、今年は、思いっきり手抜きをして作った。
角煮は、いつもは皮目を焼くことから始めるのだが、今年はいきなり煮込む。
鳥ハムも、塩や胡椒を刷り込まず、ただ袋に投入してもんだだけ。
伊達巻も金団も、レシピを調べず「適当に」調味料をぶち込んだ。
…そうしたら、今年のおせちは非常に味がよい。
いつもの「丁寧な仕事」はなんだったのかと思うくらいのできばえ。
来年からも手を抜こう。
---
2日に実家で親戚の集まり。
親戚と言っても僕の兄弟だが。
角煮、鳥ハム、栗金団、伊達巻を差し入れ。
角煮に八角を入れて煮たのが、「中華っぽい」と話題に。
スターアニスや紹興酒が余っていたから入れてみただけなのだけど。
そんなのが「余っている」時点で普通ではない、僕が凝り性だ、まめだ、と話のネタにされる。
実家の長兄は、毎年カレーを作って待っている。
子供も来るので余り辛くしない、というのが常なのだが、今年はうっかり辛くなってしまったらしい。
しかし、これが非常にうまい。
「みんなに食わすから、鶏がら買ってきてスープから作った」そうで…
さっき、長兄に凝り性だと笑われた気がするが、同じ血だ。
今年は次姉の家は時間がなく、おせちを余り作れなかったそうだ。
しかし、毎年おいしい差し入れを持ってくる。
次兄は料理は余りしない。
しかし、一連の話をしていた中で、「そういえば、年末の年越しそばは常に次兄の担当だった」という話題が出る。
そういえばそうだった。そして、次兄にそばを作らせると、非常にうまかった。
なんのことはない。
兄弟みな、料理が好きなのである。
おそらく、死んだ父が台所に気軽に立っていた影響が大きい。
男だから、と言う抵抗感は皆無。
子供の世話していると、ゆっくりPCに向かえないから。
ゆっくりPCに向かえないので、年賀状も出していません。
これも例年通りのことだけど、くれた方たちすみませぬ。
---
今年のおせち料理。
豚の角煮、ゆで卵、鳥ハム、伊達巻、栗金団、松前漬け、いくら。
以上は僕が作ったもの。いくらは、秋に筋子から作って冷凍しておいた。
ゆで卵は、角煮の煮汁に漬け込んだもの。
田作り、酢蓮、菊の酢の物、煮しめ。
以上は妻が作ったもの。菊の酢の物は、秋に庭に咲いた菊で作って冷凍しておいた。
黒豆、白花豆、かまぼこ。
以上は買ってきたもの。正月用ではない、安物。
年末の29日に風邪で熱を出した。
翌日には治ったのだが、いろいろと計画が狂い、今年は、思いっきり手抜きをして作った。
角煮は、いつもは皮目を焼くことから始めるのだが、今年はいきなり煮込む。
鳥ハムも、塩や胡椒を刷り込まず、ただ袋に投入してもんだだけ。
伊達巻も金団も、レシピを調べず「適当に」調味料をぶち込んだ。
…そうしたら、今年のおせちは非常に味がよい。
いつもの「丁寧な仕事」はなんだったのかと思うくらいのできばえ。
来年からも手を抜こう。
---
2日に実家で親戚の集まり。
親戚と言っても僕の兄弟だが。
角煮、鳥ハム、栗金団、伊達巻を差し入れ。
角煮に八角を入れて煮たのが、「中華っぽい」と話題に。
スターアニスや紹興酒が余っていたから入れてみただけなのだけど。
そんなのが「余っている」時点で普通ではない、僕が凝り性だ、まめだ、と話のネタにされる。
実家の長兄は、毎年カレーを作って待っている。
子供も来るので余り辛くしない、というのが常なのだが、今年はうっかり辛くなってしまったらしい。
しかし、これが非常にうまい。
「みんなに食わすから、鶏がら買ってきてスープから作った」そうで…
さっき、長兄に凝り性だと笑われた気がするが、同じ血だ。
今年は次姉の家は時間がなく、おせちを余り作れなかったそうだ。
しかし、毎年おいしい差し入れを持ってくる。
次兄は料理は余りしない。
しかし、一連の話をしていた中で、「そういえば、年末の年越しそばは常に次兄の担当だった」という話題が出る。
そういえばそうだった。そして、次兄にそばを作らせると、非常にうまかった。
なんのことはない。
兄弟みな、料理が好きなのである。
おそらく、死んだ父が台所に気軽に立っていた影響が大きい。
男だから、と言う抵抗感は皆無。
リモコン当たった 2011-12-22 11:42:51 GEAR FAMILY
ピカチュウリモコンあたりました。
「東京12チャンネル」という社名で始まった、現・テレビ東京が、地上デジタル化で「7」という縁起のいい(?)数字に移動になったのを記念して作ったものです。
7777名にプレゼントされ、7チャンネルだけボタンが特大、しかも押すと「ピカチュウ!」としゃべる。
まぁ、子供が喜ぶかと思って、家族中の名前を使ってプレゼントに応募しておいたのですが、当たったのは妻名義。
妻は運がよくて、懸賞によくあたります。
そんな力がここでも発揮されるとは。
よく考えると、子供が見ている番組のほとんどが、7チャン(テレ東)か、2チャン(NHK Eテレ)。
ほとんど録画で見ているから、テレビリモコンの出番はあまりないんですけどね。
「東京12チャンネル」という社名で始まった、現・テレビ東京が、地上デジタル化で「7」という縁起のいい(?)数字に移動になったのを記念して作ったものです。
7777名にプレゼントされ、7チャンネルだけボタンが特大、しかも押すと「ピカチュウ!」としゃべる。
まぁ、子供が喜ぶかと思って、家族中の名前を使ってプレゼントに応募しておいたのですが、当たったのは妻名義。
妻は運がよくて、懸賞によくあたります。
そんな力がここでも発揮されるとは。
よく考えると、子供が見ている番組のほとんどが、7チャン(テレ東)か、2チャン(NHK Eテレ)。
ほとんど録画で見ているから、テレビリモコンの出番はあまりないんですけどね。
カレンダー 2011-12-12 14:05:38 GEAR
JAMSTEC に勤めている妻の知人より、JAMSTEC の2012年カレンダーをいただいた。
1枚のポスターにまとめられた、「地球史カレンダー」というもの。
1月1日に地球が誕生したとすると、恐竜の絶滅が12月26日、という、まぁ、よくある内容。
一応、12月31日はカレンダーの最後に、時間単位で別に書かれている。
「人類の誕生」とか、12月31日のことだからね。
で、内容的にはよくあるのだが、このカレンダーは普通ではない。
「余りに面白いので」お土産にくれた、というほどのものだ。
2月が30日まである。
4月と9月と11月が31日まである。
12月31日の時間も、19時が2つある。
2月30日と3月1日が同じ曜日だったりして、とりあえず「曜日がずれている」というようなことはない。
間違いに気づいて配布できなかった…とかではない。
大量に配布した後で、間違いに気づいたのだとか。
地球史の内容はかなり力が入っていて、いろいろ書いてある。
こちらの内容が非常に充実していて、科学的な検証も一生懸命やっていたので、「カレンダーの検証」という、ある意味些細な部分が忘れ去られていたらしい。
すごい。
さすが、日本を誇る知力が結集されている機関だけのことはある。
1枚のポスターにまとめられた、「地球史カレンダー」というもの。
1月1日に地球が誕生したとすると、恐竜の絶滅が12月26日、という、まぁ、よくある内容。
一応、12月31日はカレンダーの最後に、時間単位で別に書かれている。
「人類の誕生」とか、12月31日のことだからね。
で、内容的にはよくあるのだが、このカレンダーは普通ではない。
「余りに面白いので」お土産にくれた、というほどのものだ。
2月が30日まである。
4月と9月と11月が31日まである。
12月31日の時間も、19時が2つある。
2月30日と3月1日が同じ曜日だったりして、とりあえず「曜日がずれている」というようなことはない。
間違いに気づいて配布できなかった…とかではない。
大量に配布した後で、間違いに気づいたのだとか。
地球史の内容はかなり力が入っていて、いろいろ書いてある。
こちらの内容が非常に充実していて、科学的な検証も一生懸命やっていたので、「カレンダーの検証」という、ある意味些細な部分が忘れ去られていたらしい。
すごい。
さすが、日本を誇る知力が結集されている機関だけのことはある。