T400に9セルバッテリー(43R2499)を装着 ― 2011/04/27 00:08
先日の本社出張中に購入時から使っていたT400の4セルバッテリーがお亡くなりになってしまいました。
バッテリー駆動が出来なくなってしまい、普段なら本社フロアから本社ビル内にあるデータセンター内へ立ち入る際はスタンバイ状態にしてから持ち込んでいたのに、いちいちシャットダウンしてから持ち込むという非効率極まりない状態に陥ってしまい、仕方無く新品のバッテリーを購入しました。
本社への移動はドアtoドアで6時間程掛かる為、移動中はPCで仕事をしながらなので、標準の4セルバッテリーでは心もとなく新千歳空港からの移動の際には、電源が確保出来る特急の指定席券をいつも購入していました。
9セルバッテリーであれば5時間程度は持つハズなので経費削減にも繋げたい考えです。
購入しようとしていた週末に運良くLenovoで周辺機器40%OFFクーポンが出現し、有り難く使わせて頂きました。
9セルバッテリーが1万円ちょっとで買えたのは本当にラッキーでした。
Lenovoから買うと到着が遅れるので、本当は事務所から徒歩数分の秋葉原で買いたかったのですが、残念ながら秋葉原の懇意にしているお店では軒並み売り切れており、仕方なくLenovoの直販を利用した次第です。
で、到着しました。購入から9日掛かりましたがLenovoはいつもそんな感じなので特に遅いとかは思いません。
それよりも日通の配達状況システムはいつも通り分かり辛く、海外からの配送はその傾向が顕著です。
まだ自宅に配送されていないにも関わらず配達完了になったり、コンテナ単位で管理されているから配達日には他の人のお届け物が届いただけで配達完了のステータスがずらーっと並びます。
もう少しどうにかならないのか要検討して頂きたい次第です。
自宅で撮影しているのですが、4セルバッテリーを事務所に忘れてきてしまい並べて比較出来ずスミマセン。
大きさ的には倍以上あるのは確実です。重量はあまり重く感じません。
本体に装着してみます。
デ、デカイ。
完全に本体から食み出ています。
会社から持って帰る時に当然通勤カバンに入れて来たんですが、横にパンパンでは無く縦にパンパンになる荷物は初めてです。
新しい通勤カバンが必要かもしれません。
モニタを開くとこんな感じになります。
通常通りにモニタを前にして使用している時は9セルバッテリーが装着されている事は全く意識する事は無いと思います。
ですが、Windows上から省電力マネージャーを立ち上げ満充電容量を見ると90Wh近くあります。
もの凄い容量です。
それにしてもサイクルカウント「0」ってのは気分が良いですね。
でも自分のように、会議だデータセンターだという度にThinkPadからAC電源を頻繁に抜いていると、あっという間にサイクルカウントが増えてバッテリーが劣化していきます。
たぶんこのバッテリーは1年半持てば上出来かもしれません。
恐らく次のバッテリーを買うタイミングでは新しいThinkPadを買うかもしれませんけれど。
バッテリー駆動が出来なくなってしまい、普段なら本社フロアから本社ビル内にあるデータセンター内へ立ち入る際はスタンバイ状態にしてから持ち込んでいたのに、いちいちシャットダウンしてから持ち込むという非効率極まりない状態に陥ってしまい、仕方無く新品のバッテリーを購入しました。
本社への移動はドアtoドアで6時間程掛かる為、移動中はPCで仕事をしながらなので、標準の4セルバッテリーでは心もとなく新千歳空港からの移動の際には、電源が確保出来る特急の指定席券をいつも購入していました。
9セルバッテリーであれば5時間程度は持つハズなので経費削減にも繋げたい考えです。
購入しようとしていた週末に運良くLenovoで周辺機器40%OFFクーポンが出現し、有り難く使わせて頂きました。
9セルバッテリーが1万円ちょっとで買えたのは本当にラッキーでした。
Lenovoから買うと到着が遅れるので、本当は事務所から徒歩数分の秋葉原で買いたかったのですが、残念ながら秋葉原の懇意にしているお店では軒並み売り切れており、仕方なくLenovoの直販を利用した次第です。
で、到着しました。購入から9日掛かりましたがLenovoはいつもそんな感じなので特に遅いとかは思いません。
それよりも日通の配達状況システムはいつも通り分かり辛く、海外からの配送はその傾向が顕著です。
まだ自宅に配送されていないにも関わらず配達完了になったり、コンテナ単位で管理されているから配達日には他の人のお届け物が届いただけで配達完了のステータスがずらーっと並びます。
もう少しどうにかならないのか要検討して頂きたい次第です。
自宅で撮影しているのですが、4セルバッテリーを事務所に忘れてきてしまい並べて比較出来ずスミマセン。
大きさ的には倍以上あるのは確実です。重量はあまり重く感じません。
本体に装着してみます。
デ、デカイ。
完全に本体から食み出ています。
会社から持って帰る時に当然通勤カバンに入れて来たんですが、横にパンパンでは無く縦にパンパンになる荷物は初めてです。
新しい通勤カバンが必要かもしれません。
モニタを開くとこんな感じになります。
通常通りにモニタを前にして使用している時は9セルバッテリーが装着されている事は全く意識する事は無いと思います。
ですが、Windows上から省電力マネージャーを立ち上げ満充電容量を見ると90Wh近くあります。
もの凄い容量です。
それにしてもサイクルカウント「0」ってのは気分が良いですね。
でも自分のように、会議だデータセンターだという度にThinkPadからAC電源を頻繁に抜いていると、あっという間にサイクルカウントが増えてバッテリーが劣化していきます。
たぶんこのバッテリーは1年半持てば上出来かもしれません。
恐らく次のバッテリーを買うタイミングでは新しいThinkPadを買うかもしれませんけれど。
momonga6.1でThinkPadのトラックポイントを有効にする ― 2010/06/12 21:05
ThinkPadの売りの1つであるトラックポイントのセンターボタン(正式名称?)を、momonga6.1上で有効にする方法をメモします。
仕事で使っているT400にインストールしたVMware上のmomongaは、特に今回の設定を施さなくてもトラックポイントのセンターボタンが最初から有効になってました。
VMwareの仮想デバイス越しなので真意は定かではありませんが・・・
また今回対象のXウインドウはKDEです。GNOMEや他のXでも有益な情報かどうかは分かりません。
GNOMEの場合はgpointing-device-settingsというパッケージで設定が可能だそうですが、KDEでは動きません。
他のXウインドウ上で動作させたい場合は他サイト様をご覧区下さい。
rootになって/etc/hal/fdi/policy/mouse-wheel.fdiを編集します。
momonga6.1をクリーンインストールした状態では、該当ファイルは存在しませんでした。
存在しない場合は新規作成します。
以下の内容を追記します。
<xml〜から始まる1行目は、新規作成の場合にのみ記述して下さい。
あとはXウインドウを再起動すればThinkPadのトラックポイントのセンターボタンが有効になります。
トラックポイントの有無って、ブラウザー使ってると有効性が顕著ですよね。
今日もlinuxで快適なPCライフを!
仕事で使っているT400にインストールしたVMware上のmomongaは、特に今回の設定を施さなくてもトラックポイントのセンターボタンが最初から有効になってました。
VMwareの仮想デバイス越しなので真意は定かではありませんが・・・
また今回対象のXウインドウはKDEです。GNOMEや他のXでも有益な情報かどうかは分かりません。
GNOMEの場合はgpointing-device-settingsというパッケージで設定が可能だそうですが、KDEでは動きません。
他のXウインドウ上で動作させたい場合は他サイト様をご覧区下さい。
rootになって/etc/hal/fdi/policy/mouse-wheel.fdiを編集します。
momonga6.1をクリーンインストールした状態では、該当ファイルは存在しませんでした。
存在しない場合は新規作成します。
以下の内容を追記します。
<?xml version="1.0" encoding="UTF-8"?> <match key="info.product" string="TPPS/2 IBM TrackPoint"> <merge key="input.x11_options.EmulateWheel" type="string">true</merge> <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge> <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge> <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge> <merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge> <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge> </match> |
<xml〜から始まる1行目は、新規作成の場合にのみ記述して下さい。
あとはXウインドウを再起動すればThinkPadのトラックポイントのセンターボタンが有効になります。
トラックポイントの有無って、ブラウザー使ってると有効性が顕著ですよね。
今日もlinuxで快適なPCライフを!
momonga6.1でWLI-UC-GNを使って無線LAN環境を整える ― 2010/06/11 23:38
X31にインストールしているmomonga6.1環境で無線LANを使う方法をメモ。
ちょっとだけ手間取ったのでログを残しておきます。
無線子機に使うのはメルコのWLI-UC-GNという、小型なUSB接続の子機です。
値段も格安で、某電器量販店で1500円程度でした。
導入前に必要なパッケージは以下の通り。
・gccコンパイラ
・kernel-devel
導入されていない方は、以下のコマンドで予め導入を。
ちなみに、内蔵の無線LANアダプタはBiosレベルでOFFにしています。
なぜかOFFにしないとWLI-UC-GNが正常に動作しなかったので。
-*-*-*-*-*-*-*-*-*- (1) -*-*-*-*-*-*-*-*-*-
以下のサイトからドライバをダウンロードします。
http://www.ralinktech.com/support.php?s=2
落とすファイルはRT307xに該当するもの。
自分が落としたファイルは「DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.bz2」です。
落としたドライバを解凍し、解凍したディレクトリ内に移動します。
-*-*-*-*-*-*-*-*-*- (2) -*-*-*-*-*-*-*-*-*-
このままビルドしてもダメなので、ソースを修正します。
まずは子機であるWLI-UC-GNのIDを調べます。
WLI-UC-GNをUSBに差し込んで以下のコマンドを実行。
「0411:015d」がWLI-UC-GNのIDになります。
これを踏まえ common/rtusb_dev_id.c を修正します。
エディタで開き rtusb_dev_id[] 変数宣言の末尾に
を追加します。コメントがBuffaloでは無くMelcoなのはご愛敬。絶対Buffaloなんて呼んでやらねぇ(過去嫌な思い出があったメーカーなので)。
-*-*-*-*-*-*-*-*-*- (3) -*-*-*-*-*-*-*-*-*-
次に include/os/rt_linux.h を修正します。
を、
に修正します。
-*-*-*-*-*-*-*-*-*- (4) -*-*-*-*-*-*-*-*-*-
さらに os/linux/usb_main_dev.c を修正します。
を、
に修正します。
GPLの部分はただの気持ちです。ね。
-*-*-*-*-*-*-*-*-*- (5) -*-*-*-*-*-*-*-*-*-
次にdatファイル名を変更します。
ファイルは解凍したディレクトリのルートにあります。
-*-*-*-*-*-*-*-*-*- (6) -*-*-*-*-*-*-*-*-*-
これでビルドの準備が整いました。解凍したディレクトリのルートで以下のコマンドを実行します。
ビルドが通らない場合はコンパイラ等のパッケージが正常にインストールされているか確認して下さい。ソースの修正内容も再確認を。
ディレクトリの権限が無い場合はrootで実行して下さいね。
-*-*-*-*-*-*-*-*-*- (7) -*-*-*-*-*-*-*-*-*-
出来たモジュールをインストールします。解凍したディレクトリのルートで以下のコマンドを実行しましょう。
エラー等が出なければ、早速ネットワークマネージャー等でSSIDやWEP等を設定して接続してみましょう。
自分の環境では、この状態で再起動後も自動認識されたので、特にこれ以上の事はしていません。
再起動後に自動認識しない場合は他サイト様をご覧下さい。
今日もlinuxで快適なPCライフを!
ちょっとだけ手間取ったのでログを残しておきます。
無線子機に使うのはメルコのWLI-UC-GNという、小型なUSB接続の子機です。
値段も格安で、某電器量販店で1500円程度でした。
導入前に必要なパッケージは以下の通り。
・gccコンパイラ
・kernel-devel
導入されていない方は、以下のコマンドで予め導入を。
ちなみに、内蔵の無線LANアダプタはBiosレベルでOFFにしています。
なぜかOFFにしないとWLI-UC-GNが正常に動作しなかったので。
$ yum -y install gcc $ yum -y install kernel-devel |
-*-*-*-*-*-*-*-*-*- (1) -*-*-*-*-*-*-*-*-*-
以下のサイトからドライバをダウンロードします。
http://www.ralinktech.com/support.php?s=2
落とすファイルはRT307xに該当するもの。
自分が落としたファイルは「DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.bz2」です。
落としたドライバを解凍し、解凍したディレクトリ内に移動します。
$ tar xvfj DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.bz2   $ cd DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.bz2   |
-*-*-*-*-*-*-*-*-*- (2) -*-*-*-*-*-*-*-*-*-
このままビルドしてもダメなので、ソースを修正します。
まずは子機であるWLI-UC-GNのIDを調べます。
WLI-UC-GNをUSBに差し込んで以下のコマンドを実行。
$ lsusb   Bus 001 Device 002: ID 0411:015d MelCo., Inc.   |
「0411:015d」がWLI-UC-GNのIDになります。
これを踏まえ common/rtusb_dev_id.c を修正します。
エディタで開き rtusb_dev_id[] 変数宣言の末尾に
{USB_DEVICE(0x0411,0x015d)}, /* Melco */   |
を追加します。コメントがBuffaloでは無くMelcoなのはご愛敬。絶対Buffaloなんて呼んでやらねぇ(過去嫌な思い出があったメーカーなので)。
-*-*-*-*-*-*-*-*-*- (3) -*-*-*-*-*-*-*-*-*-
次に include/os/rt_linux.h を修正します。
#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"   #define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat"   |
を、
#define STA_PROFILE_PATH "/etc/Wireless/RT3070STA/RT3070STA.dat"   #define CARD_INFO_PATH "/etc/Wireless/RT3070STA/RT3070STACard.dat"   |
に修正します。
-*-*-*-*-*-*-*-*-*- (4) -*-*-*-*-*-*-*-*-*-
さらに os/linux/usb_main_dev.c を修正します。
MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");   |
を、
MODULE_DESCRIPTION("RT3070 Wireless Lan Linux Driver");   MODULE_LICENSE("GPL");   |
に修正します。
GPLの部分はただの気持ちです。ね。
-*-*-*-*-*-*-*-*-*- (5) -*-*-*-*-*-*-*-*-*-
次にdatファイル名を変更します。
ファイルは解凍したディレクトリのルートにあります。
$ mv RT2870STA.dat RT3070STA.dat   $ mv RT2870STACard.dat RT3070STACard.dat   |
-*-*-*-*-*-*-*-*-*- (6) -*-*-*-*-*-*-*-*-*-
これでビルドの準備が整いました。解凍したディレクトリのルートで以下のコマンドを実行します。
$ make   $ make install   |
ビルドが通らない場合はコンパイラ等のパッケージが正常にインストールされているか確認して下さい。ソースの修正内容も再確認を。
ディレクトリの権限が無い場合はrootで実行して下さいね。
-*-*-*-*-*-*-*-*-*- (7) -*-*-*-*-*-*-*-*-*-
出来たモジュールをインストールします。解凍したディレクトリのルートで以下のコマンドを実行しましょう。
$ insmod os/linux/rt3070sta.ko   |
エラー等が出なければ、早速ネットワークマネージャー等でSSIDやWEP等を設定して接続してみましょう。
自分の環境では、この状態で再起動後も自動認識されたので、特にこれ以上の事はしていません。
再起動後に自動認識しない場合は他サイト様をご覧下さい。
今日もlinuxで快適なPCライフを!
Twitterでびゅー ― 2010/04/28 14:00
今更ながらTwitterを始めてみました。
半年以上ぶりの書き込みがこのネタって・・・過疎ってるなぁ。
前から色々な人のTwitterはROMってたんだけど、暇潰し位の気持ちで始めてみました。
主にパソコンネタとか多いかもしれませんが、フォローして下さる方はどうぞお気軽に。
ゆるい繋がりっていうけど、直接面識のある人以外はなかなかフォローし難いですね。
ひとまず色々イジってみます。
右のツールバーにTwitterを埋め込んだんで、興味のある方はご覧下さい。
半年以上ぶりの書き込みがこのネタって・・・過疎ってるなぁ。
前から色々な人のTwitterはROMってたんだけど、暇潰し位の気持ちで始めてみました。
主にパソコンネタとか多いかもしれませんが、フォローして下さる方はどうぞお気軽に。
ゆるい繋がりっていうけど、直接面識のある人以外はなかなかフォローし難いですね。
ひとまず色々イジってみます。
右のツールバーにTwitterを埋め込んだんで、興味のある方はご覧下さい。
ファミコンのビット ― 2009/06/17 00:26
なんだこのタイトルって思った人が多いかと思いますが、今日はコンピューターのお話。
今でこそプレステ3とかDSとかでは騒がれなくなりましたが、昔のゲーム機はCMで「16bit!」とか「32bit!」とかってのを謳い文句にしていたのを覚えていますでしょうか?
あれなんなのかというと、要するにゲームの処理を行うCPU(中央演算装置)の性能なんです。
で、16とか32っていうのは、簡単に言えば数が多ければ多い程、大きい数値を扱えますって事。
大きい数が扱えると何が凄い?って思う人もいると思いますが、大きい数が扱えると色々と複雑な処理が行えたり、画面に表示する色の種類も増やせます(厳密にはディスプレイに依存する部分が大きい為、これはいちがいには言えませんが)。
ここで、ビットについてちょっと詳しく説明します。
コンピューターってどういう風に出来てるの?って疑問に思った人はいませんか?
コンピューターってのは基本的に対話型です。簡単に言えば操作する人間が居て初めてコンピューターは動けるわけで、人間があれしろ!これしろ!って命令しないと動けません。
つまり、やるかやらないか、だけなんです。身近な物で言えばスイッチです。
蛍光灯のスイッチっていうのはON/OFFしかありませんよね。あれは光を付けるか消すかのどっちかです。
要するにやるかやらないか。コンピューターってのはスイッチの集まりで、簡単に言えばスイッチのお化けです。
みなさんが普段使っているパソコンや携帯電話。あれは簡単に言ってしまえば超小さいスイッチの集まりです。
結局、電気ってのは流れるか流れないかしか制御出来ませんので。
で、ビットってのはスイッチの数です。
コンピューターは数字を表現する場合、複数あるスイッチのどのスイッチがONでどのスイッチがOFFかによって数字を識別します。
例を示します。
解説:0はOFF 1はON
「0001」
この場合、4つのスイッチがあって右端のスイッチのみがONになっています。これはコンピューター上では1を表します。
で、次。
「0010」
これはひとつ左のスイッチがONになり、さっきONになっていたスイッチはOFFになっています。これは2を表します。
よしよし、次。
「0011」
これは3を表します。
感の鋭い方はもうお分かりでしょう。要するにスイッチのONの位置が左にずれればずれるほど数は大きくなります。
とまあ簡単に説明しましたがこんな感じです。もっと詳しく知りたい方はGoogle先生にでも聞いて下さい。書くのが面倒くさいです。
で今日の本題。ファミコンのビットです。
ファミコンっていうのは16ビット制御です。
つまり、さっきの0と1の集合体(スイッチ)が16個並んでいるわけです。
コンピューターはビットが増えれば二乗で扱える数が増えますので、16ビットって事は幾つまで扱えるでしょうか?
2の16乗になるので65535まで扱えます。
え?65536じゃないの?って思われた方は鋭い!
でも0を忘れていませんか?コンピューターにとっては0も大事な数字なんです。基本的にコンピューターは0から数字が始まります。
で、65535っていう数字。昔ファミコンでドラクエをやっていた人はハッとしませんか?
そうです、ゴールドの持てる最大数って65535だったと思います。つまりファミコンの扱える最大数字なんですね。
ドラクエ3なんかはもっと大きな数字がファミコンでも扱えますが、これはプログラマーがちょっと工夫して扱えるかのように表現しているだけで、内部的には65535が最大です。
で、ドラクエ3。
最近、僕はドラクエ3を突発的に始めまして、これに気付いたんです。
この画面コピーはドラクエ3ではぐれメタルを2匹倒した時の画像です。キャラクターの名前は突っ込まないで下さい。もろ趣味丸出しなので。
ドラクエ3でははぐれメタルの経験値は4人パーティであれば10050です。
ところが画面では16383です。あれ?おかしくね?2匹倒したんだから、10050x2で20100じゃないの?って思うでしょ。
ですが、これはさっき解説したビットの限界でこうなってしまっているんです。
試しに16383を4倍してみましょう。答えは65532です。あと3増えればファミコンが扱える数字の最大値です。
つまり、これはドラクエのバグだと思うんです。
ドラクエ3はパーティの人数が少なければ貰える経験値は増えます。4人パーティでモンスターを倒した時に貰えた経験値が、1人で倒せば4倍貰えます。
はぐれメタルで言えば、10050x4で40200です。はぐれメタルの正規の経験値はこれなんですが、2匹倒すとあら不思議、下のような計算になっていると思われます。
はぐれメタル(40200) x 2(匹) / 4(人パーティ) = 20100
ところが、コンピューターは最初の掛け算の時点でファミコンが扱える数値を超えてしまう為、40200x2が65535になってしまうんです。
当然の事ながら、65535を4で割ると小数点を切り捨てて16383になってしまうんですね。
でも以下の式ではどうでしょう。
はぐれメタル(40200) / 4(人パーティ) x 2(匹) = 20100
小学校で乗除の計算は順番を入れ替えても答えは一緒だよって習いましたよね。
これでファミコンでもバッチリ表現出来る数値内です。理論上は1匹当たりの経験地が65535までは対応出来ます。
こんなちょっとした数式で、バグは回避出来ます。
たぶん、当時のエニックスでプログラムを組んでいた人はあほぅでしょうな。
もしかしたらファミコン特有の計算オーバーフローがあるのかもしれませんけどね。
その時はごめんちゃい。
ビットの話ですが、マイナスを扱う場合には最左端のビットでプラスとマイナスを表現するので、扱える数値は16ビットなら-32768~32767までになります、念の為。ドラクエの経験値にマイナスはあり得ないので、今回の話には出していません。
さて、レベル99まで頑張るか。
今でこそプレステ3とかDSとかでは騒がれなくなりましたが、昔のゲーム機はCMで「16bit!」とか「32bit!」とかってのを謳い文句にしていたのを覚えていますでしょうか?
あれなんなのかというと、要するにゲームの処理を行うCPU(中央演算装置)の性能なんです。
で、16とか32っていうのは、簡単に言えば数が多ければ多い程、大きい数値を扱えますって事。
大きい数が扱えると何が凄い?って思う人もいると思いますが、大きい数が扱えると色々と複雑な処理が行えたり、画面に表示する色の種類も増やせます(厳密にはディスプレイに依存する部分が大きい為、これはいちがいには言えませんが)。
ここで、ビットについてちょっと詳しく説明します。
コンピューターってどういう風に出来てるの?って疑問に思った人はいませんか?
コンピューターってのは基本的に対話型です。簡単に言えば操作する人間が居て初めてコンピューターは動けるわけで、人間があれしろ!これしろ!って命令しないと動けません。
つまり、やるかやらないか、だけなんです。身近な物で言えばスイッチです。
蛍光灯のスイッチっていうのはON/OFFしかありませんよね。あれは光を付けるか消すかのどっちかです。
要するにやるかやらないか。コンピューターってのはスイッチの集まりで、簡単に言えばスイッチのお化けです。
みなさんが普段使っているパソコンや携帯電話。あれは簡単に言ってしまえば超小さいスイッチの集まりです。
結局、電気ってのは流れるか流れないかしか制御出来ませんので。
で、ビットってのはスイッチの数です。
コンピューターは数字を表現する場合、複数あるスイッチのどのスイッチがONでどのスイッチがOFFかによって数字を識別します。
例を示します。
解説:0はOFF 1はON
「0001」
この場合、4つのスイッチがあって右端のスイッチのみがONになっています。これはコンピューター上では1を表します。
で、次。
「0010」
これはひとつ左のスイッチがONになり、さっきONになっていたスイッチはOFFになっています。これは2を表します。
よしよし、次。
「0011」
これは3を表します。
感の鋭い方はもうお分かりでしょう。要するにスイッチのONの位置が左にずれればずれるほど数は大きくなります。
とまあ簡単に説明しましたがこんな感じです。もっと詳しく知りたい方はGoogle先生にでも聞いて下さい。書くのが面倒くさいです。
で今日の本題。ファミコンのビットです。
ファミコンっていうのは16ビット制御です。
つまり、さっきの0と1の集合体(スイッチ)が16個並んでいるわけです。
コンピューターはビットが増えれば二乗で扱える数が増えますので、16ビットって事は幾つまで扱えるでしょうか?
2の16乗になるので65535まで扱えます。
え?65536じゃないの?って思われた方は鋭い!
でも0を忘れていませんか?コンピューターにとっては0も大事な数字なんです。基本的にコンピューターは0から数字が始まります。
で、65535っていう数字。昔ファミコンでドラクエをやっていた人はハッとしませんか?
そうです、ゴールドの持てる最大数って65535だったと思います。つまりファミコンの扱える最大数字なんですね。
ドラクエ3なんかはもっと大きな数字がファミコンでも扱えますが、これはプログラマーがちょっと工夫して扱えるかのように表現しているだけで、内部的には65535が最大です。
で、ドラクエ3。
最近、僕はドラクエ3を突発的に始めまして、これに気付いたんです。
この画面コピーはドラクエ3ではぐれメタルを2匹倒した時の画像です。キャラクターの名前は突っ込まないで下さい。もろ趣味丸出しなので。
ドラクエ3でははぐれメタルの経験値は4人パーティであれば10050です。
ところが画面では16383です。あれ?おかしくね?2匹倒したんだから、10050x2で20100じゃないの?って思うでしょ。
ですが、これはさっき解説したビットの限界でこうなってしまっているんです。
試しに16383を4倍してみましょう。答えは65532です。あと3増えればファミコンが扱える数字の最大値です。
つまり、これはドラクエのバグだと思うんです。
ドラクエ3はパーティの人数が少なければ貰える経験値は増えます。4人パーティでモンスターを倒した時に貰えた経験値が、1人で倒せば4倍貰えます。
はぐれメタルで言えば、10050x4で40200です。はぐれメタルの正規の経験値はこれなんですが、2匹倒すとあら不思議、下のような計算になっていると思われます。
はぐれメタル(40200) x 2(匹) / 4(人パーティ) = 20100
ところが、コンピューターは最初の掛け算の時点でファミコンが扱える数値を超えてしまう為、40200x2が65535になってしまうんです。
当然の事ながら、65535を4で割ると小数点を切り捨てて16383になってしまうんですね。
でも以下の式ではどうでしょう。
はぐれメタル(40200) / 4(人パーティ) x 2(匹) = 20100
小学校で乗除の計算は順番を入れ替えても答えは一緒だよって習いましたよね。
これでファミコンでもバッチリ表現出来る数値内です。理論上は1匹当たりの経験地が65535までは対応出来ます。
こんなちょっとした数式で、バグは回避出来ます。
たぶん、当時のエニックスでプログラムを組んでいた人はあほぅでしょうな。
もしかしたらファミコン特有の計算オーバーフローがあるのかもしれませんけどね。
その時はごめんちゃい。
ビットの話ですが、マイナスを扱う場合には最左端のビットでプラスとマイナスを表現するので、扱える数値は16ビットなら-32768~32767までになります、念の為。ドラクエの経験値にマイナスはあり得ないので、今回の話には出していません。
さて、レベル99まで頑張るか。
最近のコメント