因此,我一直对CPU仿真感兴趣。我一直想测试我的Java技能。我研究了Java GB和JPC之类的开源项目,但它们确实没有为新手想要在该领域学习的人提供足够的文档。那么,至此,一个人如何学习机器仿真呢?是否有可以提供有关机器仿真基础知识的网站(或pdf等)?
在启动仿真器之前,您需要110%的熟悉目标CPU的汇编/操作码。全面了解CPU架构,例如操作对(状态)寄存器,堆栈,中断,向量,指针等的影响。例如,在8位CPU中,这些字节将是(8位)字节,代表单个函数(如add,减去,比较,转到。与Java本身一样,作为字节码解释器(JVM,Java虚拟机)
一旦可以使用CPU的所有操作码编写程序,就可以开始编写仿真器。从那里最基本的是一个巨大的select()语句。能够单步执行目标CPU汇编代码并识别寄存器等,并根据测试代码的定义进行更改。
一旦您的虚拟CPU以100%的精度解释了操作码,便开始仿真外围硬件,例如输入,图形驱动程序,声音...对于图形,CPU多次将CPU写入由图形控制器监视的特定内存地址,将内存字节显示为屏幕上的像素。或者键盘可以将您的击键代码发送到特定的存储位置,并触发一个中断,告知CPU已准备好读取数据。磁盘以相同的方式工作。
实际上,这只是在CPU运行以使所有部件相互通信之后的内存中数据交换。诸如NES或GameBoy墨盒等实际上只是一个存储芯片,位于CPU直接访问的内存中的特定地址上。
另一个概念是BIOS / ROM,当CPU通电或被重置时,它将自动在特定的内存位置开始运行代码。BIOS或ROM可能位于此处。它包含一个非常基本的程序,用于处理各种内存地址和/或它们所处的中断处的外围设备通信。