MMIX Integrated Development Environment Project Description Goal: ===== This project aims at a complete Integrated Development Environment for the MMIX Processor based on the Eclipse platform Work Packages: ============== 1. Documentation A comprehensive list of available documentation, software, and web-sites. Each entry in the list provides a short commentary on the content, an abstract, and an URL for the document in question. 2. Assembler, Linker, Loader There is already a simple assembler, mmixal, available for the MMIX processor. For more sophisticated applications, like e.g. an operating system (see below), this assembler is not sufficient. This project will use the GNU binutils package to assemble source files into standard object files and link multiple objects to an executable in ELF format. Most of the necessary programs are already available. A loader for the mmix simulator (see below) needs to be implemented. 3. Editor, Project Management Text editors and Project Management are available on the Eclipse Platform. Syntax Highlighting for MMIX Assembly language is available but needs to be integrated. 4. C Compiler A port of gcc is available for the MMIX processor. The present implementation has however severe limitations, for instance its register use is very limited. A thorough analysis of the shortcomings of the present implementation should be followed by efforts to improve the compiler to generate high quality code. 5. Simulator Currently there are two simulators for the MMIX processor available mmix, a instruction level simulator, mmmix, a configurable pipeline level simulator. For this project, the simpler, instruction level simulator is sufficient. The present implementation lacks however certain features that are necessary for advanced projects. Therefore the following sub packages are envisioned: 5.1. GDB interface. The present debugger has a simple interface designed for interactive use. To be able to debug C Code on the source level, e.g. display data structures with appropriate type information, an interface to the GNU gdb debugger (gdb remote debugging interface) needs to be added. Further, gdb needs to be augmented to "understand" the MMIX architecture. 5.2. Memory Management The simple mmix simulator does not implement any memory management features of the MMIX processor. The memory management is implemented in the mmmix simulator and needs to be incorporated into the mmix simulator. 5.3. Interrupts and Hardware Interface The present simulator has some "hard wired" operating system calls that provide simple input and output. These have to be replaced by properly implemented TRAP instructions. On the other hand this requires a simulator that provides generic facilities to handle asynchronous interrupts and data exchange with other hardware components on the same "motherboard" (see below). 6. Motherboard and Hardware Extensions The simulator for the MMIX CPU needs to be complemented with a "motherboard", that is, an infrastructure providing protocols and software components to enable the assembly of MMIX CPU, physical RAM, Serial I/O, Graphic Cards, ROM, Disks, Network Interfaces, etc... to a complete computing system. The motherboard should be extensible in the sense, that new simulators written for new hardware can be "plugged into" an existing motherboard configuration to provide extended hardware capabilities. New components can be detected at boot time/run time by the CPU and can be used by application programs after installing appropriate software drivers. The motherboard provides the communication between all hardware components, implemented by separate processes, through a virtual data- and address bus, and virtual interrupt lines. It defines a generic hardware interface, such that simulators for arbitrary hardware components can be written and used together with the MMIX mother board. The following hardware components are planed as part of this project: - ROM - RAM - Keyboard - Dumb ASCII Terminal - Disk In the future, a Framebuffer Graphic Card and a Network Card should be added. 7. Operating System A simplified Linux Kernel, with a well defined and well documented Hardware Abstraction Layer, is already available as a result of a Diploma Thesis (Pronold). This kernel will be used for the MMIX processor. It requires the compilation of the hardware independent code, written in C, for the MMIX Processor and the implementation of the hardware dependent functions both in C and in MMIX assembler. It is not yet known whether the current implementation of gcc for the MMIX is capable of compiling the very complex kernel code. The linkage of compiled C code and assembly code will rely on the GNU binutils package. The eclipse environment will be used as the development environment and thus the operating system is a first realistic test case for the IDE. Partial preliminary tests can be made in "user mode" with the existing mmix simulator. Later on, however, the gdb debugger (subpackage 5.1) should greatly improve the debugging of mixed C and assembly code. Memory management will be an important feature of the operating system and must be developed and implemented in parallel with subpackage 5.2. In the beginning, simple serial input and output can be implemented even without subpackage 5.3 but in the final version, access to hardware components must use the interfaces defined in package 6 through the implementation provided by sub-package 5.3. Vision: ======= In the end, the user will click the power-on button on the MMIX motherboard, then the MMIX CPU will use a Boot ROM, provided through the generic hardware interface of the motherboard, and load the kernel image from the boot sector of the first disk, then launch the operating system with a root disk as specified in the kernel image. (I hope this doesn't sound too much like Windows on the MMIX...)