chip8模拟器的python3实现-1-CHIP8简介
打算编写一个NES模拟器,先从简单的chip8模拟器入手
1.CHIP-8简介
CHIP-8是一个解释型语言,由Joseph Weisbecker开发。最初CHIP-8在上个世纪70年代被使用在COSMAC-VIP和Telmac 1800上。许多游戏如Pong,Space Invaders,Tetris都曾使用该语言编写。
2.CHIP-8硬件载体描述
1.内存(Memory)
CHIP-8通常在4K系统上使用,如Cosmac VIP和Telmac 1800,其内存大小为4096(0x1000),以字节(byte)编址(1byte = 8bit,这就是CHIP-8名称的由来)。由于CHIP-8解释器自身占据了前512字节,所以大部分CHIP-8程序的起始地址为0x200,这些程序不能访问0x200之前的内存地址。另外(0xF00-0xFFF)这256字节被用于存储屏幕刷新时的缓存,(0xEA0-0xEFF)这96字节被用于存储程序调用栈等其他内部变量使用。
2.寄存器(Registers)
CHIP-8有16个8位寄存器,他们的名字从V0到VF。VF寄存器为标志寄存器,可用于标记计算结果溢出或者像素碰撞检测等。此外还有一个16位地址寄存器I,与涉及内存操作的指令。
3.栈(Stack)
栈(stack)用于保存子程序被调用时返回的地址。现代解释器要求至少有16层嵌套,即32字节。
4.定时器(Timers)
CHIP-8有两个寄存器。他们通常以60HZ的速度递减至0为止。
一、延时寄存器(Delay timer)
该计时器被设计用于定时游戏事件,它的值可以被读写。
二、声音寄存器(Sound timer)
该寄存器被设计用于声音事件,当它为非零值时,蜂鸣器保持发声。
5.输入(Input)
输入通常采用十六进制键盘(hex keyboard),16个键的范围为0到F,'8','4','6','2'四个键通常被用于方向输入。检测输入的指令有三个,1:当按键被按下跳过一个指令 2:如果按键没有按下跳过一个指令 3.等待按键,并在寄存器中存入值。
6.图形和声音(Graphics and sound)
CHIP-8的分辨率通常为64x32像素(pixel),颜色为黑白。图形通过绘制图形精灵(sprites)显示,图形精灵通常为8像素宽,1到15像素高。绘制精灵像素时会与此时的屏幕像素进行异或(XOR)操作,即精灵会翻转对应位置屏幕的像素。如果绘制精灵时将屏幕像素由1翻转为0,VF就会设置为1,这就是碰撞检测。
如上面的声音寄存器所述,蜂鸣器会一直响着,只要声音寄存器中的值不为0。
参考文献:CHIP-8 - Wikipedia
chip8模拟器的python3实现-1-CHIP8简介的更多相关文章
- chip8模拟器的python3实现-2-指令介绍
CHIP指令表 CHIP-8有35个指令,都为两字节长,以大端方式存储.指令表的指令格式规定如下: NNN:地址 NN:8位常量 N:4位常量 V:寄存器 X和Y:4位,标识寄存器 PC:程序计数器 ...
- CHIP8模拟器的python3实现-3-指令实现
class Chip8CPU(object): def __init__(self, screen): self.registers = { 'v': [], 'index': 0, 'pc': 0, ...
- Python3.x:生成器简介
Python3.x:生成器简介 概念 任何使用yield的函数都称之为生成器:使用yield,可以让函数生成一个序列,该函数返回的对象类型是"generator",通过该对象连续调 ...
- 正则表达式:Python3中的应用简介
正则表达式:Python3中的应用简介 一.正则表达式 1,概述 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学 ...
- C++版 Chip8游戏模拟器
很早就想写个FC模拟器,但真是一件艰难的事情.. 所以先写个Chip8模拟器,日后再继续研究FC模拟器. Chip8只有35条指令,属于RISC指令集,4k内存,2k显存,16个寄存器(其中15个通用 ...
- 如何实现模拟器(CHIP-8 interpreter) 绝佳杰作.
转自 http://www.multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/ How to write an ...
- python3与Redis连接操作
Python3之redis使用 简介 redis是一个key-value存储系统,和Memcache类似,它支持存储的value类型相对更多,包括string(字符串),list(链表),set( ...
- 原创:从零开始,微信小程序新手入门宝典《一》
为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...
- Python中urlopen()介绍
#以下介绍是基于Python3.4.3 一. 简介 urllib.request.urlopen()函数用于实现对目标url的访问. 函数原型如下:urllib.request.urlopen( ...
随机推荐
- java 的Date 日期相关操作
String 与 Date互转(1)基于SimpleDateFormat实现: package com.bky.df; import java.text.ParseException; import ...
- POJ1083 Moving Tables
POJ1083 Moving Tables Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35297 Accepted: ...
- git 推送远程仓库和删除远程仓库文件
提交到远程仓库需要现在GitHub或gitlab上创建项目,然后才能连接到远程仓库 1.连接远程仓库 # git remote add origin https://github.com/xxxxx ...
- hash加密
hash import hashlib content = 'its so coll'.encode('utf8') o = hashlib.sha1() # 创建一个hash对象 o.update( ...
- 002.[python学习]python编码规范pep8学习——PEP8第一部分代码布局
关于PEP8的详细说明可以参考官方原文:http://legacy.python.org/dev/peps/pep-0008/ 我参考官方文档及其他文章,摘出相关内容而得此文章,具体参考其他文章见文中 ...
- 艾奇学院:66个信息流广告和SEM学习网址资源大放送!
01.CNZZ-UDplus 网址:udplus.umeng.com 说明:基于用户行为的精细化分析.运营平台,去研究研究,很多料! 02.黑眼圈管理后台 网址:www.not3.com 说明:二类电 ...
- PG数据库——视图
视图(View)是从一个或多个表(或视图)导出的表.视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义 ...
- javaweb复习(一)
学习网站开发一般都是3部走.1.基本的servlet.jsp.js.html的内容学习.2.ssm.ssh之类的框架学习.3.大型网站开发的框架和技术学习(目前我还没学到),我学习这部分主要的书是李兴 ...
- SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)
1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...
- java并发编程概念
并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其 ...