マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第46回]
●SDカードを再フォーマット
前回まででとりあえずND80Z3.5(ND80ZV)用の独立型プログラムについては大体問題無いところまでできたと思います。
残るはZB3DOS(CP/M互換DOS)です。
独立型のZB3DOS(CP/M互換DOS)についてはMBASICが起動できてSTARTREKが実行できたことを確認しましたが、やはりキー入力や232Cについては問題が残っているのではないかと思われます。
そこでZB3DOS(CP/M互換DOS)を起動して、そのあたりについて確認してみようとしたのですが…。
いつの間にか仮想Aドライブがとんでもないことになってしまっていました。
ひょっとしたら、とちょっと心配していたことがあったのですが、やっぱり心配が的中してしまいました。
実は先日いろいろテストをしている過程で、SDカードのファイルをセーブする部分にバグがみつかりました。
ファイルをセーブするクラスタ番号を計算するところで誤ったクラスタ番号を算出してしまう可能性があることがわかりました。
もちろんその部分は修正したのですが、それ以前にセーブした沢山のファイルは正しい位置にセーブされているだろうか、とちょっと心配していました。
どうやらやっぱりとんでもないところにセーブしてしまっていたようです。
何がおきたのか、セクタリードプログラムで確認してみました。
ZB3DOS(CP/M互換DOS)用のSDカードフォーマットについては[総合第29回]で簡単に説明をしました。
仮想Aドライブはクラスタ#40〜#7Fに割り当ててあります。
その先頭の8セクタが仮想Aドライブのディレクトリです。
クラスタ#とセクタbフ関係は個々のSDカードによって異なりますが、このSDカードの場合クラスタ#40の先頭セクタbヘ1287であることを計算によって確かめてあります。
そこでセクタbP287を読み出してみました。
>/ld sctrd.bin,8000 loading SCTRD.BIN ...0017(23)bytes loaded,from 8000 to 8016 >cm 8003 8003 00- 8004 00-12 8005 00-87 8006 2A- >jp 8000 >dm 8200,83ff 8200 3B 20 42 44 4F 53 20 54-45 53 54 36 20 43 4F 4D ; BDOS TEST6 COM 8210 50 41 52 45 0D 0A 3B 32-30 31 32 2F 33 2F 37 20 PARE..;2012/3/7 8220 38 2F 32 31 0D 0A 3B 0D-0A 09 4F 52 47 20 24 30 8/21..;...ORG $0 8230 31 30 30 0D 0A 09 46 43-41 4C 4C 3D 24 30 30 30 100...FCALL=$000 8240 35 0D 0A 09 46 43 42 57-4B 3D 24 30 30 33 42 0D 5...FCBWK=$003B. 8250 0A 09 52 45 43 4E 4F 32-3D 24 30 30 35 42 0D 0A ..RECNO2=$005B.. 8260 09 46 43 42 3D 24 30 30-35 43 0D 0A 09 46 43 42 .FCB=$005C...FCB 8270 32 3D 24 30 30 36 43 0D-0A 09 52 45 43 4E 4F 3D 2=$006C...RECNO= 8280 24 30 30 37 43 0D 0A 09-44 4D 41 31 3D 24 30 30 $007C...DMA1=$00 8290 38 30 0D 0A 09 44 4D 41-32 3D 24 30 33 30 30 0D 80...DMA2=$0300. 82A0 0A 09 42 59 54 45 43 4E-54 52 3D 24 30 33 38 30 ..BYTECNTR=$0380 82B0 0D 0A 09 41 57 4B 3D 24-30 33 38 32 0D 0A 3B 0D ...AWK=$0382..;. 82C0 0A 09 4C 44 20 48 4C 2C-46 43 42 32 0D 0A 09 4C ..LD HL,FCB2...L 82D0 44 20 44 45 2C 46 43 42-57 4B 0D 0A 09 4C 44 20 D DE,FCBWK...LD 82E0 42 2C 31 31 3B 3D 31 37-0D 0A 4C 4F 4F 50 31 3A B,11;=17..LOOP1: 82F0 4C 44 20 41 2C 28 48 4C-29 0D 0A 09 4C 44 20 28 LD A,(HL)...LD ( 8300 44 45 29 2C 41 0D 0A 09-49 4E 43 20 48 4C 0D 0A DE),A...INC HL.. 8310 09 49 4E 43 20 44 45 0D-0A 09 44 45 43 20 42 0D .INC DE...DEC B. 8320 0A 09 4A 50 20 4E 5A 2C-4C 4F 4F 50 31 0D 0A 3B ..JP NZ,LOOP1..; 8330 0D 0A 09 4C 44 20 43 2C-30 46 3B 6F 70 65 6E 0D ...LD C,0F;open. 8340 0A 09 4C 44 20 44 45 2C-46 43 42 0D 0A 09 43 41 ..LD DE,FCB...CA 8350 4C 4C 20 46 43 41 4C 4C-0D 0A 09 49 4E 43 20 41 LL FCALL...INC A 8360 3B 69 66 20 46 46 48 3F-0D 0A 09 4A 50 20 5A 2C ;if FFH?...JP Z, 8370 4E 4F 46 49 4C 45 52 52-0D 0A 3B 0D 0A 09 4C 44 NOFILERR..;...LD 8380 20 43 2C 30 46 3B 6F 70-65 6E 0D 0A 09 4C 44 20 C,0F;open...LD 8390 44 45 2C 46 43 42 57 4B-0D 0A 09 43 41 4C 4C 20 DE,FCBWK...CALL 83A0 46 43 41 4C 4C 0D 0A 09-49 4E 43 20 41 3B 69 66 FCALL...INC A;if 83B0 20 46 46 48 3F 0D 0A 09-4A 50 20 5A 2C 4E 4F 46 FFH?...JP Z,NOF 83C0 49 4C 45 52 52 0D 0A 3B-0D 0A 09 58 4F 52 20 41 ILERR..;...XOR A 83D0 0D 0A 09 4C 44 20 28 52-45 43 4E 4F 29 2C 41 0D ...LD (RECNO),A. 83E0 0A 09 4C 44 20 28 52 45-43 4E 4F 32 29 2C 41 0D ..LD (RECNO2),A. 83F0 0A 09 4C 44 20 48 4C 2C-42 59 54 45 43 4E 54 52 ..LD HL,BYTECNTR |
思った通り、本来はディレクトリであるべきセクタにファイルデータ(アセンブラのソースプログラム)が書き込まれています。
ここはデータ領域ではありませんから、データが書き込まれることはないはずなのですが、やはりファイルセーブプログラムのバグが原因でこんなことになってしまったようです。
それはそうとして、アセンブラのソースプログラムがなぜこんなところに?
そこが疑問だったので調べてみましたら、ZB3DOS(CP/M互換DOS)のテストを行なうために、テストプログラムを一括してZディレクトリにコピーしたのですが、その中にソースプログラムが含まれていたようです。
詳しい経緯は省きますが、そのコピー作業を行なう以前にSDカードに溜まっていた古いファイルをかなり沢山削除したのですが、その削除した古いファイルがバグによって間違った領域にセーブされていたようです。
それを削除したためそこが空きクラスタとなってしまい、あとからのコピー作業でその空きクラスタにテストプログラムが割り当てられてしまったようです。
上のデータ内容から判断して、おそらくあとからZディレクトリにコピーしたテストプログラムらしいと見当がつきましたので、今度はZディレクトリを確認してみました。
Zディレクトリはクラスタ#2に割り当ててあります。
このSDカードの場合クラスタ#2の先頭のセクタbヘ0307です。
そこでセクタbO307を読み出してみました。
>cm 8003 8003 00- 8004 12-03 8005 8C-07 8006 2A- >jp 8000 >dm 8200,83ff 8200 2E 20 20 20 20 20 20 20-20 20 20 10 00 00 00 00 . ..... 8210 00 00 00 00 00 00 00 00-00 00 02 00 00 00 00 00 ................ 8220 2E 2E 20 20 20 20 20 20-20 20 20 10 00 00 00 00 .. ..... 8230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8240 53 54 41 52 54 52 45 4B-42 41 53 20 00 5B 49 B9 STARTREKBAS .[Iケ 8250 70 4A 70 4A 00 00 AB 89-1C 3B 44 01 15 4F 00 00 pJpJ..ォ..;D..O.. 8260 41 4D 00 62 00 61 00 73-00 69 00 0F 00 DC 63 00 AM.b.a.s.i...ワc. 8270 2E 00 63 00 6F 00 6D 00-00 00 00 00 FF FF FF FF ..c.o.m......... 8280 4D 42 41 53 49 43 20 20-43 4F 4D 20 00 8D 49 B9 MBASIC COM ..Iケ 8290 70 4A 70 4A 00 00 2D 94-45 40 45 01 00 5F 00 00 pJpJ..-.E@E.._.. 82A0 E5 30 30 32 20 20 20 20-42 49 4E 20 00 00 00 00 .002 BIN .... 82B0 00 00 00 00 00 00 00 00-00 00 6A 01 91 0D 00 00 ..........j..... 82C0 46 4E 43 30 36 54 20 20-43 4F 4D 20 00 BF 8E AD FNC06T COM .ソ.ュ 82D0 79 4A 79 4A 00 00 8F AD-79 4A 57 01 1B 00 00 00 yJyJ...ュyJW..... 82E0 E5 30 30 33 20 20 20 20-42 49 4E 20 00 00 00 00 .003 BIN .... 82F0 00 00 00 00 00 00 00 00-00 00 58 01 0E 00 00 00 ..........X..... 8300 56 46 54 53 54 36 20 20-54 58 54 20 18 55 7D 6E VFTST6 TXT .U}n 8310 8B 4A 8B 4A 00 00 0D AF-15 41 40 00 EA 09 00 00 .J.J...ッ.A@..... 8320 56 46 54 53 54 36 2D 32-43 4F 4D 20 00 8D 7D 6E VFTST6-2COM ..}n 8330 8B 4A 8B 4A 00 00 77 A8-92 42 42 00 26 01 00 00 .J.J..wィ.BB.&... 8340 56 46 54 53 54 36 2D 32-54 58 54 20 18 BF 7D 6E VFTST6-2TXT .ソ}n 8350 8B 4A 8B 4A 00 00 71 A8-92 42 43 00 EA 09 00 00 .J.J..qィ.BC..... 8360 56 46 54 53 54 37 20 20-43 4F 4D 20 00 C2 7D 6E VFTST7 COM .ツ}n 8370 8B 4A 8B 4A 00 00 1D 55-17 41 47 00 9C 00 00 00 .J.J...U.AG..... 8380 56 46 54 53 54 38 20 20-43 4F 4D 20 00 01 80 6E VFTST8 COM ...n 8390 8B 4A 8B 4A 00 00 23 55-17 41 50 00 9C 00 00 00 .J.J..#U.AP..... 83A0 56 46 54 53 54 39 20 20-43 4F 4D 20 00 04 80 6E VFTST9 COM ...n 83B0 8B 4A 8B 4A 00 00 2E 56-91 42 51 00 B5 00 00 00 .J.J...V.BQ.オ... 83C0 56 46 54 53 54 31 30 20-43 4F 4D 20 00 07 80 6E VFTST10 COM ...n 83D0 8B 4A 8B 4A 00 00 2D 50-18 41 55 00 90 00 00 00 .J.J..-P.AU..... 83E0 56 46 54 53 54 31 31 20-43 4F 4D 20 00 08 80 6E VFTST11 COM ...n 83F0 8B 4A 8B 4A 00 00 8D AD-1D 41 59 00 06 00 00 00 .J.J...ュ.AY..... |
1ファイルあたり32バイトが割り当てられています。
その後ろから数えて5、6バイト目にクラスタ#が書かれています。
VFTST6.TXTから後ろのファイルが割り当てられているクラスタ#が間違っています。
VFTST6.TXTは問題のクラスタ#40に割り当てられています。
データ領域はクラスタ#140からになっていますから、それよりも若いクラスタ#に割り当てられているのは誤りです。
ということでこのSDカードがとんでもないことになっていることがわかりました。
このままではどうしようもありません。
ここは覚悟を決めて、再フォーマットしてやり直すしかないと判断しました。
せっかくフォーマットからやり直すのでしたら、この機会に正しくフォーマットされているかどうか、また正しく本来のクラスタ位置にファイルが割り当てられるかどうかを確かめながら作業をしていくことにしました。
というところで本日は時間がなくなってしまいました。
続きは次回にいたします。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第46回]
2017.4.12upload
前へ
次へ
ホームページトップへ戻る