フォト
2025年6月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
無料ブログはココログ

« Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました | トップページ | ESP-01モジュールにcpm8266を載せてみました »

2018年10月31日 (水)

「Z80-CP/M 2.2 emulator running on ESP8266」を試してみました

DEKOさんが面白そうなこと(RunCPM (Z80 CP/M 2.2 エミュレータ))をやっていたので、
手持ちのESP-WROOM-2(ESPr Developer)で、
別のエミュレータ cpm8266(Z80-CP/M 2.2 emulator running on ESP8266)を試してみました。
cpm8266の存在もDEKOさんのSNSでの投稿記事で知りました(感謝!)。

     2018/11/03  追記
       DEKOさんがcpm8266のコンパイル手順を分かりやすくまとめています。
       チャレンジする方は、こちらの手順を参考にした方が良いでしょう。
        qiita@ht_dekoWSL(Windows Subsystem for Linux)で CP/M 8266 をビルドする

     2018/11/04  追記
       cpm8266では、フラシュメモリの容量が4Mバイト必要みたいです。
       250kバイトの仮想フロッピディスク x 15本 =  3,750kバイト
       ESP-WROOM-2は、フラッシュメモリが4Mバイトから2Mバイトに変更があったので
       最近流通しているESP-WROOM-2では利用出来ないかもしれません。


公式配布サイト

・cpm8266(Z80-CP/M 2.2 emulator running on ESP8266)
  https://github.com/SmallRoomLabs/cpm8266

Dscn8937

02

先に結果をいうと、完成が高く、問題なく動作しました。


構築とインストール作業について

cpm8266の構築とインストールは、公式配布サイトに掲載されている
Installing, Compiling and Running」の手順に従て行いました。

作業にはDebian/Ubuntu環境が必要となりますが、
先日構築したWindows 10上で動くUbntu環境(WSL)を利用しました。

Installing, Compiling and Running」の手順のコマンドをコピペして、
管理者権限が必要なコマンドはsudoで実行していきます。

$sudo apt-get install git
$sudo apt-get install make unrar-free autoconf automake libtool gcc g++ 
$sudo apt-get install gperf flex bison texinfo gawk ncurses-dev 
$sudo apt-get install libexpat-dev python-dev python python-serial 
$sudo apt-get install sed git unzip bash help2man wget bzip2 libtool-bin

08

esp-open-sdkのコンパイル結構時間がかかりました。
私のcore i5マシンではこのコンパイルに1時間かかりました。
Windows 10上のUbuntuは若干パフォーマンスが悪いかもしれません。

$git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
$cd esp-open-sdk
$make
$export PATH=~/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
$cd ..

09

10


cpm8266本体のコンパイルとインストール、ボードへの書き込み


Windows 10上のUbuntu環境では、公開サイトの手順ではうまくいきませんでした。
また、esp-open-sdkのバージョンアップに対応するためにパッチを当てる必要がありました。

$sudo apt-get install z80asm cpmtools zip vim-common
$git clone https://github.com/SmallRoomLabs/cpm8266.git
$cd cpm8266/code
$export ESP8266SDK=~/esp-open-sdk
$export ESPTOOL=~/esp-open-sdk/esptool/esptool.py
$export ESPPORT=/dev/ttyS6
$sudo chmod 666 /dev/ttyS6

環境変数ESPPORTにはESP-WROOM-2をWindows 10に接続した際の
シリアルポートをLinux形式で指定します。
Windows 10からみて、COM6の場合、数字の6をttySの後ろに指定します。
   COMn -> /dev/ttySn
の対応となります。

また、アクセス権限も一般ユーザーが利用出来るように変更します。

次にパッチを当てます。そのままではコンパイルエラーとなります。
パッチファイル(diffファイル)は、issues#21にてdrawkulaさんが公開している
cpm8266-master-2-local.diff.gz を当ててからコンパイルします。

・issues#21
  https://github.com/SmallRoomLabs/cpm8266/issues/21


パッチ当て作業とコンパイル

$cd ~/cpm8226
$wget https://github.com/SmallRoomLabs/cpm8266/files/2088791/cpm8266-master-2-local.diff.gz
$gzip -d cpm8266-master-2-local.diff.gz
$cd code
$patch -u < ../cpm8266-master-2-local.diff
$make full

11

これで、コンパイルとボードへの書き込みが行われます。

CP/M のシリアルポートはデフォルトでは9600bpsに設定されています。
これを変更したい場合は、MakefileのEMULATIONBAUD の設定を変更すれば良いようです。
変更後は再度、make fullでコンパイルと書き込みを行います。

12

私は115200bpsに変更しました。

私の利用しているボードでは書き込み後、
TeraTermにて接続すると起動時が不安定なのか、次のような画面になってしまいます。

13

TeraTermにて次の操作を行うことで正常に利用出来るようになりました。
・ 1) メニュー [編集] - [画面クリア]
・ 2) メニュー [コントロール] - [端末リセット]
・ 3) [Enter]キーを2~3回たたく

14

これで、利用可能状態になりました。

改行コードは下記の設定にしています。

15

CP/Mについては、私は知識がないので、MS-DOSのノリで操作してみました。

16

試行錯誤の上、マイクロソフトBASICが利用出来ました。

17

う~ん、いい感じ
かなり、まともに動作します。

TeraTermでの動作が確認できました。

せっかくなのでスタンドアロンなCP/Mマシンとして動かしてみたいと思い、
以前試したプロペラマイコンのVT100エミュレーション(VGA出力とPS/2キーボード)
利用してパソコン無しで動かしてみました。

ブレッドボードのプロペラマイコン

Dscn8944

シリアルポートを接続して、起動すると問題なく動作しました。

Dscn8941

全体はこんな感じです。
小型のVGAモニタ、PS/2キーボードを接続しています。
部品点数も少なく意外とシンプルな構成です。

Dscn8953

マイクロソフトBASICでスタートレックのゲームプログラムを実行している様子

Dscn8950

ユニバーサル基板に実装すれば、コンパクトなCP/Mマシンが実装出来そうですね。
ケースなんかも作れば小型パソコンが出来そうです。


関連記事

・「Z80-CP/M 2.2 emulator running on ESP8266」でのファイル転送(この記事です)
「Z80-CP/M 2.2 emulator running on ESP8266」を試してみました
ESP-01モジュールにcpm8266を載せてみました
プロペラでVT100端末の実装


« Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました | トップページ | ESP-01モジュールにcpm8266を載せてみました »

ESP32・ESP8226」カテゴリの記事

コメント

こんにちは。

私も貴殿の記事を参考に作成してみました。
コンパイルの部分では、Windowsのファイアウォールに引っかかってトラブったり、ボードに自動書き込み機能が必須だったので苦労しました(USBシリアル&自動書き込み機能付きのボードは貧乏性なので持っていません)。

私は40年ほど前に中古の8インチ片面単密FDDとS-100バスユニバーサル基板を使って最初のCP/Mマシンを製作したのをきっかけとしてマイコン関連の趣味やシステム開発のアルバイトにずいぶん時間を費やすことになりました。
今回作ったものは当時のものを思い出すと笑ってしまう程小さくて感慨が大きいです。
こんなものがあることを紹介して頂いて有難うございます。

ところで質問させて頂きたいのすが、外からこのシステムにファイルを出し入れするにはどうするのが正解でしょうか。

vabenecosiさん

こんにちはです。
コメントありがとうございます。私も、若いころZ80をいじっていたのですが、
こんなちっちゃいのでシステムが完結して動くのを見て、笑っちゃいました。

ご質問について
>外からこのシステムにファイルを出し入れするにはどうするのが正解でしょうか。

cpm8266付属のドキュメントを見た限り、記載が無く、私も方法が分かりません。

ただし、CP/MのMディスクにXMODEMコマンドがあるので、シリアル経由で、
ファイル転送が出来るかもしれません。
TeraTermはXMODEMのプロトコルを使ったファイルの送受信機能があり、
メニュー [ファイル]/[転送]/XMODEMから送信、受信することが出来ます。
私はCP/Mに不慣れで、まだ試していません。

下記のエミュレータでも、ESP-WROOM-2にてCP/Mが動くようです。SDカードにファイル保存出来るようです。ただし、利用可能なRAMが少ないようです。

RunCPM (Z80 CP/M 2.2 エミュレータ)
https://ht-deko.com/arduino/runcpm.html?20181029
のESP8266 (ESP-WROOM-02) への対応に手順等の説明があります。

そう言えば昔、シリアルを通じてPROMライターにデータを送っていましたね。
でもシリアルが使えたとしてもファイルを外の世界と自在にやり取りするのはしんどそうですね。

今、ht-dekoさんのRunCPMについての記事を斜め読みしたところですが、ファイルのやり取りにSDカードが使えそうなところが魅力的です。ESP32上だとCP/Mのメモリの容量が比較的大きいようですので、試してみようと思いました。

そんなことができたとして今更CP/Mで何をするのか、と思う一方で、昔手掛けた8080系のプログラムがCD-ROMにとってあるはずなので引っ張り出していじって見たいなと思ったりもしました。
まあ、ともかくRunCPMを試してみたいと思います。

RunCPM動作しました。
ht-dekoさんの記事に従って手持ちのパーツだけで(といってもマイコンモジュールとSDカードインタフェースだけですが)作ってみました。あっけなくCP/M80システムができてしまいました(ArduinoIDEベースなのでアップロードはスイッチ操作による書き込みモード入りで問題なしでした)。

WindowsPCにSDカードを入れると、(FAT32フォーマットなので当たり前かも知れませんが)フォルダ、ファイルが丸見えですから、ファイルの出し入れは簡単ですね(今後何か予期せぬ問題が起きるかも知れませんが)。

まず、昔アセンブラで作った、組み込み用浮動小数点BASICを探し出してきてコンパイルしてみようと思います。

有難うございました(-> ht-decoさんにも感謝です)。

vabenecosiさん

ご報告ありがとうございます。
SDカードで、パソコンとファイルのやり取りが出来るのはいいですね。
私も、Z80のアセンブルをやっていたので、MSX上でやる方法を模索しています。
ただし、ソースの移植等はアセンブラは厳しいので、C言語 z88dk、BDS Cを使いたいところです。

cpm8266のXMODEMコマンドの実行をを試したのですが、シリアルポート利用でエラーになり、
利用出来ませんでした。
周辺機器のエミュレーション状況の記載が無いので、簡単には出来そうにないです。


RunCPMを少しいじってみました。
PIP、RENコマンドはフリーズしたり、操作不能なファイルが作られるので使用しない方がよいようです。
アセンブラ(Z80ASM)を使ってみました。
用意したソースは31kBあるはずなのですが、STATコマンドで見ると16kしかありません。
まあ、私が使っていたアセンブラとopcodeの定義が一部違うようなのでエラーが出て終了してしまいますが、動いてはいるようです。
ファイル操作関連のコマンドに問題がありそうなのですが、コンパイラ、アセンブラは何とか使えそうです。

----- アセンブラ(Z80ASM)お試し結果 -----
A>STAT KBASIC.Z80


Recs Bytes Ext Acc
48 16k 1 R/W A:KBASIC.Z80
Bytes Remaining On A: 964k

A>Z80ASM KBASIC


Z80ASM Copyright (C) 1983-86 by SLR Systems Rel. 1.32 #RunCPM

KBASIC

KBASIC.Z80 - Bad Opcode Line 00024
ENTRY: LXI SP,STACK
KBASIC.Z80 - Bad Opcode Line 00027
START: LXI SP,STACK
KBASIC.Z80 - Bad Opcode Line 00029
LXI D,OKMES
----- 以下、省略 -----

vabenecosiさん

情報ありがとうございます。
過去の資産が利用出来るのはいいですね。
私もZ80のプログラミングしたいと思い、MSX上での開発環境を模索してます。

話が少しそれますが、昔のコンピュータ関連の雑誌を集めてあるサイトを見つけました。
ただし線が細いのか、サーバーが貧弱なのかダウンロード速度は非常に遅いです。
https://amaus.net/static/S100/MAGAZINE/

CP/Mマシンを作ったころの1970年代のByte誌も置いてあり、Altair、IMSAI、パーツ屋さん等々の広告を見ると懐かしさが増します。
数が少ないですがMSX Magazin(日本語)も置いてありますよ。

vabenecosさん

情報ありがとうございます。

過去の書籍については、下記のサイトにも多数あります。
https://archive.org

🔎検索で、
iomagazine
CPM
msxmagazine
Byte
なんかを入れて検索すると、いっぱい出てきます。
絶版で今では入手できない古い技術書なんかもあります。
ただし、これは閲覧して良いのか微妙です。

このサイトは知りませんでした。
有難うございます。

何度もお騒がせして済みません。

実はその後cpm8266の方をいじってみて、ファイルの読み書きを伴うSTAT、PIP、RENなどのコマンドは全く違和感なく動いていることが分かりました(当たり前?)。
例えば、A>のプロンプトにSTAT *.*と入れるとAドライブの各ファイルのサイズが1kB単位でそれらしく表示されるということです。

一方、RunCPMの方で同じことをやるとすべてのファイルのサイズが0kBと表示されてしまいます。

その後その原因を示唆する事象を見つけました。なんと今現在のRunCPMのgithubのコンテンツが更新され、ESP32についてはSDインタフェースがわざわざ速度の遅いソフトウェアSPIに変更されて配線の変更も必要となっています(私は今回の製作ではPCのダウンロードフォルダにあった以前のmasterを使ったようです←三日前のことなのに記憶があいまい)。

変更の理由については詳しく書かれていませんが、ハードSPIだとSDの読み書きに何か問題があった可能性があります。個体差というか、回路を配線した人がヘタレだったというのが本当の要因かも知れませんが。

ということなので、まず以前のバージョンのRunCPMでこれを作った人は、最低限STAT *.*を打ち込んで各ファイルのサイズをチェックしてみることをお勧めしたいです。
SDカードの読み書きに問題があるまま使い続けると見えないところでファイルが部分的に書き換えられてしまうおそれがありますからこれはとても怖いことです。

ですので私はしばらくcpm8266の方を使うつもりです。Windowsサイドとのファイルの出し入れはubuntu(WSL)の中でならできるはずと考えています(自信ないですが...)?

vabenecosi さん

RunCPMのgithub(https://github.com/MockbaTheBorg/RunCPM)のソース見た感じでは、
SDカードは、SdFatライブラリのSoftSpi版のSdFatSoftSpiEXクラスを使っているようですね。

RunCPM.ino
#elif defined ESP32 // ESP32 boards
SdFatSoftSpiEX SD; // MISO, MOSI, SCK Some boards use 2,15,14,13, other 12,14,27,26

上記をハードウェア版の SdFatEXクラス、または
SdFatではなくSDクラスに置き換えれば早くなるかもしれません。

ソフトspi利用は
SdFatの開発者さんが下記のissuesで「ESP32はサポートする予定はない」でおしゃっているのと
関係があるのかな?

Esp32 compatibility? #88
https://github.com/greiman/SdFat/issues/88

そうなんですよ(STM32が新たに対象になったようですね)。
既に、配線も変えてこの新しいmasterでコンパイル、ESP32にアップロードしてみましたが、コンパイルはエラー無く通るのですが、ESPの起動時にエラーが出て進みません。私は、どなたかチャレンジしてくださる方待ちモードです。

今は、cpm8266のソースのMAKEファイルを開いて眺めています。MAKE FULLの際の各DISKのMAKE、UPLOADの方はとても速かったのでなんとかなるかも、と思ったのですが、私には難しいです。ディスクのソースの中に使いたいファイルを追加して、UPLOADという流れです。最悪、最初からコンパイルをやり直せばできるでしょうが、2時間かかる。うーん。

RunCPM最新バージョン起動しました(実は既に起動していました)。
RunCPMのスケッチでデフォルトのシリアルスピードが9600bpsとなっているのを見逃していまし(「#define SERIALSPD 9600」)。それ故115200bpsに設定していたシリアルモニタやTeraTermに表示されなかったのです。
全くボケ、ヘタレです。

しかし、ここを115200bpsに変更すればもう出来上がりと思ったのも束の間でした。
やはり(仮想)ディスクファイルの読み(&書き?)が非常に不安定です。
DIR、STATしか試していませんが(「書く」コマンドは怖いのでやっていません)、例えばDIRコマンドの場合すべてのファイルのリストが表示されることもありますが、かなりの頻度で下のようになります(CCPのコマンドは結果はともかく実行できますが、STATのような実行ファイルベースのコマンドは必ずエラー終了となります)。一歩前進はしたということでしょうからめげずに調査を続けるつもりです。

A>dir

no file

あるいは、
Bdos Error on A : Select

RunCPM Version 3.7 (CP/M 2.2 60K)
Unable to load the CCP.
CPU halted.

以上、ノイジーかも知れませんがご報告まで。

こんにちは。
cpm8266の方の進展をお知らせします。

予めWindowsのcドライブ内にCPM8266で使いたいファイルを準備しておき、WSL内で例えば次のようなコマンドをタイプして、各ディスクドライブのソースとなるディレクトリにコピーします。
cp -v /mnt/c/cpmdisks/f/*.* disks/F
その後、make fullを行うとディスクイメージが作られ、ESP8266にアップロードされます。ということで一方向ですが、ファイルの移動ができました。時間は大してかかりませんでした。

アセンブラのソースファイル、アセンブラ(ZASM)、逆アセンブラ(DISZILOG)、FORTRANコンパイラ、Cコンパイラ(CZII)、BASICコンパイラなどをCPM8266へ移行することができました。まだごく一部しか試していませんが、今のところ、ちゃんと動作しています。cpm8266の方は安心して使える気分になっています。

CP/M内で作成したファイルを取り出す方法はこれからですね。

その前に妙な広告が出始めていますから、自分のブログの記事を書かないと...。

vabenecosi さん

こんにちわです。
状況報告ありがとうございます。
cpm8266の方が安定しているようですね。

cpm8266のファイル転送については、やはりXMODEMプロトコルが使えるようです。
下記のサイトの一番下にXR.COM、XS.COMでファイルの送受信が出来るようですことが記載されています。
https://hc-ddr.hucki.net/wiki/doku.php/cpm/cpm8266

私の環境で試したところ、
XS.COMで、cpm8266からWindows 10へのファイル転送は出来たのですが、
XR.COM でWindows 10からcpm8266へのファイル転送がうまくいきませんでした。
TeraTermの転送/XMODEM/送信で指定ファイルの送信後、cpm8266側がACKを送信できていないようです。

追記
cpm8266の開発者さんの別リポジトリにXR、XSコマンド関連の情報がありました。
https://github.com/SmallRoomLabs/xmodem80


vabenecosi さん

cpm8266でのファイル転送、TeraTermではダメでしたが、
Windows 10上のUbuntu環境のminicomにて、ファイル転送出来ました。

minicomについては、下記に解説があります。
https://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E7%AB%AF%E6%9C%AB%E3%82%BD%E3%83%95%E3%83%88/minicom

たま吉さん

minicomの情報有難うございます。
サイトは確認しましたので後で試してみます。
(ちょっと他の工作をやってますので、時間がかかるかも、です)

何時もお世話になっています。

新年早々ご相談ですが、
このページを参考にcpm8266を動かそうとしています。
途中まで順調に行ったのですが、最後のデバイスへの書き込みでエラーが出てしまいます。
http://kids-kousaku.sakura.ne.jp/kousaku/etc/error.jpg

Makefile 174行 付近
http://kids-kousaku.sakura.ne.jp/kousaku/etc/Makefile.jpg

Arduino では、正常に書き込みできます。
フラッシュは 4MB です。
http://kids-kousaku.sakura.ne.jp/kousaku/etc/arduino.jpg

もし時間があれば、トラブル解決のヒントをご教授お願いします。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 「Z80-CP/M 2.2 emulator running on ESP8266」を試してみました:

« Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました | トップページ | ESP-01モジュールにcpm8266を載せてみました »