V20ボードでMS-DOSを動かしたい! その1

宣言するのは厳しいけれども…

「出来ない可能性のあるもの」を高らかに宣言するのは避けたいけれども…過程も含めて書いて行きたいと思ったので、目標を先に書いちゃった方が良いかなーと思った!

 

正直、作れない可能性が高いです。出来ない理由を挙げたらキリが無いし、そこに生産性は無いのでやめるけど、ちょっと考えただけでもわんさか出てくる。

一番大きいのは私の「飽きっぽい」性格だけど!!!(^^;;

 

「出来なくて当たり前、出来たら褒める」くらいの感覚で見てもらえると助かりますw

見通しも含めて書いていこうと思う!

 

移植するMS-DOSはどれが良い?

MS-DOSと一言で言っても種類がたくさんある。

まず個別の機種によるバリエーションが存在する。

PC-9801用、EPSON98用、IBMPC用その他もろもろ。

f:id:PocketGriffon:20200806113924j:plainf:id:PocketGriffon:20200806114011j:plain

f:id:PocketGriffon:20200806114451j:plainf:id:PocketGriffon:20200806114510j:plain

f:id:PocketGriffon:20200806113952j:plain

写真には無いがFMR、J3100、IBM5550なども所有している。

いつかMS-DOSを移植したいと考えてパッケージを手元に残してあったのだ。

 

機種については、自宅にある資料の多さで言えばPC-9801用を選択するのが良さそう。PC-9801は丸裸にされている感覚があり、調べても分からないって事はほとんどないと思う。

 

そしてMS-DOSのバージョンだけでも結構な種類がある。

 家にあるパッケージはバージョンが新しいモノが多い。

バージョンが新しいということはプログラムサイズも大きく、かつ中身も複雑になっている可能性が高い。機能としては十分で、かつプログラムサイズが小さいとなると、3.1、もっと言えば2.11くらいが好ましいのかも知れない。

 

f:id:PocketGriffon:20200806114029j:plain

アプリケーションパッケージの中にMS-DOSのシステムが含まれているものがいくつかある。これも利用出来ないか考えたい。

実はパッケージは出て来ないが複製したディスクがあるものも多数ある(先日のLSI C-80もそのひとつ)。ここは割り切って利用していこうと思う。

あとは謎パーに入っているMS-DOSシステムも。

 

どうせIO.SYSは多くが書き直しだし、MSDOS.SYS、COMMAND.COMは共通で使えるワケなので、用意するバージョンが重要であって、どの機種であるかはあんまり気にしない。

CPUがV20、ソフト的な中身は8086という事を考えると、MS-DOS後半に出てきたメモリを管理するアレコレは活用が出来ない。EMSだってそのままでは使えないのだ(HP200LXみたいにソフトで実現するならアリ)。

そう考えると、バージョンは古くても構わないとなる。

よし、やっぱりMS-DOS2.11を探しつつ、3.1があればヨシ、妥協は3.3かな!

 

移植を開始する前に…

V20-MBCを解析していってますが、なーんとなく…開発者に怒られそうな事を書いてしまいますが……このボード、Atmega32AがメインでV20がサブと考えて設計してあるのかな??

基本はAtmega32Aがいろんな制御をしているし、Atmega32AがV20を動かしてる。

V20が中心…ではなく、Atmega32Aが中心と考えていくと、いろんな事がしっくりくるのだ。

 

ウチにはAtmega32Aのフラッシュメモリを書き替える環境がない。なので、Atmega32Aのプログラムは無変更であることが望ましい。そしてAtmega32AはCP/Mの都合の良いプログラミングがなされている…。

条件はいろいろと厳しい気がしている。MS-DOSを動かすのには致命的な何かがあるのかも知れない。そこはもう今全てを洗い出すのは不可能なので、おいおい見ていこうと思う。

 

まずはautoboot.binを利用して動作実験をいくつかしようと思う。

…と考えて、ラクに開発出来るようにとFlashAirなどを利用するための環境を整えていたのだが…ちょっとした考えがアタマをよぎった。

 

このマシン…つまりV20-MBCエミュレータを書いてしまったらいいのではないか、と。

各種実験はエミュレータ上で進めた方が圧倒的にラクだ。

ざっくり今アタマの中にある事を書いてみる。

 

V20エミュレータ

f:id:PocketGriffon:20200806153118j:plain

まずは基本となるV20のエミュレータ。V20というよりは8086エミュレータになると思う。V20で拡張された命令は使わなければ済む話だ。

V20-MBCでは8088を利用するという選択も用意されているため、おそらく内部でV20専用コードは使用されていないと思われる。

 

もうね…私は何度8086系のエミュレータを書いてるんだろう…ってくらい書いてる。

でもそのたびにエレガントに書けない!

基本、脳みそをクリーンしておきたいので他で書かれているエミュレータソースコードを見ないようにしているんだけど、世の8086エミュレータはどう書かれてるんだろう…。

どうしても命令デコードが煩雑になってしまい、気が付くとぐっちゃぐちゃ…。

エミュレータと同時に逆アセンブラも開発する事になるんだけど、セグメントオーバーライドプリフィックスなどはどーしても変になる…。

今度こそ綺麗に書きたい…希望的観測(^^;;

 

V20が持っている8080エミュレーションは実装しない。MS-DOSを動かすのに特に必要性を感じないからだ。そういう楽しい事をしたければ、これこそ実機で動かせば良い。

 

ちなみに世にある8086エミュレータを使わないのは、単に自分が書きたいからだw

 

Atmega32Aエミュレータ

Atmega32Aの内部情報を見てみたけれども、想像していた以上に複雑かつちゃんとしてる。

https://avr.jp/user/DS/PDF/mega32A.pdf

 

こちらは最初からエミュレータを作るつもりは無い。

機能をマネするだけで、内部の構造は全く違うものにしちゃう。シビアなタイミングを要するものはなさそうに思うので、ここは割り切る事にした。

V20から見た時の挙動を合わせておけばいいかな…くらいの感覚だ。

 

まずはCP/Mを動かす

上の2つのエミュレータを組み合わせて、まずはV20-MBCの基本機能であるCP/M-86を起動させてみる。V20-MBCのプログラムを無変更で動かす事が出来れば、そうとうなレベルでV20-MBCがエミュレーション出来てると思って良いだろう。

 

で、それが動くのを確認した後に、MS-DOSの移植を始める。エミュレータ上で動くようになれば、きっとV20-MBC実機でも動く…という皮算用だ。

実験するたびにSDカードへデータを転送する必要も無く、ハードのリセットボタンを押しまくるようなハードな使い方をしなくても済む。

 

可能性をいくつか残したい…

エミュレータを開発した後にMS-DOSを…なんて、素直に考えればとっても遠回りな感じがすると思う。事実、猛烈な遠回りだと私自身も思う(^^;;

 

MS-DOSを移植する…と聞くと、ものすごく大層な事をしようとしているように聞こえるが、ブート周りについては既存のMS-DOSの機能をそのまま使うつもりでいる。そしてIO.SYSはV20-MBCに合わせてデバイスドライバを用意すれば良い。

 

いろいろと考えてみて、IO.SYSを直接書いちゃった方が早いかも…と思ったら、あっさりそちらに乗り換える可能性もある。

全ての話は、今ある可能性の話にしておきたい(^^;

 

生暖かく見守って!

いろいろと書いてしまいましたが、今現在、私の手元にはコードの1行さえも存在しない。

常日頃から遊んでるわけでもないので時間も限られているし、もっと言えばお年頃なので寿命だって限られてきてるw 無茶は出来ないのだ。

のんびりマイペースで進めていくので、暖かく見守ってくださいw

 

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