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


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第111回]



●LOGディレクトリがクリアできない?

前回書きましたように、ND80KL/86(AM188版)の新マイコン独立化セット用システムプログラムがおおむね出来上がりました。
今は最後の動作確認を行なっています。
それで最後の仕上げということでFORMATについて動作確認をしましたところ、なんとも理解できない現象にでくわしてしまい、解決するまでにたっぷり1日を費やしてしまいました。

下はFORMATのテストをしている画面です。

まずはDIRコマンドを実行してディレクトリの表示を行ないました。
AM188のシステムは16ビット8086システムですからZB3DOS(CP/M互換DOS)は実行できません。
DIRコマンドではZB3DOS用のZディレクトリが表示されています。
これはZB3DOS用のディレクトリなので、AM188版では作らないつもりでした。
ところがこれから説明します不可解な現象に悩まされたため、結局あれこれいじらないで、ZB3DOS用のフォーマットをそのまま踏襲することにしました。

その次に表示されているLOGディレクトリは今回問題になったディレクトリです。
ログディレクトリの表示コマンドはDIRLです。
DIRLコマンドを実行して、そこにログファイルがいくつかセーブされているところを確認しました。
そこまで確認したあとで、いよいよFORMATの実行です。

FORMATには少し時間がかかります。
実行中であることを示すため約1秒間隔で ... が表示されます。
最後のほうで数秒間停止したままになりますが、我慢して待っていてください。
FORMATが終了すると
>が表示されます。
そのあとDIRコマンドを実行してみました。
ZディレクトリとLOGディレクトリは表示されますが、そのほかのファイルはクリアされて表示されません。
続いてDIRLコマンドを実行しました。
ログファイルもクリアされて表示されません。

が。
ここでログディレクトリの動作を確認するために、CLOSELを実行したところ、とんでもない事態が発生してしまいました。

CLOSELは現在オープンしているログファイルをクローズして、その時点からあらたなログファイルをオープンするためのコマンドです。
この機能によって今開いているログの内容を確認することができます。
月日時分をファイル名とする新しいファイルがオープンしました。
ここまではよかったのですが。
問題はその後で発生しました。
念のためDIRLコマンドを実行しました。
今クローズしたログファイルと新たにオープンしたログファイルの2つが表示されるはず、と思ったのですが。

なんと、FORMATを実行して確かに消去されたはずのログファイルが全部復活してしまったではありませんか。
これが真夏ならば、まっこと妖怪変化の仕業かと背筋が寒くなるところです。
今はもう晩秋、立冬も過ぎております。
お化けの季節はとおに終わっております。
なんなのだ、これはいったい。

かくして貴重な一日をたっぷり費やして、さんざ悩んであれこれ試行錯誤して、やっとお化けの正体を突き止めることができました。
最初は意味不明のバグかと思ったのですが、正体が分かってみれば、お化けでもなんでもない、当たり前のことだったのでした。
そもそも小さいながらもDOSシステムなのでありまして。
そのDOSシステムが自分自身のディスクたるSDカードを自らFORMATしてしまうということについて、もう少し慎重に考えてみるべきだったのです。
Windowsが起動している状態でCドライブをフォーマットしたりしたら、どうなると思います?
そういうことだったのでした。

今のところ、システムそのものはROMにあります。
ZB3DOS(CP/M互換DOS)と違ってSDカードにシステムはありません。
が。
実は、システムが起動したときから、SDカード上にログファイルが作成されて、画面表示のままを記録しているのです。
その最中にFORMATが実行されて記録中のログファイルも一旦は消されてしまいました。
これは相当に危険なことでした。
タイミングによってはシステムが暴走するかもしれません。
一旦はログフォルダも消去されたのですが。
そのあとでCLOSELを実行しました。
すると何がおきたかと言いますと。
現在進行中のログファイルの情報は、そのときのログディレクトリの1セクタとともにログバッファに蓄えられていて(これはFORMATコマンドに影響されません)、それがクローズされたことで、そのバッファの内容がログディレクトリに再書き込みされたのでした。

そのように考えますと、新独立化セットではSDカードのFORMATはちょいと危険ということになります。
ですけれど。
そういう仕組みであることを十分理解したうえで、新独立化セット自身でSDカードをFORMATするには、ひとつだけ方法があります。
それを確かめるために、もう一度FORMATを実行しました。

そのあとDIRコマンドとDIRLコマンドを実行しました。
肝心なのはこのあとです。
ここでND80KL/86(AM188版)本体ボードのリセット(MON)を押して、新独立化システムを強制終了します。
CLOSELコマンド、MONコマンドを実行してはいけません。

そのあと電源OFFしてもSDカードを抜いてもよいのですが、ここでは確認のため、再び新独立化システムを起動しました。

DIRLコマンドを実行すると、システムの起動時に新規オープンされたログファイルのみが表示されました。
もうこれでお化けは表示されないことが確認できました。

さらに念のためCLOSELコマンドを実行したあと、DIRLコマンドを実行してみました。

起動時にオープンしてCLOSELでクローズしたログファイルと新たにオープンしたログファイルの2つが表示されました。
やれやれです。
やっとのことで一件落着いたしました。

16ビットマイコンボードの製作[第111回]
2018.11.14upload

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