Skip to content

Instantly share code, notes, and snippets.

@ao-kenji
Last active March 19, 2025 20:05
Show Gist options
  • Save ao-kenji/842605a8a25eb96a8d86a910d80da142 to your computer and use it in GitHub Desktop.
Save ao-kenji/842605a8a25eb96a8d86a910d80da142 to your computer and use it in GitHub Desktop.

OpenBSD/amd64 での FUZIX ビルド環境構築ガイド

(2024/12/30版)

検証環境

  • OpenBSD/amd64 7.6-stable
  • 2024/12/29頃の FUZIX および Fuzix-Compiler-Kit のソースツリー

準備

必要 packages のインストール

以下を pkg_add しておいてください。

  • devel/boost
  • devel/git
  • devel/gmake

ビルドツールのディレクトリ用意

FUZIXのビルドツールは /opt/fcc 以下にインストールされることを想定されているので、あらかじめディレクトリを用意します。(ここではユーザ権限で更新できるよう chown しています)

% doas mkdir -p /opt/fcc
% doas chown ${USER} /opt/fcc

Fuzix-Bintools のインストール

最初にアセンブラ、リンカなどが含まれる Fuzix-Bintools をインストールします。

git clone して gmake & gmake install で /opt/fcc/{bin,lib} に素直にインストールできます。

% git clone https://github.com/EtchedPixels/Fuzix-Bintools.git
% cd Fuzix-Bintools
% gmake
% gmake install

この後、/opt/fcc/bin にパスを通しておいてください。

Fuzix-Complier-Kit の導入

次に FUZIX ビルド用に作者の Alan Cox さんがメンテナンスしているコンパイラ+ライブラリをインストールします。

Linux に依存した部分があるので、パッチ obsd-Fuzix-Compiler-Kit.diff をあてて gmake bootstuff、gmake install します。

% git clone https://github.com/EtchedPixels/Fuzix-Compiler-Kit.git
% cd Fuzix-Compiler-Kit
% patch < /path/to/obsd-Fuzix-Compiler-Kit.diff
% gmake bootstuff
% gmake install

obsd-Fuzix-Compiler-Kit.diff はこちらにあります。主な内容は以下の通りです。

  • Makefile、*.mk
    • make → $(MAKE)の書き換え
    • gcc → $(CC) の書き換え
    • 配布物に含まれていないファイルを使用するターゲットを削除
  • cpp
    • ホストのネイティブcppを呼び出すシェルスクリプトcppの書き換え
      • Complier-Kit のcpp(バイナリ版)が動くようになったのでもう不要かも

参考:コンパイラがサポートしているCPUなど

私はZ80用しか試していませんが、他のCPUも多数サポートされています。

CPUによっては開発中のものもあるので、ステータスは Fuzix-Compiler-Kit の README 等もあわせて確認してください。

% fcc -v
cc [option and file list]

options:

-c:    compile to object modules only
-D:    define a macro for the C preprocessor
-E:    preprocess only, to stdout
-i:    enable split I/D if supported by this target
-I:    add a directory to the include path
-l:    add a library name to link
-L:    add a path to the library search path
-m:    set the CPU to compile for
-M:    create a map file
-o:    specify the output file name of the complation (a.out default)
-O:    set optimization level 0-3, or for size '-Os'
-s:    build standalone. Do not include the OS libraries and include paths
-S:    compile to assembly source only
-t:    set the target OS
-T:    set the starting address of the text/code segment
-V:    verbosely print pass information
-X:    keep temporary files for debugging

long options:
--dlib:	build a loadable object module instead

processors:
-m8080: Intel 8080 (compatible 8085, Z80)
-m8085: Intel 8085
-mz80: Zilog Z80 (compatible Z180, Z280, eZ80)
-mz180: Zilog Z180

z80/z180 feature options:
-mz80-banked: Z80 with banked code
-mz80-noix: do not touch IX
-mz80-noiy: do not touch IY

processors (debug):
-m65c816: 65C816 16bit mode
-m6303: Hitachi 6303
-m6309: Hitachi 6309 (currently as 6809)
-m6800: Motorola 6800 (compatible 6303, 6803, 68HC11)
-m6803: Motorola 6803 (compatible 6303, 68HC11)
-m6809: Motorola 6809 (compatible 6309)
-m68hc11: Motorola 68HC11
-mnova: DG Nova
-mnova3: DG Nova 3 and later (with stack hardware)
-mthread: Generate threadcode tables
-msuper8: Zilog Super 8
-mz8: Zilog Z8

nova feature options:
-multiply: use the hardware multiply and divide option

processors (development only)
-m1802: bytecode for 1802 interpreter
-m1805: bytecode for 1805 interpreter
-m6502:	6502 8bit, NMOS legal instructions
-m65c02: 6502 8bit CMOS legal instructions
-m8086: Intel 8088/8086 (compatible 80186/286/..)
-m80186: Intel 80188/186 (compatible 80286/...)
-m8070: NS8070 series
-mnova3: DG Nova3, Nova4 or MicroNova
% 

FUZIXのコンパイル

こちらも Linux に依存している部分があるので、パッチ obsd-FUZIX.diff をあててからビルドします。

gmake でカーネルやユーザランドバイナリ一式が生成され、gmake diskimage でディスクイメージが Images ディレクトリ以下に生成されます。

% git clone https://github.com/EtchedPixels/FUZIX.git
% cd FUZIX
% patch < /path/to/obsd-FUZIX.diff
% gmake
% gmake diskimage

obsd-FUZIX.diff はこちらにあります。z80pack 用のバイナリを作成するためのパッチになっていますので、他のターゲットのバイナリを作成する時は、Kernel/platform/platform-XXXX/Makefile などを適切に変更し、大元の Makefile の TARGET ?= の行を変更してください。

主な変更点は以下の通りです。

  • Makefile関連
    • make → $(MAKE)の書き換え
    • gcc → $(CC) の書き換え
    • オリジナルの yacc を使用
    • Fuzix-Bintools のリンカは引数の順番が異なるので修正
  • Library/link/ldz80
    • bash のパスの書き変え
  • Standalone/mkftl.c
    • clang のビルトイン ffsl() を使用

作者

青山 健治 / Kenji Aoyama

X(旧Twitter) @ao_kenji

Mastodon @[email protected]

GitHub https://github.com/ao-kenji/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment