CHIP8模拟器的python3实现-1-CHIP8简介

1.CHIP-8简介

CHIP-8是由Joseph Weisbecker开发,使用晶振频率为1.76MHZ的8位处理器(1802),可发出一个修正过的音调,数据存储在磁带存储器中。CHIP-8在上个世纪70年代被使用在COSMAC-VIP和Telmac 1800上。许多游戏如Pong,Space Invaders,Tetris都曾使用该语言编写。有一个更强的CHIP-8版本叫做SUPER-CHIP,它包含CHIP-8的全部特性,并且多支持了128*64分辨率。


 

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字节被用于存储程序调用栈等其他内部变量使用。

地址范围(HEX)功能
0000-003F栈(stack)
0040-004C暂存器(Scrathpad)0040H-固件版本(2 bytes) 0048H-EEPROM唯一ID(8 bytes)
004D-00FF未使用
0100-01FF显示(Display)
0200-0FFF程序(Program area)

 

2.数据寄存器(Data Registers)

CHIP-8有16个8位寄存器,他们的名字从V0到VF,他们可用于算术逻辑计算指令或条件指令。VF寄存器为标志寄存器,可用于标记计算结果溢出或者像素碰撞检测等。


 

3.地址寄存器(Address register)

只有一个16位地址寄存器I,当内存大小为4KB时,CHIP8解释器只使用其中的12位。它可以用于存储读取指令或显示指令。


 

4.栈(Stack)

栈(stack)用于保存子程序被调用时返回的地址。其允许有16层嵌套,即栈的大小为32字节。


 

5.定时器(Timers)

CHIP-8有两个寄存器。他们通常以60HZ的速度递减至0为止。

1)延时寄存器(Delay timer)

该计时器被设计用于定时游戏事件,它的值可以被读写。

2)声音寄存器(Sound timer)

该寄存器被设计用于声音事件,当它为非零值时,蜂鸣器保持发声。


 

6.输入(Input)

输入通常采用十六进制键盘(hex keyboard),16个键的范围为0到F,'8','4','6','2'四个键通常被用于方向输入。

123C
456D
789E
A0BF

检测输入的指令类型有三种:

1:当按键被按下跳过一个指令。

2:如果按键没有按下跳过一个指令。

3:等待按键,并在寄存器中存入值。


 

7.图形和声音(Graphics and sound)

CHIP-8的分辨率通常为64*32像素(pixel),也存在64*48和64*64分辨率,像素颜色为黑白。

(0,0)(0,63)
(63,0)(63,63)

图形通过绘制图形精灵(sprites)显示,图形精灵通常为8*15像素。屏幕的原点时左上角,所有坐标都是正数,X坐标通过被64取模计算,Y坐标通过被32取模计算。

绘制精灵像素时会与此时的屏幕像素进行异或(XOR)操作,即精灵会翻转对应位置屏幕的像素。如果绘制精灵时将屏幕像素由1翻转为0,VF就会设置为1,这就是碰撞检测。

CHIP8使用8*5像素的十六进制字体来绘制字符,字符为0-9和A-F,字体数据存储在(0x000 - 0x1FF)。

 

CHIP8只有一种声音,如上面的声音寄存器所述,只要声音寄存器中的值不为0,蜂鸣器就会一直响着。


 

8.SCHIP模式(SUPER-CHIP)

SCHIP是经过扩展的CHIP-8解释器,它提供128*64的分辨率。它还提供8*10的十进制字体和一个16*16的精灵,它们的绘制方法和在CHIP-8上相同。SCHIP含有一些新指令,有些指令只能在SCHIP模式上运行,指令如下。

00Cn - SCD nibble

00FB - SCR

00FC - SCL

00FD - EXIT

00FE - LOW

00FF - HIGH

Dxy0 - DRW Vx, Vy, 0

Fx30 - LD HF, Vx

Fx75 - LD R, Vx

Fx85 - LD Vx, R

参考文献:CHIP-8 - Wikipedia

转载于:https://www.cnblogs.com/hwnzy/p/10748284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值