3
模拟MOS 6502 CPU
这也受到了英特尔8086挑战的启发,但我认为6502挑战也很有趣。 挑战 我认为这将是一个有趣的结果。显然,这是朝着更先进的一面发展。面临的挑战是编写自己的6502 CPU仿真器。当然,这需要了解其指令集和编码格式。资源链接在此底部。6502是最容易仿真的现实世界处理器之一。就此挑战而言,如果您不想这样做,则无需担心循环时间安排-但这总是一个加号! 不要复制任何其他代码!当然,您当然可以偷看其他仿真器来帮助您理解,但不能复制和粘贴!:) 一旦代码运行成功,如果您愿意,您随时可以加倍努力,并将其转变为Apple II模拟器,或者NES,C64,VIC-20或从今天起使用的其他数十亿个旧的基于6502的系统。 测试模拟器 我已经编译了一个6502测试套件,并在其中找到了源代码:http : //code.google.com/p/hmc-6502/source/browse/trunk/emu/testvectors/AllSuiteA.asm 我的编译版本可以在这里下载:http : //rubbermallet.org/AllSuiteA.zip 将48 KB二进制文件以4000美元的价格加载到模拟器的内存空间中,从而在其下面留下16 KB的读写RAM。测试完成执行后,如果CPU通过,地址$ 0210中的值应为$ FF。您将知道程序计数器(PC)到达地址$ 45C0时测试已完成。 其他测试也可以在这里找到:http : //visual6502.org/wiki/index.php?title=6502TestPrograms 做一些更具互动性的事情 CPU工作后,您可能会想做的事情比盯着测试输出还要有趣!我为6502编译了增强型BASIC的ROM映像。它的大小为16 KB,因此您应该将其加载到仿真内存空间的$ C000中,重置虚拟6502,然后开始执行。 下载包含ehbasic.bin的该ZIP文件:http: //rubbermallet.org/ehbasic.zip EhBASIC处理输入/输出的方式非常简单。当想要向控制台写入字符时,它将字节写入存储器位置$ F001。因此,当您的模拟器看到6502尝试写入该位置时,只需使用printf(“%c”,value)将字符值打印到控制台即可;或其他您想要的。(这个挑战当然不仅限于C) 当它轮询从控制台输入的字符时,它非常相似。它将继续从$ F004的存储位置读取数据,在该位置应等待键盘上的下一个ASCII字符值被读取。如果没有更多的输入要读取,则应返回零值。 EhBASIC会在该位置轮询该值,直到它为非零为止,从而使其知道该字节是有效的键盘输入。这就是为什么如果没有更多的输入要读取,那么仿真器应该在那里返回零。在寻找输入时,EhBASIC会一直旋转直到下一个有效键。 如果在读取最后一个键值后仍未将该值清除为零,则它将导致重复该操作,就像您按住该键一样,因此请务必正确执行! 如果您的仿真器可以正常工作,那么在执行ROM映像时,控制台上将显示以下内容: 6502 EhBASIC [C]old/[W]arm ? 按C,然后按Enter,您应该看到: Memory size ? 31999 Bytes free Enhanced BASIC 2.22 …