我是一名本科生和 iOS 应用程序开发人员。在我的大学里,我们正在学习关于 8085 微处理器的知识,我认为开发一个 iOS 模拟器对我来说会很酷而且很有用
我想知道如何从头开始启动应用程序以及我需要了解的所有信息。我是一个快速学习者,我可以同时学习和发展。真诚感谢任何伟大的建议。谢谢。
我是一名本科生和 iOS 应用程序开发人员。在我的大学里,我们正在学习关于 8085 微处理器的知识,我认为开发一个 iOS 模拟器对我来说会很酷而且很有用
我想知道如何从头开始启动应用程序以及我需要了解的所有信息。我是一个快速学习者,我可以同时学习和发展。真诚感谢任何伟大的建议。谢谢。
这取决于您要模拟 8085 的抽象级别。 迂腐地说,真正的芯片是一个 40 引脚 IC,所以这是 40 条信号线,它们根据其历史状态通过一组定义的转换进行排列。
更有用的是,您可能想要在数字总线级别进行模拟,这通常意味着只知道芯片在每个总线周期内尝试做什么(从这里读取,向那里写入等),或者只是解释一条 8085 指令流,以便像实际芯片中的执行单元一样对每个响应做出反应。
如果是后者,那么整个代码体就不会有那么大的问题——程序的字节数组,获取程序计数器说要获取的下一个字节,使用switch
语句来决定如何处理它,执行操作. 我有一个嵌入在 CP/M 仿真器中的 Z80(与 8085 密切相关)仿真器(因此,只要让指令流正确就足够了),这有几百行,主要是围绕着不重复可能,速度该死。
就算是前者,也应该没那么糟。过去,我编写了一个 Z80 仿真器,它的输入和输出只有一个 64 位整数,表示当前总线状态的数字版本。它具有与之前类似的广泛结构,但必然涉及对未来的转换进行排队并做出额外的中间指令决策。如果你现在只关心正确性和简单性,你可能只保留一个NSArray
GCD 块,代表 CPU 在每个时钟转换或每个周期内应该做什么。
可能最聪明的中间立场是让 CPU 的输出流以机器周期为单位。如果您愿意,它们会完全分解为总线状态,但也允许更高级别的解释。
编辑:在它的 Objective-C 形式中,从而使它不那么紧凑,但希望海报最容易遵循,这是指令准确形式的 Z80 仿真器。
它更新并改编了一个更简单的C 格式版本,该版本仅仅是一个反汇编程序(事后看来:首先编写一个反汇编程序可能是一个很好的步骤)。然而,该项目确实包含完整的半周期精确 Z80 模拟。然而,我最终决定我不喜欢这种设计 - 进行 C 函数调用,尤其是通过函数指针,每半个周期都过于昂贵,并且将这种低级别的通信直接焊接到模拟的执行单元可能是矫枉过正; 任何准确描述相同过程但以更隐含的形式描述的任何内容都是可以接受的。
它是一个 6502 仿真器,但这是我 (C++) 尝试消化这些经验教训的尝试;它是逐个机器周期的(尽管机器周期在 6502 上恰好是一个时钟周期长,碰巧 - 除非您断言就绪线,它会加载或存储每个周期,无论它是否需要)和根据内部微操作列表安排其工作。这一切都在标题中结束,因为我认为将模拟执行单元与任意总线集成的最佳方法是将其作为模板提供。如果我想要精确的四分之一周期总线报告,例如之前链接的 Z80 代码,那么我只需使用模板来创建将每个机器周期序列化为适当总线状态的人。
(...尽管如果您只是在谈论仿真,那么即使在任何周期可中断的周期精度也不一定意味着将序列化为我现在喜欢的更小的步骤——我写了大约 15 年的这个 6502 仿真之前只是跳转到一个单独的线程并在任何允许的中断点通过信号量阻塞,这些中断点放置在每个周期结束时)
您可以构建一个解释器,在您的 iOS 程序中对 8085 ISA进行编程,如果您想用高级语言编写代码,您还有一项额外的工作是“编译”到处理器的程序集,然后解释它。
我应该强烈警告你,你将有大量的工作,在我看来,这不是一个实际的项目。