解决方案
其他提示
这是一次侧面旅行,但是既然你说你没有这种编程的经验,你可能想要为 2006年ICFP编程大赛的/um-spec.txt“rel =”noreferrer“>通用虚拟机 一>。这项任务需要有经验的程序员90分钟,但许多没有经验的团队能够在几天内完成它。当你完成模拟器时,它解锁了一堆有趣的东西,在你解决Z80之前它可能是一个很好的热身。
有些事情要添加(尤其是对Z80):
不信任的文件是100%的免费的错误
我没有看到任何没有错误,包括那些提到在这里。
测试你的CPU核对错误的正确
它将保存你从多头痛的问题和混乱之后。
用于测试我使用的三种方法:
踏/跟踪的已知代码 (般评论ROM拆)
这是第一步的时候没有什么工作呢。你会看到的严重(de)编码指示。
包括不同的Z80核心,在你的仿真程序和过程的一切,因为双仿真的
使两个人分离的'模拟器同步进、跟踪和运行的系统。两者的Cpu应该有它自己的存储器硬件,等等。
- 运行模拟器和之后各个比较的指令寄存器和瞬时记忆的地点像
[hl],[sp],[sp-1]
... - 在第一个差别停下来看看有什么指令而引起的。
调试和继续下去,直到你有错误的自由'。要注意的第二个核心可以也越野车那么调试谨慎。
- 运行模拟器和之后各个比较的指令寄存器和瞬时记忆的地点像
当你更运行,能够使用核测试仪
使用 ZEXALL锻炼.这是最好的 Z80 (至少从我的经验)。它帮助了我很多东西(我的核心现在是100%ZEXALL兼容)。它完成了对真正的硬件,所以不会有任何错误。这是从 CP/M 因此,一些版本需要 64K RAM模式 运行。不同的 OS/ROM 或任何可能导致某些指令的记忆访问失败,因此,对于那些你需要找到正的社区康复中心或比较对真正的硬件。
例如,原 ZEXALL 失败很多事情上 ZX谱 (作为这样做是为了 MSX 和 64K RAM 没有 ROM),但有版本所做的真的 ZX谱 他们都是100% "确定" 上 ZX谱 (而我的仿真太:))
Z80all instruction exerciser <adc,sbc> hl,<bc,de,hl,sp>...OK add hl,<bc,de,hl,sp>.........OK add ix,<bc,de,ix,sp>.........OK add iy,<bc,de,iy,sp>.........OK aluop a,nn...................OK aluop a,<b,c,d,e,h,l,(hl),a>.OK aluop a,<ixh,ixl,iyh,iyl>....OK aluop a,(<ix,iy>+1)..........OK bit n,(<ix,iy>+1)............OK bit n,<b,c,d,e,h,l,(hl),a>...OK cpd<r>.......................OK cpi<r>.......................OK <daa,cpl,scf,ccf>............OK <inc,dec> a..................OK <inc,dec> b..................OK <inc,dec> bc.................OK <inc,dec> c..................OK <inc,dec> d..................OK <inc,dec> de.................OK <inc,dec> e..................OK <inc,dec> h..................OK <inc,dec> hl.................OK <inc,dec> ix.................OK <inc,dec> iy.................OK <inc,dec> l..................OK <inc,dec> (hl)...............OK <inc,dec> sp.................OK <inc,dec> (<ix,iy>+1)........OK <inc,dec> ixh................OK <inc,dec> ixl................OK <inc,dec> iyh...............OK <inc,dec> iyl................OK ld <bc,de>,(nnnn)............OK ld hl,(nnnn).................OK ld sp,(nnnn).................OK ld <ix,iy>,(nnnn)............OK ld (nnnn),<bc,de>............OK ld (nnnn),hl.................OK ld (nnnn),sp.................OK ld (nnnn),<ix,iy>............OK ld <bc,de,hl,sp>,nnnn........OK ld <ix,iy>,nnnn..............OK ld a,<(bc),(de)>.............OK ld <b,c,d,e,h,l,(hl),a>,nn...OK ld (<ix,iy>+1),nn............OK ld <b,c,d,e>,(<ix,iy>+1).....OK ld <h,l>,(<ix,iy>+1).........OK ld a,(<ix,iy>+1).............OK ld <ixh,ixl,iyh,iyl>,nn......OK ld <bcdehla>,<bcdehla>.......OK ld <bcdexya>,<bcdexya>.......OK ld a,(nnnn) / ld (nnnn),a....OK ldd<r> (1)...................OK ldd<r> (2)...................OK ldi<r> (1)...................OK ldi<r> (2)...................OK neg..........................OK <rrd,rld>....................OK <rlca,rrca,rla,rra>..........OK shf/rot (<ix,iy>+1)..........OK shf/rot <b,c,d,e,h,l,(hl),a>.OK <set,res> n,<bcdehl(hl)a>....OK <set,res> n,(<ix,iy>+1)......OK ld (<ix,iy>+1),<b,c,d,e>.....OK ld (<ix,iy>+1),<h,l>.........OK ld (<ix,iy>+1),a.............OK ld (<bc,de>),a...............OK Tests complete
在情况下,你都要用 ZEXALL 当心这是真的详尽测试, 请参考 上 ~50MHz 仿真花了周围
30-60
分来完成。它需要按一个关键的滚动几次...如果你需要一个竞争的模式,添加适当的测试。然后找到一个。对于 ZX谱 有很多浮动旅,中断和视测试。对于 TI 我不知道...(我不是一个 TI 计算器用户)
顺便说一句: 怎么去你的仿真器?(你做了吗?)
指示设置
我会复我的指令集在这里,但它具有1792线和121KB,因此它将不适合成为一个30KB的限制。而不是你可以找到它在下载链接在这个回答我
它包含了"所有" ZX 说明正确的 OP 代码、编码的时机和机器周期。我花了几年中放在一起所有的文档,所以我穿 ZEXALL100% 正确。我的仿真器载荷本(1792指令)文本文件的核心上 init
和配置的指令解码器和处理器在运行时,我是能够改变事情真的快速和足够简单的(如果错误是检测到的)...它救了我一个 很多 时间。
米奇是完全正确的。首先要了解处理器。然后通过编写代码来实现特定指令。使用C ++,BTW,而不是C,或者处理器的概念不会映射到代码中的类。
在实现指令的过程中,您会发现需要定义标志和指令指针之类的内容。这应该最终将您带到您需要实现内存模型的位置,甚至是I / O模型。
您最终必须弄清楚如何将代码和数据加载到内存中,以及如何将其转储回磁盘。
只有这样才能在给定的指令指针处模拟执行加载到内存中的代码。
试着看一下Sega Master System和Game Gear模拟器(我很确定有些是开源的)。那些控制台有一个Z80作为CPU,和 ZX Spectrum 也使用它, http://www.worldofspectrum.org/emulators.html 。
你似乎想要一个超过处理器的模拟器,但是对于一台完整的机器。您还需要模拟其余硬件,找到相关文档可能是等待您的更困难的任务。
根据您的目标,您可能希望从已存在的Z80仿真器开始。快速搜索提供了几个,但没有TI-84的模拟器。 simh ,旧计算机模拟的框架已经模拟了Z80处理器,添加了对其余部分的仿真硬件应该比从头开始更容易。即使你不走那条路,也有一些可以帮助你的设计文件。
我建议您考虑首先为一个稍微简单但相关的CPU编写模拟器, 8080 。 Z80实际上相当复杂(多字节指令,更多寻址模式,索引寄存器等),而8080指令非常容易解码(您可以使用256条目查找表,作为一阶解决方案) 。
如果您决定继续尝试使用Z80,那么您编写的用于控制程序(显示,数据输入,内存转储等)的所有代码都应该是可重用的,实际上您应该将用户界面设计为模拟处理器无关。
我在这里了解了所有关于Z80和计算器组装的知识: http://www.ticalc.org /编程/