目的
ESP32でDOSを動かせる事は、かなり前から知って居た。
こんなチップでDOSが動くと言う事は、DOS世代の経験者としては「隔世の感」の一言。
之の追試を行いたかったが、主にハード入手の問題で手を付けられなかった。
所が、通販サイトを覗いている時に、稼働できるハードの有るサイトに目が留まった。
◆◆◆ よし、本当にDOSが起動する所をこの目で見てやるぜ ◆◆◆
汎用のESP32ボードでも、動かす事も出来るといいな。
経緯
ESP32でDOSを動かすプロジェクトは、arduinoのライブラリFabGLのexamples/VGA/PCEmulatorに記載されている。
「FabGL」
又、下記サイトに詳しく説明されている。※既に情報が多少旧くなってるが。
「ht-deko.com PCEmulator (FabGL)」
サンプルをarduino開発環境でコンパイルすれば、実行可能となる筈である。
PCEmulatorはFabGLのVGA表示ライブラリを、8086エミュレータの表示部として使って居る。
※但し画面はCGA相当であり、DOS/V(日本語DOS)は動かない。
当方のに勘違いなのかも知れないが。
ESP32のクロックは公称240MHzであり、数MHzの8086として十分動作する。
※但しESP32の内蔵RAMが有効な範囲で有り、之を超えると途端に遅くなる。
PCEmulatorを動かすには、DOSのRAMエリアとして、PSRAM付きのESP32が必要である。
※ESP32-WROOM32には、当然搭載されていない。
※此処で言ってるPSRAMとは、SPIインターフェースで制御する8ピンの疑似RAM。
何しろ、ESP32の端子が限られているから。当然動作は遅くなる。
動作可能なハードとしては、下記が考えられる。
・VGA32
・ESP32 WROVER DEV 開発ボード
・ESP32 WROOM32+PSRAM
当初は入手に難が有ったが、現在では比較的容易に入手可能であろう。
なお、VGA32以外の場合は、PSRAM付きのESP32の他に下記の追加ハードが必要。
・VGAポート
・SDカードスロット
・PS2キーボード/マウス入力ポート
VGA32
FabGLが推奨するハード。無変更で動作する。
※当方はアリエクで買ったが、最近はアマゾンでも売っている。
※ht-deko.comに記載の変更をしなくても動いた。
注意事項として、此処に使われているESP32(T-Micro32)は技適非対応。
電波を出さないようにするか、技適を受ける必要が有る。
※技適未取得機器を用いた実験等の特例制度を利用した。
マイナンバーカードを使うと申請は簡単に済む。
ESP32 WROVER DEV 開発ボード
WROVERは技適を受けており、日本国内で適法に運用可能。
※アマゾンでも売って居るが、多分セカンドソース。ピン配列とか機能は同じだと思うが。
当方はFREENOVEから直接購入。基板にFREENOVA表記のシルク表示付き。
支払いはペイパル経由なので、多分大丈夫だろう。
PCEmulatorはこのボードには対応しておらず、若干のソフト変更が必要となる。
このボードにはSDカードスロットが付いてるが、VGAの信号とバッティングする。
※DOS起動時にSDが見えなくなる。
そこで下記プログラムに記載のESP32の端子に、外部にSDカードスロットを追加する。
このプログラムを動作させ、"INIT OK"が表示されれば、SD接続はOKだろう。
#include <SD.h>
enum { // 3.3v:sd.4 gnd:sd.6
sd_ss = 13, // sd.2
sd_mosi = 12, // sd.3
sd_sck = 14, // sd.5
sd_miso = 35 // sd.7
};
void setup() {
SPI.end(); SPI.begin( sd_sck, sd_miso, sd_mosi, sd_ss );
Serial.begin(115200); while(!Serial) { delay (10); }
Serial.println("Card Mount");
if(!SD.begin(sd_ss)){
Serial.println("Card Mount Failed");
return;
}
Serial.println("INIT OK");
}
void loop(){
この接続に合わせてライブラリを変更する。
Arduino\libraries\FabGL\src\fabutils.h(1236)以降のcase文に下記を追加。
※ESP32D0WDQ5 は WROVER-B。ESP32D0WDQ6 は WROOOM-32 を表している。
※この変更にはWROOOM-32使用の場合に必要となる記述も併せて記載している。
bool FileBrowser::mountSDCard(bool formatOnFail, char const * mountPath, size_t maxFiles, int allocationUnitSize, int MISO, int MOSI, int CLK, int CS)
{
switch (getChipPackage()) {
case ChipPackage::ESP32PICOD4:
MISO = 2;
MOSI = 12;
break;
case ChipPackage::ESP32D0WDQ5:
MISO = 35;
MOSI = 12;
break;
case ChipPackage::ESP32D0WDQ6:
MISO = 35;
MOSI = 12;
break;
default:
break;
}
CLK(14),CS(13)はディフォルト設定のピンを使用している。
Arduino\libraries\FabGL\src\fabutils.h(887) : static bool mountSDCard(bool formatOnFail, char const * mountPath, size_t maxFiles = 4, int allocationUnitSize = 16 * 1024, int MISO = 16, int MOSI = 17, int CLK = 14, int CS = 13);
VGA,SD,PS2キーボードを接続して、SDカード(空で可)を刺しておく。
電源を投入しVGAに「ESP32 PC EMULATOR」の表示が出れば、VGAの接続はOK。
後は、画面に文句が表示されたら、その部分の接続を確認する。
※PS2はマウスを使わなくても、プルアップ抵抗の接続は必要。
無いとキーボードエラーとなり先に進まない。
ハードエラーが無く、WIFI設定がキー入力できたら、ディスクの選択画面が出る。
放置して置くと、自動的に先頭のFREEDOSがサイトからダウンロードされ、DOSが起動する。
DOSが動く。
※DOS/Vを起動させたので、日本語表示部分がエラーとなっている。
WindowsでEXCELも動く。
Trubo-Cも動く
※BGIDEMOはTCCでコンパイルしないとLINKエラーになる。
ESP32 WROOM32+PARAM
WROOM32はPSRAMを搭載しておらず、追加が必要となる。
※PARAMはアリエクで購入。
当初はブレッドボード接続としたが、メモリとしては認識されるもののDOSは起動しなかった。
※下図の左側。
メモリチェックプログラム走らせると、エラーになる事が確認できた。
次にESP32上に搭載し短距離で配線を行った所、DOS起動に行きつく事が出来た。
但し、之でも動作が不安定で有り、特定操作でフリーズする。
※PSRAMの配線が外部に露出しており、之がダメと言う事だろう。
最初からWROVERを使うべきであった。
感想
FPGAで構築したものより、安定性が今一の様な気もするが、之は之で面白いアプローチだと思う。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。