{"id":21917487,"url":"https://github.com/clusterm/fdspacker","last_synced_at":"2025-07-15T13:02:18.703Z","repository":{"id":191938018,"uuid":"685690949","full_name":"ClusterM/fdspacker","owner":"ClusterM","description":"Simple tool to pack and unpack .fds files","archived":false,"fork":false,"pushed_at":"2024-09-04T07:57:38.000Z","size":8478,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-04T13:26:45.070Z","etag":null,"topics":["famicom","famicom-disk-system","nintendo"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClusterM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["ClusterM"],"custom":["https://www.buymeacoffee.com/cluster","https://boosty.to/cluster"]}},"created_at":"2023-08-31T19:39:00.000Z","updated_at":"2025-02-26T13:41:48.000Z","dependencies_parsed_at":"2025-04-20T13:00:30.950Z","dependency_job_id":null,"html_url":"https://github.com/ClusterM/fdspacker","commit_stats":null,"previous_names":["clusterm/fdspacker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ClusterM/fdspacker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Ffdspacker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Ffdspacker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Ffdspacker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Ffdspacker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClusterM","download_url":"https://codeload.github.com/ClusterM/fdspacker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Ffdspacker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265437597,"owners_count":23765124,"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":["famicom","famicom-disk-system","nintendo"],"created_at":"2024-11-28T19:32:52.961Z","updated_at":"2025-07-15T13:02:18.626Z","avatar_url":"https://github.com/ClusterM.png","language":"C#","funding_links":["https://github.com/sponsors/ClusterM","https://www.buymeacoffee.com/cluster","https://boosty.to/cluster"],"categories":[],"sub_categories":[],"readme":"# FDSPacker\nIt's a simple CLI tool to pack and unpack .fds (Famicom Disk System disk images) files: extract/combine metadata and files. Useful for FDS developers.\n\n## Usage\nThis application requires .NET 6. You need either install .NET 6 on your system, or use \"self-contained\" version.\n\nThere are two commands: `pack` and `unpack`:\n```\n fdspacker.exe pack [options] \u003cdiskinfo.json\u003e \u003coutput.fds\u003e\n  Options:\n   -d, --header       - add header to the output .fds file\n   -q, --quiet        - do not print anything to the console\n fdspacker.exe unpack [options] \u003cinput.fds\u003e \u003coutput directory\u003e\n  Options:\n   -u, --no-unknown   - do not extract unknown fields\n   -q, --quiet        - do not print anything to the console\n```\n\nFDSPacker stores all metadata to `diskinfo.json` file. Example:\n```\n{\n  \"sides\": [        // Array of disk sides. Can be \u003e2 in case of multiple disks.\n    {\n      \"licensee_code\": \"Konami\", // Licensee (manufacturer) code. Can be string or integer value. \n                                 // See https://github.com/ClusterM/nes-containers/blob/7bd25fb863591bd91de0edf4d5d97c3401b9edaf/FdsBlockDiskInfo.cs#L58\n                                 // for known values.\n      \"game_name\": \"AIN\",        // 3-letter ASCII code per game (e.g. ZEL for The Legend of Zelda).\n      \"game_type\": \" \",          // Game type: \" \" — Normal disk, \"E\" — Event, \"R\" — Reduction in price.\n                                 // Can be character, integer (0-255) value.\n      \"game_version\": \"0\",       // Game version. Starts at $00, increments per revision. Integer.\n      \"disk_side\": \"A\",          // Disk side: \"A\" or \"B\".\n      \"disk_number\": \"0\",        // Disk number. First disk is $00, second is $01, etc. Can be integer.\n      \"disk_type\": \"FMS\",        // Disk type: \"FMS\" or (normal/other) or \"FSC\". You can use integer/HEX values too.\n      \"unknown01\": \"$00\",        // Optional unknown value at offset $16. Usually/default is $00. Integer.\n      \"boot_file\": \"15\",         // Boot read file code, Refers to the file code/file number to load upon boot/start-up. Integer.\n      \"unknown02\": \"$FF\",        // Optional unknown value at offset $1A. Usually/default is $FF. Integer.\n      \"unknown03\": \"$FF\",        // Optional unknown value at offset $1B. Usually/default is $FF. Integer.\n      \"unknown04\": \"$FF\",        // Optional unknown value at offset $1C. Usually/default is $FF. Integer.\n      \"unknown05\": \"$FF\",        // Optional unknown value at offset $1D. Usually/default is $FF. Integer.\n      \"unknown06\": \"$FF\",        // Optional unknown value at offset $1E. Usually/default is $FF. Integer.\n      \"manufacturing_date\": \"1987-04-17T00:00:00\",  // Manufacturing date.\n      \"country_code\": \"Japan\",   // Country code. Can be \"Japan\" or integer.\n      \"unknown07\": \"$FF\",        // Optional unknown value at offset $23. Usually/default is $61. Speculative: Region code? Integer.\n      \"unknown08\": \"$FF\",        // Optional unknown value at offset $24. Usually/default is $00. Speculative: Location/site? Integer.\n      \"unknown09\": \"$FF\",        // Optional unknown value at offset $25. Usually/default is $00. Integer.\n      \"unknown10\": \"$FF\",        // Optional unknown value at offset $26. Usually/default is $02. Integer.\n      \"unknown11\": \"$00\",        // Optional unknown value at offset $27. Default is $00. Speculative: some kind of game information? Integer.\n      \"unknown12\": \"$00\",        // Optional unknown value at offset $28. Default is $00. Speculative: some kind of game information? Integer.\n      \"unknown13\": \"$00\",        // Optional unknown value at offset $29. Default is $00. Speculative: some kind of game information? Integer.\n      \"unknown14\": \"$00\",        // Optional unknown value at offset $2A. Default is $00. Speculative: some kind of game information? Integer.\n      \"unknown15\": \"$00\",        // Optional unknown value at offset $2B. Default is $00. Speculative: some kind of game information? Integer.\n      \"rewritten_date\": null,    // \"Rewritten disk\" date. Can be null or same as \"manufacturing_date\" in the case of an original (non-copied) disk.\n      \"unknown16\": \"$00\",        // Optional unknown value at offset $2F. Default is $00. Integer.\n      \"unknown17\": \"$80\",        // Optional unknown value at offset $30. Usually/default is $80.\n      \"disk_writer_serial_number\": \"$FFFF\",  // Disk Writer serial number. Integer (0-65535 or $0000-$FFFF).\n      \"unknown18\": \"$80\",        // Optional unknown value at offset $33. Usually/default $07. Integer.\n      \"disk_rewrite_count\": \"0\", // Disk rewrite count\n      \"actual_disk_side\": \"A\",   // Actual disk side (???): \"A\" or \"B\".\n      \"disk_type_other\": \"YellowDisk\",  // Disk type (other). Can be string or integer. $00 - yellow disk, $FF - blue disk, $FE - prototype.\n      \"disk_version\": \"$03\",     // Unknown how this differs from game version. Disk version numbers indicate different software revisions.\n                                 // Speculation is that disk version incremented with each disk received from a licensee. Integer.\n      \"file_amount\": 10,         // Visible file amount. Usually it equals to actual file amount but it may vary (for copy protection, etc.)\n      \"files\": [                 // Array of files on the disk.\n        {\n          \"file_number\": \"0\",           // File number. Must go in increasing order, first file is 0. Integer.\n          \"file_indicate_code\": \"0\",    // The ID specified at disk-read function call. Integer.\n          \"file_name\": \"KYODAKU-\",      // File name. Maximum is 8 letters.\n          \"file_address\": \"$2800\",      // The destination address when loading. Integer (0-65535 or $0000-$FFFF).\n          \"file_kind\": \"NameTable\",     // File type: \"Program\", \"Character\" or \"NameTable\".\n          \"data\": \"side_1/kyodaku-.nt\"  // Path to the file with data. It will be loaded with this .json file and stored in .fds as file contents.\n        },\n       // ...\n       {\n          \"file_number\": \"12\",\n          \"file_indicate_code\": \"19\",\n          \"file_name\": \"ZX606P_3\",\n          \"file_address\": \"$6000\",\n          \"file_kind\": \"Program\",\n          \"data\": \"side_2/zx606p_3.prg\"\n        }\n      ]\n    }\n  ]\n}\n```\nAll integer values can be stored as hexadecimal value: `$FF` or `0xFF`. You can use `--no-unknown` option when unpacking to ignore all unknown fields.\n\n## Download\n* Releases: https://github.com/ClusterM/fdspacker/releases\n* Automatic interim builds: https://clusterm.github.io/fdspacker/\n\n## Donate\n* [Buy Me A Coffee](https://www.buymeacoffee.com/cluster)\n* [Donation Alerts](https://www.donationalerts.com/r/clustermeerkat)\n* [Boosty](https://boosty.to/cluster)\n* BTC: 1MBYsGczwCypXhMBocoDQWxx7KZT2iiwzJ\n* PayPal is not available in Armenia :(\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclusterm%2Ffdspacker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclusterm%2Ffdspacker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclusterm%2Ffdspacker/lists"}