My first project under this scheme, will be the Universal Disassembler, and Universal Assembler (UDASM and UASM respectively). What differentiates these from NASM, AS, etc. is: it will be fully user configurable. You will be able to define files, filled with opcode definitions, and it will read accordingly. That means that you can program it to support any processor, any architecture etc. AND, and here's the clever bit, you can even program it to program 2 architectures in EXACTLY the same way! I could use x86 ASM on the ARM architecture, or vice versa, or even invent my own to use on both. The reason this works? It takes the opcode string, and maps it to a bitmap, of arbitrary length. So, I could add a condition for enabling paging in x86, and map it to the bitmap for page enabling code in ARM, and it would do exactly what you'd think. Or, define a new opcode, say STP, which enables paging, and map that to the bitmap. At the minute, I'm working on the disassembler, however will soon start on the assembler. Any ideas, feature requests, criticisms (constructive only, please) are more than welcome, and anyone who is well versed in law, I would appreciate it if you'd help me to write licensing terms (both proprietary and OS), as I'm not too good with that stuff, and I'd end up in a big pot of boiling water

The link, by the way, is https://launchpad.net/universal-disassembler. (Note that the file format, DOS, is not fully implemented right now. Far from it. Still much to be done before 1.0)