2016.12.12
前へ

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

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

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

[第32回]


●FAT32システム(4) ユーザーファイルの読み込み

前回はDIRセクタを読んでユーザーファイルの情報を確認しました。
今回はそこに示されているユーザーファイルのデータを読んでみます。
ユーザーファイルのデータはクラスタ単位で確保されるセクタに格納されます。
DIRエリアの内容は前回ログでお見せしていますが、ユーザーファイル情報が書き込まれている部分のみ下に再掲します。



データが書き込まれているクラスタbヘ赤四角で囲った部分に示されています。
4バイト32ビットのFATbフうち上位2バイトは前から21、22バイト目で、下位2バイトは前から27、28バイト目にあります。
OHAYOB.BTKがクラスタbO003
OHAYOB.LSTがクラスタbO004
OHAYOB.TXTがクラスタbO005
OHAYOB.BINがクラスタbO006
にそれぞれ格納されています。
1クラスタは64セクタですから、その先頭セクタは40H(=64)毎に設置されていることになります。
各クラスタの配置をセクタbナ示した図は前回お見せしていますが、下に再掲します。


クラスタbO003の先頭セクタbヘ4040H
クラスタbO004の先頭セクタbヘ4080H
クラスタbO005の先頭セクタbヘ40C0H
クラスタbO006の先頭セクタbヘ4100H
です。

それではその情報にしたがって各セクタを読んでみましょう。
まず最初はセクタbS040H(クラスタ#3、OHAYOB.BTK)です。

>cm 8103
8103 00-
8104 00-
8105 40-
8106 00-40
8107 00-
>jp 8100

[00004040]
8800  80 00 80 7C CD 4E 80 21-6D 80 11 F8 FF 01 08 00  ...|ヘN.!m.......
8810  CD 59 80 ED A0 EA 0C 80-CD 59 80 CD 4E 80 CD 59  ヘY......ヘY.ヘN.ヘY
8820  80 06 03 21 1C 1C 11 3F-3F 22 FB FF CD 5F 80 ED  ...!...??"..ヘ_..
8830  53 FB FF CD 5C 80 10 F1-CD 4E 80 21 75 80 11 F8  S..ヘ\...ヘN.!u...
8840  FF 01 08 00 CD 5C 80 ED-A0 EA 40 80 CD 59 80 C3  ....ヘ\....@.ヘY.テ
8850  0F 08 21 F8 FF 01 00 08-71 23 10 FC C9 CD 5C 80  ..!.....q#..ノヘ\.
8860  CD 5F 80 D5 1E 32 D5 CD-DD 02 D1 1D C2 62 80 D1  ヘ_.ユ.2ユヘン.ム.ツb.ム
8870  C9 43 4C 43 4C 43 4C 43-4C 3F 76 77 6E 3F 40 40  ノCLCLCLCL?vwn?@@
8880  40 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  ................
8900  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8910  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8920  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8930  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8940  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8950  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8960  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8970  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8980  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8990  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

BTKはTK−80形式のバイナリファイルです。
プログラムの開始アドレスとエンドアドレスがファイルの先頭4バイトに置かれます。
先頭4バイトが80 00 80 7Cになっていて、これがBTKファイルであることを示しています。

次はセクタbS080H(クラスタ#4、OHAYOB.LST)です。

>cm 8103
8103 00-
8104 00-
8105 40-
8106 40-80
8107 00-
>jp 8100

[00004080]
8800  32 30 31 30 2F 39 2F 31-37 20 20 31 34 3A 33 32  2010/9/17  14:32
8810  20 20 6F 68 61 79 6F 62-2E 74 78 74 0D 0A 45 4E    ohayob.txt..EN
8820  44 3D 38 30 37 43 0D 0A-20 20 20 20 20 20 20 20  D=807C..        
8830  20 20 20 20 20 20 3B 20-4F 48 41 59 4F 20 66 6F        ; OHAYO fo
8840  72 20 4E 44 5A 0D 0A 20-20 20 20 20 20 20 20 20  r NDZ..         
8850  20 20 20 20 20 3B 20 30-33 2F 30 34 2F 32 38 20       ; 03/04/28 
8860  35 2F 39 0D 0A 20 20 20-20 20 20 20 20 20 20 20  5/9..           
8870  20 20 20 3B 31 30 2F 36-2F 31 20 66 6F 72 20 4E     ;10/6/1 for N
8880  44 38 30 5A 33 0D 0A 20-20 20 20 20 20 20 20 20  D80Z3..         
8890  20 20 20 20 20 3B 0D 0A-20 20 20 20 20 20 20 20       ;..        
88A0  20 20 20 20 20 20 20 20-20 20 20 4F 52 47 20 24             ORG $
88B0  38 30 30 30 0D 0A 20 20-20 20 20 20 20 20 20 20  8000..          
88C0  20 20 20 20 20 20 20 20-20 4C 45 44 31 3D 24 46           LED1=$F
88D0  46 46 38 0D 0A 20 20 20-20 20 20 20 20 20 20 20  FF8..           
88E0  20 20 20 20 20 20 20 20-4C 45 44 34 3D 24 46 46          LED4=$FF
88F0  46 42 0D 0A 20 20 20 20-20 20 20 20 20 20 20 20  FB..            
8900  20 20 20 20 20 20 20 53-54 41 52 54 31 3D 24 30         START1=$0
8910  38 30 46 0D 0A 20 20 20-20 20 20 20 20 20 20 20  80F..           
8920  20 20 20 20 20 20 20 20-54 4D 35 4D 3D 24 30 32          TM5M=$02
8930  44 44 0D 0A 20 20 20 20-20 20 20 20 20 20 20 20  DD..            
8940  20 20 3B 0D 0A 38 30 30-30 20 43 44 34 45 38 30    ;..8000 CD4E80
8950  20 20 20 20 20 20 20 20-43 41 4C 4C 20 43 4C 52          CALL CLR
8960  0D 0A 20 20 20 20 20 20-20 20 20 20 20 20 20 20  ..              
8970  3B 41 53 49 41 54 4F 20-64 69 73 70 0D 0A 38 30  ;ASIATO disp..80
8980  30 33 20 32 31 36 44 38-30 20 20 20 20 20 20 20  03 216D80       
8990  20 4C 44 20 48 4C 2C 41-53 49 44 54 0D 0A 38 30   LD HL,ASIDT..80
89A0  30 36 20 31 31 46 38 46-46 20 20 20 20 20 20 20  06 11F8FF       
89B0  20 4C 44 20 44 45 2C 4C-45 44 31 0D 0A 38 30 30   LD DE,LED1..800
89C0  39 20 30 31 30 38 30 30-20 20 20 20 20 20 20 20  9 010800        
89D0  4C 44 20 42 43 2C 24 30-30 30 38 0D 0A 38 30 30  LD BC,$0008..800
89E0  43 20 43 44 35 39 38 30-20 20 20 41 53 49 44 50  C CD5980   ASIDP
89F0  32 3A 43 41 4C 4C 20 54-4D 31 53 0D 0A 38 30 30  2:CALL TM1S..800

LSTは当社ZASMアセンブラのアセンブルリストファイルです。
ちょっとわかりにくいと思いますが、右側のASCIIダンプの上から21行目を見ると、(その途中から次の行の終わりまで)
8000 CD4E80         CALL CLR
となっていて、これがアセンブルリストファイルであることがわかります。

次はセクタbS0C0H(クラスタ#5、OHAYOB.TXT)です。

>cm 8103
8103 00-
8104 00-
8105 40-
8106 80-c0
8107 00-
>jp 8100

[000040C0]
8800  3B 20 4F 48 41 59 4F 20-66 6F 72 20 4E 44 5A 0D  ; OHAYO for NDZ.
8810  0A 3B 20 30 33 2F 30 34-2F 32 38 20 35 2F 39 0D  .; 03/04/28 5/9.
8820  0A 3B 31 30 2F 36 2F 31-20 66 6F 72 20 4E 44 38  .;10/6/1 for ND8
8830  30 5A 33 0D 0A 3B 0D 0A-20 20 20 20 20 4F 52 47  0Z3..;..     ORG
8840  20 24 38 30 30 30 0D 0A-20 20 20 20 20 4C 45 44   $8000..     LED
8850  31 3D 24 46 46 46 38 0D-0A 20 20 20 20 20 4C 45  1=$FFF8..     LE
8860  44 34 3D 24 46 46 46 42-0D 0A 20 20 20 20 20 53  D4=$FFFB..     S
8870  54 41 52 54 31 3D 24 30-38 30 46 0D 0A 20 20 20  TART1=$080F..   
8880  20 20 54 4D 35 4D 3D 24-30 32 44 44 0D 0A 3B 0D    TM5M=$02DD..;.
8890  0A 20 20 20 20 20 43 41-4C 4C 20 43 4C 52 0D 0A  .     CALL CLR..
88A0  3B 41 53 49 41 54 4F 20-64 69 73 70 0D 0A 20 20  ;ASIATO disp..  
88B0  20 20 20 4C 44 20 48 4C-2C 41 53 49 44 54 0D 0A     LD HL,ASIDT..
88C0  20 20 20 20 20 4C 44 20-44 45 2C 4C 45 44 31 0D       LD DE,LED1.
88D0  0A 20 20 20 20 20 4C 44-20 42 43 2C 24 30 30 30  .     LD BC,$000
88E0  38 0D 0A 41 53 49 44 50-32 3A 43 41 4C 4C 20 54  8..ASIDP2:CALL T
88F0  4D 31 53 0D 0A 20 20 20-20 20 4C 44 49 0D 0A 20  M1S..     LDI.. 
8900  20 20 20 20 4A 50 20 50-45 2C 41 53 49 44 50 32      JP PE,ASIDP2
8910  0D 0A 20 20 20 20 20 43-41 4C 4C 20 54 4D 31 53  ..     CALL TM1S
8920  0D 0A 20 20 20 20 20 43-41 4C 4C 20 43 4C 52 0D  ..     CALL CLR.
8930  0A 20 20 20 20 20 43 41-4C 4C 20 54 4D 31 53 0D  .     CALL TM1S.
8940  0A 3B 45 59 45 20 63 6C-6F 73 65 2F 6F 70 65 6E  .;EYE close/open
8950  0D 0A 20 20 20 20 20 4C-44 20 42 2C 30 33 0D 0A  ..     LD B,03..
8960  20 20 20 20 20 4C 44 20-48 4C 2C 24 31 43 31 43       LD HL,$1C1C
8970  0D 0A 20 20 20 20 20 4C-44 20 44 45 2C 24 33 46  ..     LD DE,$3F
8980  33 46 0D 0A 45 59 45 3A-4C 44 20 28 4C 45 44 34  3F..EYE:LD (LED4
8990  29 2C 48 4C 0D 0A 20 20-20 20 20 43 41 4C 4C 20  ),HL..     CALL 
89A0  54 4D 30 32 35 0D 0A 20-20 20 20 20 4C 44 20 28  TM025..     LD (
89B0  4C 45 44 34 29 2C 44 45-0D 0A 20 20 20 20 20 43  LED4),DE..     C
89C0  41 4C 4C 20 54 4D 30 35-0D 0A 20 20 20 20 20 44  ALL TM05..     D
89D0  4A 4E 5A 20 2A 45 59 45-0D 0A 20 20 20 20 20 43  JNZ *EYE..     C
89E0  41 4C 4C 20 43 4C 52 0D-0A 3B 6F 68 61 79 6F 20  ALL CLR..;ohayo 
89F0  64 69 73 70 0D 0A 20 20-20 20 20 4C 44 20 48 4C  disp..     LD HL

これは当社ZASMアセンブラ用のソースプログラムファイルですが、普通のTXTファイルです。
右のASCIIダンプを見れば、TXTファイルであることがわかります。

最後はセクタbS100H(クラスタ#6、OHAYOB.BIN)です。

>cm 8103
8103 00-
8104 00-
8105 40-41
8106 C0-00
8107 00-
>jp 8100

[00004100]
8800  CD 4E 80 21 6D 80 11 F8-FF 01 08 00 CD 59 80 ED  ヘN.!m.......ヘY..
8810  A0 EA 0C 80 CD 59 80 CD-4E 80 CD 59 80 06 03 21  ....ヘY.ヘN.ヘY...!
8820  1C 1C 11 3F 3F 22 FB FF-CD 5F 80 ED 53 FB FF CD  ...??"..ヘ_..S..ヘ
8830  5C 80 10 F1 CD 4E 80 21-75 80 11 F8 FF 01 08 00  \...ヘN.!u.......
8840  CD 5C 80 ED A0 EA 40 80-CD 59 80 C3 0F 08 21 F8  ヘ\....@.ヘY.テ..!.
8850  FF 01 00 08 71 23 10 FC-C9 CD 5C 80 CD 5F 80 D5  ....q#..ノヘ\.ヘ_.ユ
8860  1E 32 D5 CD DD 02 D1 1D-C2 62 80 D1 C9 43 4C 43  .2ユヘン.ム.ツb.ムノCLC
8870  4C 43 4C 43 4C 3F 76 77-6E 3F 40 40 40 00 00 00  LCLCL?vwn?@@@...
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  ................
8900  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8910  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8920  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8930  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8940  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8950  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8960  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8970  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8980  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8990  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
89F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

BINはバイナリファイルです。
先頭から読むと
CD4E80 (CALL $804E)
216D80 (LD HL,$806D)
11F8FF (LD DE,$FFF8)
となっていて、これがZ80マシン語のプログラムファイルであることがわかります。

駆け足で説明してきましたが、今回でとりあえずSDカードインターフェースについてはひとまずお休みにします。
現在SDカードIF+PS/2キーボードIF試作基板を発注して、出来上がってくるのを待っているところです。
基板ができてきたら、CRTインターフェース基板とあわせて、いよいよ今度は実際にマイコン独立大作戦のための本番プログラムの作成についてレポートする予定です。

実はマイコン独立大作戦と並行して別の作戦も展開中です。
そちらについても書きたいのですが、もうかなり前にCRTインターフェースの再試作基板が出来てきていますので、次回は久しぶりにCRTインターフェースについて書く予定です。

あ。
書き忘れてしまうところでした。
今回までのところで、FAT16から始まってFAT32までをざっと駆け足で説明してきました。
FAT32については、私の個人的な興味や将来の足がかりとして、読み込むことのできるプログラムを作って、ファイル構成の概要を調べてきました。

FAT16はスタンダードのSDカード(2GBまで)で、FAT32はSDHCカード(2GBを越えて32GBまで)とSDXCカード(32GBを越えて2TBまで)です([第28回]参照)。

しかし実際のところ、私はマイコン独立大作戦のストレージとしては2GBのSDカードで十分と思っています。
このことについては前回の終わりにも少し書きましたが、FAT32はFAT16に比べてファイルシステムが複雑に過ぎます。
これを8ビットマイコンの標準のファイルシステムとして組み込むのは、限られたメモリ資源とスループットの大いなる無駄遣いといえましょう。

いまどき2GBなどといいますと、「ええー?たったそれだけしかないの?」などと言われそうですが、ええ、ええ、それだけで十分過ぎる容量です。
実際のところ、8ビットのシステムでは2GBバイトでも大きすぎて、その全部を使うことなどとてもできませんでしょう。

ちなみに私が最初にWindows95マシンを自作したときのハードディスクは1.9GBでした。
またWindows98はセットアップの段階では10GBを越えるハードディスクは認識できませんでした。
2GBがいかに大容量であるかご理解いただけましたでしょうか。

そういうことですので、マイコン独立大作戦のストレージとしてはスタンダードのSDカード(2GB)とし、ファイルシステムとしてはFAT16でいきたいと考えています。

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

前へ

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