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

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

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

[総合第26回]


●迷走しておりました

この3日ほどの間、迷走しておりました。
前回書きましたSDカードプログラムの居場所を求めて苦悶しておりました。

現行のND80Z3.5(ND80ZV)システムROMにはSDカード制御プログラムをはめ込むだけのスペースがないことは明らかです。
ND8080やMYCPU80のROMはND80Z3.5よりももっと窮屈です。
どうしても入らないということになったら、プログラムを分割するしかありません。
SDカードプログラムを分けて、どうしても必要な部分だけはなんとかROMに入れて、あとは必要に応じてHDDもしくはSDカードからRAMにロードして実行するというスタイルです。
しかし実際に取り掛かってみますと、そもそも分割すること自体がなかなかに困難でした。
最も基本的なルーチンと初期化に必要な部分と、そして最低限せめてバイナリファイルのロードルーチンだけはどうしても必要です。
ところがその部分がそもそも大きいのです。
ND80Z3.5のROMになんとかはめ込むのが精一杯という結果になりました。
同じ方式ではND8080やMYCPU80のROMには入りそうにありません。

まま、それについてはまたあとで苦しむこととしまして、とりあえずは、それでなんとか落着という線で収めようとしたしたのでありますが。
どうにも面白くありません。
HDDからロードするのは仕方がないとしましても、たとえばND80Z3.5単独でSDカードに対してプログラムのセーブ、ロードをする場合、SDカードプログラムの、あとからロードする部分を前もってSDカードにセーブしておかなくてはなりません。
SDカードにアクセスするためのプログラムをSDカードに入れておくというのは、みっともないといいますか、なんとかならないものかという気がして、どうにもすっきりしません。
シャレにもならんぞ、という気分です。

それで次に考えましたのは、SDカードプログラムはROMに入れておいて、その代わりに今ROMに入っているプログラムの一部を外してしまおうという案です。
これはいつかきた道であります。
そもそも1月からこっちというもの2ヶ月ほどをかけて、ND80Z3.5およびそのほかのシステムROMの中を整理圧縮しまして、それでもどうしようもないために、TK−80モニタは外してしまおうという案に落ち着きそうだったのが、それでありました。

しかしそれじゃあTK−80互換という部分が落ちてしまうではないかと思い直したことから、この3日間の迷走が始まったのでありました。
その間、壊しては作り、作ってはまた壊す、ということの繰り返しでした。
TK−80モニタは外せない、ということになりますと、代わりにどこか外せるプログラムを捜さなければなりません。
システムプログラムのメモリマップを眺めていて、外すならこれしかない、と最終的に決定したのは、DFLO(倍精度演算ルーチン)でした。



システムROMプログラムの終わりに位置していて、6D00から7F3Dまでですが、その後ろは7FFFまで未使用ですから、これを外せば4KB以上のスペースが確保できます。
しかし倍精度演算は使用頻度は少ないとはいうものの、外しっぱなしというわけにもいきませんでしょう。
で、今度はそのDFLOプログラムをRAMに置こうとしたのですが、今度はRAMにそのための空きがありません。
ぎりぎり使えるとしてもE000〜の精々2KBがやっとです。
それじゃあとてもDFLOは収まりません。

おお。
裏RAMがあるじゃありませんか。
CP/M用に用意した0000〜7FFFの裏RAMならたっぷり使えます。
もともとZB3BASICとCP/Mシステムはどちらか片方しか有効にできませんから、BASICモードのときに裏RAMを使ってもシステムとしてはなんら問題はありません。
これこれ、それでいきましょう。
ということでまたもやスクラップ&ビルドで、そのようにプログラムを書き直して、テストをしてみたのでありますが。
駄目でありました。
倍精度ルーチンは、もちろん自分で書いたプログラムなのですけれど、かなり裏技を使っておりまして、なかでもスタックの使い方にちょいとルール違反に近いところなどがありまして、バンク切換えでハングアップしてしまいます。

結局のところ、SDカードプログラムのために倍精度演算プログラムは完全に外してしまう、というところに落ち着きました。
3日間の迷走でありましたが、そのように落ち着いてみますと、結局それが一番よいように今は納得しています。
SDカードインターフェースと新プログラムROMをペアで供給いたします。
今までのROMと差し換えて使っていただくことになります。
そうすると倍精度演算を必要とする場合にはROMをもとに戻すということになりますが、それも面倒な話です。
そこで現行の倍精度演算の入ったROMプログラム(SDカードプログラムなし)はCDROMで供給することにします。
ZB3BASICシステムのあるフォルダに置いて、必要な場合には0000〜の裏RAMにロードすることで、表のROMは倍精度はないけれどSDカードが使える新システムプログラム、裏のRAMはSDカードは使えないが今までと同じ倍精度が使えるシステムプログラム、という具合に使い分けていただければ、と思います。

以下そのように作成したROMを実装して起動した画面で具体的な動作を説明します。

倍精度を裏RAMで使ってみるというテストを兼ねていますから、最初に現行のROMプログラムを0000にロードします。
ロードコマンドやセーブコマンドで0000〜7FFFの範囲を指定すると、自動的に裏のRAMがセレクトされて、裏のRAMを対象に書き込み、読み出しが行なわれます。
システムに影響しない適当なRAMエリアにRAM/ROM切換えプログラムを書いておきます。
上の例では
E100 3EFF    LD A,FF
E102 D39C    OUT (9C),A
E104 C33310  JP $1033
E107 3E00    LD A,00
E109 D39C    OUT (9C),A
E10B C33310  JP $1033
という短いプログラムを書いています。
I/OアドレスにFFを出力すると裏RAMが有効になり、00を出力すると表のROMが有効になります。
$1033はZB3BASICのリエントリポイントです。

起動後はROM(SDカードプログラムが入った新しいシステムROM)が有効になっていますから、SDカードにアクセスできます。

DIRコマンドを使ってみました。

そのあとSVコマンドでE100〜E10DのプログラムをSDカードにファイル名RRCG1.BINでセーブしました。

もう一度DIRコマンドでRRCG1.BINがセーブされたことを確認しました。
そのあとLDコマンドで、テストのため別のアドレスにロードして、DMコマンドで確認しました。

そのあと今度はJP E100でRAMに切換えました。

もう一度DIRコマンドを実行してみると、今度はERR:23が表示されました。
ERR:23は計算式に異常があるときに出されます。
DIRがコマンドとしては認識されず、変数名として解釈されたためこのエラーが表示されました。
確認のため、CMコマンドで普通ならROMの範囲である7FFF番地を書き換えてみました。
7FFF番地が書き換えられたので、現在は裏RAMが選択されていることがわかります。

裏のRAMが選択されていれば、倍精度演算が使えるはず、ということで試してみました。

倍精度演算が正しく実行できました。

今度はもとの通り、ROMを有効にしてみます。
JP E107でROMが選択されました。

DIRコマンドは正しく実行できるようになりましたが、逆に倍精度演算は実行できなくなりました。
LISTで最初の行のA#=0#の右辺の演算でエラーになりました。
ERR:78は新しく追加したエラーコードで倍精度演算が実行できないことを示しています。

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

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