{"id":24058202,"url":"https://github.com/rust-console/cargo-n64","last_synced_at":"2025-04-06T16:14:40.049Z","repository":{"id":37359297,"uuid":"161867400","full_name":"rust-console/cargo-n64","owner":"rust-console","description":"Make Nintendo 64 games in Rust! 🦀","archived":false,"fork":false,"pushed_at":"2022-06-21T04:16:35.000Z","size":149,"stargazers_count":162,"open_issues_count":13,"forks_count":9,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-30T15:09:39.127Z","etag":null,"topics":["cargo-subcommand","n64","nintendo-64","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rust-console.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-15T03:49:44.000Z","updated_at":"2025-03-26T12:59:29.000Z","dependencies_parsed_at":"2022-08-28T23:32:18.601Z","dependency_job_id":null,"html_url":"https://github.com/rust-console/cargo-n64","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-console%2Fcargo-n64","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-console%2Fcargo-n64/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-console%2Fcargo-n64/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rust-console%2Fcargo-n64/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rust-console","download_url":"https://codeload.github.com/rust-console/cargo-n64/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509237,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cargo-subcommand","n64","nintendo-64","rust"],"created_at":"2025-01-09T05:56:19.417Z","updated_at":"2025-04-06T16:14:40.017Z","avatar_url":"https://github.com/rust-console.png","language":"Rust","funding_links":[],"categories":["Programming"],"sub_categories":["Rust"],"readme":"# `cargo-n64`\n\n[![Build Status](https://travis-ci.org/rust-console/cargo-n64.svg?branch=master)](https://travis-ci.org/rust-console/cargo-n64)\n[![Crates.io](https://img.shields.io/crates/v/cargo-n64)](https://crates.io/crates/cargo-n64)\n[![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)\n\nA `cargo` subcommand to build Nintendo 64 ROMs in Rust! 🦀\n\n## Installation\n\nRequires Rust nightly.\n\nWhen built from source, `cargo` will automatically install the correct version of the nightly compiler, based on the `rust-toolchain` file. However you will still need to install the `rust-src` component separately. It is recommended that you explicitly install the dependencies with the same versions used in CI, as described below.\n\nInstall dependencies:\n\n```bash\nrustup toolchain install $(cat rust-toolchain)\nrustup run $(cat rust-toolchain) -- rustup component add rust-src\n```\n\nInstall `cargo-n64` from source:\n\n```bash\ncargo install --path .\n```\n\nInstall `cargo-n64` from [crates.io](https://crates.io/):\n\n```bash\ncargo install cargo-n64\n```\n\n## What does it do?\n\nNintendo 64 ROMs are flat binaries, and each one is unique. There is no standard format for the binary beyond a simple 64-byte header and a \\~4KB bootcode (aka Initial Program Loader 3/IPL3). Everything beyond the first 4KB boundary is MIPS code and whatever data it requires. This is unlike modern application or game development where an operating system has a standard binary format (like ELF, PE, or WASM). In fact, the N64 doesn't even have an operating system! The flat binary in the ROM *is* the operating system, for all intents and purposes.\n\nThis makes it challenging to get started with N64 development, in general. You first have to build an OS from scratch, or use a library like [`libdragon`](https://github.com/DragonMinded/libdragon) or [`libn64`](https://github.com/tj90241/n64chain/tree/master/libn64). Then you need a tool (or two, or three!) to convert the object files from the compiler toolchain into a flat binary, add the header and IPL3, and finally fix the IPL3 checksum. `cargo-n64` takes the place of the latter set of tools and plugs in nicely to the Rust/cargo ecosystem.\n\nFor copyright purposes, the IPL3 binary is not included in this package. Collecting a working IPL3 binary is left as an exercise for the reader. You will be required to provide the path to your IPL3 with the `--ipl3` command line argument, or extract it from an existing ROM with `--ipl3-from-rom`.\n\n## Examples\n\nThe separate `rrt0` repo has some examples you can build with `cargo-n64`: https://github.com/rust-console/rrt0/tree/main/examples\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-console%2Fcargo-n64","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frust-console%2Fcargo-n64","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frust-console%2Fcargo-n64/lists"}