V20ボード 解析編 その1

f:id:PocketGriffon:20200805101651j:plain

V20-MBCでもう少しだけやりたい事

動くようになったV20-MBC、まだいくつかやりたい事があります!

・シリアルモジュールをちゃんとしたい(DTR信号線対応)

・基板に脚を取り付けたい、ついでにケースも!

 

その後、調べてみたところ、シリアルモジュールのDTR信号線については、Arduino IDEからAtmega32Aのプログラムをアップデートする際に必要らしいという事がわかった。うーん…プログラムのアップデートするかな?失敗して起動しなくなっちゃったりしたら大変だし…しないかも(^^;; もしかしたら必要ないものなのかも知れないけれど、やっぱり気になるのでちゃんとしとこうかな。将来的な意味も含めてw

 

基板の脚とケースについては、既存のモノが使えそうな気がするんだけど、まだちゃんと調べてない。雑貨屋さんとか売ってるのかな…。この際なので、思いっきりかわゆいケースにいれて魅力アップするのも手だ!(*^O^*)/

 

ブートシーケンスを探る

CP/M-86やCP/M-80を使って遊ぶのも良いけれども、やっぱりこういうハードを触ると気になるのがブート周り。

 

V20(8088)は起動時にFFFF:0000に書かれた命令コードを実行しようとする。しかしV20-MBCの基板上にはROMが載っていないため、メモリの内容は「不定」になっているはずだ。

どういうカラクリで起動しているのか…これは手元にV20-MBCが来てからずっと謎だった。

さっそく調べていくと、Atmega32Aがとても面白い役割をしている事が分かった。

 

以下、私の解釈なので間違ってる情報満載という理解で読んで欲しい。

起動するのがCP/M-86とした場合……

まず基板を起動するとAtmega32Aが起動する。この時点でまだV20は起動していないんだと思われる(起動してたとしてもハングアップ状態??)。

そしてAtmega32Aが物理メモリのFFFF:0000に「JMPF 0040:2500」のコードである「EA 00 25 40 00」を書き込む。

その後、指定のファイル(cpm86.bin)をメモリの0040:0000から読み込んだ後に、V20を起動させる。

V20が起動した瞬間には、すでにBOOTするべきプログラムコードがメモリ上に用意されており、あとは通常起動に従って起動していく流れのようだ。

なるほど、うまいやり方だ!

 

ドライブとファイルの対応

CP/M-86でのドライブとSDカードに入ったファイルの関連付けについては、ディスクセットという考え方を導入している。SDカードの中にはDSnNxx.DSKというファイルがいくつも存在する。

f:id:PocketGriffon:20200805113125j:plain

DS0Nxx.DSKがCP/M-80用のディスクセット、DS1Nxx.DSKがCP/M-86用だ。

CP/M-86が起動している時は、DS1Nxx.DSKが対象となる。

 

CP/M-86上でドライブ変更(A:とかB:とか)した時に、Aドライブ=DS1N00.DSK、Bドライブ=DS01N01.DSK、...Pドライブ=DS1N15.DSKというように、連動しているファイルをオープンする。Qドライブ以降はドライブ変更に失敗する。

 

CP/M-86上でファイルをアクセスすると、Atmega32AがSDカード上のファイルを読み込む。Atmega32A自体の内蔵メモリが大きくないせいか、読み込みバッファが小さいためアクセスにはそれなりに時間が掛かる(固定でのバッファは32バイト、あとはスタックフレームにその都度確保)。

そして読んだデータを1バイトずつI/Oポート経由でV20へ渡していく。

 

各ドライブにはそれぞれ特徴的なファイルが入っていた。

サービス満点というべきか(^^;;

Aドライブ:CP/M-86の基本的なファイル

Bドライブ:TurboPascal 3.00A

Cドライブ:WordStar 3.30

Dドライブ:Fortran-77

Eドライブ:BASIC Compiler (CBASIC86)

Fドライブ:CP/M-80エミュレータ

G〜PドライブはNO FILE(テンポラリで使えという事かな)。

 

V20のI/Oポートの先にAtmega32A

その他にも、このV20-MBC基板に載っているハードへのアクセスは、全てAtmega32A経由で行っているらしい。V20から見るとI/Oポートの先にAtmega32Aがいて、アレ欲しいこれ欲しいとリクエストすれば送ってくれる。

 

FM-8や7、FP-1100でプログラミングをした事がある人であれば、サブシステムが載っているようなもの…と言えば理解が早いだろう。あそこまで豊富な機能はないが、最低限の入出力は肩代わりしてくれる。おかげでV20側のプログラムはかなりすっきりした状態。

 

ちょっとした疑問だが…良く8MHzで動くV20がI/Oポートをアクセスした、次の瞬間にデータが用意出来るな…と。何か仕組みがあるんかな…。あるんだよね、きっと?

 

Atmega32Aのプログラム

Atmega32Aに書き込まれているであろうプログラムを読む限り、CP/M-80とCP/M-86以外のOSを起動させようとすると、ちょっと苦労しそう。

 

V20で動くプログラムのテスト自体はautoboot.binというファイルを作って試せば良いみたい。まずは簡単な実験を進める上では困らなさそう。

だけど将来的にちゃんとOSとして起動させるためには、Atmega32Aのプログラムを書き換えて、ディスクセットなどの対応はちゃんとした方が良さそうな雰囲気。

 

うむむ…なんとなく起動周りが見えてきたので、あれこれやってみたい気持ちになってきた!特にIOS(Input Output Subsystem)の存在が、いろんな事を簡単にしてくれそうな雰囲気。これは楽しいモノを手に入れた気分!(^-^)

 

ではまた次回!(^-^)ノ