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?
How to emulate CPUs in Java?
3.3k Views Asked by javaboy At
1
There are 1 best solutions below
Related Questions in JAVA
- Add image to JCheckBoxMenuItem
- How to access invisible Unordered List element with Selenium WebDriver using Java
- Inheritance in Java, apparent type vs actual type
- Java catch the ball Game
- Access objects variable & method by name
- GridBagLayout is displaying JTextField and JTextArea as short, vertical lines
- Perform a task each interval
- Compound classes stored in an array are not accessible in selenium java
- How to avoid concurrent access to a resource?
- Why does processing goes slower on implementing try catch block in java?
- Redirect inside java interceptor
- Push toolbar content below statusbar
- Animation in Java on top of JPanel
- JPA - How to query with a LIKE operator in combination with an AttributeConverter
- Java Assign a Value to an array cell
Related Questions in EMULATION
- Why my android application stopped when I run it in Emulator?
- How to install Intel's HAXM emulator on dual core processor machines?
- Android Emulator showing on left top corner
- How to change original (unchangeable?) ICCID/SIM card serial from an AVD
- How to set/get GPS Accuracy on Android Emulator?
- app neither installing not running on emulator
- Unfortunately "My app" has stopped
- How to setup an Android Virtual Device with a data partition larger than 200 MB?
- MASM - Macro variable?
- Facebook application has been stopped working on android emulator?
- emulator out of window non movable windows 8.Always have to change the monitor resolution.. need permanent solution
- babun: copy/paste from windows clipboard into vim?
- Android Emulator: Unfortunately Launcher has stopped
- Not able to connect to Internet from Visual Studio Emulator for Android
- Androidstudio gapps has stopped in emulator
Related Questions in DEVICE-EMULATION
- Serial Port Emulator for Mac OSX
- Emulation of an infrared input?
- Where does BasiEgaXorz write its compiled Sega Genesis binary (basic.bin) to?
- Mobile Emulators
- Why my ccAnimation not working on device?
- How to emulate CPUs in Java?
- Android Studio does not see the AVD
- Implementation of Battery in Android Emulators Under Maui
- Making mobile device images for Windows Device emulator
- Creating buttons that event handle with a visual c++ program
- Mouse emulation using an Xbox 360 controller
- How to catch a memory write and call function with address of write
- Make USB device visible with different vendor and product ID
- Cannot run unit tests for an application developed with Compact Framework for Windows CE 6.0 platform
- Simulate a faulty block device with read errors?
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)
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?
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.