Skip to content

Requirements

Note

These are the original requirements of the project. The project has changed a lot since then. Keeping them here for reference and historic purposes.

Have 6502 disassembler with a Turbo Assembler / Turbo Debugger (from Borland in 80's and 90s) look and feel, but with modern features from IDA Pro 5.0.

  • It should be able to disassemble 6502 code, including undocumented opcodes
  • It should be able to convert (or tag) opcodes to code, or data
  • Data opcodes can be represented as: bytes, words, entry for lookup table (word), or lookup tables with hi/lo addresses
  • User should be able to add comments
  • User should be able to add labels
  • It should support undo/redo commands.
  • It should export the disassembled code to something that can be re-assembled with 64tass. But it should be flexible because in the future it should support other assemblers like ACME, cc65, etc.
  • Everything can be done from the keyboard. Navigating the code should support vi-like keys.
  • Mouse support is welcome. But if the user doesn't have a mouse, it should work as well.
  • The "Menu" at the top should have all the typical Menu entries like:
    • File: Open binary, Open project, save project, export disassembly
    • Edit: Undo, Redo, Code, Data, Undefined, (data can have: Byte, Word, Lookup table, Lo/Hi, Hi/Lo), Add comment, Rename (label)
    • Jump: Jump to operand, Jump to address, Jump by name
    • View: Show opcodes, show auto-comments
  • The main view, where the disassembly is should be "tabulated", in the sense that address, opcodes, comments, etc, should have its own "tab order".
    • it should also have arrows pointing up/down when there is a jump, similar to IDA Pro, at least IDA Pro 5.0 (the old version)
  • It should support different binary formats like:
    • bin: pure data
    • prg: typical c64 format, where the first 2 bytes represent the load address (Hi/lo)
  • It should be possible to change the origin (if the user made a mistake when loading a bin, it should be able to re set the origin)
  • It should use Rust and Ratatui for the interface. It is going to be a TUI, like Tuber Assembler from Borland.
  • The project should contain a README.md describing the project and explaining how to compile and run it.
  • The project should have a reasonable .gitignore file, and should follow modern Rust best practices