コメントスパム対策のため、特定メールアドレスの入った突っ込みをお断りしています。
朝マック行く前に言っておくッ! おれは今日マクドの新メニューをほんのちょっぴりだが体験した い…いや…体験したというよりはまったく理解を超えていたのだが…… あ…ありのまま 今 起こった事を話すぜ! 『マックマフィンを齧ったら、 バカ甘いパンケーキだった』 な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった 頭がどうにかなりそうだった… まずいとか調理ミスとか そんなチャチなもんじゃあ 断じてねえ もっと恐ろしいものの片鱗を味わったぜ…
メープルシロップ漬けパンケーキの甘ったるさが全てを凌駕する味で、本当に食べ物として作られているかどうか疑う位の不味さでした。
ここまで不味い食物あったっけ? と記憶を辿り、出てきたのはインドのゲテモノデザートと喫茶マウンテンの甘味パスタ。
ですが恐ろしいことに、どうやらこれはマックグリドルという正式メニューらしいのです。
調べてみると美味いと思っている人も居るとか……凄いな。
これが「スイートサンド」とかそんな名前で昼過ぎに売られていたなら評価も違うと思うんですが、不意打ちはイカンよ。
「友樹のおもちゃ箱」や「MOBADOS掲示板」では 256〜512MBが上限とか HP200LX でフォーマットすれば良いと書かれていますが、今日び microSD を探しても 1GB とか 2GB しか無いので困ってしまいます。
しかし原因の大半は 昔の528MB制限と同じ箇所にありますので、先頭の 256MB ないし 512MB だけ使うことが可能です。
DOSモバは古いDOSで動いていますから、LBAではなくCHSを使ってストレージにアクセスします。
よってCHSの各種制限を受けます。具体的には以下の通りです。
この制限に合わせるためには Linux の fdisk/cfdisk などでSDメモリのヘッダとセクタを調整し、パーティションのサイズによってシリンダを調整します。
1セクタ=512byte のため、ヘッダとセクタを16/63 としたとき シリンダが 1024 になるパーティションのサイズは 512MB 近辺(528,482,304 bytes)です。
いろんな SD メモリの CHS パラメタを見てみました。
HP200LXでフォーマットした 2GB microSD のディスクイメージが「こばこのひみつ」で公開されていましたが、DOSモバ(Unishell)で認識する容量自身がすでにおかしいのでダメでした。
原理は「パーティションテーブルの解析」に書かれている通りです。
Linux の fdisk で見るのが一番手っ取り早いのですが、MBRを直接見ることで更に細かいところまで判断できます。
まずMBRを取得する方法ですが、これはdd for Windowsでディスクの先頭 512byte を取ってくればOK。
dd --list
でPCに繋がっているディスク・パーティションの情報が得られますので、
dd if=\\?\Device\Harddisk1\Partition0 of=e:\sd2g_adata_xp.mbr bs=512 count=1
とやれば MBR を取得できます。
dd if=\\?\Device\Harddisk1\Partition1 of=e:\sd2g_adata_xp.pbr bs=512 count=1
または dd if=\\.\h: of=e:\sd2g_adata_xp.pbr bs=512 count=1
とすると PBR(パーティションブートレコード)を取得できます。中身は「PBRの構造」を参照のこと。
昔 Linux を入れると「liloを HDD の先頭に入れますか? それともパーティションに入れますか?」みたいなことを聞かれていました。前者がMBR、後者がPBRのブートストラップに書き込むという意味なのでしょう
なお、SDメモリカードからMBR/PBRを採取するときは、USBの変換アダプタを介する必要があります。ノートPCについているSDメモリスロット経由ではフロッピー扱いになるため、MBR/PBRを取得できません。
取り出した 512bytes から CHS パラメタを取得する Perl スクリプトは以下の通り。
open (MBRFILE, $ARGV[0] );
binmode(MBRFILE); # これがないと \x0D,\x0A を勝手に削る(怒
read(MBRFILE, $bootSector, 446);
for ($i=0; $i < 4; $i++){
read(MBRFILE, $bootFlag, 1);
read(MBRFILE, $CHSstart, 3);
read(MBRFILE, $type, 1);
read(MBRFILE, $CHSend, 3);
read(MBRFILE, $LBAstart, 4);
read(MBRFILE, $LBAlength, 4);
$LBAstart = unpack("L", $LBAstart);
$LBAlength = unpack("L", $LBAlength);
$sizeMB = (($LBAlength * 512) / 1000000.0);
$sizeMiB = (($LBAlength * 512) / (1024.0 * 1024.0));
last if ($LBAlength == 0);
printf("BootFlag = %d, type = %s\n", (unpack("C", $bootFlag)==0)? 0 : 1, unpack("h", $type));
($c0,$h0,$s0) = &readCHS($CHSstart);
($c1,$h1,$s1) = &readCHS($CHSend);
printf("CHS start = %d/%d/%d, end = %d/%d/%d\n", $c0,$h0,$s0,$c1,$h1,$s1);
printf("LBA start = %d, len = %d\n", $LBAstart, $LBAlength);
printf("Size = %0.3f [MB], %0.3f [MiB]\n", $sizeMB, $sizeMiB);
$CHSendSector = ($c1 + 1) * ($h1 + 1) * $s1 -1;
$LBAendSector = $LBAstart + $LBAlength - 1;
if ($CHSendSector == $LBAendSector){
printf("CHS end Sector and LBA end Sector is %d (matched)\n", $CHSendSector);
}else{
printf("CHS end Sector is %d, LBA end Sector is %d (NOT matched)\n", $CHSendSector, $LBAendSector);
}
# CとH は 0から始まるので、HDDの特性値としては +1 される
if ($c1 > 0){
printf(" CHS in HDD is %d/%d/%d\n", $c1+1,$h1+1,$s1);
}
}
close(MBRFILE);
sub readCHS($){
my ($chsBin) = @_;
my ($h, $s, $c) = unpack("C3", $chsBin);
$c = $c + ($s >> 6) * 256;
$s = $s % 64;
return ($c, $h, $s);
}
第一パーティションの開始CHSは=0/1/1、それ以外のパーティションは開始点の H/S が 0となる規定のため、第一パーティションの最終ヘッダ+1と最終セクタ が HDD の最大ヘッダ、最大セクタ値となります(ヘッダは0から始まるため+1する)。
というか他にC/H/Sの最大値を記録する場所が無いため、Linux fdisk などで C/H/S を設定してもパーティションを作成しない限り H/S の値は保存されないようです。
じゃあ、Linux の fdisk とかで見るシリンダ最大値はどこから取るんだろう? ファームに総セクタ数でも書いてあって、そっから適当に割り出すのかな?
これでHP200LX用SD2Gイメージを見てみたところ、 C/H/S = 620/16/32 でした。
LBA の始点は32、終点は3987424。かなり食い違うんだけど、大丈夫なの?
Before...
削除Mona Sandy [削除http://cialis.great-monday.com/is-it-safe-to-buy-cialis-..]
slots8 [холдем менеджер титан покер <a href="http://tunloterbharcu..]
blackjack9 [скачать азартные игры lg kp500 характеристика <a href= htt..]