In the 1st year of my computer science school we had a subject called "hardware and software basics". Practically it was about low-level programming. Therefore we had a computer board from Siemens which had an 8085 processor on it along with a numpad and 8 seven segment displays. You had to write your program in assembler, change it into machine code by hand and type it in that small computer. Siemens called that board the ECB, an abbrevation for "Experimentier Computer Board" (English: Experimenting computer board).
Here are two sites (only German) which show that board:
It was fun, but that computer had some major downsides:
- You couldn't save or load your program. If you turned it off your program was lost.
- The power supply wasn't very reliable back then and a short circuit erased the whole program.
- You couldn't see into the machine and what it was doing.
- And a more actual downside: It is very hard to get some working examples now. Luckily I own one after searching for it several years. I even asked my old school, but got the answered that they have put all of theirs into the trash years ago. I don't want to know what they would have got if they would have put them into eBay because didn't come cheap. The next problem is the lack of documentation. Luckily I have the manual which also contains the "BIOS" or "firmware" of that board as assembler listing.
The goals of this project are:
- Implementing an emulator which acts exactly like the original. It should show what internally happens if instructions are executed (processor registers, memory, bus system, etc.).
- Implementing an assembler which is coupled with the emulator so you can see which assembler instruction is which machine code in the memory.
- Offering a in-detail documentation.
- Maybe also offering some pseudo extra hardware (e.g. a graphical display). That emulated software could be plugged into that emulated board. It would be maybe even possible to connect to real hardware through, e.g., the serial port of the computer the emulator is running on. There are many possibilities.
- An extended goal would be implementing a C compiler or maybe even a Java compiler (I don't think that it is possible to have a JVM executing byte code because of the limited memory).