Renesas (NEC) 78K0仿真器
项目描述
概述
k0emu 是一个用于运行 Renesas (NEC) 78K0 二进制的指令集仿真器。它执行了文档中描述的所有 78K0 指令。它可以用来研究 78K0 代码的行为,但它并不仿真任何特定的微控制器或外围设备。
k0emu 是为了帮助逆向工程 Delco 制造的 Volkswagen Premium V 汽车收音机而开发的。这些收音机使用未经文档化的 NEC µPD78F0831Y 微控制器,该控制器与 µPD78F0833Y 类似。为此项目还开发了配套程序 k0dasm。
由于在开发时找不到开源的 78K0 仿真器,因此构建了一个硬件测试平台。该平台包含在 k0emu 中,基于 µPD78F0831Y。首先按文档描述实现了指令。然后编写并运行了测试程序,在 k0emu 和真实硬件上运行。当 k0emu 的结果与硬件不同时,k0emu 被修复以像硬件一样运行。这个过程使人们对 k0emu 正确实现指令有了信心。
功能
执行所有文档化的 78K0 指令
所有指令都通过单元测试覆盖
大多数操作至少有一个寻址模式已与硬件进行测试
安装
k0emu是用Python编写的,需要Python 3.4或更高版本。软件包在Python包索引(PyPI)[可获取]。您可以从那里下载它们,或者可以使用pip自动安装或升级k0emu
$ pip install -U k0emu
使用方法
k0emu接受一个纯二进制文件作为输入。假设该文件是一个内存底部的ROM镜像。例如,如果给出一个32K文件,k0emu将假设图像应位于0x0000-0x7FFF。加载镜像后,模拟器将从复位向量开始执行,直到终止
$ k0emu rom.bin 0d88: 7b 1e di AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d8a: 13 42 07 mov 0ff42h,#07h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d8d: 13 f9 90 mov 0fff9h,#90h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d90: 13 fb 00 mov 0fffbh,#00h AX=0000 BC=0000 DE=0000 HL=0000 SP=0000 [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d93: ee 1c 1f fe movw sp,#0fe1fh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d97: 4b cd clr1 0fecdh.4 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d99: 71 4b 23 clr1 0ff23h.4 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d9c: f0 cd mov a,0fecdh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0d9e: f2 03 mov 0ff03h,a AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0da0: 6b ce clr1 0feceh.6 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0da2: 71 6b 24 clr1 0ff24h.6 AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0da5: f0 ce mov a,0feceh AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 0da7: f2 04 mov 0ff04h,a AX=0000 BC=0000 DE=0000 HL=0000 SP=FE1F [IE:0 RB:0 ISP:0 Z:0 AC:0 CY:0] ffe4=00000000 ffe5=00000000 ffe6=00000000 ffe7=00000000 ...
k0emu在运行时显示跟踪信息,但目前没有用户界面来控制模拟。直到存在为止,您可以修改文件run.py。单元测试也可以作为如何从您自己的Python程序中运行模拟器的参考。
k0emu-1.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c21f0daa1b9c9996aa2b4087da6fe6950dc66dc51f61f03ec2665b996141504 |
|
MD5 | c2b0489c604e76e4861ff3e3388b5bb7 |
|
BLAKE2b-256 | b626630c3e1625dae9f60765d0bc0052947a7e75e4752f830c76c2f81d462b68 |
k0emu-1.0.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f0c5b06d67a8a807ef8b739ce45383ff449f4845fb9a850dd593f6664a68f719 |
|
MD5 | f34fd5260d011d7a092072a78e9c6c45 |
|
BLAKE2b-256 | 5b11fbe8452066d68b8b10a4f082333e4bc669880b6841bff5f8e7479b49869d |