FUZIX Kernelのビルドに挑戦
2019年11月3日
一つ前の記事では、先人の教えにしたがって、Fuzix ver 0.1のビルドを行なった。現在使用しているFuzixは、ver 0.3で、Tom's SBC 用に構築された物である。これのビルドもできるようにしておきたい。色々試したのち、ようやくビルドできるようになったので、メモ。
Fuzix用SDCCのビルド
ここが一番のミソなのだが、Z80用Fuzixのビルドには、SDCCを少し修正して使っているらしい。ソースコード中、次のように書かれている。
https://github.com/EtchedPixels/FUZIX/blob/master/Kernel/patches
SDCCのビルドに必要なツールをまずインストール。
SDCC ver 3.5.0 のソースコードをここからダウンロードして、展開する。パッチファイル(SDCC)をここの「Raw」ボタンから取ってきて、同じディレクトリーに置き、パッチを当てる。複数回ファイル名を聞かれるので、「sdcc-3.5.0/src/SDCCglue.c」「sdcc-3.5.0/src/z80/gen.c」「sdcc-3.5.0/src/z80/main.c」「sdcc-3.5.0/src/z80/z80.h」と入力する。
SDCCのビルドとインストールを行なう。なお、別のSDCCを予めインストールしてあった場合は、そちらは削除しておく事。
Kernelのビルド
Fuzixソースコードを取得し、Kernelをビルドする。Makefileはビルド前に編集する。
「TARGET=z80pack」のところ、
「TARGET=tomssbc-rom」とする。
このビルドは、Fuzix ver 0.3においての物なので、それより後のバージョンではうまく行かないかも知れない。その場合は、
うまく行けば、pratform-tomssbc-romディレクトリに、「fuzix.com」という、64Kbのファイルが構築される。
Fuzix用SDCCのビルド
ここが一番のミソなのだが、Z80用Fuzixのビルドには、SDCCを少し修正して使っているらしい。ソースコード中、次のように書かれている。
https://github.com/EtchedPixels/FUZIX/blob/master/Kernel/patches
SDCC: This patch adds 1. Helpers to cut down the size of C code for function entry. Right now the __enter and __enter_s must be in common memory. 2. An option --external-banker that keeps 4 byte stack offsets for arguments so the linker can patch up banked binaries. Unbanked code is called via push af call foo pop afこのパッチを当てて、オプション「--external-banker」を有効にしないと、Tom's SBC用のKernelがちゃんとビルドできない。なので、まずパッチを当てたSDCCのビルドから始める。
SDCCのビルドに必要なツールをまずインストール。
sudo apt install bison sudo apt install flex sudo apt install libboost-dev
SDCC ver 3.5.0 のソースコードをここからダウンロードして、展開する。パッチファイル(SDCC)をここの「Raw」ボタンから取ってきて、同じディレクトリーに置き、パッチを当てる。複数回ファイル名を聞かれるので、「sdcc-3.5.0/src/SDCCglue.c」「sdcc-3.5.0/src/z80/gen.c」「sdcc-3.5.0/src/z80/main.c」「sdcc-3.5.0/src/z80/z80.h」と入力する。
tar xjvf sdcc-src-3.5.0.tar.bz2 patch<SDCC
SDCCのビルドとインストールを行なう。なお、別のSDCCを予めインストールしてあった場合は、そちらは削除しておく事。
cd sdcc-3.5.0 ./configure --prefix=/usr --disable-pic14-port --disable-pic16-port make sudo make install
Kernelのビルド
Fuzixソースコードを取得し、Kernelをビルドする。Makefileはビルド前に編集する。
「TARGET=z80pack」のところ、
「TARGET=tomssbc-rom」とする。
git clone https://github.com/EtchedPixels/FUZIX.git cd FUZIX (Makefileを編集) sudo make kernel
このビルドは、Fuzix ver 0.3においての物なので、それより後のバージョンではうまく行かないかも知れない。その場合は、
git checkout 9d5f38b410a11c31aa9967fa88831d2db76bccafとして、2019年11月現在のレポジトリーか、
git checkout cacbe5238588d352768ab95951c46d09879ba310として、ver 0.3のレポジトリーに巻き戻してから、make kernel すればよいだろう。
うまく行けば、pratform-tomssbc-romディレクトリに、「fuzix.com」という、64Kbのファイルが構築される。