# GoldenPad

GoldenPad app icon

GoldenEye 007, rebuilt for iPhone, iPad, and Apple Silicon Mac.
Apple ARM64 game code, Metal rendering, user-supplied retail data, touch controls, game controllers, saves, audio, and local multiplayer foundations.

iOS and iPadOS 17 or later Apple Silicon macOS alpha Metal renderer Native ARM64 Developer preview ROM not included Build GoldenPad with PadMint Join the GoldenPad Discord

GoldenPad RT64 gameplay on a physical iPad in the Bunker mission

Native RT64/Metal gameplay on a physical iPad Pro.

GoldenPad builds on [GoldenEye64Recomp](https://github.com/cblock85/GoldenEye64Recomp), with an Apple host, touch/controller integration and Metal presentation. Primary dependency changes now live in pinned [maintained source forks](docs/SOURCE_MAINTENANCE.md); normal builds no longer replay patches into those dependencies. GoldenPad's primary iPhone/iPad runtime includes statically recompiled GoldenEye 007 code, N64ModernRuntime and RT64's Metal renderer. It is a game-specific runtime. You supply the supported retail ROM after installation. See [Legal and provenance](docs/LEGAL.md) for the separate game-code and dependency-license boundaries. The same runtime now has a native Apple-Silicon `GoldenPad.app` in alpha. It reaches authentic gameplay, but its mouse/keyboard experience and performance are still platform-specific, and a thin blue strip remains at the far-right render edge. Preview 9 retains Preview 6's menu and keyboard/mouse controls, including the known sluggish horizontal mouse turning. Those controls received hands-on acceptance; performance depth and renderer parity remain open. See the [Mac feasibility and implementation record](docs/MACOS_NATIVE_FEASIBILITY_2026-08-21.md) and [Technical Debt](docs/TECH_DEBT.md) before treating it as release parity. The primary RT64 build reaches the original title sequence, menus and multiple missions on a physical iPad with native audio, the tuned GoldenPad touch layout and Xbox/MFi controller support. The earlier MGB64/Fast3D app is retained as `GoldenPad Legacy` for regression comparison and fallback only; it is no longer the primary development version. > **Development boundary:** generated AOT source and retail-derived data are > never committed. Releases publish the build recipe only; everyone builds > their own app from their own ROM with PadMint. No official, commercial, or > App Store clearance is claimed. > [!NOTE] > **AI disclosure:** GoldenPad uses substantial AI assistance for code, tests, > documentation, debugging and maintenance. Some support replies and maintenance > tasks are automated. There is no audited percentage of AI-generated code. > Build, test and device records describe what was checked. This disclosure > concerns GoldenPad's workflow, not the authorship of its upstream projects. ## Play on iPhone or iPad **No Mac? Build it on a Windows PC (experimental).** PadMint 0.5.27 or newer builds GoldenPad for iPhone or iPad on Windows 11 (x64 or ARM64) from your own GoldenEye 007 (US) ROM. Install Visual Studio 2022 Build Tools with **Desktop development with C++**, then choose GoldenPad in PadMint. PadMint downloads the game-free GoldenPad app from this release and adds the game code it builds from your file on your PC; nothing of yours is uploaded. The Mac build is unchanged. This Windows route is new: builds pass on Windows 11 ARM64, but a Windows-built copy has not yet been played on a device. GitHub's Mac can't build GoldenPad, because that would mean uploading your game file. Details: [Windows module](docs/WINDOWS_MODULE.md). You need an iPhone or iPad running iOS/iPadOS 17 or later, an Apple Silicon Mac with Xcode, an Apple ID, and your own original US GoldenEye 007 Nintendo 64 ROM. GoldenPad has run on iPhones and iPads with A14, A15 and M2 chips. Devices with an A12 chip or older, such as the 2018 iPad Pro, are not supported yet: an A12X iPad Pro crashes on the first frame ([issue #9](https://github.com/chrissotraidis/goldenpad/issues/9)). > **No jailbreak or JIT is required. Do not search for a TLB-free ROM.** > Preview 9 accepts your ordinary `.z64`, `.v64`, `.n64`, or `.rom` dump and > prepares the required private runtime copy automatically on the device. Releases publish no app: GoldenPad contains code translated from the game, so you make your own from your own ROM. On an Apple Silicon Mac with Xcode (plus its Metal Toolchain: `xcodebuild -downloadComponent MetalToolchain`) and `brew install cmake ninja xdelta sdl2`, download [PadMint](https://github.com/chrissotraidis/padmint/releases/latest), unzip it, double-click `PadMint.command`, choose GoldenPad and pick your ROM. PadMint builds GoldenPad from this repository's [latest release](https://github.com/chrissotraidis/goldenpad/releases/latest) and saves an unsigned IPA in your Downloads folder. Install it with AltStore Classic, SideStore or Sideloadly, then choose the same ROM in the app on first launch. The IPA contains code translated from your ROM: it is yours alone; never share it. Apps signed through AltStore Classic with a free Apple ID normally need to be refreshed every seven days and count toward Apple's three-active-app limit. AltStore documents the current limits and refresh process in its [Getting Started guide](https://faq.altstore.io/altstore-classic/your-altstore). Install future GoldenPad updates through the same sideloading setup. Do not delete the app merely to update it: uninstalling can remove its generated game copy, saves, and settings. If any step fails, use [the troubleshooting checklist](#if-it-does-not-work) before reporting that GoldenPad itself does not work. ## Current screenshots
GoldenPad RT64 gameplay in Jungle on a physical iPad GoldenPad RT64 combat in Bunker on a physical iPad
Jungle
Automatic high resolution with RT64 Metal.
Live gameplay
Native ARM64 game code and controller input.
GoldenEye file-select menu rendered by GoldenPad on a physical iPad
Original front end
GoldenEye menus, saves, missions, and gameplay run in the primary RT64 build.
These captures were taken from the signed GoldenPad build on a physical iPad. They illustrate rendering and controls. The ROM and extracted retail media used to produce them are not distributed in the repository or app package; the app includes statically recompiled game code. ## Latest mobile release GoldenPad 0.2.2 (build 15) is the current recipe-only release. It retains 0.2.1's easier build: PadMint (0.2.2 or newer) downloads the LLVM compiler for the game-code patches itself, so you no longer install Homebrew's `llvm` and `lld`, and the build no longer needs ripgrep. Earlier previews: [Preview 11 (build 12)](docs/RELEASE_NOTES_0.1.0-preview.11.md). Their hardware test records are history, not new-version acceptance. ## Install status | Option | Status | What to do | |---|---|---| | Local Simulator build | **Verified** | Build with the complete verifier below, then run from Xcode or `simctl`. | | Make your own with PadMint | **Available** | See [Play on iPhone or iPad](#play-on-iphone-or-ipad). Releases hold the recipe only. | | Local iPhone/iPad build | **Preview 11, build 12** | Updated in place and accepted by the owner on physical iPad; saves/settings preserved. Controller-read, message-queue and invalid-video-region fixes. | | App Store / TestFlight | **Not announced** | Store distribution requires separate rights, signing, review, and device acceptance. | The mobile baseline was accepted through normal single-player gameplay on a physical iPhone and iPad, including the editable touch layout and Xbox/MFi controller path. Preview 9 retains the bounded in-app ROM importer, frozen experimental multiplayer render repair, Preview 4 shared control mapping, and Runway/Streets tank path while correcting player and guard automatic-fire cadence. It also repairs Mac menu navigation and the iPad utility-menu hit targets. Longer thermal/route sweeps and complete multiplayer acceptance remain open. This developer preview must not be described as App Store-ready. The Mac app is a separate alpha artifact, not part of the `.ipa` and not yet a mobile-parity or notarized Mac release. ## What works | Area | Current result | |---|---| | Native runtime | Statically recompiled game code runs as Apple ARM64; no JIT or emulator wrapper | | Rendering | RT64 presents high-resolution Metal output on physical iPad hardware | | Setup | Preview 9 imports the user's original NTSC-U retail dump from Files and converts it privately on device; no ROM image or extracted retail media is bundled | | Gameplay | Original front end and live Dam/Facility gameplay render and accept normal input | | Touch | Tuned GoldenPad move and relative-look zones plus aim, fire, action, weapon, duck, and Start controls; an optional second Fire button is available | | Customization | Separate persisted iPhone/iPad layouts with per-control drag, resize, opacity and reset, plus look sensitivity, hold/toggle aim, and a default-off second Fire toggle | | Controllers | `GCController` with accepted Player 1 movement, right-stick look, buttons, and automatic touch-overlay hiding | | Multiplayer | Local split-screen rendering is experimental; online play is unsupported. A research-only LAN v3 build proved discovery/input ordering but failed closed on a globals-only physical desync at frame 30 | | Audio | Native game PCM feeds `AVAudioEngine` through a bounded stereo ring | | Saves | GoldenEye's 512-byte EEP4K active and backup files persist in Application Support | | Display | Native N64, 2× and automatic high-resolution modes, 2× MSAA and N64 three-point filtering | | macOS | Apple Silicon Alpha; Preview 9 adds automatic original-ROM import. Horizontal mouse sluggishness, edge-rendering and performance debt remain disclosed. | | Legacy fallback | MGB64/Fast3D remains buildable as `GoldenPad Legacy` | See [Status](docs/STATUS.md) and [Testing](docs/TESTING.md) for the evidence ledger and remaining physical-device gates. [Technical debt and upstream watch](docs/TECH_DEBT.md) records when decompilation, MGB64, and renderer changes are safe to evaluate or adopt. The focused two-player repair and deferred local/ online enhancements are tracked in the [multiplayer roadmap](docs/MULTIPLAYER_ROADMAP.md). ## Supported game | Game | Retail revision | Status | |---|---|---| | **GoldenEye 007** | Original US Nintendo 64 release | Supported after exact validation | | Other regions or revisions | Any other dump | Rejected; not interchangeable with the supported build | | GoldenEye XBLA | Leaked/unreleased Xbox 360 build | Prohibited and never used | GoldenPad is a native integration of reconstructed N64 game code, not a general emulator. Another N64 game or GoldenEye revision cannot be substituted. ## Release files and advanced setup ### Mobile download Make your own IPA with PadMint (see [Play on iPhone or iPad](#play-on-iphone-or-ipad)). On first launch, choose your own original NTSC-U retail ROM from Files. GoldenPad recognizes `.z64`, `.v64`, `.n64`, and `.rom` byte orders, performs the required TLB-free transformation privately on the device, verifies the exact output, and starts the native runtime automatically. A valid Preview 1 `GoldenEye_TLBFREE.z64` is reused unchanged during an in-place update. See the [Preview 2 ROM import design and acceptance record](docs/PREVIEW_2_ROM_IMPORT.md), which Preview 9 retains unchanged. **Mac Preview 9 imports the supported original NTSC-U ROM automatically.** Choose your own `.z64`, `.v64`, `.n64`, or `.rom`; GoldenPad validates and prepares its private runtime copy without blocking the interface. Already prepared inputs remain supported, and failed imports preserve the existing valid stored file. See [issue #25 implementation and validation](docs/ISSUE_25_MAC_ROM_IMPORT.md).
Historical Mac Preview 7 and iOS Preview 1 manual setup > **iPhone/iPad Preview 2 through Preview 10 perform conversion automatically.** > The older **Mac Preview 7 requires the conversion below**. After conversion, > select the generated file with the Mac app's **Choose GoldenEye_TLBFREE.z64…** > button. The IPA installation and Finder file-sharing steps apply only to iOS > Preview 1. GoldenPad does not include or download GoldenEye. Preview 1 expects a supported, user-derived `GoldenEye_TLBFREE.z64` in the app's Documents folder. Use Finder file sharing after installation to copy that file. #### Create the required TLB-free file Generate this file locally from your own legally acquired NTSC-U GoldenEye dump. Do not download or request a converted ROM. Renaming a normal ROM does not work. **Why is this necessary?** The statically recompiled runtime was built around a modified ROM memory layout that keeps the original TLB-mapped game code resident in Expansion Pak memory and stores the original compressed data segment uncompressed in the layout expected by the recompiled code. The unmodified retail ROM has a different layout, so Preview 1 and older Mac Preview 7 cannot read it directly. This is a technical limitation of those builds, not a DRM check. iPhone/iPad Preview 2 through Preview 10 perform the conversion inside GoldenPad. Mac Preview 9 now does the same. Preview 1 and older Mac Preview 7 still need the manual process below. These commands require a big-endian `.z64` dump whose SHA-1 is `abe01e4aeb033b6c0836819f549c791b26cfde83`. If your dump is `.v64` or `.n64`, first convert its byte order to big-endian `.z64`, then verify the SHA-1: ```sh shasum "/path/to/your/GoldenEye.z64" ``` On macOS, install `xdelta`, download the ROM-free conversion patch from the exact [GoldenEye64Recomp revision used by GoldenPad](https://github.com/cblock85/GoldenEye64Recomp/tree/a787fe0d95e8278fcba5ba2d768fa6a606e75f55), verify it, and apply it to your dump: ```sh brew install xdelta curl --fail --location --output vanilla_to_tlbfree.xdelta \ https://raw.githubusercontent.com/cblock85/GoldenEye64Recomp/a787fe0d95e8278fcba5ba2d768fa6a606e75f55/vanilla_to_tlbfree.xdelta echo "2942c16049c48a7bdb0ac0288bac21121847059f6f0b4e05343c0c1922a25b90 vanilla_to_tlbfree.xdelta" \ | shasum -a 256 --check xdelta3 -d -s "/path/to/your/GoldenEye.z64" \ vanilla_to_tlbfree.xdelta \ GoldenEye_TLBFREE.z64 shasum -a 256 GoldenEye_TLBFREE.z64 ``` The generated file must report SHA-256 `7ec491ee3164851d0995e3e8ad19999df5e3028be6ba3729c4ac16c31a9c0959`. The delta patch contains no complete ROM; conversion happens locally and the retail input and generated output remain yours and must not be redistributed.
### Build from source > **Manual building is optional when using PadMint.** Primary RT64/AOT builds use pinned > public dependencies and private game-code inputs generated from your own > supported ROM. Follow [Building](docs/BUILDING.md) and > [Source maintenance](docs/SOURCE_MAINTENANCE.md) for that workflow. The commands > below build the older `GoldenPad Legacy` fallback. For installation, follow > [Play on iPhone or iPad](#play-on-iphone-or-ipad). You need: - an Apple Silicon Mac with Xcode and its command-line tools; - [Homebrew](https://brew.sh), CMake 3.28 or newer, and Git; - an Apple development team for a signed physical-device build; and - your own legally acquired supported US retail GoldenEye 007 N64 dump. Install CMake, Ninja and SDL2 (the renderer's shader step looks for SDL2), then clone the repository: ```sh brew install cmake ninja sdl2 git clone https://github.com/chrissotraidis/goldenpad.git cd goldenpad ``` The public repository contains the Apple integration and maintained patch chain. The complete primary build additionally requires locally generated AOT inputs; those generated sources and retail-derived inputs are ignored. The deprecated legacy fallback remains reproducible from the public source tree: ```sh ./scripts/verify-mgb64-ios-renderer.sh ``` The verifier fetches the exact pinned MGB64 source, applies GoldenPad's narrow mobile patches temporarily, builds Release apps for Simulator and device, checks the linked game/Metal/audio symbols, rejects desktop renderer dependencies, and leaves the upstream checkout clean. The resulting apps are written to: ```text build-mgb64-renderer-simulator/Release-iphonesimulator/GoldenPad.app build-mgb64-renderer-device/Release-iphoneos/GoldenPad.app ``` For a physical device, add your Apple ID under **Xcode → Settings → Accounts**, connect and trust the iPhone or iPad, then use your 10-character team ID and a bundle identifier owned by that team: ```sh GOLDENPAD_DEVELOPMENT_TEAM=ABCDE12345 \ GOLDENPAD_BUNDLE_IDENTIFIER=com.yourname.goldenpad \ ./scripts/verify-mgb64-ios-renderer.sh xcrun devicectl list devices xcrun devicectl device install app \ --device YOUR_DEVICE_ID \ build-mgb64-renderer-device-signed/Release-iphoneos/GoldenPad.app ``` The signed build stays separate from the reproducible unsigned app. If Xcode has not yet created an Apple Development certificate, use **Manage Certificates** in the Accounts panel first. See [Building](docs/BUILDING.md) for signing diagnostics, Simulator destinations, and the maintained RT64 reference path. ## First launch GoldenPad never downloads or bundles game data. 1. Sign and install the completed personal IPA made with PadMint by following [Play on iPhone or iPad](#play-on-iphone-or-ipad). 2. Launch GoldenPad and choose your own supported original NTSC-U retail ROM from Files. The importer accepts `.z64`, `.v64`, `.n64`, and `.rom` byte orders and validates the exact retail revision before conversion. 3. Keep GoldenPad open while it privately converts and verifies the runtime input. The original logos, front end, file selection and missions follow after the native runtime initializes. The generated TLB-free runtime copy remains in GoldenPad's private Documents container; the original file stays where you selected it. Neither file is in the IPA, repository, release checksum, or diagnostics export. Removing the app can remove its generated copy and saves, so preserve your original ROM and back up important data before uninstalling. ## If it does not work First identify the exact step that failed. Installation, ROM validation, and the game runtime are separate stages with different fixes. ### The IPA will not install or open - Confirm that you used **AltStore Classic with AltServer**, not AltStore PAL. - Confirm that the device runs iOS/iPadOS 17 or later, Developer Mode is enabled, and the Apple ID profile is trusted when iOS requests it. - With a free Apple ID, check the three-active-app limit and seven-day expiry in AltStore. Refresh or reinstall through the same AltStore setup rather than deleting GoldenPad. - Record the complete AltStore or iOS error. If GoldenPad never launches, the failure happened before its ROM importer or game runtime ran. ### GoldenPad rejects the selected ROM - Use your own original **US/NTSC-U GoldenEye 007** Nintendo 64 retail dump. PAL, Japanese, modified, overdumped, and other revisions are rejected. - `.z64`, `.v64`, `.n64`, and `.rom` are accepted. Renaming another file or ROM does not change its contents and will not pass validation. - Preview 9 performs the TLB-free conversion itself. Do not download, request, or manually create a TLB-free ROM for the current release. - If GoldenPad cannot read a valid file from a cloud or third-party provider, copy it into **On My iPhone** or **On My iPad** in Files and try again. Keep enough free storage for GoldenPad's private prepared copy. ### Mac Alpha says the file is not the expected NTSC-U TLBFREE input In the Mac app, choose your supported original NTSC-U dump. It performs conversion automatically. Older Mac Preview 7 requires the manual conversion described above. Renaming a file does not convert its contents. If the verified output is still rejected, report the exact Mac Alpha version, file size, and SHA-256 only; do not attach the ROM. ### The ROM is accepted but the game does not start In Preview 10, open **••• → Report a Problem → Report on GitHub**. GoldenPad adds device/build details and recent performance context to a draft you review and submit. Use **Share Diagnostic Report** in the same screen to save detailed logs and attach the reviewed file on GitHub. Export before restarting if the current session contains the problem; previous logs are retained for one session. When filing a [GitHub issue](https://github.com/chrissotraidis/goldenpad/issues), include: - iPhone or iPad model and iOS/iPadOS version; - GoldenPad release and build number; - sideloading method and its exact error, if installation failed; - the precise screen or action where progress stopped; - the complete on-screen GoldenPad error; - the ROM extension and stated region/revision, plus a checksum if available; and - GoldenPad's diagnostics text if the app ran far enough to create it. Never attach or link the ROM, generated game data, saves, Apple ID credentials, certificates, or provisioning profiles. ## Touch controls GoldenPad defaults to its current touch template, combining the original GoldenEye movement semantics with modern relative look: | Control | Behavior | |---|---| | **MOVE** | Large left virtual stick; forward/back plus the active modern sidestep mapping | | **LOOK** | Relative right-thumb swipe region; movement stops when the swipe stops | | **FIRE** | N64 Z / primary fire | | **AIM** | N64 R; Toggle by default, with Hold available | | **ACTION** | Contextual N64 B for doors, use, and reload | | **WEAPON** | N64 A weapon cycle / confirm | | **DUCK** | C-down crouch | | **START** | Start / watch and menus | Open the three-dot menu and choose **Edit Touch Controls** to customize the actual live overlay. The running game remains full size and the real three-dot menu stays visible as a placement reference. The same editor is also available through **Settings → Touch Controls**. Touch Controls also contains: - look sensitivity; - Toggle or Hold aim behavior; - **Add left-side Fire button**, which is off by default and adds a duplicate N64 Z control that can be moved, resized, and faded independently; - the current iPhone or iPad touch layout. Both Fire buttons publish the same action safely: if both are held, releasing one keeps Fire active until the other is released. Preview 4 completed the modern-semantics repair tracked in [issue #8](https://github.com/chrissotraidis/goldenpad/issues/8): MOVE horizontal sidesteps while LOOK horizontal turns. **Original N64 C-buttons** remains a separate controller mode for the native layout. The accepted iPhone/iPad placement profiles remain regression controls. In edit mode, drag a control directly over the running game. The selected control receives a yellow outline and the always-visible top slider resizes it from 55–160%; the opacity slider adjusts that selected control from 20–100%. **Reset** restores the current device-class defaults, **Cancel** discards the draft, and **Done** saves it. Button labels stay on one line and scale down with smaller controls. Phone and tablet layouts use separate persisted profiles. The phone defaults are the physically accepted iPhone 14 layout: MOVE remains inside the left edge, LOOK clears the action rail, and AIM/FIRE/ACTION plus WEAPON/DUCK fit above the bottom edge at the established 72% opacity. LOOK preserves GoldenPad's tuned relative swipe accumulation. iPad keeps its separate accepted tablet profile. ## Controllers and multiplayer The primary build automatically uses the first Xbox/MFi extended gamepad for Player 1 and hides the touch overlay while it is connected. Movement, modern right-stick look, aim, fire, action, weapon, crouch and Start are physically accepted. **Settings → Controller → Right stick → Original N64 C-buttons** restores GoldenEye's native C-left/C-right sidestep input, but replaces modern analog right-stick look with the original C-button behavior. **Settings → Controller → Button mapping** can reassign the face buttons, bumpers, and triggers; sticks, D-pad, and Menu/Start retain their standard roles. For hardware-limited testing, **Cheats & Testing → Two-player input test** keeps the attached controller as Player 1 and exposes touch controls as Player 2. Turning it off hides touch and keeps the controller as Player 1. The former multiplayer process crash and large split-screen corruption have targeted repairs. A physical four-player render test kept all quadrants coherent without the former black/checkerboard failure, but slight lighting flicker and real Player 3/4 controller routing remain open. Treat multiplayer as an experimental Preview 2 path, not a fully accepted feature. The primary host does not yet support peer-to-peer or online multiplayer. It binds one real controller; the additional ports above are diagnostics, not a network or production four-controller layer. The staged local-ownership, determinism, LAN, and internet gates are documented in the [multiplayer roadmap](docs/MULTIPLAYER_ROADMAP.md). ## Resolution and performance Open the three-dot menu and choose **Settings** to select Native N64, 2× or Automatic high resolution, plus 2× MSAA and N64 three-point filtering. These settings are saved immediately and apply after quitting and reopening GoldenPad; the active RT64 session is not rebuilt in place. They alter how the original ROM assets are rendered; no HD texture pack is bundled. To restore the original N64 look, select Native N64, disable both 2× anti-aliasing and three-point filtering, then fully quit and reopen the app. **Cheats & Testing → Unlock all missions** defaults to **Off** on a clean install. It is a testing convenience only and any explicit user choice is preserved during an in-place update. ## Public build inputs and package checks The primary integration, dependency pins and reversible patches are public. The generated-input pipeline is not yet independently reproducible from this repository. The package checks below verify specific exclusions; they do not establish an independently reproducible release. Retail data, converted ROM derivatives and generated AOT game sources remain private and ignored. `scripts/package-recomp-prototype-ipa.sh` strips the developer signature/provisioning profile, adds the applicable dependency licenses, and invokes `scripts/verify-recomp-prototype-ipa.sh`; that verifier rejects ROM/save/signing members, N64 ROM headers, private user paths and legacy MGB64 symbols. The older MGB64 IPA workflow remains a fallback only. ## Current limitations - Preview 9 retains Preview 5's native-60-Hz automatic player/guard firing cadence repair through one shared source-derived interval conversion. It does not change semi-auto classifications, first-shot behavior, damage, ammunition, or controls. - Preview 4 replaced the separate movement adapter with one shared mapping that follows GoldenEye's active 1.1 through 1.4 control style. Physical iPad testing accepted normal movement, native left-stick Aim, and Runway tank controls. Preview 9 retains Preview 6's Mac mission-menu navigation repair and the tank mapping. The Mac reporter confirmed both in Preview 6 and closed the report ([issue #17](https://github.com/chrissotraidis/goldenpad/issues/17)). - Devices with an A12 chip or older are not supported yet. A deterministic first-frame RT64/Metal crash is reported on an A12X iPad Pro, and no later build claims a fix ([issue #9](https://github.com/chrissotraidis/goldenpad/issues/9)). - Preview 9 retains Preview 7's independent issue #19 correction, explicitly targeting every embedded Metal library at iOS 17. The diagnostic build passed on the affected iPhone 13 mini; the A12X first-draw crash remains separate. - Multiplayer has a stable experimental render baseline, not final acceptance. Slight lighting flicker and real three/four-controller routing remain open. - Peer-to-peer, LAN, internet, relay, and rollback multiplayer are not implemented. - Preview 9 retains Preview 2's complete, package-audited in-app retail-ROM conversion. A clean physical-iPhone installation has reached the empty-container setup screen; fresh real-ROM import, wrong-ROM, cancellation and low-storage coverage remains open in the focused importer acceptance record. - Some stage-specific geometry glitches remain to be captured precisely. - Occasional audio static and multi-controller play remain open quality work. - Settings/share presentation, controller disconnect-to-none, and mobile UI tracking still need explicit neutral-input transition coverage. - The generated-input pipeline is not independently reproducible from the public repository; private retail-derived inputs are never distributed. - The runtime keeps a second converted-ROM copy under Application Support. It remains private and package-audited out of releases, but backup-exclusion and explicit file-protection attributes still need to match the Documents copy. - This source-available developer preview is not an official or commercially licensed GoldenEye distribution. ## Frequently asked questions
Does this repository contain GoldenEye 007? No. It contains mobile integration code, maintained patches, build scripts, and documentation. You must supply your own legally acquired supported retail dump. Do not open issues requesting game data or download links.
Is GoldenPad an N64 emulator? No. Statically recompiled GoldenEye code runs as a native Apple ARM64 application, and RT64 renders through Metal. The separate MGB64/Fast3D app is retained only as the deprecated legacy fallback.
Where is the IPA? There is no public IPA: the app contains code translated from the game, so PadMint builds your own from your ROM on an Apple Silicon Mac. See [Play on iPhone or iPad](#play-on-iphone-or-ipad).
Do I need JIT or a TLB-free ROM? No. GoldenPad's game code is compiled ahead of time, so the iPhone/iPad release does not need JIT. Preview 9 accepts the supported original US retail dump and creates the required TLB-free runtime copy privately on the device. Do not use the manual conversion instructions for iPhone/iPad Preview 2 through Preview 10. Mac Preview 9 also converts automatically; older Mac Preview 7 requires manual conversion.
Why will the IPA not install through AltStore PAL? AltStore PAL is a separate notarized marketplace channel and cannot install an arbitrary unsigned IPA from GitHub. Use AltStore Classic with AltServer on a Mac or Windows computer, as described in [Play on iPhone or iPad](#play-on-iphone-or-ipad).
Do the high-resolution settings make the game run faster? No. Native N64, 2× and Automatic high resolution change render quality, not game speed. Higher internal resolution and 2× anti-aliasing can cost performance; changes apply after fully quitting and reopening GoldenPad.
Is this legally cleared for the App Store? No claim of official, commercial, or App Store clearance is made. User-supplied retail data keeps ROM media out of the repository and IPA, but it does not erase the separate rights questions around reconstructed game code. Read the [Legal and provenance policy](docs/LEGAL.md).
What is the licensing status? GoldenPad is source-available, but this repository currently has no top-level outbound license grant. MGB64-authored port code and third-party libraries keep their respective licenses; reconstructed original-game code remains subject to the rights boundary described in [Source licenses](docs/SOURCE_LICENSES.md) and [Legal](docs/LEGAL.md). Do not infer commercial or redistribution rights from the repository being publicly readable.
## Project map For engineering work, read in this order: **Status → Technical Debt → Plan → Testing**. Architecture and the multiplayer roadmap provide subsystem-specific constraints. Historical handoffs and worklogs preserve evidence but do not override those current authority documents. | Path | Purpose | |---|---| | [`Sources/`](Sources/) | Native SwiftUI, Metal host, input, audio/save services, and ROM validation | | [`Support/RecompPrototype/`](Support/RecompPrototype/) | Primary AOT runtime, RT64, diagnostics and Apple bridges | | [`Support/MGB64/`](Support/MGB64/) | Deprecated legacy fallback adapters | | [`patches/`](patches/) | Maintained, reversible recomp, RT64 and legacy changes | | [`scripts/`](scripts/) | Fetch, build, test, audit, and unsigned-IPA packaging gates | | [`docs/PLAN.md`](docs/PLAN.md) | Current repair order, parallel evidence lanes, stop rules, and historical milestones | | [`docs/NEXT_STEPS.md`](docs/NEXT_STEPS.md) | Short operational queue for the next implementation sessions | | [`docs/STATUS.md`](docs/STATUS.md) | Current product truth, evidence, and immediate gates | | [`docs/TECH_DEBT.md`](docs/TECH_DEBT.md) | Authoritative evidence-ranked defect, priority, repair, and upstream-watch ledger | | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Shipped AOT/RT64 architecture, ownership boundaries, and Legacy separation | | [`docs/RESEARCH.md`](docs/RESEARCH.md) | Pinned upstreams and production-core decision | | [`docs/BUILDING.md`](docs/BUILDING.md) | Full local build and signing workflow | | [`docs/TESTING.md`](docs/TESTING.md) | Reproducible verification procedures and hashes | | [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md) | Clean-checkout, package, signing, and publication gates | | [`docs/RELEASE_NOTES_0.1.0-preview.3.md`](docs/RELEASE_NOTES_0.1.0-preview.3.md) | Preview 3 downloads, checksums, controls update and disclosed limitations | | [`docs/RELEASE_NOTES_0.1.0-preview.4.md`](docs/RELEASE_NOTES_0.1.0-preview.4.md) | Preview 4 tank, Aim, shared control mapping, checksums, and acceptance boundary | | [`docs/RELEASE_NOTES_0.1.0-preview.5.md`](docs/RELEASE_NOTES_0.1.0-preview.5.md) | Preview 5 automatic-fire authenticity repair, checksums, physical evidence, and rollback boundary | | [`docs/RELEASE_NOTES_0.1.0-preview.6.md`](docs/RELEASE_NOTES_0.1.0-preview.6.md) | Preview 6 Mac menu/input repair, iPad utility-menu repair, checksums, and acceptance boundary | | [`docs/RELEASE_NOTES_0.1.0-preview.7.md`](docs/RELEASE_NOTES_0.1.0-preview.7.md) | Preview 7 Metal deployment-target compatibility correction, checksums, and acceptance boundary | | [`docs/RELEASE_NOTES_0.1.0-preview.8.md`](docs/RELEASE_NOTES_0.1.0-preview.8.md) | Preview 8 optional second touch Fire button, checksum, and physical acceptance boundary | | [Preview 9 release notes](docs/RELEASE_NOTES_0.1.0-preview.9.md) | Apple import fix, maintained sources, checksums and validation boundaries | | [`docs/PREVIEW_4_BASELINE.md`](docs/PREVIEW_4_BASELINE.md) | Frozen Preview 4 source, artifact, accepted-behavior, diagnostic, and rollback identity | | [`docs/TD01_FIRE_RATE_LOOP.md`](docs/TD01_FIRE_RATE_LOOP.md) | Bounded fire-rate measurement sequence and mandatory gameplay stop gate | | [`docs/MULTIPLAYER_ROADMAP.md`](docs/MULTIPLAYER_ROADMAP.md) | Local ownership, determinism, LAN research, network feasibility, and go/no-go gates | | [`docs/NETPLAY_PHYSICAL_CHECKPOINT_2026-08-28.md`](docs/NETPLAY_PHYSICAL_CHECKPOINT_2026-08-28.md) | Authoritative physical LAN v3 result, frame-30 mismatch evidence, non-crash determination, and exact v4 restart point | | [`docs/EXTERNAL_REVIEW_2026-08-22.md`](docs/EXTERNAL_REVIEW_2026-08-22.md) | Preserved independent revision-2 review; supporting evidence reconciled by current authority documents | | [`docs/EXTERNAL_TECHNICAL_REVIEW_HANDOFF.md`](docs/EXTERNAL_TECHNICAL_REVIEW_HANDOFF.md) | Read-only expert-review prompt for confidence-ranked analysis of the hardest remaining defects | | [`docs/MACOS_NATIVE_FEASIBILITY_2026-08-21.md`](docs/MACOS_NATIVE_FEASIBILITY_2026-08-21.md) | Native Mac architecture, evidence and Alpha boundary | | [`docs/LEGAL.md`](docs/LEGAL.md) | ROM, source, licensing, and distribution boundary | | [`docs/SOURCE_MAINTENANCE.md`](docs/SOURCE_MAINTENANCE.md) | Primary build provenance, modernization plan and outstanding source-delivery gates | | [`docs/SOURCE_LICENSES.md`](docs/SOURCE_LICENSES.md) | Separate primary-runtime and MGB64 Legacy source/license boundaries | | [`docs/ART.md`](docs/ART.md) | Original app-icon provenance | | [`docs/WORKLOG.md`](docs/WORKLOG.md) | Chronological production log | Generated source trees, build directories, ROMs, saves, signing material, and release artifacts are ignored and must never be committed. ## Contributing and support Read [Contributing](CONTRIBUTING.md) before proposing a change and [Security](SECURITY.md) before reporting a vulnerability. Reproducible platform or gameplay defects can be filed through [GitHub Issues](https://github.com/chrissotraidis/goldenpad/issues). Never attach, request, or link to ROMs, extracted assets, leaked builds, saves containing private data, signing identities, or provisioning profiles. ## Community and support [Join the Discord](https://discord.gg/xwHfUD2bxW) for help and news. It is one community for GoldenPad and its sibling projects, such as KartPad, BlueWake and MeleePad: ask about setup, building with PadMint, and installing, share how it runs on your device, and hear about new releases first. Found a bug? [Open an issue](https://github.com/chrissotraidis/goldenpad/issues) with your device, its OS version, and the steps that led to it. ## Legal and acknowledgements GoldenPad is an unofficial preservation and research project. It is not affiliated with or endorsed by Nintendo, Rare, Microsoft, MGM, Danjaq, EON Productions, or any other rights holder. GoldenEye 007 and all related names, characters, imagery, and game content belong to their respective owners. GoldenPad builds on GoldenEye64Recomp, N64Recomp, N64ModernRuntime, RT64, MGB64, the GoldenEye decompilation community, Metal support work, and their contributors. Each upstream component retains its own copyright and license. No ROM, extracted game media, leaked XBLA material, or proprietary matching-target SDK implementation source is included here. ### Performance diagnostics and reporting iPhone/iPad Preview 10 adds bounded performance logs and a GitHub-first Report a Problem flow inspired by SunPad. See the [measurement guide](docs/PERFORMANCE_DIAGNOSTICS.md) for CPU/GPU, wait, texture, thermal and audio context, and the [qualification record](docs/DIAGNOSTICS_VALIDATION.md). This is a diagnostics update, not a confirmed frame-rate or A12X crash fix. The Mac implementation is merged in source; the published Mac package remains Preview 9.