游戏和女朋友谁重要?当然是游戏(手动狗头),游戏是每一个时代的记忆,从最早的LED点阵上的游戏发展到LED屏,同时游戏也不断的推动着计算机的发展,现在,时代已经过去,游戏机除了在古董市场,已经无从获得,但是我们可以通过VM技术去重新构建一个借助虚拟化技术可玩的设备,追逐旧梦。 本系列将结合前面的Python VM系列虚拟机将知识融会贯通,总结一下伟大的虚拟化技术。
要入手一个模拟器,首先得从如何解析.nes的游戏文件开始。 iNES 文件(拓展名 .nes,大小写均可)是 NES 游戏分发的事实标准。该文件标准的最初是由 Marat Fayzullin 为其模拟器 iNES 而开发的文件格式。 |0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | |N | E | S | ^Z | PRG | CHR | MAP/SW |MAP/0(always)| |4E | 45 | 53 | 1A |10 | 20 | E1 | 40|
C++中我们可以定义一个读取文件头的结构体
const NESMagicMumber = 0x1a53454e //"NES^Z"
typedef struct _NesHeader{
uint32_t MagicNumber;// NES Magic Number,must be 0x1a53454e
char PRGNum; // PRG-ROM banks number
char CHRNum; // CHR-ROM banks number
char Ctrl1; // Control
char Ctrl2; // Control too
char RAMNum; // RAM number (8KB each)
char[7] _null; // Empty bytes. Not used at this tume but MUST BE ALL ZEROS or games will not work.
}NesHeader
参考资料: