Files
goldeneye-pc-port/PORTING.md
T
James Dansereau cd6cc158b6 Add PC port scaffolding (CMake build + port layer)
Initial scaffolding for a PC port of GoldenEye 007, modeled on the
Perfect Dark PC port (same Rare "Indy" engine). The N64 build
(Makefile + IDA) is untouched; the PC build is a parallel CMake build.

Build:
- CMakeLists.txt: SDL2 + zlib + OpenGL. Compiles src/game/*.c + curated
  engine files + libultra audio/gu + port/. Per-region macro sets
  (ROMID US/EU/JP) mirror the N64 Makefile's LCDEFS exactly.
- build-pc.sh, cmake/: configure+build helper and target/SDL2 modules.

Port layer (port/):
- video/audio/input/fs/romdata/config/system/mixer: stubs with
  TODO(Phase N) markers and correct interfaces.
- libultra.c: libultra OS shims (message queues, VI, PI, AI, EEPROM,
  controller, PFS/motor no-ops, region-gated osTvType).
- gesched.c: software-RSP scheduler replacing src/sched.c task submission.
- n64stubs.c: inert stubs for N64-boot + rmon symbols.
- random.c: PRNG ported verbatim from src/random.s (bit-exact).
- ucode.c: RSP/ASP/GSP microcode segment markers (dummies; Phase 3 TODO).

Docs:
- docs/PCPortResearch.md: architecture, GE-specific deltas, phased plan,
  and the scaffolding review (findings A1-A4/B1-B4/C1-C2 + resolutions).
- PORTING.md: top-level entry point.

See docs/PCPortResearch.md for the full plan.
2026-08-17 19:17:06 -04:00

2.4 KiB
Raw Blame History

GoldenEye 007 — PC Port

A work-in-progress port of GoldenEye 007 to modern platforms (Windows / Linux / macOS), built on the decompilation in this repository.

It follows the approach of the Perfect Dark PC port, which ports the same Rare "Indy" engine (a later revision).

Status: scaffolding. The directory structure, build system, and port-layer interfaces are in place. The actual implementation is being brought in phase by phase. See below.

Read this first

  • docs/PCPortResearch.md — the preliminary research: how the PD port works, what GE-specific work remains (the G_SETTEX RSP command, custom color-combiner/render modes), the hardware surfaces that must be shimmed, and the phased plan. Start here.
  • port/README.md — the port layer layout and how it fits together.

How it works (one paragraph)

The N64 game code (src/game, src) is compiled unmodified for the host. The RSP (the N64's 3D coprocessor) is emulated in software (port/fast3d/): it interprets the display list the game builds and emits OpenGL calls, bypassing the RDP. All other N64 hardware (VI, AI, PI, SI, OS threads/timers) is shimmed in port/src/libultra.c and friends. Saves (Memory Pak / EEPROM) are backed by files.

Layout

CMakeLists.txt        # PC build (parallel to the N64 Makefile)
cmake/                # CMake helper modules
build-pc.sh           # configure + build helper
port/
├── fast3d/           # software RSP (adapted from the PD port)
├── include/          # port-facing headers
└── src/              # port layer (main, libultra shims, video, audio, input, ...)
docs/PCPortResearch.md

The N64 build (Makefile, tools/, rsp/, etc.) is untouched.

Building (once implementation lands)

./build-pc.sh ntsc-final     # or pal-final / jpn-final

Then put your ROM in ./data/ and run the binary. (The ROM is not distributed; you must own the game.)

Phased plan (summary)

Phase Goal
0 Scaffolding (this change)
1 Boot to a window: system/fs/rom/config/video + OS shims
2 Rendering: bring in fast3d, add G_SETTEX, port scheduler
3 Audio + input
4 Saves + polish (widescreen, mouse-look, FPS, config)

Details and risks: docs/PCPortResearch.md §8–9.