ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
11月 10 (土曜日) 2007
23:51
毛利小五郎でした!!!
 
・・・このオイラのマヌケさといったら、迷探偵毛利小五郎か、はたまたうっかり八兵衛か!!!

FAT領域は圧縮されている

って、黒猫本のP388にちゃんと書いてあるじゃん!!!!

・・・・嗚呼・・・・なーにやってんだろ・・・俺・・・・orz・・・
 
30日を過ぎたBlogにはコメントできません。
22:50
じっちゅんの名にかけて謎は全て解けた!!
 
FAT領域の並びをもう一回見直してみた!

ウチのFAT(論理セクタ1)の状態
FAT番号 00 01 02 03 04 05 06 07
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000200 F0 FF FF 03 40 00 05 60 00 07 80 00 09 A0 00 0B
FAT番号 08 09 0A 0B 0C 0D 0E 0F
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000210 C0 00 0D E0 00 0F 00 01 11 20 01 13 40 01 15 60
FAT番号 10 11 12 13 14 15 16 17
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000220 01 17 80 01 19 A0 01 1B C0 01 1D E0 01 1F 00 02
:
:
FAT番号 A0 A1 A2 A3 A4 A5 A6 A7
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000340 0D D7 80 0D D9 A0 0D DB C0 0D DD E0 0D DF 00 0E
FAT番号 A8 A9 AA AB AC AD AE AF
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000350 E1 20 0E E3 40 0E E5 60 0E FF 8F 0E E9 A0 0E EB


・・・うーん。合っている。FAT番号0x00AB(論理セクタ202)には
euc.txtの内容が書かれている。さらにFAT領域には、0x00ABの次は
0x60E5とかかれている。
さっきの式を当てると・・・・・・・あっれえぇぇ?合わないぞ??

じっちゃん・・・ごめんなさい・・・orz
 
30日を過ぎたBlogにはコメントできません。

Referer  (2)
22:05
FAT迷宮
 
ルートから、この開始クラスタ番号なる値が一番小さいものを探してみた。
haribote.sysのようだ。しかしそのには0x0002と書かれている。
・・・あっれえぇ? 0x0000や0x0001がなんでないの???

で、haribote.sysファイルが始まっているのが・・・・
0x00004200!??? 論理セクタ33? え? これって、データ領域の先頭部分じゃないの???

・・・もしかして、0x0000と0x0001は欠番か予約かなんかじゃないのかな・・・

もしこの仮定が正しいとすると、こんな式が成り立つはず。

論理セクタ位置 = データ領域開始位置 - 2 + ファイル開始位置


euc.txt のファイル開始位置は 0x00ABだから・・・

202 = 33 - 2 + 171(0x00AB)

論理セクタ202っていうのはええと・・・0x00019400・・・

うおぉぉぉぉ!!! ドンピシャだあぁぁ!

 
30日を過ぎたBlogにはコメントできません。
21:30
ディスクイメージのセクタ位置
 
バイナリエディタでディスクイメージを開いて照らし合わせてみる。
えーっと・・・論理セクタ0が0x00000000〜0x000001FFFだよね?
で、論理セクタ1が0x00000200から。するってぇ〜と。
論理セクタ19(ルートディレクトリ開始点)が0x00002600。
うむ!論理セクタ順だね!
ということは、バイナリエディタで見る0X00000200〜0x000025FFまでがFAT領域と・・・

どうもルートディレクトリの情報にある「ファイル開始地点」というのは論理セクタのことではなく、FATの位置を表している・・・らしい。(ググり中。まだ不確定・・・)
FATの位置っていうのは、FAT領域に並んでいるデータを2バイト刻みで
番号を振ったものらしい。

ウチのFAT(論理セクタ1)の状態
FAT番号 0  1 2 3 4 5 6 7
┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ ┌┐
0x00000200 F0 FF FF 03 40 00 05 60 00 07 80 00 09 A0 00 0B
0x00000210 C0 00 0D E0 00 0F 00 01 11 20 01 13 40 01 15 60
:

・・・っということは、0x00ABの倍の番地進むんだから・・・

ここ?
┌┐
0x00000350 E1 20 0E E3 40 0E E5 60 0E FF 8F 0E E9 A0 0E EB
0x00000360 C0 0E ED E0 0E EF 00 0F F1 20 0F F3 40 0F F5 60

こういうことかなぁ・・・・

バイナリで見ると、ウチのeuc.txtは論理セクタ202から始まってる。

ううぅぅぅぅうううううううんんん?????
 
30日を過ぎたBlogにはコメントできません。

Referer  (23)
18:01
クラスタとは??
 
うーん・・・どうも違うようだぞ??

 
30日を過ぎたBlogにはコメントできません。
17:16
クラスタとは??
 
実際にセクタを読んでみる。まずはルートディレクトリ領域。
・・・euc.txtに関する32バイトの部分を先の表に当てはめてみると・・・

┌──┬───┬──────────┐
0 │0x45│ E │       │
1 │0x55│ U │      │
2 │0x43│ C │ファイル名     │
3 │0x20│ │(8バイト)     │
4 │0x20│  │      │
5 │0x20│  │       │
6 │0x20│  │       │
7 │0x20│  │      │
  ├──┼───┼──────────┤
8 │0x54│ T │拡張子       │
9 │0x58│ X │(3バイト)     │
10 │0x54│ T │          │
  ├──┼───┼──────────┤
11 │0x20│  │      │ 
  ├──┼───┼──────────┤
12 │0x00│  │     │
: : :予約領域     :
: : :(FAT12では未使用) :
21 │0x00│  │ │
  ├──┼───┼──────────┤
22 │0x6B│  │時刻    │
23 │0x13│  │      │
  ├──┼───┼──────────┤
24 │0x6A│  │日付   │
25 │0x37│  │      │
  ├──┼───┼──────────┤
26 │0xAB│  │ファイル開始の   │
27 │0x00│  │クラスタ番号    │
  ├──┼───┼──────────┤
28 │0xB1│  │        │
29 │0x01│  │ファイルサイズ   │
30 │0x00│  │        │
31 │0x00│  │          │
  └──┴───┴──────────┘

・・・ふむ。0xABと0x00かぁ・・・これがeuc.txtが始まっているクラスタと・・・
(たぶんこういうのって、リトルエンディアンで逆になってるはず。ということは、0x00ABがスタート地点ではないか??)
10進数に直すと171。論理セクタ171からってことでいいのかな??

・・・・・あれーーーー! 違ううぅぅ!!!
 
30日を過ぎたBlogにはコメントできません。

Referer  (1)
16:20
ファイルってどうなってるの?
 
今現在、ザビたんはセクタを読むことができるけど、それだけじゃアカン。
ファイルというのはディスク上でどうなっているんだろう???
P372辺りの解説を再読。なになに???

例の「ルートディレクトリ」領域。今まではファイル名の読み出しにしか使ってなかったんだけど、ここにファイルがどうなっているか
という情報が入っているようだ。うーん・・・図にすると・・・


┌─┬──────────┐
0 │ │       │
1 │ │      │
2 │ │ファイル名     │
3 │ │(8バイト)     │
4 │ │      │
5 │ │       │
6 │ │       │
7 │ │      │
  ├─┼──────────┤
8 │ │拡張子       │
9 │ │(3バイト)     │
10 │ │          │
  ├─┼──────────┤
11 │ │属性     │
  ├─┼──────────┤
12 │ │     │
: :予約領域     :
: :(FAT12では未使用) :
21 │ │  │
  ├─┼──────────┤
22 │ │時刻    │
23 │ │      │
  ├─┼──────────┤
24 │ │日付   │
25 │ │      │
  ├─┼──────────┤
26 │ │ファイル開始の   │
27 │ │クラスタ番号    │
  ├─┼──────────┤
28 │ │          │
29 │ │ファイルサイズ   │
30 │ │          │
31 │ │          │
  └─┴──────────┘


ふむ・・・この26・27がファイルの開始地点のようだ。しかし、クラスタ番号とは???
今までは「FDに関しては論理セクタ=クラスタ」程度で認識してたけど、これでいいのかな??早速実験じゃ!

 
30日を過ぎたBlogにはコメントできません。
15:39
fileopenAPIの仕様
 
いよいよfileopenAPIなんだけど、これ、どういう設計にしたらいいんだろう・・・???

いろいろ悩んだんだけど、ちょっとわからないや。
そんなわけなので、暫定的にこんな感じで進めていくか・・・
 
30日を過ぎたBlogにはコメントできません。
11:48
ファイル名判定APIが欲しい!
 
思ったんだけど、アセンブラとかでやってると、ファイル名が適当かそうでないかを
アセンブラ上でプログラムするのがきっつい・・・

API化してC言語で書きたいよぉ〜 涙

そんなわけでちょっと試作・・・・


でけた━━━━━━ ヽ(‘∀‘)ノ ━━━━━━ !!!!!

まあとりあえずはこんなところでしょうかねぇ。
これでtype2がだいぶ楽になる〜♪
(いずれdir2でも使おう)

リビジョン80
 
30日を過ぎたBlogにはコメントできません。
09:33
来ました! fopen!
 
type2コマンド。まずはノーマルのtypeをコピーしてリネーム。で、中を見てみると・・・

うーん。C言語だねぇ。そして内部ではfopenとfreadという関数(API)が呼ばれている。

この両関数を、たとえば2をつけるだけで同じ動作をする・・・

なーんてのをちょっと妄想してみよう。

========= 数時間後 =================
だめだなぁ・・・ちょっと・・・・
Cから使えるfopenとかも早く作りたいのはやまやまだけど、まだアセンブラレベルでの
関数が足りなすぎると思う。残念だけどちょっと舵を切って、再びINT 40系列でのプログラミング・・・
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.