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

マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[総合第84回]


●「あれ」とは?

前回は、
ひょっとしたら、「あれ」が落ちているのではないか?
なんて思わせぶりのことを書いて終わってしまいました。
「あれ」が何だかおわかりになりましたでしょうか?

下はSDカードのZディレクトリにWindowsのハードディスクからコピーしたstdio.hとtest4.cをZB3BASICのLDコマンドで適当なメモリアドレスに読み込んだ後、ファイルエンド近くをDMコマンドで表示したものです。

>ld stdio.h,9000
9000-9540
>dm 9500,954f
9500  6C 65 6E 6F 28 66 70 29-20 28 28 66 70 29 2D 3E  leno(fp) ((fp)->
9510  5F 75 6E 69 74 29 0D 0A-23 64 65 66 69 6E 65 20  _unit)..#define 
9520  66 66 6C 75 73 68 28 66-70 29 20 66 6C 73 68 5F  fflush(fp) flsh_
9530  28 66 70 2C 2D 31 29 0D-0A 23 65 6E 64 69 66 0D  (fp,-1)..#endif.
9540  0A 81 01 81 01 81 01 81-01 81 01 81 01 81 01 81  ................
>ld test4.c,9800
9800-9941
>dm 9930,994f
9930  69 7A 65 6F 66 28 64 6F-75 62 6C 65 29 29 3B 0D  izeof(double));.
9940  0A 7D 0F 0F D3 94 C9 2A-EC 83 EB 2A EE 83 06 F3  .}..モ.ノ*...*....

アドレス9000番地からロードしたstdio.hは9540番地で終っています。
その終わりのところを見ると、0D 0A で終っています。
アドレス9800番地からロードしたtest4.cは9941番地で終っています。
その終わりのところを見ると、0D 0A 7Dで終っています。
0D 0Aは改行コードです。
7Dは’}’です。
どちらも落ちているものは無いように思えますが…。
ほら。
大切なものが落ちていますでしよう。

そうなのです。
エンドコード(1A)が落ちていたのでした。
Windowsの時代になって久しい今となっては、ごく普通にファイルコピーやダウンロードを繰り返しておりますうちに、オリジナルではあったはずのエンドコードが失われてしいまいます。
USB接続版のZB3DOS(CP/M互換DOS)の場合、ファイルを読み込む部分はWindowsのアプリケーションですから、エンドコードがなくても支障はありません。
しかし、独立版のZB3DOSは自前のプログラムでSDカードのファイルを読み込みますから、前にも書いておりますように、セクタ単位(CP/Mの1セクタは128バイト)で読み込みます。
エンドコードが無いと、上のダンプリストの場合、stdio.hは957Fまで読み込まれてしまいます。
またtest4.cでは997Fまで読み込まれてしまいます。
ファイルの終わりに意味不明な文字がくっついてしまいますから、それでコンパイルエラーになってしまったのだと推測しました。

そうとわかれば、やることはただひとつ。
CMコマンドで終わりのところに1Aを追加してもう一度セーブするだけです。
下はそのようにしてファイルの終わりに1Aを追加したtest4.cをもう一度ロードして確認してみたところです。



そのあとでtest4b.cなんてファイルを作成していますが、これは別のテストのためです。
これはまた後で説明することにします。

上の画面にはありませんが、同じようにしてstdio.hの終わりにも1Aを追加しました。
そのようにしておいて、もう一度あらためて、
cc test4.c
を実行してみました。



おお。
今度は何のエラーも出ることなく、ccとasまで無事終了したようです。

途中でいろいろなことを確かめたりしていますから、画面が連続していませんが、上の画面の続きとして見てください。



リンカも無事終了したようです。
test4.comが作成されたはずです。
test4[Enter]と入力したところ、test4が正しく実行されました。

CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第84回]
2017.6.6upload

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