マイコン独立大作戦
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
前へ
次へ
ホームページトップへ戻る