2016.11.15
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
SDカードインターフェースの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
そして作戦その3は、SDカードインターフェースです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第15回]


●FAT16ファイルシステム(2)

前回はBPB(Bios Parameter Block、セクタbWB)の情報から、FAT#1とFAT#2の最初のセクタを読み出しました。
今回はFAT#2の次のセクタにあるはずのDIRを読み出してみます。
前回書きましたように、もしも2番目のFATエリアに続いてディレクトリエリアが配置されていると仮定すれば、その先頭セクタは260Hになります。
そこでセクタbニして000260を指定して読んでみました。

>cm 8103
8103 00-
8104 01-02
8105 76-60
8106 3E-
>jp 8100
FF01FF01FF00FF00FFFFFE
4E44334D4F4E324F545854201072F89C4C494C490000A236293D020037320000
4E44334D4F4E324F42494E20007CF89C4C494C490000B836293D0300E4050000
4E44334D4F4E324F42544B200088F89C4C494C490000B836293D0400E8050000
4E44334D4F4E324F4C5354200098F89C4C494C490000B836293D050000400000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
8288
>dm 8800,88ff
8800  4E 44 33 4D 4F 4E 32 4F-54 58 54 20 10 72 F8 9C  ND3MON2OTXT .r..
8810  4C 49 4C 49 00 00 A2 36-29 3D 02 00 37 32 00 00  LILI..「6)=..72..
8820  4E 44 33 4D 4F 4E 32 4F-42 49 4E 20 00 7C F8 9C  ND3MON2OBIN .|..
8830  4C 49 4C 49 00 00 B8 36-29 3D 03 00 E4 05 00 00  LILI..ク6)=......
8840  4E 44 33 4D 4F 4E 32 4F-42 54 4B 20 00 88 F8 9C  ND3MON2OBTK ....
8850  4C 49 4C 49 00 00 B8 36-29 3D 04 00 E8 05 00 00  LILI..ク6)=......
8860  4E 44 33 4D 4F 4E 32 4F-4C 53 54 20 00 98 F8 9C  ND3MON2OLST ....
8870  4C 49 4C 49 00 00 B8 36-29 3D 05 00 00 40 00 00  LILI..ク6)=...@..
8880  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8890  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

考えが的中しました。
セクタbQ60はディレクトリの先頭セクタでした。
1個のファイルについて32バイトが割り当てられています。
見ての通り先頭にファイル名が書かれています。
ファイル名の後ろにはそのファイルの作成日とかファイルサイズなどが書かれています。
ちょっと時間がありませんから、その詳細は省くことにして、ファイルのデータが書かれているクラスタについてだけ、見てみることにします。
下の赤い四角で囲ったところです。



ND3MON2o.TXTが0002、ND3MON2o.BINが0003、ND3MON2o.BTKが0004、ND3MON2o.LSTが0005になっています。
なお、ディレクトリエリアのファイル名では拡張子の前の .(ピリオド)は省略されます。
各ファイルのデータがそれぞれクラスタbO002、0003、0004、0005に有ることが示されています。
順に確認してみます。
最初はND3MON2o.TXTです。
前回計算で求めたクラスタbO002の開始セクタbヘ280でした。
そこでセクタbニして000280を指定して読んでみました。

>cm 8103
8103 00-
8104 02-
8105 60-80
8106 3E-
>jp 8100
FF01FF01FF00FF00FFFFFE
3B3B3B204E4438305A204D4F4E49544F5220464F52204E4438305A330D0A3B3B
3B204E44334D4F4E0D0A3B323031302F30322F323420322F323520322F323620
332F3220332F3520332F3620332F313520332F323220332F32330D0A3B3B3B35
2F350D0A3B3B20352F323420666F722072656D6F74650D0A3B352F323520352F
323620352F323720352F323920352F333020352F333120362F313020362F3133
20362F31340D0A3B362F313520666F72204E4438305A3320362F313620362F31
3720382F32300D0A3B31302F382F3231204E44334D4F4E324D0D0A3B392F3520
6E64336D6F6E326E0D0A3B392F39206E64336D6F6E326F0D0A3B0D0A20202020
20204C534547383D24464646460D0A2020202020204C534547373D2446464645
0D0A2020202020204C534547353D24464646430D0A2020202020204C53454734
3D24464646420D0A2020202020204C534547333D24464646410D0A2020202020
204C534547323D24464646390D0A2020202020204C534547313D24464646380D
0A20202020202044495350333D24464646360D0A20202020202044495350313D
24464646340D0A2020202020203B4B464C41473D24464646330D0A2020202020
2042524B433D24464646320D0A20202020202042524B413D24464646300D0A20
202020202041445253483D24464645460D0A202020202020414452534C3D2446
0C91
>dm 8800,89ff
8800  3B 3B 3B 20 4E 44 38 30-5A 20 4D 4F 4E 49 54 4F  ;;; ND80Z MONITO
8810  52 20 46 4F 52 20 4E 44-38 30 5A 33 0D 0A 3B 3B  R FOR ND80Z3..;;
8820  3B 20 4E 44 33 4D 4F 4E-0D 0A 3B 32 30 31 30 2F  ; ND3MON..;2010/
8830  30 32 2F 32 34 20 32 2F-32 35 20 32 2F 32 36 20  02/24 2/25 2/26 
8840  33 2F 32 20 33 2F 35 20-33 2F 36 20 33 2F 31 35  3/2 3/5 3/6 3/15
8850  20 33 2F 32 32 20 33 2F-32 33 0D 0A 3B 3B 3B 35   3/22 3/23..;;;5
8860  2F 35 0D 0A 3B 3B 20 35-2F 32 34 20 66 6F 72 20  /5..;; 5/24 for 
8870  72 65 6D 6F 74 65 0D 0A-3B 35 2F 32 35 20 35 2F  remote..;5/25 5/
8880  32 36 20 35 2F 32 37 20-35 2F 32 39 20 35 2F 33  26 5/27 5/29 5/3
8890  30 20 35 2F 33 31 20 36-2F 31 30 20 36 2F 31 33  0 5/31 6/10 6/13
88A0  20 36 2F 31 34 0D 0A 3B-36 2F 31 35 20 66 6F 72   6/14..;6/15 for
88B0  20 4E 44 38 30 5A 33 20-36 2F 31 36 20 36 2F 31   ND80Z3 6/16 6/1
88C0  37 20 38 2F 32 30 0D 0A-3B 31 30 2F 38 2F 32 31  7 8/20..;10/8/21
88D0  20 4E 44 33 4D 4F 4E 32-4D 0D 0A 3B 39 2F 35 20   ND3MON2M..;9/5 
88E0  6E 64 33 6D 6F 6E 32 6E-0D 0A 3B 39 2F 39 20 6E  nd3mon2n..;9/9 n
88F0  64 33 6D 6F 6E 32 6F 0D-0A 3B 0D 0A 20 20 20 20  d3mon2o..;..    
8900  20 20 4C 53 45 47 38 3D-24 46 46 46 46 0D 0A 20    LSEG8=$FFFF.. 
8910  20 20 20 20 20 4C 53 45-47 37 3D 24 46 46 46 45       LSEG7=$FFFE
8920  0D 0A 20 20 20 20 20 20-4C 53 45 47 35 3D 24 46  ..      LSEG5=$F
8930  46 46 43 0D 0A 20 20 20-20 20 20 4C 53 45 47 34  FFC..      LSEG4
8940  3D 24 46 46 46 42 0D 0A-20 20 20 20 20 20 4C 53  =$FFFB..      LS
8950  45 47 33 3D 24 46 46 46-41 0D 0A 20 20 20 20 20  EG3=$FFFA..     
8960  20 4C 53 45 47 32 3D 24-46 46 46 39 0D 0A 20 20   LSEG2=$FFF9..  
8970  20 20 20 20 4C 53 45 47-31 3D 24 46 46 46 38 0D      LSEG1=$FFF8.
8980  0A 20 20 20 20 20 20 44-49 53 50 33 3D 24 46 46  .      DISP3=$FF
8990  46 36 0D 0A 20 20 20 20-20 20 44 49 53 50 31 3D  F6..      DISP1=
89A0  24 46 46 46 34 0D 0A 20-20 20 20 20 20 3B 4B 46  $FFF4..      ;KF
89B0  4C 41 47 3D 24 46 46 46-33 0D 0A 20 20 20 20 20  LAG=$FFF3..     
89C0  20 42 52 4B 43 3D 24 46-46 46 32 0D 0A 20 20 20   BRKC=$FFF2..   
89D0  20 20 20 42 52 4B 41 3D-24 46 46 46 30 0D 0A 20     BRKA=$FFF0.. 
89E0  20 20 20 20 20 41 44 52-53 48 3D 24 46 46 45 46       ADRSH=$FFEF
89F0  0D 0A 20 20 20 20 20 20-41 44 52 53 4C 3D 24 46  ..      ADRSL=$F

間違いありません。
ND3MON2o.TXTの最初の部分です。

次はND3MON2o.BINです。
前回計算で求めたクラスタbO003の開始セクタbヘ2C0でした。
そこでセクタbニして0002C0を指定して読んでみました。

>cm 8103
8103 00-
8104 02-
8105 80-c0
8106 3E-
>jp 8100
FF01FF01FF00FF00FFFFFE
C32408C3FF0AC3080BC3150BC35D0BC38E08C3D30BC3D70BC3E00BC39808C31D
0BC34B0D3EFFED47D39831B8FFAF32B9FF060721CCFF3EC3772B2B2B10FADB94
E680CA660821510122CDFF21510022BBFF11DD8321CAFF060536DE2B2B2B1B1B
1B10F6C33B0021C00522CAFF21160622C7FF21510422BBFF21D20922CDFF21CF
FF0629AF772310FC2100F822E2FF3EFFD39831B8FFCDC9FFCDC6FF47E610CADE
083ACFFFB7CABE0821AE08C3C108980898089808D70AC80AE40A9808650A21CE
0878E6070600874F097E23666FE9A609B209740995097A099C098D0A650A3AD0
FFB7CA6409F21509AF32D0FF21F50878E60FC3C4085B0A980847076907560A98
08980898084B0D3C0CDF0C9808B40C0705BC0A950AAF32D0FF32F8FF32FBFF78
87CA5E0932CFFF4F060021BC0D095E2356EB22F9FF21ECFFED42FE1CDA510921
F0FFCA510921F2FF22EEFF6E2600C3580922EEFF5E2356EB22ECFFC39E0A32CF
FFC38409CD4B0A3AECFFB032ECFFCD770AC398082AECFFC37E092AEEFF23CD8A
0922EEFFCDA80DC398083AECFF32EDFF7E32ECFFC92AEEFF2BC37E092AEEFF3A
ECFF77C37A092AEEFF22E0FF7CB5F3CA000031D4FFE1D1C1D9F108FDE1DDE131
E6FFD1C1F1ED7BE2FF2AE0FFE52AE4FFFBC922E4FFE1ED53E6FFED43E8FFF522
E0FF22EEFFE122EAFF22ECFFED73E2FF31E0FFDDE5FDE508F5D9C5D5E5ED5767
7621

ND3MON2o.BINはバイナリファイルですから、このままでは何が書いてあるかちょっと見ではわかりませんが、ND3MON2o.BINの最初の部分に間違いありません。


次はND3MON2o.BTKです。
前回計算で求めたクラスタbO004の開始セクタbヘ300でした。
そこでセクタbニして000300を指定して読んでみました。

>cm 8103
8103 00-
8104 02-03
8105 C0-00
8106 3E-
>jp 8100
FF01FF01FF00FF00FFFFFE
08000DE3C32408C3FF0AC3080BC3150BC35D0BC38E08C3D30BC3D70BC3E00BC3
9808C31D0BC34B0D3EFFED47D39831B8FFAF32B9FF060721CCFF3EC3772B2B2B
10FADB94E680CA660821510122CDFF21510022BBFF11DD8321CAFF060536DE2B
2B2B1B1B1B10F6C33B0021C00522CAFF21160622C7FF21510422BBFF21D20922
CDFF21CFFF0629AF772310FC2100F822E2FF3EFFD39831B8FFCDC9FFCDC6FF47
E610CADE083ACFFFB7CABE0821AE08C3C108980898089808D70AC80AE40A9808
650A21CE0878E6070600874F097E23666FE9A609B209740995097A099C098D0A
650A3AD0FFB7CA6409F21509AF32D0FF21F50878E60FC3C4085B0A9808470769
07560A9808980898084B0D3C0CDF0C9808B40C0705BC0A950AAF32D0FF32F8FF
32FBFF7887CA5E0932CFFF4F060021BC0D095E2356EB22F9FF21ECFFED42FE1C
DA510921F0FFCA510921F2FF22EEFF6E2600C3580922EEFF5E2356EB22ECFFC3
9E0A32CFFFC38409CD4B0A3AECFFB032ECFFCD770AC398082AECFFC37E092AEE
FF23CD8A0922EEFFCDA80DC398083AECFF32EDFF7E32ECFFC92AEEFF2BC37E09
2AEEFF3AECFF77C37A092AEEFF22E0FF7CB5F3CA000031D4FFE1D1C1D9F108FD
E1DDE131E6FFD1C1F1ED7BE2FF2AE0FFE52AE4FFFBC922E4FFE1ED53E6FFED43
E8FFF522E0FF22EEFFE122EAFF22ECFFED73E2FF31E0FFDDE5FDE508F5D9C5D5
A5D3

ND3MON2o.BTKもバイナリファイルですから、このままでは何が書いてあるかちょっと見ではわかりませんが、ND3MON2o.BTKの最初の部分に間違いありません。
先頭の8バイトに開始アドレスとプログラムサイズが書かれています。

最後はND3MON2o.LSTです。
前回計算で求めたクラスタbO005の開始セクタbヘ340でした。
そこでセクタbニして000340を指定して読んでみました。

>cm 8103
8103 00-
8104 03-
8105 00-40
8106 3E-
>jp 8100
FF01FF01FF00FF00FFFFFE
323031302F392F392020363A353320204E44334D4F4E324F2E5458540D0A454E
443D304445330D0A20202020202020202020202020203B3B3B204E4438305A20
4D4F4E49544F5220464F52204E4438305A330D0A202020202020202020202020
20203B3B3B204E44334D4F4E0D0A20202020202020202020202020203B323031
302F30322F323420322F323520322F323620332F3220332F3520332F3620332F
313520332F323220332F32330D0A20202020202020202020202020203B3B3B35
2F350D0A20202020202020202020202020203B3B20352F323420666F72207265
6D6F74650D0A20202020202020202020202020203B352F323520352F32362035
2F323720352F323920352F333020352F333120362F313020362F313320362F31
340D0A20202020202020202020202020203B362F313520666F72204E4438305A
3320362F313620362F313720382F32300D0A2020202020202020202020202020
3B31302F382F3231204E44334D4F4E324D0D0A20202020202020202020202020
203B392F35206E64336D6F6E326E0D0A20202020202020202020202020203B39
2F39206E64336D6F6E326F0D0A20202020202020202020202020203B0D0A2020
2020202020202020202020202020202020204C534547383D24464646460D0A20
202020202020202020202020202020202020204C534547373D24464646450D0A
D402
>dm 8800,89ff
8800  32 30 31 30 2F 39 2F 39-20 20 36 3A 35 33 20 20  2010/9/9  6:53  
8810  4E 44 33 4D 4F 4E 32 4F-2E 54 58 54 0D 0A 45 4E  ND3MON2O.TXT..EN
8820  44 3D 30 44 45 33 0D 0A-20 20 20 20 20 20 20 20  D=0DE3..        
8830  20 20 20 20 20 20 3B 3B-3B 20 4E 44 38 30 5A 20        ;;; ND80Z 
8840  4D 4F 4E 49 54 4F 52 20-46 4F 52 20 4E 44 38 30  MONITOR FOR ND80
8850  5A 33 0D 0A 20 20 20 20-20 20 20 20 20 20 20 20  Z3..            
8860  20 20 3B 3B 3B 20 4E 44-33 4D 4F 4E 0D 0A 20 20    ;;; ND3MON..  
8870  20 20 20 20 20 20 20 20-20 20 20 20 3B 32 30 31              ;201
8880  30 2F 30 32 2F 32 34 20-32 2F 32 35 20 32 2F 32  0/02/24 2/25 2/2
8890  36 20 33 2F 32 20 33 2F-35 20 33 2F 36 20 33 2F  6 3/2 3/5 3/6 3/
88A0  31 35 20 33 2F 32 32 20-33 2F 32 33 0D 0A 20 20  15 3/22 3/23..  
88B0  20 20 20 20 20 20 20 20-20 20 20 20 3B 3B 3B 35              ;;;5
88C0  2F 35 0D 0A 20 20 20 20-20 20 20 20 20 20 20 20  /5..            
88D0  20 20 3B 3B 20 35 2F 32-34 20 66 6F 72 20 72 65    ;; 5/24 for re
88E0  6D 6F 74 65 0D 0A 20 20-20 20 20 20 20 20 20 20  mote..          
88F0  20 20 20 20 3B 35 2F 32-35 20 35 2F 32 36 20 35      ;5/25 5/26 5
8900  2F 32 37 20 35 2F 32 39-20 35 2F 33 30 20 35 2F  /27 5/29 5/30 5/
8910  33 31 20 36 2F 31 30 20-36 2F 31 33 20 36 2F 31  31 6/10 6/13 6/1
8920  34 0D 0A 20 20 20 20 20-20 20 20 20 20 20 20 20  4..             
8930  20 3B 36 2F 31 35 20 66-6F 72 20 4E 44 38 30 5A   ;6/15 for ND80Z
8940  33 20 36 2F 31 36 20 36-2F 31 37 20 38 2F 32 30  3 6/16 6/17 8/20
8950  0D 0A 20 20 20 20 20 20-20 20 20 20 20 20 20 20  ..              
8960  3B 31 30 2F 38 2F 32 31-20 4E 44 33 4D 4F 4E 32  ;10/8/21 ND3MON2
8970  4D 0D 0A 20 20 20 20 20-20 20 20 20 20 20 20 20  M..             
8980  20 3B 39 2F 35 20 6E 64-33 6D 6F 6E 32 6E 0D 0A   ;9/5 nd3mon2n..
8990  20 20 20 20 20 20 20 20-20 20 20 20 20 20 3B 39                ;9
89A0  2F 39 20 6E 64 33 6D 6F-6E 32 6F 0D 0A 20 20 20  /9 nd3mon2o..   
89B0  20 20 20 20 20 20 20 20-20 20 20 3B 0D 0A 20 20             ;..  
89C0  20 20 20 20 20 20 20 20-20 20 20 20 20 20 20 20                  
89D0  20 20 4C 53 45 47 38 3D-24 46 46 46 46 0D 0A 20    LSEG8=$FFFF.. 
89E0  20 20 20 20 20 20 20 20-20 20 20 20 20 20 20 20                  
89F0  20 20 20 4C 53 45 47 37-3D 24 46 46 46 45 0D 0A     LSEG7=$FFFE..

ND3MON2o.LSTはアセンブルリストファイルです。
ND3MON2o.LSTの最初の部分に間違いありません。

以上で駆け足ですがFAT16の概要を確認することができたと思います。

SDカードインターフェースの製作[第15回]
2016.11.15upload

前へ
次へ
ホームページトップへ戻る