Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

X68000 Modern C++ Sample

X68000 向けのモダン C++ (C++20) サンプルプロジェクトです。 xdev68k ツールチェーン (GCC 10.2.0) を使用して、レトロプラットフォーム上でモダンな C++ 機能を活用する方法を示します。

動作確認済み機能

C++17

  • constexpr if
  • Structured bindings (構造化束縛)
  • if/switch with initializer
  • constexpr lambda
  • Fold expressions
  • Inline variables
  • Class template argument deduction (CTAD)
  • Nested namespaces
  • auto template parameters
  • [[maybe_unused]], [[nodiscard]] attributes

C++20

  • consteval (即時関数)
  • constinit (静的初期化保証)
  • Concepts (テンプレート制約)

STL コンテナ (XCヘッダなしでコンパイル)

  • std::vector
  • std::map
  • std::optional
  • std::variant
  • std::string_view
  • std::array
  • <algorithm>, <numeric>
  • <type_traits>

動作環境

  • xdev68k ツールチェーン
  • MSYS2 (ビルド環境)
  • X68000 実機 または エミュレータ (XM6, XEiJ 等)

プロジェクト構成

x68k-modern-cpp-sample/
├── Makefile              # ビルド設定
├── README.md             # このファイル
├── docs/
│   └── cpp17-features.md # C++17 機能の解説
└── src/
    ├── main.cpp          # メインソースコード (C++17 デモ)
    ├── test_constexpr.cpp # std::array + constexpr lambda
    ├── test_vector.cpp    # type_traits デモ
    ├── test_stl.cpp       # STL コンテナデモ (vector, map, optional, variant)
    └── test_cpp20.cpp     # C++20 デモ (consteval, constinit, concepts)

ビルド方法

MSYS2 環境で以下のコマンドを実行します:

# 環境変数の設定 (xdev68k のインストールパスに合わせて変更)
export XDEV68K_DIR=/d/dev/xdev68k

# プロジェクトディレクトリに移動
cd /path/to/x68k-modern-cpp-sample

# ビルド実行
make

# クリーン (中間ファイルと実行ファイルを削除)
make clean

ビルドが成功すると MAIN.X が生成されます。

実行方法

生成された MAIN.X を X68000 実機またはエミュレータにコピーして実行します。

A>MAIN.X

コンパイラオプション

オプション 説明
-std=gnu++20 C++20 標準 + GNU 拡張
-m68000 68000 CPU 向けコード生成
-Os サイズ最適化
-fno-rtti RTTI 無効 (型情報なし)
-fno-exceptions 例外処理無効
-finput-charset=utf-8 ソースファイルは UTF-8
-fexec-charset=cp932 実行時文字コードは CP932 (Shift-JIS)

STL コンテナを使う際の注意

XC ライブラリのヘッダ (stdio.h 等) と GCC の標準ライブラリヘッダは競合するため、 STL コンテナを使用するファイルは XC ヘッダなしでコンパイルする必要があります。

本プロジェクトでは test_stl.cpp を専用のコンパイルルールで処理しています:

# XC ヘッダなしでコンパイル
CXXFLAGS_NO_XC = ... -std=gnu++20

printf 等の関数は手動で宣言します:

extern "C" {
    int printf(const char* format, ...);
}

制限事項

xdev68k 環境での C++ 利用には以下の制限があります:

  1. 例外処理が使えない - -fno-exceptions が必須
  2. RTTI が使えない - -fno-rtti が必須、dynamic_casttypeid は使用不可
  3. <iostream> は使えない - printf 等の XC ライブラリ関数を使用
  4. XC ヘッダと STL の併用は不可 - ヘッダの競合があるため別々にコンパイル
  5. 68060 は非サポート - g2as.x / g2lk.x が 68040 までしか対応していない

ドキュメント

ライセンス

MIT License

About

a modern C++ sample project for X68000

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages