Bennett/Requirements
< Bennett
Base Requirements
- Multiplatform (Linux/Windows. Mac if possible, but has serious challenges)
- Needs to support different different architectures: ARM, RISC-V, [others]
- Needs to be configurable to 8, 16, 24, 32, or 64 bit architecture
- Needs to support different memory models, different register configurations, etc
- Needs be able to work with simulators, or to communicate with a lab board
- Display of CPU registers (which registers are available will depend on architecture)
- Display of Status Flags (which flags are available will depend on architecture)
- Memory view, with optional disassembly.
- View should be configurable to show memory in different ways: single word, multiple words, ascii characters, disassembly (word size and disassembly will depend on architecture) and if an address matches the value in a register, the register name should be highlighted next to that address.
- Multiple memory views need to be available, and individually configurable.
- Breakpoints (stop on PC reaching memory address)
- Watchpoint (stop on value at address being changed/set to value)
- CPU controls: step [single, multiple], run, reset - is continue just another form of 'run'?
- Output console for
- Needs to be extensible to support different simulated memory-mapped peripherals. Peripherals separate from architecture?
- avoid using linux-specific mechanisms for IPC: sockets instead of pipes, for example. Dynamic loading of extensions will need thought.
Extras
- Compilers/assemblers for target architectures
- GNU as (GAS) (part of the gcc suite) will target almost any architecture, but may not produce useful file types (MU0 support is curiously absent, for example)
- Writing an actual assembler is possible but nontrivial. Are there real reasons not to use GAS (mingw under Windows)? Would they function as stopgaps in the short-term?