基本概念介绍
要做mapper功能的FPGA开发,需要明白mapper,board type,mmc的基本概念和功能。
mapper就是memory map。
为什么要memory map?因为红白机是8位机,16bit地址总线,CPU的最大访问空间是64K,CPU内存空间的一半0-0x7FFF作为寄存器等其他功能使用。从0x8000-0xFFFF就是PRG-ROM空间了。ROM大小是32KB。
一开始游戏比较小,这些空间够用,后来越来越大,怎么使用呢?任天堂就开发了mmc芯片(内存管理控制)。把ROM分成各个bank,用的时候切换到0x8000-0xFFFF中,让CPU可以访问。任天堂即卖游戏,又卖mmc芯片给第三方游戏制作商(根据功能,mmc芯片有很多版本,常见的有mmc1,mmc3,mmc5)。其他厂商为了降低成本,自己又制作了类似mmc功能的芯片,如VRC系列,FME系列,Sunsoft系列 。盗版卡厂商拿不到任天堂的mmc芯片,所以就破解了芯片功能之后,用74系列逻辑器件去实现相同的功能。或者直接制作一样功能的mmc芯片,比如在盗版卡上常见的MMC3盗版芯片AX5202。台湾芯片厂商的早年发家史。在FC后期,更强大的mmc芯片,比如FME-7等。盗版厂商没有那个实力,另外FC很快被SFC替代,都没有相应的盗版。所以有些大作没有盗版实体卡。
board(board type/board name):看下面图片,PCB上有SLROM字样。任天堂的制作的正版卡上有board name,下面这块卡是飞狼游戏卡。左上角是MMC芯片(型号:MMC1A)
mapper number,board name, mmc芯片这三者的关系
FC模拟器开发者(NES社区)需要在PC上运行模拟器加载游戏。这些游戏文件都是.nes后缀名。
都是通过游戏读卡器从游戏卡的rom中读出来存档的。
如何让模拟器识别是哪个游戏,如何仿真游戏机的加载rom机制呢?为了满足这样需求,nes文件的开始加了个NES文件头(16个字节)。下图的软件就可以分析nes文件头。吞食天地2是mapper 3。
下面的链接详细说明了iNES file format。
文件头Byte6的高4为就是存放游戏的mapper号。最多255个。
mapper号怎么来的呢?
这个号就是模拟器社区根据游戏卡的board name编的号(有些多个board用一个号是因为mapper一致),见下图(mapper 0-255)。图标显示了相应的信息,比如游戏卡制作厂商,盗版卡上扒下rom。
由于正版卡有很多board,盗版卡也有很多board,这些号不够怎么办呢?又有了iNES 2.0来增加mapper号。
所以要让FPGA实现所有的mapper号,工作量太大,一是多,二是资料(盗版卡)不全。
能制作一个支持正版卡厂商的mapper号,或者国内厂商(包括台湾)的几款常见的游戏卡就可以了。