Papilio Pro LX9でCP/M-80 (Z80)を動かす(レトロ編)

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

こんな感じの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
                    ___   ___
 ___  ___   ___ ___( _ ) / _ \
/ __|/ _ \ / __|_  / _ \| | | |
\__ \ (_) | (__ / / (_) | |_| |
|___![undefined](http://192.168.10.10:29920/t.katsumi/cti23901_risc-v/-/raw/master/7.papilioProLX9_socz80/images/papilio-socz80.jpg)/\___/ \___/___\___/ \___/
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ボードで動いているようなので、チャンスがあればいろいろ試してみたいです。