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?
Related Questions in JAVA
- new thread blocks main thread
- Extracting viewCount & SubscriberCount from YouTube API V3 for a given channel, where channelID does not equal userID
- Display images on Django Template Site
- Difference between list() and dict() with generators
- How can I serialize a numpy array while preserving matrix dimensions?
- Protractor did not run properly when using browser.wait, msg: "Wait timed out after XXXms"
- Why is my program adding int as string (4+7 = 47)?
- store numpy array in mysql
- how to omit the less frequent words from a dictionary in python?
- Update a text file with ( new words+ \n ) after the words is appended into a list
Related Questions in EMULATION
- new thread blocks main thread
- Extracting viewCount & SubscriberCount from YouTube API V3 for a given channel, where channelID does not equal userID
- Display images on Django Template Site
- Difference between list() and dict() with generators
- How can I serialize a numpy array while preserving matrix dimensions?
- Protractor did not run properly when using browser.wait, msg: "Wait timed out after XXXms"
- Why is my program adding int as string (4+7 = 47)?
- store numpy array in mysql
- how to omit the less frequent words from a dictionary in python?
- Update a text file with ( new words+ \n ) after the words is appended into a list
Related Questions in DEVICE-EMULATION
- new thread blocks main thread
- Extracting viewCount & SubscriberCount from YouTube API V3 for a given channel, where channelID does not equal userID
- Display images on Django Template Site
- Difference between list() and dict() with generators
- How can I serialize a numpy array while preserving matrix dimensions?
- Protractor did not run properly when using browser.wait, msg: "Wait timed out after XXXms"
- Why is my program adding int as string (4+7 = 47)?
- store numpy array in mysql
- how to omit the less frequent words from a dictionary in python?
- Update a text file with ( new words+ \n ) after the words is appended into a list
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
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.