目次: プロバイダ - まとめリンク
大下邸の PC のセットアップをしました。NTT 西日本の B フレッツ(光プレミアム)では ONU(光ファイバーつなぐやつ)以外に、CTU というルータのような装置を貸与されます。CTU は DHCP サーバとして動くので、大抵はケーブルを差せば動くようになっております。
無線 LAN も使いたかったので、無線 LAN ルータの DHCP サーバ機能を殺して接続しておきました。PPPoE も DHCP も NAT も何もかも OFF にしているため、無線 LAN ルータではなく単なる有線 <-> 無線ブリッジになり下がってますけど。もったいない話だ。
CTU は NTT 西日本独自の装置らしくて、地域 IP 網(IPv6)とユーザ側のネットワーク(多くは IPv4)を橋渡しする役目を果たしているようです。それ以外もごちゃごちゃやってるようですが、あまり詳しく書いてあるところがないですね…。
大きさも普通のルータ程度ですし、ルータ機能も良くできてると思いますが、設定するために一々 NTT のサーバへアクセス(アドレスは https://ctu.fletsnet.com/, IPv4:210.247.16.1, IPv6:2001:d70:3:1::3:3)しなければならないのがめんどくさい…。
うーむ、風邪引いたかもしれん。
大下さんちに遊びに行きました。阪急の淡路駅で初めて降りた気がします。
淡路駅は特急が止まります。ですが駅前には商店街があるだけで特に何があるっつーわけでもないです。駅や周辺地域の規模ではなくて、交通要所(千里線と京都線の乗り換え駅)だから止まるんだな。たぶん。
ファミコンのアルテリオスというゲームを攻略した情報を一生懸命メモした(特にパスワード)のに、またやろうとしたら紙がない。こういう時って、やる気がなくなって諦めた頃に紙が出てくるもんですよね。
ここに書いてしまえば忘れないだろってことで書いておきます。まあ、ネット上の情報も「どう頑張っても探せなくなった」ら、消えたも同然なんですけどね。人の記憶と似てますねえ。
アルテリオスはうまくできていて、主人公の名前によって扉のパスワードが変わります。なので主人公の名前を「A」にしないと、以下のパスワードと違うパスワードになってしまうはずです(私には確認できませんが、カセットのロットなどその他の要因でも変わるかも)。
まあ、攻略の有無以前に単純に敵が強くてクリアできてないけどな…。ハイパーなんちゃら系がアホみたいに TUEEEEEE ので、必ずボコボコにされる。
チートコードを調べてたときのメモです。知ってどうする情報とか、いじるとおかしくなる情報もあります。自己責任で。セーブデータが飛んでも知りません。
0026: 戦闘時の横位置、移動時の横位置も?
0702: 戦闘時の縦位置
0428: HP
0430: WE
6201: 敵の縦位置 0x65 くらいで自分の初期位置
6202: 敵の横位置 0x80 くらいで自分の初期位置
6230: 敵弾の判定? 0にすると敵の弾が来ない
070e: 左の自弾の横位置
0716: 右の自弾の横位置
マップは変化しないが、出現する敵などに影響する。
0420: 現在居る惑星
00 メイランド
01 ユナイト
02 リートランド
03 ディーモス
04 トゥメールカムス
05 ディーモス
06 トゥメールカムス
07 (バグってリセットされる)
自身が居る位置は左上から右向きに 1ずつ増えるようだ。
(画面左端)0 1 2 3(画面右端)
4 5 6 7
続く...
例えばメイランドだと、0x40 足すと一個下に進める
0421: 自身が居る位置、上位 8ビット
0422: 自身が居る位置、下位 8ビット
マップを変えられるが、大抵変なところにはまる。
0423: 現在居るマップ
00 メイランド、メイン迷路
01 ユナイト、メイン迷路
02 ユナイト、ダーフラの街
03 ユナイト、ニーツニーの街
04 ユナイト、イクニバッドの街
05 ユナイト、オドラノエルの街
06 リートランド、メイン迷路
07 リートランド、小惑星
08 リートランド、コロニー
09 ディーモス、メイン迷路
0a ディーモス、城内
0b ディーモス、ノエロパの街
0c ディーモス、エトラパノフの街
0d トゥメールカムス、メイン迷路
0e トゥメールカムス、宮殿
0f トゥメールカムス、宮殿最深部
10 トゥメールカムス、レルチの街
11 トゥメールカムス、フローダの街
12 以降はバグる
(下位 4ビットが種類、5ビット目が装備しているか否か、それ以外は無意味)
042c: 武器1
042d: 武器2
042e: 武器3
042f: 武器4
043e: ストップ個数
043f: デビルハンマー個数
0440: デストロイド個数
0446: アイテム装備状態(2: ストップ, 4: デビルハンマー, 8: デストロイド)
0447: 武器攻撃力合計値
実家にはまだアルテリオスのカセットがあるはずですが、肝心のファミコン本体が死んじゃったからなあ。もうエミュレータでしか画面が拝めないのかあ…。
毎回話題がバラバラな日記ですみません。今日は補数の話です。
N 進数の補数は 2つあります。N の補数と、N-1 の補数です。10進数ならば 10 の補数と 10-1 の補数(9の補数ともいう)があります。
ある N 進数 x の N の補数 y とは、足すと桁上がりする最小の数値を指します。
10進数でいきますと、x = 123 だとしたら、10 の補数は足すと桁上がり(1,000 になる)する最小の数値ですから 877 です。
要するに y = 1,000 - x = 1,000 - 123 = 877 と計算します。4桁の数字なら 10,000 から引けばいいですし、5桁なら 100,000 から、n 桁なら 10^(n) から引いてください。
ある N 進数 x の N-1 の補数 z とは、足しても桁上がりしない最大の数値を指します。
また 10進数を例に取ると、x = 123 として、10-1 の補数は足しても桁上がり(1,000)に達しない最大の数ですから、876 です。足すと 999 になります。
これも要するに z = (1,000 - 1) - x = 999 - x = 876 と計算します。特徴として、10 の補数から 1 引いても得られますし、逆に 10-1 の補数に 1 を加えると 10 の補数になります(この性質は後ほど重要です)。
N の補数は何が嬉しいかというと「負の数の表現として使えば、引き算が不要になる」という点です。
3桁の 10進数 500 - 300 を計算したいとします。「引き算は知らないが 3桁の足し算と 10 の補数を書いた表だけ持ってる」と仮定します。むちゃくちゃに見えますけど、後で意味が分かると思います。
引き算は知りませんので、まずは負の数を消しにかかります。負の数は絶対値の補数に置き換えて消します。表を見ると 300 の 10 の補数は 700(計算で出すなら 1,000 - 300)ですから、
500 - 300 = 500 + 700
こう置き換えます。すると足し算のみになって、計算できるようになります。
500 + 700 = 1,200
4桁目が出てきてしまいましたが、3桁の足し算しか知らんので 4桁目は捨てます。さようなら〜。
1,200 => 200
この結果は 500 - 300 = 200 の結果と一致します。
不思議に見えますが、そもそも補数 y の定義が y = 1,000 - x なので、x = 300 で式を展開すると、
500 + (1,000 - 300) = 1,200 --(4桁目無視)--> 200
となるのは当たり前といわれれば当たり前の結果です。しつこいですが大事なポイントは「引き算が足し算に化ける」という点です。
とはいえ、10進数だと補数を計算するために結局引き算が必要で、ありがたみがありません。これはその他の記数法(図では 3進数を例とした)でも同じです。
ところが 2進数となると非常に嬉しい性質があります。以下の図を見てください。
2進数においては全桁を反転させる演算(Not 演算)によって、容易に 2-1 の補数を得ることができ、そこに 1 加えれば 2 の補数を得ることができます。つまり Not 演算さえあれば 2 の補数の導出に引き算は不要です。コンピュータだからこそできる技といえましょう。
この性質のためコンピュータに減算器は不要で(※)、加算器の前に Not 演算と 1 加える回路をつけるだけで良いのです。回路が少なくなればコンピュータも安くなります。いやあ、補数って素晴らしいですね。
(※)コンピュータは前章の説明に出てきた「引き算は知らないが 3桁の足し算と 10 の補数を書いた表だけ持ってる」の代表格です。コンピュータの場合 2進数を扱うため 10の補数ではなく 2の補数です。
まとめると「一定桁(32桁、64桁など)の足し算と、2の補数しか知らない」変な奴と言えます。本当は意図的にそう作っていると言った方が正しいですけど…。
補数を負の数として扱うと良いこと(減算がなくなる)があるのは分かっていただけたかとおもいます。残る問題はどこからを負の数と見なすかです。卑近な例で言うと printf したときに、どこからマイナスなのよ?って話です。
前章まで話してきた計算の問題と関係ありそうに見えますが、実は全然関係ありません。ぶっちゃけた話、どこから負の数と見なしても構いません。以下の図をご覧下さい。
この図にある解釈方法ですと 2進数の 101 以上を負の数と見なします。
何?ずれてる?いやいや…。このような解釈でも使っている人がウンと言えばそれで良いんです。とはいったものの、この方式ではウンと言う人は少なそうです。この方式は欠点が多すぎます。
桁が増えたときに正負の境界をどう決めるかがあいまいであるがために、境界を見分ける処理が複雑になる可能性があります。プログラマや回路設計者に嫌われますね。それとやたら正の数ばかりが多くて、負の数を使いたい人にも嫌われます。
多くの方が見慣れたパターンは、最上位のビットが 1 なら負の数と見なす、以下のような解釈方法でしょう。
この解釈方法が採用されている理由は、効率的だからだと思われます。この解釈方法であれば、何桁になろうとも「最上位ビットの有無」という同じルールが適用できます。さらに正の数の範囲と負の数の範囲がほぼ同じ(負の数の範囲が 1 広いけど)で使いやすいのです。
Linux のページディレクトリを見ていると 0xc000 0000 以降(※)はページディレクトリエントリがあるのに、その先のページテーブルがありません。なぜこれで動くんでしょう?
調べてみると、なるほど、トリックがありました。
Linux は CR4 の PSE ビット(Page Size Extension、ビット 4)を 1 にして、4MB/4KB どちらのサイズでも使えるようにしています。
確かめ方は、右 Alt + ScrLock を押してレジスタダンプすると簡単でしょうか?以下のようなメッセージが出るはずです。Pentium Pro から導入されているはずですので、未対応というのはそうそうないかと…。
Pid: 0, comm: swapper EIP: 0060:[<c01019bd>] CPU: 0 EIP is at default_idle+0x31/0x59 EFLAGS: 00010246 Not tainted (2.6.18-6-486 #1) EAX: 00000000 EBX: 00000800 ECX: c1101040 EDX: c030e000 ESI: 00099100 EDI: c0302800 EBP: 003a7007 DS: 007b ES: 007b CR0: 8005003b CR2: c02bd7f4 CR3: 07175000 CR4: 00000690 [<c0101a1c>] cpu_idle+0x37/0x4c [<c03105fa>] start_kernel+0x270/0x272
肝心なのは CR4 レジスタの値です。CR4 レジスタが 0x0000 0690、2進数だと 0110 1001 0000 ですから、ビット 4(ビット 0 から数えるので、右から 5番目)の PSE ビットが 1 になっていることが分かります。
(※)カーネルが使うリニアアドレス用のマッピングで、物理メモリ先頭 896MB 分を仮想アドレス 0xc000 0000 へマップしています。
物理: 0x0000 0000 .... 0x37ff ffff
リニア: 0xc000 0000 .... 0xf7ff ffff
というマッピングです。
じゃあ 4MB と 4KB の区別はどこでやってるのさ?というと、ページディレクトリテーブルの要素である、ページディレクトリエントリでやっています。インテルのマニュアルによれば、ページディレクトリエントリの構成は以下のようになっています。
細かい説明は後述しますが、PS ビット(Page Size、ビット 7)が 1 になっていれば 4MB のページを指し、0 ならば 4KB のページを使うことを意味します。
128MB の実メモリを割り当てた仮想マシン上で Linux を起動して、適当なプロセスのページテーブルをダンプしてみると、768 要素目から以下のようなページディレクトリエントリが見受けられます。
128MB しか実メモリがないので、768〜799 番目(4MB x 32ページ)までしか値が埋まりません。余った 800 番目以降は別の用途に使われます。
768: 0x000001e3, 0x004001e3, 0x008001e3, 0x00c001e3, 772: 0x010001e3, 0x014001e3, 0x018001e3, 0x01c001e3, 776: 0x020001e3, 0x024001e3, 0x028001e3, 0x02c001e3, 780: 0x030001e3, 0x034001e3, 0x038001e3, 0x03c001e3, 784: 0x040001e3, 0x044001e3, 0x048001e3, 0x04c001e3, 788: 0x050001e3, 0x054001e3, 0x058001e3, 0x05c001e3, 792: 0x060001e3, 0x064001e3, 0x068001e3, 0x06c001e3, 796: 0x070001e3, 0x074001e3, 0x078001e3, 0x07c001e3, 800: 0x00000000, 0x00000000, 0x07baf067, 0x00000000,
772 番目を例に取ると、0xc100 0000〜0xc13f ffff の 4MB 分のアドレスをマップしています。0x010001e3 は 2進数だと 0001 0000 0000 0000 0001 1110 0011 ですので、先ほどの図に当てはめてみると、
4MB のページングを使っているのはカーネル用のリニアアドレス(0xc000 0000〜)だけのようです。他のページディレクトリエントリには PS ビットが設定されていません。ページ番号の指す先には、もう一段ページテーブルがあり、その先にやっと 4KB のページがあります。
理由ですが、インテルのマニュアルによると 4MB と 4KB のページは別の TLB に置かれるので、カーネルのように頻繁に使うコードやデータは 4MB ページに置いておくと、フラッシュされなくて良いよ、ってなことが書いてあります。また、ページサイズが大きければ TLB ミスも少ないよ、ってな解説もあります。恐らくそんな理由です。
絵にしてみるとこんな感じでしょうか。間違ってるかも…。
サイズはアドレスの範囲を意味するのではなくてテーブル自体の大きさのことです。ページディレクトリテーブル(一段目のテーブル)も、ページテーブル(二段目のテーブル)も 4バイト x 1024 要素なので同じ 4KB ですよ、って言いたかっただけです。
今日はメーデーです。そんなことより、エクスプローラのネットワークドライブへの無駄なリトライがすごくイライラする。
あるマシン A で Windows のネットワークドライブを設定(宛先を B とする)して、接続先であるマシン B を落とすと、当然そのネットワークドライブは使えなくなります。
そこまでは良いのですが、エクスプローラってば使えなくなったネットワークドライブにアクセスしようとすると 10秒近くフリーズしてしまいます。TCP SYN+ACK 待ちにしては諦めが早すぎるので、NetBIOS でしょうか?
さらに嫌なことに、ネットワークドライブと全く関係ない操作(例:フォーカスを戻す)でも、毎回ネットワークドライブを確認してはフリーズします。もうイライラして仕方ないです。
マシン A を起動した時点でマシン B が死んでいると、ネットワークドライブは切断されている扱いになって、上記の現象は起きません。その後マシン B を起動してもネットワークドライブは切断された扱いのままです。
切断されている状態だとネットワークドライブ上のファイルへのアクセスが軒並み失敗しますので、すぐにわかるかと思います。
しかしエクスプローラからネットワークドライブを見てしまうと再接続処理が走るようで、以降は接続された扱いになります。こうなるともうダメで、マシン B を落とすと上記のフリーズしまくり状態に突入します。
ネットワークドライブの接続先が Samba の場合はフリーズ現象が発生します。接続先のマシンを落とすと、ネットワークドライブのプロパティには「ネットワークドライブ:NTFS(または未フォーマットとも)」などと表示されます。
一方で Windows XP の共有ドライブの場合はフリーズ現象が起こりません。接続先のマシンを落とすと、ネットワークドライブのプロパティには「切断されたネットワークドライブ」と表示されます。
どうも Samba はサーバ終了時に、接続中のクライアントに何かを通知すべきなのに、全部すっ飛ばして終了するみたいです。オプションでなんとかならんかなあ…。
しかし、いつまでも未練がましく覚えているクライアント側も大概にしてほしいものです。なんとかしてネットワークドライブの記憶を消せないか探ってみました。
まず、以下のコマンドで ARP のキャッシュをクリアしました。
arp -d *
しかし症状は変わらず。
次に NetBIOS のホスト名 <-> IP アドレスのキャッシュをクリアしました。
nbtstat -R
やはり直りません。
エクスプローラが何か覚えているのかもと explorer.exe を強制終了させ再起動しましたが、依然として直りません。
残るは System プロセス(pid: 4)が覚えている可能性がありますが、確かめる方法がわからんなあ。
うちの会社は 5/1 と 5/2 が休みなので、今年のゴールデンウィークは 6連休(5/1〜5/6)です。さらに 4/29 の祝日(昭和の日)を有給休暇(4/30)で繋いで 8連休にする人が多いのではないでしょうか。
中には 4/28 も有給休暇にして 11連休(4/26〜5/6)でイ゛ェアアアア!!という猛者も居ます。
一方、自分は特に予定もなく今日も出社しておりました。普段と違うのは、チームの人が何人か居ないのと、良く知らない仕事(隣のチームの仕事の手伝い)が回ってきたくらいか…。
ちなみに隣のチームは修羅場ってて、ゴールデンウィークなんかねえよwwみたいな話をしている方がいました。恐ろしい子…!
ついに一週間更新せずに放置してしまいました。あわてて書き足すも、先週の頭あたりなんてもう覚えてないぜ。
先日、JR 長岡京駅で発見して以来、気になっていて仕方ないポスターがあります。鉄道警察隊によるちかん防止のポスターです。
どうみても下手な絵、バラバラで虚ろな瞳、真っ赤な枠、首だけで浮かび「私は見ている 許さない」と決め台詞。「せいぎくん」はちかん被害にあった女性の代弁者なのでしょうか…呪ってやるという雰囲気すら感じます。見れば見るほどに怖いです。
ちなみに発行元が京都府警なので、京都府内の他駅(長岡京駅、以外)でも見かけるかもしれませんね。何、別に見たくない?あ、そう…。
合計:
本日:
< | 2008 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2021.
Powered by PHP 5.2.17.
using GD bundled (2.0.34 compatible)(png support.)