宣言するのは厳しいけれども…
「出来ない可能性のあるもの」を高らかに宣言するのは避けたいけれども…過程も含めて書いて行きたいと思ったので、目標を先に書いちゃった方が良いかなーと思った!
正直、作れない可能性が高いです。出来ない理由を挙げたらキリが無いし、そこに生産性は無いのでやめるけど、ちょっと考えただけでもわんさか出てくる。
一番大きいのは私の「飽きっぽい」性格だけど!!!(^^;;
「出来なくて当たり前、出来たら褒める」くらいの感覚で見てもらえると助かりますw
見通しも含めて書いていこうと思う!
移植するMS-DOSはどれが良い?
MS-DOSと一言で言っても種類がたくさんある。
まず個別の機種によるバリエーションが存在する。
PC-9801用、EPSON98用、IBMPC用その他もろもろ。
写真には無いがFMR、J3100、IBM5550なども所有している。
いつかMS-DOSを移植したいと考えてパッケージを手元に残してあったのだ。
機種については、自宅にある資料の多さで言えばPC-9801用を選択するのが良さそう。PC-9801は丸裸にされている感覚があり、調べても分からないって事はほとんどないと思う。
そしてMS-DOSのバージョンだけでも結構な種類がある。
家にあるパッケージはバージョンが新しいモノが多い。
バージョンが新しいということはプログラムサイズも大きく、かつ中身も複雑になっている可能性が高い。機能としては十分で、かつプログラムサイズが小さいとなると、3.1、もっと言えば2.11くらいが好ましいのかも知れない。
アプリケーションパッケージの中に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エミュレータ
まずは基本となる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
それではまた次回!(^-^)ノ