I've always been fascinated by the idea of producing an emulator but the inner-workings of computers and consoles has always been alien to me. In college, I studied Computing and it only skimmed the surface of how the computer functions. Essential concepts such as the fetch-execute cycle, interrupts, stacks, assembly language were only ever touched upon so that we as students had appreciation for them and their use, but not a clear, indepth understanding of how they work. I also studied Pascal at college and I feel I have mastered it at least at the level that was taught to us.
Now I'm roughly half-way into my first term at University (I'm studying Computer Science). The following is the content I have covered thus far:
-The entire procedural side of Java. Presently starting the object orientated side of things.
-Have been introduced to boolean logic, logic gates, circuits.
-Have been introduced to assembly language.
-Naive set theory (which I must admit I only understand about 30% of)
Given that I have this knowledge, what further knowledge do I need to be able to even begin to consider creating an emulator. Specifically I want to code a TurboGrafx16/PC Engine emulator (yes I know several excellent ones already exist but its just something that I've been wanting to do for ages).
I've been told that the very first step in emulating console hardware is to successfully emulate the CPU (i'm probably wrong, but I'm here to be corrected). However this STILL sounds alien to me. I guess what I'm asking is: where do I start? What resources do I need. Once I do my research and identify all the components of the PC Engine architecture, how do I begin to analyse how each one works (bearing in mind I do not own the hardware) and consider how to implement them via a high-level language. And is Java adequate or should I learn a more usual suspect language such as C or assembler?
I'm not asking how to emulate the PC Engine or any console hardware. What I'm asking is : what do I need in terms of knowledge and resource to be in a positition to embark on such a project?
Thank you for reading. And double thanks if you reply!