Norihiro Kumagaiさんが開発したCP/Mega88 on Picoは超シンプルなCP/Mマシン。どのくらいシンプルかっていうのが下の写真。まんまRaspberry pi Pico(以下Pico)だから、もはや電子工作ですらない。ボクは過去に何回かCP/Mマシンを作ろうとして挫折しているが、さすがにこれは失敗しない。簡単に動いてくれたので、ここに過程をまとめておく。

CP/Mega88 on Picoを作る流れは、概略、GithubのプロジェクトをクローニングしてPicoの開発環境でビルドする。公式な説明は開発環境をUbuntu20に構築しているが、ボクは初代Raspberry Piに構築した。Raspberry Pi OSであればシェルスクリプト1発で開発環境が出来上がる(Getting started with Raspberry Pi Pico参照)。まあ4時間ほどかかるけどね。

クローニングとビルドの手順を下に示す。必要な操作が濃い文字、それに対する反応が薄い文字。Picoの実行ファイルはcpmega88.uf2の名前で作成される。Raspberry Pi OSの場合、それを/bootへコピーしておくとSDカードをパソコンへ差し替えて取り出せる。パソコンでcpmega88.uf2をPicoへ入れ、とりあえずフロッピーなしのCP/Mマシンが完成。
pi@raspberrypi:~ $ git clone https://github.com/tendai22/cp-mega88-pico.git
Cloning into 'cp-mega88-pico'…
remote: Enumerating objects: 288, done.
remote: Counting objects: 100% (288/288), done.
remote: Compressing objects: 100% (132/132), done.
remote: Total 288 (delta 205), reused 232 (delta 153), pack-reused 0
Receiving objects: 100% (288/288), 128.67 KiB | 460.00 KiB/s, done.
Resolving deltas: 100% (205/205), done.
pi@raspberrypi:~ $ cd cp-mega88-pico
pi@raspberrypi:~/cp-mega88-pico $ git checkout develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
Switched to a new branch 'develop'
pi@raspberrypi:~/cp-mega88-pico $ cmake .
Using PICO_SDK_PATH from environment ('/home/pi/pico/pico-sdk')
PICO_SDK_PATH is /home/pi/pico/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 8.3.1
-- The CXX compiler identification is GNU 8.3.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/pi/pico/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.9 (found version "3.9.2") found components: Interpreter
TinyUSB available at /home/pi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
Using PICO_EXAMPLES_PATH from environment ('/home/pi/pico/pico-examples')
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/cp-mega88-pico
pi@raspberrypi:~/cp-mega88-pico $ make
Scanning dependencies of target ELF2UF2Build
[ 1%] Creating directories for 'ELF2UF2Build'
[ 2%] No download step for 'ELF2UF2Build'
《途中省略》
[ 96%] Building C object CMakeFiles/cpmega88.dir/home/pi/pico/pico-sdk/src/rp2_common/pico_unique_id/unique_id.c.obj
[ 98%] Building C object CMakeFiles/cpmega88.dir/home/pi/pico/pico-sdk/src/rp2_common/hardware_spi/spi.c.obj
[100%] Linking CXX executable cpmega88.elf
[100%] Built target cpmega88
pi@raspberrypi:~/cp-mega88-pico $ sudo cp cpmega88.uf2 /boot
pi@raspberrypi:~/cp-mega88-pico $
フロッピーに相当するのはディスクイメージ。これはz80packのGithubのプロジェクトからもらう。ボクは、公式の説明とは違うが、パソコンでプロジェクトごとDownload Zipし、展開し、z80pack-master > cpmsim > disks > libraryで見繕った。ディスクイメージはたくさんあり、もし選択に迷ったらcpm2-1.dskが無難だと思う。

Picoをパソコンに接続し、端末ソフトを開く。この時点でもうCP/Mega88 on Picoが動いているが、念のためPicoを抜き差しして再起動させるとあらためて一連のメッセージが読めるからわかりやすい。これが、フロッピーなしのCP/Mマシンに相当。そこへフロッピーを装着する。まず、プロンプトにxrを入力し、PicoでXMODEMの受信を開始する。

続いて端末でXMODEMの送信をやる。端末がTeraTermの場合、ファイル > 転送 > XMODEM > 送信と選択、ファイルチューザーでディスクイメージを選択。


これでディスクイメージがPicoのフラッシュメモリに書き込まれる。いわば、フロッピーの装着が完了した状態。プロンプトにbを入力するとブートしてCP/Mが起動する。

ボクが過去にCP/Mマシンを作ろうとして挫折したことは冒頭で述べたとおり。もうひとつ、Picoを動かすことにも挫折していて、買ってすぐLチカをやったきりになっていた。その両方をCP/Mega88 on Picoが実現してくれた。いやまだ独自のプログラムは書けないが、動く実例が与えられたのだからソースを見て研究しようと思う。
インテル8080伝説とモトローラ6800伝説を購入させて頂いております。
Z80は周辺ICがジャンクで入手できたら、書籍を購入させて頂こうかと考えております。
昨年はIBM PCが世に出て40年が経ち、今年はPC-9801が登場してから秋で40年。
当時からPC-9801や国産PCには触手が伸びず、
主に組込用途で8Bit-CPUと機械語を中心にプログラム開発して来ましたが
このようなものを見させて頂くと、今やHardwareとSoftwareの境が無くなって、抽象化もここまで進んだかと。
シリアル通信やモデム通信が現役で活躍していた頃を懐かしんでおりますが、世代がバレそうですね。
これからも、投稿されるのを楽しみにしております。
hnkngsさん、こんにちは。書籍のご購読ありがとうございます。組み込みで機械語となるとマイコン電子工作の王道を歩んでいますね。このところARMのパワーを生かした製作物が発表される一方で往年の8ビットCPUを取り扱う部品店も増え、面白い状況になってきたなぁと感じています。
早速、追試いただき、また、私の再現方法メモ書きに対して丁寧なレビューをいただきました。本当にありがとうございました。CP/MとPicoの体験ができたとのこと、お喜び申し上げます。
PicoでCP/Mega88は、もともとは「Z80をPicoで動かす」でCP/M用プラットフォームが必要だというところから始めたのですが、思いもかけずハマってしまいました。今、SD cardサポートを拡張(FAT12, FAT32, exFATサポート)しています。なかなかおもしろいです。
cp-mega88-picoでベテランの底力を見せてもらいました。ディスクリプションに当方の名前を含めていただきありがとうございます。SDカードサポートが各種ファイルシステムに対応するとファイルの入れ替え操作が簡単になりそうですね。ずっぽりハマってください。
Raspberry Piの初代ですか。
私もRSコンポーネントで初めて購入させていただいたのですが、注文してなかなか届かないので確認したら販売開始前でした。
届いた時にはRAMが256Mから512Mにそれと取り付け用のホールが追加されたバージョンに変更されていました。
私も初代機を持ち出して試してみようと思います。
駄目ならRaspberry Pi3か Raspberry Pi Zeroになるかもです。
初代機はOSが起動していないようなので先が長そうです。
最新のラズパイOSを改めてインストールしました。SSHファイル付きでインストールする方法があることを知らなくて、最初の1回だけキーボードとテレビをつながなければならないと思い込んでいたのですが、HDMIケーブルの持ち合わせがなかったので、RCAケーブルでつながる初代を使いました。Picoの開発環境を作るのにえらい時間がかかりましたが、その後の操作は、そう遅い感じを受けません。