トップ «前の日記(2009-04-17 [J]) 最新 次の日記(2009-04-19 [J])» 編集

ゆ〜ぞ〜の備忘録

コメントスパム対策のため、特定メールアドレスの入った突っ込みをお断りしています。

2005|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|03|04|05|06|07|08|09|10|11|12|
2010|01|03|
2036|01|

2009-04-18 [J] [mobile] DOS版モバイルギアでSDメモリを使う方法 [長年日記]

DOSモバでSDを動かす

友樹のおもちゃ箱」や「MOBADOS掲示板」では 256〜512MBが上限とか HP200LX でフォーマットすれば良いと書かれていますが、今日び microSD を探しても 1GB とか 2GB しか無いので困ってしまいます。

しかし原因の大半は 昔の528MB制限と同じ箇所にありますので、先頭の 256MB ないし 512MB だけ使うことが可能です。

DOSモバの制限

DOSモバは古いDOSで動いていますから、LBAではなくCHSを使ってストレージにアクセスします。
よってCHSの各種制限を受けます。具体的には以下の通りです。

  • C(シリンダ)<= 1023
  • H(ヘッダ) <= 16
  • S(セクタ) <= 63

この制限に合わせるためには Linux の fdisk/cfdisk などでSDメモリのヘッダとセクタを調整し、パーティションのサイズによってシリンダを調整します。

1セクタ=512byte のため、ヘッダとセクタを16/63 としたとき シリンダが 1024 になるパーティションのサイズは 512MB 近辺(528,482,304 bytes)です。

CHSを見てみよう

いろんな SD メモリの CHS パラメタを見てみました。

  • Buffalo 128MB SD の C/H/S = 993/8/32
  • ハギワラシスコム 256MB SD の C/H/S = 985/16/32
  • ハギワラシスコム 1GB SD の C/H/S = 947/64/32
  • sandisk 2GB SD の C/H/S = 7754/16/32
  • adata 16GB USB フラッシュメモリの C/H/S = 1024/255/63, LBA = 63/32097807
    終点 C/H/S を 1023/254/63 とするのが8.4GB越えの規定値だそうです。ちなみにLBA end は 32097869
  • Toshiba 8GB microSD の C/H/S = 968/255/63, LBA = 63/15550857
  • adata 8GB microSD C/H/S = 980/255/63, LBA = 63/15743637
  • ハギワラ 1GB SD を デジカメでフォーマットすると C/H/S = 969728/2/1
  • ハギワラ 1GB SD を GT-31 でフォーマットすると C/H/S = 15152/4/32
  • ハギワラ 1GB SD の CHS を Linux fdisk で変更する場合は C/H/S = 3788/16/32 または 1924/16/63 になる
    CHS=3788/16/32 または 1924/16/63 として シリンダ1023までのパーティションを確保し、DOSでフォーマットすることによりモバイルギアでの動作を確認。
    256MB または 512MB だけですが、カードを選ばないのがミソです。

おまけ

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。かなり食い違うんだけど、大丈夫なの?

本日のツッコミ(全15件) [ツッコミを入れる]
削除Benita Leibowitz (2012-06-11 [J] 01:01)

削除http://in5drugs.fether.net/what-is-the-legal-place-to-get-eriacta.html What is the legal place to get eriacta? http://payday.altvenue.com/fastest-loans.html fastest loans

削除Chastine Shorter (2012-09-07 [J] 04:02)

削除http://in2drugs.sc-midwives.org/purchase-deltasone-at-low-cost.html purchase deltasone at low cost http://in3drugs.friendsofnoah-wi.org/levitra-pills-offers.html levitra pills offers

削除Candise Bonifay (2013-01-07 [J] 16:18)

削除http://payday-loans.victorianprose.org/instant-decision-unsecured-loans.html instant decision unsecured loans http://payday-loans.makemusicnewyork.com/check-advance.html check advance

cialisjourpopoloums (2013-01-09 [J] 07:55)

http://www.cialisltd.com/#jl4cvb.sakura.ne.jp - cialis http://www.cialisltd.com/#jl4cvb.sakura.ne.jp - order cialis <br><a href=http://www.cialisltd.com/#jl4cvb.sakura.ne.jp>cialis cost</a>

gronnaanato (2013-01-21 [J] 06:49)

http://site.ru - http://site.ru - site site <br><a href=http://site.ru>site</a>

propeciagronnaanato (2013-01-29 [J] 10:57)

http://www.propecianorxpharmacy.com/buy-propecia.html - http://www.propecianorxpharmacy.com/buy-propecia.html - buy propecia propecia online <br><a href=http://www.propecianorxpharmacy.com/buy-propecia.html>propecia online</a>

削除Rynee Bankhead (2013-01-30 [J] 20:26)

削除http://in6drugs.catalystmedicalcenter.com/how-can-i-order-propecia.html How can i order propecia? http://in3drugs.glgpharma.com/plavix-discount.html plavix discount

削除Clarise Sifford (2013-02-21 [J] 19:39)

削除http://payday.moremarrowdonors.org/payday-loan-no-check.html payday loan no check http://cialis.vidol.gov/best-price-cialis-at-shop.html best price cialis at shop

cialisonline (2013-02-23 [J] 06:19)

http://www.cialisdelightful.com/ - http://www.cialisdelightful.com/ - cialis cash on delivery msn <br><a href=http://www.cialisdelightful.com/>cialis brand</a>

cialisonline (2013-02-23 [J] 15:47)

http://www.cialisdelightful.com/ - http://www.cialisdelightful.com/ - cialis pill msn <br><a href=http://www.cialisdelightful.com/>cialis online pharmacy</a>

meelliohomb (2013-02-24 [J] 05:46)

http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp - <a href=http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp>cialis pill</a> cialis <br>http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp - cialis us

meelliohomb (2013-02-24 [J] 08:40)

http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp - <a href=http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp>cialis fast</a> cialis uk <br>http://www.cialislmtd.com/#jl4cvb.sakura.ne.jp - cialis fast

削除Mona Sandy (2013-02-26 [J] 01:41)

削除http://cialis.great-monday.com/is-it-safe-to-buy-cialis-from-latvia.html is it safe to buy cialis from latvia in Macon IL 62544 Illinois

slots8 (2013-06-26 [J] 18:07)

холдем менеджер титан покер <a href="http://tunloterbharcuce.narod.ru/hot96.html">Игровые Автоматы Алладин Играть Бесплатно Онлайн</a> интернет казино рулетка игровые автоматы gaminator <a href="http://tunloterbharcuce.narod.ru/">Форум Казино Онлайн</a>

blackjack9 (2013-08-24 [J] 04:34)

скачать азартные игры lg kp500 характеристика <a href= http://kazino.sleepassultsex.com/news275.html >играть в покер на деньги отзывы клиентов</a> покер на айпад <a href= http://kazino.sleepassultsex.com/news335.html >киви кошелек игровые автоматы онлайн вулкан</a> карточная игра 1000 для android торрент <a href= http://kazino.sleepassultsex.com/news0.html >игра на реальные деньги в казино онлайн играть</a> покер онлайн казино!