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 モジュール (rev.1 以上) あるいはそれが載ったボード
- PSRAM
- SD カード
- VGA コネクタ
- PS/2 キーボードコネクタ
- PS/2 マウスコネクタ
- オーディオジャック
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 が必要となります。部品表は次の通りです。
必要な抵抗の明細は次の通りです。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Ω | 1 | SD カードプルアップ用。不要かも。 |
他に必要なものは次の通りです。
- VGA 入力が可能なディスプレイやテレビ
- VGA ケーブル
- オーディオケーブル
- PS/2 キーボード - 英語配列を推奨
- PS/2 マウス
- microSD カード
- USB (A) <-> microUSB (B) ケーブル
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 のものは存在しません。
MISO | 16 | 35 | 2 |
MOSI | 17 | 12 | 12 |
SCK | 14 |
SS | 13 |
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. のプルアップ抵抗除去のみ必要) <!>
- SD カードモジュール以外をすべてハンダ付けした状態にします。
- SD カードモジュール用のピンヘッダを MOSI / MISO を除いて立てます。
- ピンヘッダの短い側を SD カードモジュールに差し込んだ (ハンダ付けしない) 状態で ORANGE-ESPer 側を先にハンダ付けすると後の作業が楽になります。
- ORANGE-ESPer 基板にある IO35 を SD カードモジュールの MISO へ、IO12 を MOSI へジャンパーしたものをピンヘッダと接続します。
- SD カードモジュール上にある MOSI (IO12) 用のプルアップ抵抗を除去します。
以上で改造は完了です。この改造により、ORANGE-ESPer はブレッドボードで構築したものと同等の動作となります。
- ジャンパーを行っているのは、Rev.05 以前の ORANGE-ESPer が ESP32-DevKitC (WROOM32) を使う想定になっているからです。このため、Rev.05 以前ではピンアサインを変更する必要があります (Rev.06 以降ではジャンパーピンで切り替え可能)。
- プルアップ抵抗を除去しないといけないのは、IO12 が起動に関わるピンだからです。ピンアサイン変更の結果、そのままだと IO12 がプルアップされるため起動しなくなります。
- SD カードモジュールの加工に失敗してしまっても、同等品を別途購入する事が可能です。
See Also:
ORANGE-ESPer に接続可能なキーボード
ORANGE-ESPer にはキーボード接続用としてUSB のコネクタがありますが、これは USB コネクタを使った PS/2 ポートです。よって、接続可能なキーボードは、
- PS/2 キーボード + 変換アダプタ
- PS/2 / USB 兼用 (両用) キーボード
上記いずれかになります。USB (専用) キーボードは利用できません。
PS/2 専用 |
PS/2 |
to USB 変換アダプタを別途購入 |
兼用 |
PS/2 |
付属の to USB 変換アダプタを使用 (または市販の to USB 変換アダプタを使用) |
USB |
そのまま接続 (または付属の to PS/2 変換アダプタ + 市販の to USB 変換アダプタ) |
USB 専用 |
USB |
利用不可 |
また、PS/2 (専用) キーボードに使う変換アダプタは次のように結線されている必要があります。変換アダプタはキーボード用とマウス用がありますが、色以外に違いはありません。
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 を無改変のまま正常動作させる事はできません。
無改変でも一応動作はしますが、microSD からのファイルロードで失敗します。
- FabGL ver1.0.3 付属のものは無改変のままで正常動作しますので、スケッチやライブラリを書き換えたくない方は FabGL ver1.0.3 をインストールして下さい。
- ORANGE-ESPer 改造版にも同様の問題があります。
スケッチの改変 (ブレッドボードで構築した場合)
先述の通り、ブレッドボード組みの場合には 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(1, true);
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 Scheme | Huge App (3MB No OTA/1MB SPIFSS) |
PSRAM | Disabled |
シリアルポート | 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 やアプリケーションは動作しません。
- プロテクトモード (80286 以降) で動作するもの
- VGA を必要とするもの (PCEmulator は CGA 相当を実装)
- MS-DOS の HMA (HIMEM.SYS) を使うもの (80286 以降)
- MS-DOS の EMM386.SYS / EMM386.EXE を使うもの (80386 以降)
- DOS/V (80286 以降, VGA 以上)
- Windows 3.0 のスタンダードモード (80286 のプロテクトモード) およびエンハンスドモード (80386 のエンハンスドプロテクトモード)
- Windows 3.1 以降の Windows (リアルモードがない)
- Windows 95 ~ ME の MS-DOS 7.x / 8.0 (80386 以降のエンハンスドプロテクトモードでないと動作しない)
- Windows XP 以降で作られた MS-DOS 起動ディスク (80386 以降のエンハンスドプロテクトモードでないと動作しない)
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 等です。
-
事前ダウンロードした HDD イメージをコピーし、適当な名前にリネームします。この HDD イメージを空にして使うのが簡単です。
-
次の記事を参考にして Turbo C / Turbo Pascal の実行時ファイル群を収集します。A ドライブのディスクを交換できないのでインストーラは使えません。
-
ImDisk をインストールします。ImDisk はディスクイメージファイルを仮想ドライブとしてマウントするアプリケーションです。
-
コントロールパネルから ImDisk を起動します。
-
ドライブレターを M: に変更し、[...] ボタンを押して C_turbodev.img を指定します。
-
パーティションを選択して [OK] を押します。
-
パラメータが自動で埋められるので [OK] を押します。
-
C_turbodev.img が M: ドライブとしてマウントされました。
-
Explorer で不要なファイルを削除し、Turbo C / Pascal の実行時ファイル群をコピーします。
-
作業が終わったら、ImDisk でマウントされたドライブを選択し、[Remove] を押してアンマウントします。
-
作業した HDD イメージを microSD にコピーしておきます。
-
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 を編集して構成を変更する事も出来ます。
赤字の部分を追記します。ローカルファイルを指定したい場合には先頭に / (スラッシュ) を付けるとよいようです。
-
スケッチをコンパイルして転送します。
無事に 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 の古いマザーボードから非パネル固定用のネジだけ抜いてくるのもテです。
- VGA、DVI、パラレルポート、シリアルポート...イロイロあります。
- VGA / DVI 以外のものは雌ねじ側がミリネジ (M2.6 / M3) の可能性があります。
- 拡張スロット用の多くはパネル固定用の頭の短いネジが使われています。
但し、キレイに外したりハメたりするには対辺 (二面幅) 4.8mm (3/16inch) のナットドライバーが必要です。
この対辺 4.8mm なナットドライバーは確かに便利なのですが、ほぼ VGA コネクタ専用なので新規で買うのはためらわれます (D-SUB には対辺 5mm のネジが使われる事もあるため、すべての VGA コネクタのネジが外せるとは限りません)。対辺 5mm の (M2.5) ナットドライバーでも回せますが、物によってはコネクタのシェルと干渉するかもしれません。ラジオペンチで無理矢理回す事もできますが、ネジが傷だらけになるので、気になる方はラジオペンチに熱収縮チューブを被せたりビニールテープを巻くなどの工夫をしてください。
See Also:
日本語 PS/2 キーボードを使いたい
日本語 PS/2 キーボードを使うだけだったら使えるのですが、一部のキーが刻印通りに打てません。
FreeDOS でキーボードレイアウトを日本語に変更する手順は次の通りです (FreeDOS FD イメージへの導入を想定)。
- FreeDOS 1.0 のアーカイブから keybs.zip と keybx.zip をダウンロードする。
- keybs.zip から JP.KEY (source\keydos にある) を抽出する。
- keybx.zip から KC.EXE と KEYB.EXE (bin にある) を抽出する。
- 3 つのファイルを FDD イメージの中の \FREEDOS\BIN へコピーする。
- PCEmulator を起動する。
- 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)
|
- JP.KL が正しく生成されたら KC.EXE はもう不要なので削除する。
A:\FREEDOS\BIN>DEL KC.EXE
|
- 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)
|
- 記号キーを叩いて特に問題なさそうだったら AUTOEXEC.BAT に KEYB.EXE を記述する。
@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 でも刻印通りに文字を入力したいのであれば、やはり英語キーボードを用意した方がいいと思います。
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。