How to emulate CPUs in Java?

3.2k views Asked by At

So I have been always interested in CPU emulation. I have always wanted to test my skills in Java. I have looked at open source projects such as Java GB and JPC, but they really don't provide enough documentation for someone who is new and wants to learn in that field. So, to the point, how does one learn machine emulation? Is there a website (or pdf, etc etc) that can give me the basics on machine emulation?

1

There are 1 answers

4
EkriirkE On BEST ANSWER

Before starting on an emulator, you need become 110% familiar with assembly/opcodes for the target CPU. Fully understand the CPU architecture such as operations' impact on (status) registers, stacks, interrupts, vectors, pointers, etc. For instance in an 8-bit CPU these would be (8-bit) bytes representing a single function like add, subtract, compare, goto. Not unlike Java itself, as a byte-code interpreter (JVM, Java Virtual Machine)

Once you can write a program utilizing all the opcodes for the CPU you can begin writing your emulator. From there it at the most basic it is one giant select() statement. Be able to step through your target CPU assembly code and recognize the registers, etc, change as your test code defines.

Once your virtual CPU is interpreting the opcodes with 100% accuracy, you begin emulating the peripheral hardware such as input, graphics driver, sound... For graphics many times a CPU writes to a specific memory address which is monitored by the graphics controller to display the memory bytes as the pixels on a screen. Or a keyboard may send your keystroke codes to a specific memory location and trigger an interrupt which tells the CPU there is data ready for reading. Disks work the in the same way.

It's all just an exchange of data in memory after the CPU is running to make all the parts talk to each other, really. Such as a NES or GameBoy cartridge is really just a memory chip that lies at a specific address in memory the CPU accesses directly.

Another concept is the BIOS/ROM, when the CPU powers on or is reset it automatically begins running code at a specific memory location. The BIOS or ROM may sit here. It contains the very basic program to handle communications of the peripherals at the various memory addresses and/or interrupts they live.