chip8模拟器的python3实现-2-指令介绍
CHIP指令表
CHIP-8有35个指令,都为两字节长,以大端方式存储。指令表的指令格式规定如下:
NNN:地址
NN:8位常量
N:4位常量
V:寄存器
X和Y:4位,标识寄存器
PC:程序计数器
I:16位索引地址寄存器
操作码 类型 功能描述
0NNN 调用 执行地址NNN的子程序
00E0 显示 清屏
00EE 跳转 从子程序返回
1NNN 跳转 跳转到地址NNN
2NNN 跳转 调用子程序NNN
3XNN 条件 如果VX等于NN则跳过下一条指令(通常时跳过一条跳转指令)
4XNN 条件 如果VX不等于NN则跳过下一条指令(同上)
5XY0 条件 如果VX的值等于VY则跳过下一条指令(同上)
6XNN 赋值 VX = NN
7XNN 赋值 VX += NN,进位标记不会改变
8XY0 赋值 VX = VY
8XY1 按位或 VX = VX | VY
8XY2 按位与 VX = VX & VY
8XY3 按位异或 VX = VX ^ VY
8XY4 运算 VX += VY,VX有进位(大于255)时VF为1,否则VF为0
8XY5 运算 VX -= VY,VX负数时VF为0,否则VF为1
8XY6 右移 VX >>= 1,VX最低位存入VF中
8XY7 运算 VX = VY - VX,VX负数时VF为0,否则VF为1
8XYE 左移 VX <<= 1,VX最高位存入VF中
9XY0 条件 如果VX不等于VY则跳过下一条指令(通常时跳过一条跳转指令)
ANNN 地址 将I设置为NNN
BNNN 跳转 跳转到地址V0+NNN,PC=V0+NNN
CXNN 随机数 VX = rand() & NN
DXYN 显示 在(VX,VY)绘制一个宽8像素、高N像素的精灵。每8个像素从I寄存器中的地址逐步读出一字节(8位),在执行该语句时I内的值不可以改变,如果像素反转为0则碰撞检测将VF置为1
EX9E 按键 跳过下一条指令,如果存储在VX的键值所应的键被按下
EXA1 按键 跳过下一条指令,如果存储在VX的键值所应的键没有被按下
FX07 定时器 获取延时寄存器的值
FX0A 按键 等待按键,将按键的值存入VX(阻塞指令,所有指令将等待该指令执行完
FX15 定时器 将VX的值存入延时寄存器
FX18 定时器 将VX的值存入声音寄存器
FX1E 地址 I += VX
FX29 地址 将VX中的精灵地址赋值给I,字符0-F由4X5字体表示
FX33 BCD 将VX中值的BCD码存入I中的地址内,百位在I,十位在I+1,个位在I+2
FX55 地址 将V0到VX的值存入I中地址为起始的内存空间
FX65 地址 将I中地址为起始的内容依次存入V0-VX
参考文献:CHIP-8 - Wikipedia
chip8模拟器的python3实现-2-指令介绍的更多相关文章
- chip8模拟器的python3实现-1-CHIP8简介
打算编写一个NES模拟器,先从简单的chip8模拟器入手 1.CHIP-8简介 CHIP-8是一个解释型语言,由Joseph Weisbecker开发.最初CHIP-8在上个世纪70年代被使用在COS ...
- CHIP8模拟器的python3实现-3-指令实现
class Chip8CPU(object): def __init__(self, screen): self.registers = { 'v': [], 'index': 0, 'pc': 0, ...
- C#中的预编译指令介绍
原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...
- corosync+pacemaker的crmsh的常用指令介绍
配置crmsh的yum仓库,此仓库的RPM包有openSUSE提供,将这个network:ha-clustering:Stable.repo文件直接下载到本地并且命名为crmsh.repo wget ...
- C++编译器详解(二)常见precompiling 指令介绍
VC++编译器中一些常见precompiling 指令介绍 我们在利用vc6.0 project wizard生成的代码中,经常看到大量的precompiling指令.本文讲解了常见的这些指令的作用 ...
- Docker学习(三): Dockerfile指令介绍
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- python3入门之赋值语句介绍
获得更多资料欢迎进入我的网站或者 csdn或者博客园 本节主要介绍赋值语句,以及几种特殊的赋值.下面附有之前的文章: python3入门之print,import,input介绍 python入门之字 ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- Modbus RTU新版本指令介绍
Modbus RTU新版本指令介绍 TIA V13 SP1版本软件中提供了2个版本的Modbus RTU指令: 图1. 两个版本Modbus RTU指令 早期版本的Modbus RTU指令(图1. 中 ...
随机推荐
- WPF常用TriggerAction用法 (一)
Microsoft.Expression.Interactivity 常用TriggerAction-> CallMethodAction ChangePropertyAction Contro ...
- 一文洞悉Python必备50种算法!资深大牛至少得掌握25种!
一.环境需求 二.怎样使用 三.本地化 3.1扩展卡尔曼滤波本地化 3.2无损卡尔曼滤波本地化 3.3粒子滤波本地化 3.4直方图滤波本地化 四.映射 4.1高斯网格映射 4.2光线投射网格映射 4. ...
- k8s网络
一.同一宿主机的两个容器间通信 通过 Veth Pair 设备 + 宿主机网桥的方式,实现了跟同一宿主机上其他容器通信. 访问流程:当容器1想要跟容器2通信时,IP包会被转发到容器1的eth0这个网卡 ...
- 从 注解和继承 到 JAXB中的注意事项
从 注解和继承 到 JAXB中的注意事项 注解在继承中的行为 如果一个父类添加了一个注解,子类是否能取到这个注解呢?如下 package inheritance; import java.lang.a ...
- (转)get和post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- java idea 代码规范插件
推荐阿里的 p3c https://github.com/alibaba/p3c
- Swoft 容器使用
可以借助Swoft下的Bean类操作容器 示例: 将类绑定至容器 use Swoft\Bean\Annotation\Bean; /** * @Bean("imageLogic") ...
- 2018-2019-2 网络对抗技术 20165304 Exp2 后门原理与实践
后门的基本概念及实验内容 常用后门工具 netcat Win获得Linux Shell Linux获得Win Shell Meterpreter 实验内容 任务一:使用netcat获取主机操作Shel ...
- Java后端面试的一切技巧和常见的问题经验总结
原文地址:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司, ...
- 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)
1. np.stack((x_t, x_t, x_t, x_t), axis=2) 将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...