Papilio Pro LX9でCP/M-80 (Z80)を動かす(レトロ編)
2025年07月29日
はじめに
Z80コアをFPGAで動かしてみたくて、ネットでいろいろと調べていたところ、「socZ80」というプロジェクトを見つけました。ちょうど手元にPapilio Proがあるので、これを使ってsocZ80を動かし、CP/M-80を起動してみようと思います。
CP/M-80は、1970年代に開発された8Bit CPU(8080、8085、Z80など)で実行可能なOSですごく懐かしいOSです。
準備するモノ
- Ubuntu 22.04.2 LTS
- Papilio Pro LX9
開発環境
今回はBuild済みのバイナリーファイルを使うので、特に開発環境は必要としませんがVerilog からFPGAの合成まで行うには、Xilinx ISEが必要になります。
Papilio Pro LX9のスペック
Spartan 6 LX | XC6SLX9 TQG144 |
ロジックセル数 | 9152 |
ベースクロック発振 | 32MHz |
External SPI FLASH | 64Mb SPI Flash |
SDRAM | 64Mb |
ちなみに、秋月電子通商さんで11,000円で販売されています。
Papilio-Loaderでビットストリームを書き込む
(1) socz80の入手
socz80を以下の手順で入手した後に解凍する
wget https://sowerbutts.com/socz80/socz80-2014-04-30.tar.gz
tar -zvxf socz80-2014-04-30.tar.gz
(2) Papilio-Loaderでsocz80(papilio_pro_spartan6.bit)を書き込む
GitHubからPapilio-Loaderをcloneして下さい。
$ sudo apt install default-jdk libftdi-dev
$ cd Papilio-Loader
$ ./linux-installer.sh
papilio-loader-guiでpapilio_pro_spartan6.bitを、Papilio Pro LX9に書き込む
$ papilio-loader-gui
ちなみに、Windows版のPapilio-Loaderも存在します。
socz80の起動
シリアルコンソールツールを起動した後、Papilio Pro LX9をリセットするとsocz80のROMモニタが起動します。
$ screen /dev/ttyUSB1 115200
Cold boot: zeroing RAM 12345678
___ ___
___ ___ ___ ___( _ ) / _ \
/ __|/ _ \ / __|_ / _ \| | | |
\__ \ (_) | (__ / / (_) | |_| |
|___/\___/ \___/___\___/ \___/
Z80 ROM Monitor (Will Sowerbutts, 2013-12-12)
Z80>
ディスクイメージのROMへの書込み
$ python2.7 ./software/tools/write_phys_mem ./disk-images/disk-200000.img 200000 /dev/ttyUSB1
$ python2.7 ./software/tools/write_phys_mem ./disk-images/disk-400000.img 400000 /dev/ttyUSB1
$ python2.7 ./software/tools/write_phys_mem ./disk-images/disk-600000.img 600000 /dev/ttyUSB1
Z80> rwrite 200 200
Z80> rwrite 400 400
Z80> rwrite 600 600
CP/M-80の起動
socz80のROMモニタで、ROMに保存されているディスクイメージをRAMにコピーし、200ページから起動するとCP/M-80が起動します。
Cold boot: zeroing RAM 12345678
___ ___
___ ___ ___ ___( _ ) / _ \
/ __|/ _ \ / __|_ / _ \| | | |
\__ \ (_) | (__ / / (_) | |_| |
|___/\___/ \___/___\___/ \___/
Z80 ROM Monitor (Will Sowerbutts, 2013-12-12)
Z80>
Z80> rread 200 200
Z80> rread 400 400
Z80> rread 600 600
Z80>
Z80> rboot 200
Loading stage 2 bootstrap from RAM disk to 1000
RAM disk bootstrap loading to E000 from pages 0201 0202 ... jump to FA00!
CP/M BIOS (Will Sowerbutts, 2013-11-05)
CP/M 2.2 Copyright 1979 (c) by Digital Research
A>
BBC BASICを動かしてみる
A>user 1
A>dir b:
B: ANIMAL BBC : ANIMAL DAT : BBCBASIC COM : BBCBASIC TXT
B: BBCDIST MAC : CONVERT COM : CRC COM : CRCKLIST CRC
B: F-INDEX BBC : F-RAND0 BBC : F-RAND1 BBC : F-RAND2 BBC
B: F-RSER1 BBC : F-RSER2 BBC : F-RSTD BBC : F-WESER1 BBC
B: F-WESER2 BBC : F-WSER1 BBC : F-WSER2 BBC : F-WSTD BBC
B: MERGE BBC : READ ME : SORT BBC : SORTREAL BBC
A>b:
B>BBCBASIC
BBC BASIC (Z80) Version 3.00
(C) Copyright R.T.Russell 1987
>
>LIST
10 PRINT "hello"
>RUN
hello
>
BASICを起動すると改行コードは[CR+LF]になります!!
UZI"Unix: Z80 Implementation"の起動
Z80> rboot 200
Loading stage 2 bootstrap from RAM disk to 1000
RAM disk bootstrap loading to E000 from pages 0201 0202 ... jump to FA00!
CP/M BIOS (Will Sowerbutts, 2013-11-05)
CP/M 2.2 Copyright 1979 (c) by Digital Research
A>uzi 1
UZI-socz80 version 2014-01-03 git 61d31ba44a
Copyright (c) 1998-2002 by H.F.Bower, D.Braun, S.Nitschke, H.Peraza
Copyright (c) 2013 by Will Sowerbutts <will@sowerbutts.com>
WARNING: Increase PTABSIZE to 63 to use available RAM
8192kB total RAM, 4032kB available to processes (15 processes max)
Enabling interrupts ... ok.
sd: Probing ... No card found
Mounting root fs (root_dev=1): OK
Starting /init
init version 0.9
Welcome to UZI180 on /dev/tty1 (Z180)
login: root
Password:
Have fun!
Fri Dec 31 00:00:00 1999
/root #
最後に
CP/Mのプロンプト、BASICの入力待ち——昔よく見たあの画面が目の前に現れて、40年越しの再会に感動が広がりました。Socz80はいろんなFPGAボードで動いているようなので、チャンスがあればいろいろ試してみたいです。