LoginSignup
0
1

ESP32でDOSを動かす

Posted at

目的

 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)は技適非対応。
 電波を出さないようにするか、技適を受ける必要が有る。
 ※技適未取得機器を用いた実験等の特例制度を利用した。
  マイナンバーカードを使うと申請は簡単に済む。
 53.giteki.jpg

ESP32 WROVER DEV 開発ボード

 WROVERは技適を受けており、日本国内で適法に運用可能。
  ※アマゾンでも売って居るが、多分セカンドソース。ピン配列とか機能は同じだと思うが。
   当方はFREENOVEから直接購入。基板にFREENOVA表記のシルク表示付き。
   支払いはペイパル経由なので、多分大丈夫だろう。
 PCEmulatorはこのボードには対応しておらず、若干のソフト変更が必要となる。
53.WROVER.jpg

 このボードには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が起動する。

53.satrt.jpg
 DOSが動く。
  ※DOS/Vを起動させたので、日本語表示部分がエラーとなっている。
 WindowsでEXCELも動く。
 Trubo-Cも動く
  ※BGIDEMOはTCCでコンパイルしないとLINKエラーになる。
53.dos.jpg

ESP32 WROOM32+PARAM

 WROOM32はPSRAMを搭載しておらず、追加が必要となる。
  ※PARAMはアリエクで購入。
 当初はブレッドボード接続としたが、メモリとしては認識されるもののDOSは起動しなかった。
  ※下図の左側。
 メモリチェックプログラム走らせると、エラーになる事が確認できた。

 次にESP32上に搭載し短距離で配線を行った所、DOS起動に行きつく事が出来た。
 但し、之でも動作が不安定で有り、特定操作でフリーズする。
  ※PSRAMの配線が外部に露出しており、之がダメと言う事だろう。
   最初からWROVERを使うべきであった。

53.wroom.jpg

感想

 FPGAで構築したものより、安定性が今一の様な気もするが、之は之で面白いアプローチだと思う。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1