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

マイコン独立大作戦
ROM/RAM/RTCボードの製作

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

[第16回]


●LOGファイルのための準備

このところキャラクタの色表示について、書いてきました。
ほかにやらなければならない作業が山積しているため、HPの更新は数日おきという状態が続いています。
毎回同じことの繰り返しですが、気長なお付き合いをお願いいたします。

しかし、「マイコン独立大作戦」のステージ2でありますところの、キャラクタの色表示とログファイルの組込み作業もなんとかめどが立ちつつある気がいたします。
独立化システムでのログファイル機能は、当初から構想していたわけではありませんが、USB接続を離れていざ独立して作業をしてみますと、どうしても実現させたい機能であることに気が付きました。
USB接続型の現行ZB3システムでのプログラム開発作業では、ログ機能がおおいに役立っています。
多忙にかまけてノートの整理を怠ったりしたようなときに、過去ログの存在がどれだけ役に立ったか、言葉では言い表せないほどです。
そういう経験をしてしまいますと、独立化システムにおいても、私の気持ちとしては、ログはもう必須の機能です。

気持ちはそうなのですが、しかしその実現ということになりますと、これはいささかハードルが高い作業を覚悟しなければなりません。
まず第一にそのログが作成された日時の記録が必須になります。
さらにはより多くのメモリが必要となるため、RAMの増設を考えなければなりません。
将来を考えると、今でもプログラムROMの容量は限界まで来ていますので、ROMの増設もあわせて考えるべきでありましょう。
ということで、本稿のテーマでありますROM/RAM/RTCボードの製作に着手したのでしたが、とりあえずの増設RAMの使用テストとRTCのBASICへの組込み作業はなんとか出来たように思います。

さて残るは実際にログをシステムに組み込むための作業です。
これができれば「カラーキャラクタディスプレイインターフェースボード」とともに「ROM/RAM/RTCボード」を「マイコン独立化セット」のオプションボードとして皆様に提供することができます。

で。
ここ数日、いよいよそのログ機能について、具体的な設計を進めつつ、とりあえずテスト的なプログラムの作成作業をしてきました。
これが上で書きましたようになかなかにハードルが高い作業なのです。
現行のUSB接続型でのログファイルの作成はもっぱらWindows上でMSDOSのファイルシステムを利用して行なっています。
それはそれで簡単ではありませんが、C++でのプログラム作業ですから、楽といえば楽といえましょう。
しかし独立化システムではベースにはSDカードのアクセスプログラムがあって、それはもちろん全てZ80および8080アセンブラで作成したものです。
そこにさらに常駐する形で、最初のZB3BASICの起動から電源OFFまでの文字の画面表示をログファイルとしてSDカードに記録保存することが求められます。
どうしたらそれを可能にすることができるか?

試行錯誤を重ねる中でだんだんとあるべき形が整ってきたように思えます。
SDカードのアクセスプログラムに追加する形で、とりあえずログファイルの記録に必要な機能を組み込んで、本日は朝からその部分のテストをしてきました。
まだほんの入口だけのテストですけれど、その結果はまずまずという出来になりましたので、例によりまして、私の備忘録を兼ねて以下簡単なコメントをつけて見ていただくことにしました。

Windows98SEにND80Z3.5をUSB接続してのテストです。

もう何回も書いてきていますが、私はこういったマシン語的な作業には今でもWindows98SEを使っています。
Windows7も悪くはないのですが、こういう作業にはかえってわずらわしいところがあって、Windows98SEのほうが使い易いです。

それで、画面の説明です。
左側に開いているのはデバッグ中のSDカードプログラムのアセンブルリストです。
右側のDOS画面はそのプログラムをND80Z3.5にロードしてデバッグ中の画面です。
最終的には独立型システム上でテストをすることになりますが、やはりUSB接続型のシステムで、RAMにロードしてデバッグするのが効率的です。
ですからSDカードプログラムはROMの7000番地台に組み込んでいますが、デバッグ中のプログラムはND80Z3.5のRAMにロードしてデバッグできるように、とりあえずアドレス9000にロードして実行する形で書いてあります。

Zディレクトリに加えてLOGディレクトリを作りました。
LOGディレクトリの作成はできるだけプログラムの負担を軽くするために、最初のCP/Mフォーマット時に行うことにしました。
そのためあらたにログ機能を使うためには一旦SDカードをフォーマットし直す必要があります。
それまでにSAVEしたデータ、プログラムファイルは消去されてしまいます。
面倒なことですが、必要でしたらフォーマットの前にSDカードの中身をバックアップしておいてください。

ログファイルについて、悩んでいた問題がありました。
現行のログファイル名はファイルオープン時の月日時分を示す8桁の数値です。
たとえば8月17日23時4分でしたら、08172304.LOGになります。
独立型ND80Z3.5の場合、電源ONして[I/O][8]と操作して、ZB3BASICが起動したときの時刻になります。
ひょっとして1分以内にリセットまたは電源のOFF、ON後に再び[I/O][8]でZB3BASICを起動する、ということがあるかもしれません。
すると同じファイル名でOPENすることになります。
これはちょっと都合が悪いです。
現行USB接続型では前のファイルを上書きOPENします。
実は上書きOPENは、前のファイルを削除するとともにそれが占有していた領域を開放するという作業を伴います。
これは相当に負担が重い作業です。

もうひとつ別の可能性もあります。
ログファイル名には年を示す数値はありません。
実際にはMSDOSのファイルにはそのファイルが作成された年月日時分秒も記録されるのですが、それもかなり負担の重い作業ですから、独立化システムでは、そこはパスしています。
ひょっとすると一年前と同じ日同じ時刻にOPENするということもあるかもしれません。
いずれも可能性は低いのですけれど、そこはクリアしておきたいところです。
そこで思いついたのが上の画面での方法です。

上の画面ではテストですからログファイル名には日時ではなくて12345670という8桁の固定データを使っています。
アドレス904EはLOGOPENプログラムへのエントリです。
アドレス904BはLOGディレクトリの表示です。
904Eを実行するたびに12345670.LOGというファイル名でOPENが試みられます。
そこで同じファイル名がみつかった場合の対処ですが、その場合には末尾の数値を示す文字コード(30H〜39H)に10Hを加算したものをファイル名とします。
31H〜39Hに10Hを加算すると41H〜49H(A〜I)になりますが、30H+10Hは40H(@)になってファイル名として不適当なので、その場合だけさらに0AHを加算して4AH(J)とします。
かくして上の画面では1234567J.LOGが作成されています。
そのルールによって、J=0とすればもとの日時からなるファイル名を知ることが出来ます。

さらに同じファイル名(12345670)が重ねてOPENされる場合、1234567Jとなりますが、それもすでに作成されているため、同じルールで末尾の値に10Hを加算します。
41H〜4AH(A〜J)に10Hを加算すると51H〜5AH(Q〜Z)になります。
さらに重ねて同じ日時ファイルがOPENされる可能性はまずないと思いますが、この部分のプログラムはループを重ねているだけですから、その次も対応しています。
51H〜5AHに10Hを加えると61H〜6AH(a〜j)になります。
さらに61H〜6AHに10Hを加えると71H〜7AH(q〜z)になります。
さらに71H〜7AHに10Hを重ねると…(そんな場面は100%ありえないはずなのですけれど)。

7桁目に対して同じルールを適用します。

ROM/RAM/RTCボードの製作[第16回]
2017.8.17upload

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