世界を動かす技術を、日本語で。

Libgodc: セガドリームキャスト用のGoプログラムを書く

2025年12月29日原文(github.com)

概要

libgodc は、 Sega Dreamcast 向けに設計された Goランタイム16MB RAMSH-4 CPU など、Dreamcastの制約に最適化。 ガベージコレクションgoroutinechannel などGoの主要機能を提供。 godc CLIツール によるセットアップとビルドが簡単。 実機でのパフォーマンスやサンプルプログラムも豊富。

libgodc - Sega Dreamcast向けGoランタイム概要

  • libgodc は、 Sega Dreamcast 専用に設計された Go言語ランタイム
  • 標準Goランタイムを置き換え、 16MB RAMSH-4シングルコアCPUOS非搭載 の環境に最適化
  • ガベージコレクションgoroutinechannel など、Goのコア機能をサポート
  • CLIツール(godc) により、 ツールチェーンのセットアップ とビルドを自動化
  • C言語ラッパー(KOS Wrappers) を通じて、 GoからCの呼び出し も可能

クイックスタート手順

  • 前提条件
    • Go 1.25.3以上makegit のインストール
  • godc CLIツールのインストール
    • go install github.com/drpaneas/godc@latest
  • 環境セットアップ
    • godc setup
    • 動作確認(オプション): godc doctor
  • プロジェクト作成と実行
    • mkdir myproject && cd myproject
    • godc init
    • main.goや他の.goファイルを作成*
    • godc build
    • godc run
  • 詳細はQuick Start Guide参照

ドキュメント構成

  • Installation — セットアップと設定手順
  • Quick Start — 最初のプログラム作成ガイド
  • Design — ランタイムアーキテクチャ解説
  • Effective Dreamcast Go — 開発ベストプラクティス
  • KOS Wrappers — GoからC呼び出し方法
  • Limitations — 非対応機能一覧
  • Performance — 実機での性能測定結果

パフォーマンス指標(SH-4 @ 200MHz実機)

  • Gosched yield — 約120ナノ秒
  • メモリアロケーション — 約186ナノ秒
  • バッファ付きチャネル — 約1.8マイクロ秒
  • コンテキストスイッチ — 約6.4マイクロ秒
  • バッファなしチャネル — 約13マイクロ秒
  • goroutine生成 — 約31マイクロ秒
  • GCポーズ — 72マイクロ秒〜6ミリ秒

サンプルプログラム例

  • examples/ ディレクトリに動作サンプルを多数収録
    • hello — デバッグ出力付き最小プログラム
    • hello_screen — BIOSフォントによる画面表示
    • blue_screen — 最小グラフィックス例
    • input — コントローラー入力
    • goroutines — 同時実行するボール表示
    • channels — プロデューサ/コンシューマパターン
    • timer — フレームレート独立アニメーション
    • bfont — BIOSフォントレンダリング
    • filesystem — ディレクトリブラウザ
    • vmu — VMU LCD・ブザー制御
    • brkout — Breakoutクローン(Jim Ursetto氏のGPL v2移植)
    • pong — 1P/2Pモード・パーティクル・AI搭載のPongクローン

ライセンス

  • BSD 3-Clause License を採用
  • 詳細は LICENSE ファイル参照

Hackerたちの意見

セガ・ドリームキャスト用のGoランタイムを作ったよ。1999年のコンソールで、16MBのRAMと200MHzのSH4 CPUを搭載してる。goroutinesやchannels、ガベージコレクションなど、期待できる言語機能を使ってゲームが書けるんだ。gccgoを使ってコンパイルできて、実際のハードウェアやエミュレーターで動くよ。このプロジェクトには、Pong、Breakout、Platformerの3つのゲーム例や、入力処理、音声サポート、KallistiOS(ドリームキャストのホームブリューSDK)との統合が含まれてる。* スターはこちら: https://github.com/drpaneas/godc * ドキュメント: https://drpaneas.github.io/libgodc/ * 動画チュートリアル: https://youtu.be/ahMl0fUvzVA 実装についての質問には喜んで答えるよ!

あなたのドキュメントがすごく印象的だと言いたかったんだ。普通のreadme.mdを期待してたけど、あなたのreadmeは素晴らしいし(パフォーマンステーブルが最高)、フルドキュメントも素晴らしい。ほとんどの質問に答えてくれたよ。いい仕事だね!こんなプロジェクトがもっとあればいいのに。ドキュメントや本のスタイルも好きだな。

こんにちは、パノス!今のところちょっとしか見てないけど、すごく印象的だね!ドリームキャストをほこりを払って、これを動かさないと。ランタイムをn64にポーティングする時にgccgoを見たけど、その時はgo1.18以来更新されてなかったんだ。ドリームキャストでGoのジェネリクスは使えるのかな?SH4をサポートするにはgccgoが必要みたいだね。

これ、ちょっとクールだね。頑張ったね、すごいよ!

もう今週が最高になった!ありがとう!

これは存在するだけで美しいね。これを作ったことに大きなリスペクトを送るよ。

ドリームキャストの制約に合わせて設計された標準のGoランタイムを置き換えます: メモリ16MB RAM、CPUはシングルコアのSH-4、オペレーティングシステムなし。システムとビデオの間に合計24メガバイトのメモリがあり(そのうち8MBはビデオ用)、シングルコアの200MHz CPU、グラフィックチップは100MHzで動作します。シェンムーも動くよ。チームを睨む。

それをベースにカスタムTeamsクライアントを実装できるかも。私の一番の懸念はTLSとメディアデコードだけど、トラフィックをプロキシしてテキスト専用クライアントを作ることもできる。前にMicrosoft Graphをちょっといじったけど、そんなに悪くなかったよ。

マイクロソフトがOSを作り、GUIスタックを構築・再構築できるのに、C#を使ってTeamsのUIを作れなかったのが不思議だよね???

CPUはシングルコア これはGoにはあまり良くないね。

Teamsがどうやって開発されるのか全然わからない。今まで関わった最悪のオフショアプロジェクトですら、こんなに質が低くなることはなかったよ。

TeamsやSlackより、ネット対応のシェンムーでの仕事のチャットやビデオ会議の方が全然いいな。

Hacker Newsで議論の続きを見る