PCEmulator (FabGL)

FabGL は (主に) ESP32 用のグラフィックライブラリです。I2C / SPI LCD や VGA 出力ディスプレイドライバーが実装されています。

PCEmulator は 8086/80186 ベースの PC エミュレータで、FabGL のサンプルスケッチの一つです。FreeDOS, MS-DOS, CP/M-86, Linux-ELK, Windows 3.0 等が動作します。



必要なハードウェア

PCEmulator に必要なものは次の通りです。

ESP32 で PSRAM 付きとなると ESP32-WROVER となります。ESP32-WROOM-32 ではダメです。PSRAM を外付けする事もできますが、部品点数と難易度が上がってしまうため、ESP32-WROVER モジュールが載った ESP32-DevKitC を使う事にします。

FabGL を使うだけだったら ESP32-WROOM-32 モジュールが載った ESP32-DevKitC を使ってもよく、例えば VIC20 エミュレータ等は ESP32-WROOM-32 でも動作します。

See Also:



開発ボード

FabGL 開発用ボードあるいはその互換品があると便利です。

海外のボードは日本に発送してくれない事が多く、入手性に難があります。



ブレッドボードによる構築

FabGL 開発用ボードと同等のものをブレッドボードで構築する事もできます。

先述の通り、PCEmulator を動作させるには ESP32-WROVER モジュールが載った ESP32-DevKitC が必要となります。部品表は次の通りです。

部品 数量 備考
ESP32-DevKitC-Vxx1ESP32-WROVER 搭載
6 穴ブレッドボード2
VGA コネクタ (DE-15) 変換基板1
PS/2 コネクタ (ミニ DIN-6) 変換基板2
3.5mm オーディオコネクタ変換基板1
microSD ブレークアウト基板1プルアップ、レベル変換なし
ピンヘッダ適当
抵抗適当後述
電解コンデンサ 10μF1
セラミックコンデンサ 0.1μF1
ジャンパーワイヤー適当
ジャンパーケーブル適当

必要な抵抗の明細は次の通りです。VGA コネクタ用の 400Ωと800Ωの抵抗はまず入手できないので、他の抵抗を組み合わせて使います。PS/2 コネクタ用の 2kΩの抵抗も (抵抗パックにあまり含まれていないという意味で) 入手難ですが、プルアップ抵抗なので、2.2kΩを使っても問題ないと思います。配線の関係で他の抵抗を組み合わせて使うのは困難です。

抵抗値 数量 備考
120Ω4
150Ω1
270Ω1
400Ω3代替: 180Ω + 220Ω または 200Ω + 200Ω
800Ω3代替: 330Ω + 470Ω または 120Ω + 680Ω
2kΩ4代替: 2.2kΩ または 2.2kΩ || 22kΩ(並列)
10kΩ1SD カードプルアップ用。不要かも。

他に必要なものは次の通りです。

See Also:


配線

6 穴ブレッドボードを 2 つ繋ぎ、ジャンパーワイヤーや抵抗、コンデンサを配置します。

コンデンサの配置が分かりづらいですが、次のようになっています。電解コンデンサは極性 (向き) に注意してください。

各種変換基板を配置します。VGA 端子の所は工夫するとちょっとだけコンパクトにできます。

ESP32-DevKitC を配置します。

ジャンパーケーブルを配置します。これで完成です。

余談ですが、ESP32-WROOM-32 (rev.1) のような ESP32 チップモデルが ESP32D0WDQ6 の場合には次のような配線になります。SD カード用の配線が 2 本だけ異なります。

ESP32-WROVER では GPIO 16 および 17 が使えない (PSRAM で使われている) ので、ESP32-WROVER が載った ESP32-DevKitC ではこの配線はできない事になりますが、そもそも ESP32-WROVER が載った ESP32-DevKitC で SoC が ESP32D0WDQ6 のものは存在しません。

ESP32D0WDQ6 ESP32D0WDQ5 ESP32PICOD4
・ESP32-WROOM-32 rev.1 ・ESP32-WROVER
・ESP32-WROOM-32D
・ESP32-WROOM-32E
・TTGO VGA32 ver1.4
MISO16352
MOSI171212
SCK14
SS13

ESP32 のチップモデルは ESP32 用のスケッチ GetChipID を実行すると判別できます。[ファイル | スケッチ例 | ESP32 | ChipID | GetChipID] です。

See Also:



ORANGE-ESPer

ピコソフトさんの ORANGE-ESPer は若干の改造で PCEmulator を動作させる事ができます (ESP32-DevKitC v4 が使えるようになります)。

ORANGE-ESPer には CPU あり版CPU なし版があります。CPU あり版には ESP32-DevKitC (WROOM32) が付属しますが PCEmulator では使えないので、CPU なし版を購入し、別途 ESP32-DevKitC (WROVER) を購入するとよいでしょう。ESP32-DevKitC (WROOM32) を所持していないのであれば CPU あり版を買うのもアリかと思います。 Rev.06 以降、CPU あり版には ESP32-WROVER-E が付属するようになったようです。

PCEmulator 向けの改造に必要なものは少々のリード線だけです。余っているブレッドボード用のジャンパーケーブルで構いません。以下に改造の手順を示します。

<!> Rev.06 では JP2 (IO17 <-> IO12) と JP3 (IO16 <-> IO35) を切り替える事ができるようになっているので、2~4 の手順は不要です (5. のプルアップ抵抗除去のみ必要) <!>

  1. SD カードモジュール以外をすべてハンダ付けした状態にします。
  2. SD カードモジュール用のピンヘッダを MOSI / MISO を除いて立てます。
  3. ピンヘッダの短い側を SD カードモジュールに差し込んだ (ハンダ付けしない) 状態で ORANGE-ESPer 側を先にハンダ付けすると後の作業が楽になります。
  4. ORANGE-ESPer 基板にある IO35 を SD カードモジュールの MISO へ、IO12 を MOSI へジャンパーしたものをピンヘッダと接続します。
  5. SD カードモジュール上にある MOSI (IO12) 用のプルアップ抵抗を除去します。

以上で改造は完了です。この改造により、ORANGE-ESPer はブレッドボードで構築したものと同等の動作となります。

See Also:


ORANGE-ESPer に接続可能なキーボード

ORANGE-ESPer にはキーボード接続用としてUSB のコネクタがありますが、これは USB コネクタを使った PS/2 ポートです。よって、接続可能なキーボードは、

上記いずれかになります。USB (専用) キーボードは利用できません。

キーボード コネクタ 接続方法
PS/2 専用 PS/2 to USB 変換アダプタを別途購入
兼用 PS/2 付属の to USB 変換アダプタを使用 (または市販の to USB 変換アダプタを使用)
USB そのまま接続 (または付属の to PS/2 変換アダプタ + 市販の to USB 変換アダプタ)
USB 専用 USB 利用不可

また、PS/2 (専用) キーボードに使う変換アダプタは次のように結線されている必要があります。変換アダプタはキーボード用とマウス用がありますが、色以外に違いはありません。

PS/2 USB
4 Vcc 1 VBUS
1 +DATA 2 D-
5 +CLK 3 D+
3 GND 4 GND

※ PS/2 キーボード + 変換アダプタをパソコンに接続し、USB キーボードとして使う事はできません。

PS/2 / USB 兼用 (両用) キーボードかつ付属の変換アダプタが一般的な結線になっている場合には特に問題はないのですが、PS/2 / USB 兼用 (両用) キーボードの中には、先述の表のように結線されていない製品が存在するようです。このキーボード用のスペアとして販売されている変換アダプタもまた一般的な結線ではありません。

一般的な結線でない PS/2 / USB 兼用 (両用) キーボードの場合、一旦ケーブルの先を PS/2 にした上で (PS/2 キーボードとして使える状態にして)、市販の一般的な結線の変換アダプタを使ってコネクタを USB に変換する必要があります。

See Also:


サウンド出力

ORANGE-ESPer にはサウンド出力用として RCA コネクタがありますが、TV や ディスプレイに接続するには変換が必要かもしれません。

See Also:



TTGO VGA32

TTGO VGA32 はコンパクトでいいのですが、技適を通っていないため、日本国内では常用できません (電波を出せません)。PCEmulator はデフォルト状態だと Wi-Fi が必要です。

TTGO VGA32 を購入する際は必ず ver1.4 にしましょう。それ以前のバージョンには microSD カードスロットがありません。

See Also:



Shigezone FabGL ボード

Shigezone さんからも FabGL ボードが発売されています。

ブレッドボードで構築したものと同等の動作になるようです。キーボードもマウスも PS/2 仕様です。



動作確認

まずは Arduino IDE に Arduino core for the ESP32 を導入しておく必要があります。導入がお済みでない方は ESP32 WROOM-32 の記事を参考にしてください。

※ 2024/05/01 現在: PC Emulator は ESP32 パッケージのバージョンが 2.x 以上だとコンパイルエラーになるようです。ESP32 パッケージは ver 1.0.6 をインストールしてください。パッケージのバージョンはボードマネージャ ([ツール | ボード | ボードマネージャ]) から変更可能です。

FabGL はライブラリマネージャからインストールできます。[スケッチ | ライブラリをインクルード |ライブラリを管理...] から FabGL を探してインストールします。


ブレッドボード組みの際の注意点


スケッチの改変 (ブレッドボードで構築した場合)

先述の通り、ブレッドボード組みの場合には FabGL 最新版付属の PCEmulator が正しく動作しません。I/O エキスパンダ (FabGL ESP32 3.3V Board に実装されています) が最初から有効になっており、それとコンフリクトするのが原因のようですが、I/O エキスパンダを使わない設定にする事はできないようです。

解決方法を たん (@SiVps4J3XrbQi2P) 氏に教えて頂いたので、ご紹介させて頂きます。

machine.cpp の改変

PCEmulator スケッチのプロジェクト内にある machine.cpp を書き換えます。

Machine::init() 内の "m_MCP23S17.begin();" の行をコメントアウトします。

void Machine::init()
{
  ...

  m_MC146818.init("PCEmulator");
  m_MC146818.setCallbacks(this, MC146818Interrupt);

//m_MCP23S17.begin(); // del for BB
  m_MCP23S17Sel = 0;

  m_BIOS.init(this);

  i8086::setCallbacks(this, readPort, writePort, writeVideoMemory8, writeVideoMemory16, readVideoMemory8, readVideoMemory16, interrupt);
  i8086::setMemory(s_memory);
  ...

MCP23S17.cpp の改変

FabGL ライブラリフォルダ内にある MCP23S17.cpp を書き換えます。Windows だと"%USERPROFILE%\Documents\Arduino\libraries\FabGL\src\devdrivers" にあります。

全部で 6 箇所です。各メソッドの先頭に一行追加してください。m_MCP23S17.begin() が実行されない場合には修正箇所のメソッドが呼ばれる事はないような気がしますが、念のために修正を入れておいた方がいいかもしれません。

void MCP23S17::writeReg(uint8_t addr, uint8_t value, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return// add for BB
  spi_device_acquire_bus(m_SPIDevHandle, portMAX_DELAY);

  ...


uint8_t MCP23S17::readReg(uint8_t addr, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return 0// add for BB
  spi_device_acquire_bus(m_SPIDevHandle, portMAX_DELAY);

  ...


void MCP23S17::writeReg16(uint8_t addr, uint16_t value, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return// add for BB
  spi_device_acquire_bus(m_SPIDevHandle, portMAX_DELAY);

  ...


uint16_t MCP23S17::readReg16(uint8_t addr, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return 0// add for BB
  spi_device_acquire_bus(m_SPIDevHandle, portMAX_DELAY);

  ...


void MCP23S17::writePort(int port, void const * buffer, size_t length, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return// add for BB
  // - disable sequential mode
  // - select bank 1 (to avoid switching between A and B registers)
  writeReg(MCP_IOCON, m_IOCON[hwAddr] | MCP_IOCON_SEQOP | MCP_IOCON_BANK);

  ...


void MCP23S17::readPort(int port, void * buffer, size_t length, uint8_t hwAddr)
{
  if (m_SPIDevHandle == nullptr) return// add for BB
  // - disable sequential mode
  // - select bank 1 (to avoid switching between A and B registers)
  writeReg(MCP_IOCON, m_IOCON[hwAddr] | MCP_IOCON_SEQOP | MCP_IOCON_BANK);

  ...  

bios.cpp の改変

動作に支障はないのですが、シリアルモニタに INT 13h, HDD, invalid service 41 というログが大量に吐かれている場合の対処方法です (最新版では発生しないと思われます)。

PCEmulator スケッチのプロジェクト内にある bios.cpp を書き換えます。BIOS::diskHandler_HD() 内の case 文の default の直上に次のコードを追記してください。

void BIOS::diskHandler_HD()
{
  ...

    // Read Disk Type
    case 0x41:
      if (i8086::BX() == 0x55AA) {
        // extensions not supportted (AH:01,CF set)
        diskHandler_HDExit(1, true);
        return;
      }  
    default:
      // invalid function
      printf("INT 13h, HDD, invalid service %02X\n", service);
      diskHandler_HDExit(1true);
      return;

  }
}

SD カードの準備

mconf.h に書かれているイメージファイルを事前にダウンロードしておきます。

CD \WORK
curl -OL http://www.fabglib.org/downloads/floppy_FREEDOS.img
curl -OL http://www.fabglib.org/downloads/floppy_MSDOS331.img
curl -OL http://www.fabglib.org/downloads/floppy_CPM86.img
curl -OL http://www.fabglib.org/downloads/floppy_ELK040.img
curl -OL http://www.fabglib.org/downloads/hd8_FREEDOS.img
curl -OL http://www.fabglib.org/downloads/hd20_DOSPROG.img
curl -OL http://www.fabglib.org/downloads/hd20_DOSDEV.img
curl -OL http://www.fabglib.org/downloads/hd20_WINHERC.img
curl -OL http://www.fabglib.org/downloads/hd8_GEM31.img
curl -OL http://www.fabglib.org/downloads/hd20_GEOS20.img
curl -OL http://www.fabglib.org/downloads/hd8_MSDOS500.img 
curl -OL http://www.fabglib.org/downloads/hd8_MSDOS622.img 
curl -OL http://www.fabglib.org/downloads/hd10_SVARDOS.img

ダウンロードしたファイルを microSD カードのルートにコピーしておきます。イメージファイルを事前ダウンロードしない場合には Wi-Fi 接続が必要となります。


スケッチのコンパイルとインストール

ボードの設定を次のように変更します。

項目 設定値
ボードESP32 Dev Module
Partition SchemeHuge App (3MB No OTA/1MB SPIFSS)
PSRAMDisabled
シリアルポートDevKitC のシリアルポート

次に、[ファイル | スケッチ例 | FabGL | VGA | PCEmulator] から PCEmulator のスケッチを開き、コンパイルして転送されるのを待ちます。

転送が終わったら、一旦 USB ケーブルを抜いておきます。


PCEmulator の起動

VGA ケーブル、キーボード、マウス、microSD、3.5mm オーディオケーブルを接続し、USB ケーブルを挿すと PCEmulator が起動します。

microSD カードモジュールの接続がうまくいってなかったり、microSD カードを挿していないとエラーになります。

初回は Wi-Fi の設定が必要です。イメージファイルを事前ダウンロードした場合は、Wi-Fi Configulation をスキップできます。

初回の Wi-Fi 設定で [Yes] を押しても "Configure Wi-Wi?" のダイアログが繰り返し表示される場合は、USB 充電器などを使って電力を供給してください (100均にあるようなもので充分だと思います)。シリアルモニタに "brownout detector was triggered" が出ている時は電力不足です。

Wi-Fi の設定が完了すると Machine Configurations で起動する構成を選択できます。リストから構成を選択し、〔Enter〕または下部のボタンの [Run] でエミュレータを起動します。イメージファイルを事前ダウンロードしていない (SD カードにファイルが存在しない) 場合、イメージファイルがダウンロードされます。

下部のボタンの [Files] では SD カード内のフォルダやファイルを操作できます。フォルダの新規作成や、フォルダ/ファイルのリネーム・コピー・削除が可能です。[Machine] では起動する構成を編集・新規作成・削除できます。編集・新規作成画面からは FD / HD ブランクイメージの作成も可能です。

次回の起動からは Wi-Fi の設定は表示されません。


Tips

xxx が動かない!!

PCEmulator は 8086/80186 ベースの PC エミュレータなので、リアルモードで動作する OS やアプリケーションだけが利用可能です。次に挙げる OS やアプリケーションは動作しません。

MS-DOS だと 6.2x (DOS/V は不可)、Windows は 3.0 まで動作可能ですが、Windows は制約がありすぎて正直使い物にならないと思います。


ブラウンアウト (電圧降下) をどうにかしたい

先に書いたように、Wi-fi 接続時にブラウンアウト (電圧降下) でリセットされる事があります。電源を変えればこの問題は起きないのですが、PCEmulator.ino を書き替えてブラウンアウト検出を無効化する事もできます。

...

#include "soc/soc.h"                         // Add
#include "soc/rtc_cntl_reg.h"                // Add

...

void setup()
{
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Add
  Serial.begin(115200); delay(500); printf("\n\n\nReset\n\n");// DEBUG ONLY
  ...

See Also:


Wi-Fi の接続先を変更したい

PCEmulator.ino を書き換えます。setup() 中の preferences.clear(); の行をアンコメント (コメントアウトを外す) して一度これで起動します。

void setup()
{
  Serial.begin(115200); delay(500); printf("\n\n\nReset\n\n");// DEBUG ONLY

  disableCore0WDT();
  delay(100); // experienced crashes without this delay!
  disableCore1WDT();

  preferences.begin("PCEmulator"false);

  // uncomment to clear preferences
  preferences.clear(); // <- アンコメント

  ...

再度この行をコメントアウトしてコンパイルすると、Wi-Fi 設定が行えるようになります。


Wi-Fi を使いたくない

イメージファイルを先に DL していて Wi-Fi を使いたくない場合には、PCEmulator.ino を書き換えます。

void setup()
{

  ...

  // uncomment to format SD!
  //FileBrowser::format(fabgl::DriveType::SDCard, 0);

  //updateDateTime(); // <- コメントアウト

  // show a list of disks configurations
  StringList dconfs;

  ...

具体的には setup() 中の updateDateTime(); の行をコメントアウトします。但し、NTP から現在日付/時刻を持ってこないので、各 OS で日付/時刻を手動設定しなくてはなりません。

副次的な効果ですが、Wi-Fi に接続しないのでブラウンアウト問題が発生しません。


タイムゾーンを変更したい

そのままだとパリやローマなどのタイムゾーンになっています。日本のタイムゾーンに変更するには PCEmulator.ino を書き換えます。

void updateDateTime()
{
  // Set timezone
  setenv("TZ""JST-9"1); // JST-9 を指定
  tzset();

  ...

Wi-Fi に接続しない設定にしたのであれば修正の必要はありません。


自分の好きな OS イメージを構築したい

アバンダンウェアとはいえ、PCEmulator のイメージファイルに含まれるソフトウェアはとってもグレーなので、利用に問題のないソフトウェアを動かしたくなります。例として、無償公開されている Turbo C / Turbo Pascal をインストールしてみます。A ドライブが FreeDOS、C ドライブに Turbo C / Turbo Pascal 等です。

  1. 事前ダウンロードした HDD イメージをコピーし、適当な名前にリネームします。この HDD イメージを空にして使うのが簡単です。
  2. 次の記事を参考にして Turbo C / Turbo Pascal の実行時ファイル群を収集します。A ドライブのディスクを交換できないのでインストーラは使えません。
  3. ImDisk をインストールします。ImDisk はディスクイメージファイルを仮想ドライブとしてマウントするアプリケーションです。
  4. コントロールパネルから ImDisk を起動します。

  5. ドライブレターを M: に変更し、[...] ボタンを押して C_turbodev.img を指定します。
  6. パーティションを選択して [OK] を押します。
  7. パラメータが自動で埋められるので [OK] を押します。
  8. C_turbodev.img が M: ドライブとしてマウントされました。
  9. Explorer で不要なファイルを削除し、Turbo C / Pascal の実行時ファイル群をコピーします。
  10. 作業が終わったら、ImDisk でマウントされたドライブを選択し、[Remove] を押してアンマウントします。
  11. 作業した HDD イメージを microSD にコピーしておきます。
  12. mconf.h の DefaultConfFile を編集します。事前にダウンロードした hd20_DOSDEV.img をコピーして作業した hd20_TURBODEV.img を追加する想定です。
    static const char DefaultConfFile[] =
      "desc \"FreeDOS (floppy 1.44MB)\"                    fd0 http://www.fabglib.org/downloads/floppy_FREEDOS.img"           NL
      "desc \"MS-DOS 3.31 (floppy 1.44MB)\"                fd0 http://www.fabglib.org/downloads/floppy_MSDOS331.img"          NL
      "desc \"CP/M 86 + Turbo Pascal 3 (floppy 1.44MB)\"   fd0 http://www.fabglib.org/downloads/floppy_CPM86.img"             NL
      "desc \"Linux ELKS 0.4.0 (floppy 1.44MB)\"           fd0 http://www.fabglib.org/downloads/floppy_ELK040.img"            NL
      "desc \"FreeDOS (HDD 8MB)\"                          hd0 http://www.fabglib.org/downloads/hd8_FREEDOS.img     boot hd0" NL
      "desc \"TURBO Programming Tools (HDD 20MB)\"         hd0 hd20_TURBODEV.img     boot hd0" NL
      "desc \"DOS Programs and Games (HDD 20MB)\"          hd0 http://www.fabglib.org/downloads/hd20_DOSPROG.img    boot hd0" NL
      "desc \"DOS Programming Tools (HDD 20MB)\"           hd0 http://www.fabglib.org/downloads/hd20_DOSDEV.img     boot hd0" NL
      "desc \"Windows 3.0 (HDD 20MB)\"                     hd0 http://www.fabglib.org/downloads/hd20_WINHERC.img    boot hd0" NL
      "desc \"GEM 3.13 (HDD 8MB)\"                         hd0 http://www.fabglib.org/downloads/hd8_GEM31.img       boot hd0" NL
      "desc \"GEOS 2.0 (HDD 20MB)\"                        hd0 http://www.fabglib.org/downloads/hd20_GEOS20.img     boot hd0" NL
      "desc \"MS-DOS 5.00 (HDD 8MB)\"                      hd0 http://www.fabglib.org/downloads/hd8_MSDOS500.img    boot hd0" NL
      "desc \"MS-DOS 6.22 (HDD 8MB)\"                      hd0 http://www.fabglib.org/downloads/hd8_MSDOS622.img    boot hd0" NL
      "desc \"SvarDOS (HDD (hDD 10MB)\"                    hd0 http://www.fabglib.org/downloads/hd10_SVARDOS.img    boot hd0" NL;
    microSD カード内に mconfs.txt が存在する場合にはそこから設定が読み込まれます。スケッチを変更した場合には microSD カード内の mconfs.txt を削除してください。逆に mconfs.txt を編集して構成を変更する事も出来ます。

    赤字の部分を追記します。ローカルファイルを指定したい場合には先頭に / (スラッシュ) を付けるとよいようです。
  13. スケッチをコンパイルして転送します。

無事に Turbo Pascal が動作しました。

スバラシイ!


HDMI 接続のディスプレイしか持ってない

VGA -> HDMI 変換器を購入しましょう。音声信号に対応していない変換器は比較的安くてコンパクトなのですが、音声信号対応のものは結構ゴチャゴチャします。間違って HDMI -> VGA 変換器 (逆方向) を購入しないようにしましょう。

FabGL 1.0.4 以前では周波数が範囲外になって映らないかもしれません。

See Also:


VGA ケーブルのネジが締められない?

ケースに入れず、ボードのままだと VGA ケーブルのネジが締められない事があります。

VGA コネクタに頭の短い (パネル固定用) ネジが使われているので届かないのです。

簡易的には M3 のスプリングワッシャー (ばね座金) を噛ませれば OK です (VGA コネクタのネジは UNC #4-40 で、径は 2.8mm なのでそれなりに合います)。一枚で足りないようなら普通のワッシャー (平座金) と組み合わせてください。どちらもホームセンターで普通に買えると思います。

PC の古いマザーボードから非パネル固定用のネジだけ抜いてくるのもテです。

但し、キレイに外したりハメたりするには対辺 (二面幅) 4.8mm (3/16inch) のナットドライバーが必要です。

この対辺 4.8mm なナットドライバーは確かに便利なのですが、ほぼ VGA コネクタ専用なので新規で買うのはためらわれます (D-SUB には対辺 5mm のネジが使われる事もあるため、すべての VGA コネクタのネジが外せるとは限りません)。対辺 5mm の (M2.5) ナットドライバーでも回せますが、物によってはコネクタのシェルと干渉するかもしれません。ラジオペンチで無理矢理回す事もできますが、ネジが傷だらけになるので、気になる方はラジオペンチに熱収縮チューブを被せたりビニールテープを巻くなどの工夫をしてください。

See Also:


日本語 PS/2 キーボードを使いたい

日本語 PS/2 キーボードを使うだけだったら使えるのですが、一部のキーが刻印通りに打てません。

FreeDOS でキーボードレイアウトを日本語に変更する手順は次の通りです (FreeDOS FD イメージへの導入を想定)。

  1. FreeDOS 1.0 のアーカイブから keybs.zipkeybx.zip をダウンロードする。
  2. keybs.zip から JP.KEY (source\keydos にある) を抽出する。
  3. keybx.zip から KC.EXEKEYB.EXE (bin にある) を抽出する。
  4. 3 つのファイルを FDD イメージの中の \FREEDOS\BIN へコピーする。
  5. PCEmulator を起動する。
  6. KC.EXE を使って JP.KEY から JP.KL を生成する。
    A:\>CD \FREEDOS\BIN
    A:\FREEDOS\BIN>KC.EXE jp.key JP.KL
    KEY file Compiler version 2.1 [2005/08/10] (creates KL ver 1.1 )
    Copyright (c) 2003-2005 by Aitor Santamaria_Merino (under GPL)
    Compiling jp.key...
    Linking jp.key...
    File JP.KL succesfully compiled (0 Errors)
  7. JP.KL が正しく生成されたら KC.EXE はもう不要なので削除する。
    A:\FREEDOS\BIN>DEL KC.EXE
  8. KEYB.EXE を実行する。
    A:\FREEDOS\BIN>KEYB JP
    FreeDOS KEYB 2.0 (pre4) - (c) Aitor Santamaria Merino - GNU GPL 2.0
    Keyboard layout    : A:\FREEDOS\BIN\JP.KL:JP [932]  (4)
  9. 記号キーを叩いて特に問題なさそうだったら AUTOEXEC.BAT に KEYB.EXE を記述する。
    A:\>EDIT A:\AUTOEXEC.BAT
    @echo off 
    set dosdir=A:\FREEDOS
    set PATH=A:\FREEDOS\bin;A:\BASIC
    set NLSPATH=%dosdir%\NLS 
    set temp=%dosdir%\temp
    set tmp=%dosdir%\temp
    
    ctmouse
    KEYB JP
    
    echo.
    echo. Welcome to FreeDOS on ESP32!
    echo. 2021 - Fabrizio Di Vittorio (www.fabgl.com)
    echo.
    
    if exist c:\nul c:
    if exist win.bat win.bat
    

もっと簡単なやり方があるような気はしますが、とりあえずはこれで日本語 PS/2 キーボードが使えるようになります。

この方法が使えるのは OS が FreeDOS の場合だけです (一応 MS-DOS でも動作します)。他の OS でも刻印通りに文字を入力したいのであれば、やはり英語キーボードを用意した方がいいと思います。


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: