java - 如何用Java模拟CPU?

标签 java emulation device-emulation

所以我一直对CPU仿真很感兴趣。我一直想测试我的 Java 技能。我研究过 Java GB 和 JPC 等开源项目,但它们确实没有为那些想在该领域学习的新手提供足够的文档。那么,说到这里,如何学习机器仿真呢?有没有一个网站(或 pdf 等)可以为我提供机器仿真的基础知识?

最佳答案

在开始使用模拟器之前,您需要 110% 熟悉 objective-c PU 的汇编/操作码。充分理解 CPU 架构,例如操作对(状态)寄存器、堆栈、中断、 vector 、指针等的影响。例如,在 8 位 CPU 中,这些将是表示单个函数(如 add)的(8 位)字节,减法、比较、跳转。与 Java 本身不同,作为字节码解释器(JVM、Java 虚拟机)

一旦您可以利用 CPU 的所有操作码编写程序,您就可以开始编写模拟器了。从这里开始,最基本的就是一个巨大的 select() 语句。能够单步执行 objective-c PU 汇编代码并识别寄存器等,并根据测试代码的定义进行更改。

一旦您的虚拟 CPU 以 100% 的准确度解释操作码,您就开始模拟外围硬件,例如输入、图形驱动程序、声音...对于图形,CPU 会多次写入由 CPU 监控的特定内存地址。图形 Controller 将内存字节显示为屏幕上的像素。或者键盘可能会将您的击键代码发送到特定的内存位置并触发中断,告诉 CPU 有数据可供读取。磁盘的工作方式相同。

实际上,这只是 CPU 运行后内存中的数据交换,以使所有部分能够相互通信。例如 NES 或 GameBoy 卡带实际上只是一个内存芯片,位于 CPU 直接访问的内存中的特定地址。

另一个概念是 BIOS/ROM,当 CPU 开机或重置时,它会自动开始在特定内存位置运行代码。 BIOS 或 ROM 可能位于此处。它包含非常基本的程序,用于处理外设在各种内存地址和/或它们所在的中断处的通信。

关于java - 如何用Java模拟CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963210/

相关文章:

bash - 在 bash 脚本中模拟用户输入

x86 - QEMU 是否模拟 TLB?

c++ - 创建虚拟设备

interrupt - 进入 HALT 模式并启用主中断但未启用中断(0xFF0F = 0)?

java.lang.ClassNotFoundException : javax. servlet.jsp.tagext.Tag

java - wsimport -clientjar 在(默认包)中生成类

java - 如何为 Android Studio 循环创建按钮删除 View

java - synchronized (this) 是只锁定同步块(synchronized block)还是锁定所有 "this"代码?

visual-studio - Visual Studio 2012 移动设备模拟器

Android 模拟器在 webview 中的 loadUrl 后多次卡住