{"id":15060477,"url":"https://github.com/devinacker/xkas-plus","last_synced_at":"2026-03-11T15:12:52.124Z","repository":{"id":139511941,"uuid":"22113309","full_name":"devinacker/xkas-plus","owner":"devinacker","description":"fork of the xkas (v14) cross assembler","archived":false,"fork":false,"pushed_at":"2018-01-22T06:41:28.000Z","size":452,"stargazers_count":28,"open_issues_count":4,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-24T07:05:00.439Z","etag":null,"topics":["6502","assembler","assembly","assembly-language","nes","rom-hacking","romhacking","snes"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devinacker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2014-07-22T17:15:49.000Z","updated_at":"2024-12-13T19:46:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"131db572-2db0-4de9-a4bc-e6a802a3bf86","html_url":"https://github.com/devinacker/xkas-plus","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devinacker%2Fxkas-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devinacker%2Fxkas-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devinacker%2Fxkas-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devinacker%2Fxkas-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devinacker","download_url":"https://codeload.github.com/devinacker/xkas-plus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248166926,"owners_count":21058480,"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":["6502","assembler","assembly","assembly-language","nes","rom-hacking","romhacking","snes"],"created_at":"2024-09-24T22:59:12.937Z","updated_at":"2026-03-11T15:12:47.090Z","avatar_url":"https://github.com/devinacker.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xkas-plus (v14+1)\n\nThis is a fork of xkas v14, because I like xkas v14 and wanted to touch it up a bit.\n\nAs with the original, this code is in the public domain.\n\n## What's new\n- Ability to assemble directly to an IPS patch instead of a binary (with the `-ips` switch)\n- New architecture options:\n  - `6502` / `nes.cpu` - MOS 6502\n  - `65c02` - WDC 65C02 (untested)\n  - `65ce02` - CSG 65CE02 (untested)\n  - `huc6280` / `pce.cpu` / `tg16.cpu` - Hudson HuC6280 (untested)\n  - `spc700` / `snes.smp` - Sony SPC700\n    - See `test/test_spc.asm` for syntax examples\n  - `65816` - identical to `snes.cpu`\n- Ability to export defines and labels to a separate file (with the `-e filename` switch)  \n  Supported output formats:\n  - `*.asm` - assembly include\n  - `*.ram.nl` - FCEUX debug symbols (labels only)\n  - `*.vs` - VICE debug symbols (labels only)\n- New directives (mostly for increased xkas v06 compatibility):\n  - `fillbyte` / `padbyte` - specifies a default value for the `fill`, `fillto`, and `align` directives\n    (these were originally two separate directives in v06, though I may make them distinct later)\n  - `pad` - identical to `fillto`\n  - `table` - allows you to specify a .tbl file to use for custom character encoding (up to four bytes per 8-bit character)\n    - `cleartable` - restores the default encoding\n  - `warnpc` - verifies that code is being assembled below a given address\n  - `bank` - set current program bank (default `0`)\n  - `banksize` - set size of program banks (default/maximum `$10000`)\n    - These two directives control the mapping between physical and logical addresses. For example:  \n    ```noheader\n    banksize $2000\n    bank 0\n    org $8000 // assembles to file offset $0000\n    org $9000 // assembles to file offset $1000\n    bank 1\n    org $8000 // assembles to file offset $2000\n    org $9000 // assembles to file offset $3000\n    org $a000 // assembles to file offset $2000 (not $4000!)\n\t```\n\t- Note that for `65816` / `snes.cpu`, the `bank` and `banksize` settings are only relevant when the standard `lorom`, `hirom`, etc. address mapping modes aren't in effect (so that you can work with less common addressing setups, like with the SA-1).\n- Directives for `6502` / `nes.cpu`:\n  - `header` / `noheader` - behave the same as their `snes.cpu` counterparts, but for a 16-byte iNES header instead of a 512-byte SNES copier header.\n    - The default is `noheader`, so you can insert an iNES header manually before using the `header` directive for the actual ROM contents. The `header` directive does not generate an iNES header on its own.\n    \n- New directives for `65816` / `snes.cpu`:\n  - `exlorom` / `exhirom` mapping modes\n\n## Goals\n- Support for more architectures (SuperFX, GB/Z80, etc)\n  - Support for undocumented 65xx opcodes\n- Some useful system-specific directives for the above\n- Actual documentation of the above\n- Some other useful(?) directives, including from older xkas versions\n- Macros (another lost feature of xkas v06)\n  - not quite the highest priority\n\n## Why not bass?\nbass was actually my original target for this project, but in using and modifying it I found a lot of bad flaws with the way bass parses code (think about the words \"unintentionally significant whitespace\" if you want an idea) that would have been a real pain to fix in an actually satisfactory way.\n\nThe table-based assembly in bass was an attractive feature that would have made it very simple to add support for most or all of the new architectures that I wanted, but the way it was implemented partially contributed to the above issue (and I don't know how well it would have worked for things like THUMB, which xkas v14 supports already, or pretty much any RISC architecture where opcodes and operands aren't byte-aligned).\n\n## Why not xkas v06?\n(a.k.a. the version almost everyone _actually_ uses)\n\nv14's code is much cleaner and more easily extensible. That's more or less the only reason. Hopefully in re-adding some of v06's features I can bridge the gap a bit, but things like the new comment syntax will still keep it from being completely backwards compatible with v06.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevinacker%2Fxkas-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevinacker%2Fxkas-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevinacker%2Fxkas-plus/lists"}