A modern, table-driven assembler for the Data General Nova and Eclipse families of minicomputers.
Data General Assembler is a portable cross-assembler, written in C, leveraging Flex and Bison. It is designed to run anywhere, and cross-assemble targeting configurable Nova and Eclipse variants.
You will need:
- GCC or Clang
- Flex
- Bison
- CMake
- Make
To build dgasm, do the following:
$ cmake .
$ makedgasm -t nova4 -o output.bin -f octal input.asm- Provide a clean, maintainable assembler for Nova and Eclipse systems
- Support multiple CPU variants via selectable target
- Run portably on modern machines
The following base architectures are planned. This list may grow in the future.
- Nova 1
- Nova 3
- Nova 4
- Eclipse S/140
Data General machines have requirements for variable emplacement, that makes programming directly challenging:
- For Novae, all variables must be within +/- 127 of either the program counter, AC2, or AC3, or must be in the zero page.
- For Eclipses, variables that meet the above rules have a shorter instruction coding than variables that do not.
- Some locations in the zero page are auto-incrementing or auto-decrementing, when accessed indirectly.
Address space layout allows the programmer to instruct dgasm to declare a variable somewhere, and lay it out optimally, as it sees fit. This may be interspersed with code, or live in the zero page, or elsewhere altogether.
Likewise, it allows the programmer to mark certain variables as autoincrement/autodecrement, managing emplacement accordingly.
Note that the more restrictive the layout (ie, the more the programmer defines where things live on an address level), the fewer options the compiler has to resolve address space layout. The more restrictive it is, the higher the chance address space layout will fail, and the programmer may have to define things by hand.
Assembler works. Currently productionising for v1.
Data General Assembler is designed with modern conveniences in mind. The architecture is fairly traditional for an assembler:
- Lexical analysis
- Parsing
- Semantic validation and encoding
- Multi-pass symbol and const resolution
- Address space layout and validation
- Binary emission
Data General Assembler provides conveniences such as variable emplacement, assemble-time const expressions, etc to aid in the development process.
Instruction encoding is table driven, to facilitate easy extension of the assembler.
- Add further Eclipse instruction sets.
- Add support for WCS via encoding, rather than using constants
- Address space layout
- Optional macro assembler mode in support of ASL
- Support for Data General OS binary format - RDOS, AOS, possibly AOS/VS
Contributions are very welcome.