前言:
此刻小伙伴们对“c11 结构体初始化”大体比较讲究,朋友们都需要知道一些“c11 结构体初始化”的相关资讯。那么小编也在网摘上收集了一些有关“c11 结构体初始化””的相关内容,希望你们能喜欢,大家快快来学习一下吧!上期教程:
程序架构
有了对chip-8的了解后,编写模拟器的话就很容易了。
程序的大体逻辑就是:
初始化cpu,内存,gfx等,读取rom模拟cpu运行周期,解析rom里的指令,执行相应操作。初始化
首先是对cpu的模拟:
struct { unsigned short opcode; //操作码 unsigned char v[16]; //v0-vf寄存器 unsigned short index; //index寄存器 unsigned short pc; //程序计数器 unsigned short sp; //栈顶指针} cpu;
以及4096字节大小的内存块,用数组即可:
unsigned char memory[4096] = { 0 };
chip-8的屏幕分辨率大小是64x32,所以:
unsigned char gfx[64 * 32] = { 0 };
chip-8还有两个计时器:
unsigned char delayTimer;unsigned char soundTimer;
以及栈:
unsigned short stack[16] = { 0 }; //注意chip-8的操作码大小为两个字节
关于按键状态我们也定义一个数组:
unsigned char key[16] = { 0 }; //一共16个按键
然后就是字符集,chip-8用80字节大小存放字符集(0-F),每个字符占4像素宽,5像素高:
unsigned char fontset[80] = { 0xF0, 0x90, 0x90, 0x90, 0xF0, // 0 0x20, 0x60, 0x20, 0x20, 0x70, // 1 0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2 0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3 0x90, 0x90, 0xF0, 0x10, 0x10, // 4 0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5 0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6 0xF0, 0x10, 0x20, 0x40, 0x40, // 7 0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8 0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9 0xF0, 0x90, 0xF0, 0x90, 0x90, // A 0xE0, 0x90, 0xE0, 0x90, 0xE0, // B 0xF0, 0x80, 0x80, 0x80, 0xF0, // C 0xE0, 0x90, 0x90, 0x90, 0xE0, // D 0xF0, 0x80, 0xF0, 0x80, 0xF0, // E 0xF0, 0x80, 0xF0, 0x80, 0x80 // F };
比如字符0:
16进制 2进制0xF0 1111 0000 ####0x90 1001 0000 # #0x90 1001 0000 # #0xF0 1111 0000 ####
接下来,让我们对cpu进行初始化:
cpu.pc = 0x200; //chip-8程序从0x200位置开始 cpu.opcode = 0; cpu.index = 0; cpu.sp = 0;
我们的字符集要加载到内存里面,所以:
for (int i = 0; i < 80; i++) { memory[i] = fontset[i]; }
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c11 结构体初始化