《任天堂产品系统文件.docx》由会员分享,可在线阅读,更多相关《任天堂产品系统文件.docx(30页珍藏版)》请在第一文库网上搜索。
1、任天堂产品系统文件目录1、系统简介任天堂主机由6502处理器与一个特制的图形处理器构成。CPU是6502,而不是传言中的65C02(CMOS)OPPU的显存是与CPU的内存是分离的,能够通过对特殊端口的读/写来操作。卡带可能包含的内容有位于处理器地址$8000-$FFFF的ROM,与位于PPU地址$0000-$IFFF的VROM。由于NES只有2K的RAM,因此变量的可用的变量空间只有从$0000至IJ$07FF共8个页面。在开机之后RAM与VRAM中的内容是0,但是注意:复位并不改变其中的内容。在更小的卡带,比如只有16KB的RoM,它占有$CoOOVFFFF,而$8000-$BFFF的空间
2、是不用的。那些大于32KB的卡带,它被特殊的电路分页到一定的地址空间。一些卡带在$6000-$7FFF有SRAM,那是电池存储的位置。卡带VRoM被用来做图案表(比如Ti1e表,角色发生器等等)。通常的数量是8KB,包含两个图案表。大于8KB的VROM被特殊的电路分页到一定的地址空间。内部的VRAM在PPU内存里定位于$2000-$3FFF,它用来存储命名表(比如屏幕缓冲)。尽管PPU支持4个命名表,但只能支持两个的存放空间。另外的两个是开始两个的镜像。NES共有154条指令O在本土本里,你将遇到如下形式的符号:“Dn(5位,3位,等等)。位是按从最低位(0位)到最高位(7位)。所有的十六进制
3、都在前面加上一个美圆符号($)($2002,$4026,等等)是在6502处理器汇编里常用的符号,二进制前面加上一个百分号。2、缩写表NES任天堂娱乐系统Famicom任天堂家用计算机,即FCFDS任天堂磁碟机系统CPU中央处理器,NES使用一个定制的6502(NMOS)芯片,有些型号为6527PPU图像处理器,用来处理背景,精灵与其他图像特性,通常为6538APU声音处理器,集合在CP1J内部,包含4个模拟通道与1个数字通道MMCROM与VROM的扩容操纵,用来操纵访问超过6502限制的64K地址,同样,也能够扩容VROMVRAM图像RAM,PPU专用,2K字节VROM图像ROM,储存图像数
4、据的地方,能够由MMC切换到VRAM里ROM程序ROM,实际程序储存的地方,扩容部分能够通过MMC切换到PRG-RAM里RAM程序RAM,与ROM同义,不一致的是它是RAMSPR-RAM精灵RAM,RAM中的256字节,专用于储存精灵,它不属于VRAM或者ROMSRAM电池RAM,卡带上用来储存游戏记录的EPROM-电擦写ROMDMC三角波调制通道,APU用来处理数字声音的,也写作PCM通道EX-RAM扩展VRAM,用在MMC5里,能够扩展VRAM容量3、中央处理器NES定制的6502内部特别加上了声音处理单元。NTSC制式的NES使用1.7897725MHz主频,PA1制式使用1.77344
5、7MHz主频。CPU内存映像:开始地址用途结束地址$00002K字节RAM,做4次镜象(即$字00-$07FF可用)$1FFF$2000寄存器$2007$2008寄存器($2000-$2008的镜像,每8个字节镜像一次)$3FFF$4000寄存器$401F$4020扩展ROM$5FFF$6000卡带的SRAM(需要有电池支持)$7FFF$8000卡带的下层RoM$BFFFSCOOO卡带的上层ROM$FFFF中断:6502有3个中断IRQ/BRK、NM1与RESET,每个中断都有一个16位的向量,即指针,用来存放该中断发生时中断服务函数的地址。中断发生时CPU都会把状态标志与返回地址压栈,然后调
6、用中断服务程序。IRQ/BRK中断由一下两种情况产生:一是软件通过BRK指令产生,一是硬件通过IRQ引脚产生。RESET在开机的时候触发,这是ROM被装入,6502跳到RESET向量指向的地址没有寄存器被修改,没有内存被清空,这些都只在开机是发生。NM1指不可屏蔽中断,它在VBIank即屏幕刷新时发生,持续时间根据系统(NTSC/PA1)不一致而不一致。NTSC是每秒60次,而PA1是每秒50次。6502的中断延时是7个时钟周期,也就是说,进入与离开中断都需要7个时钟周期。它产生于PPU的每一帧结束,NM1中断能够由$2000的第7位的1/0操纵同意/禁止。大部分中断应该使用RT1指令返回,但
7、是有些游戏不用,比如最终幻想1。它用一个很惊奇的方式:手工修改堆栈指针,然后执行RTS指令。这种方法在技术上是可行的,但是应该尽量避免。以上中断在ROM内有下列对应的地址:中断地址中断优先权$FFFANMI中$FFFCRESET高$FFFEIRQ/BRK低特别说明:NES的6502不支持10进制。尽管C1D与SED指令都正常工作,但是ADC与SBC都不使用CPU状态标志的“D”位。由于复位后“D”位的状态是不确定的,因此游戏通常在程序开始时使用一个C1D指令。声音寄存器映射到CPU内部,所有波形发生的工作都在CPU内部完成。注意那两个分开的16KRoM段,它们可能是连续的,但是它们根据卡带的大
8、小扮演不一致的角色。有的卡带只有一个16KROM,那么它就同时被装入$8000与SCOOOo所有游戏都将它们自己装入$8000,使用32KRAM,但是它们都能够通过内存映射把多于一个16KROM装入$8000。VROM也是同样的道理。当BRK中断发生的时候,CPU把状态标志压入堆栈,同时设置“B”标志。而IRQ中断发生时,CPU把状态标志压入堆栈,同时清除“B”标志。这是由于6502使用同一个向量来处理两种中断,用“B”标志来区分它们。你能够用下列程序来区别两种中断:C134:P1A;拷贝CPU状态标志到AC135:PHA;把状态标志还回给堆栈C136:AND#$10;检查“B”标志C138:
9、BNEisBRKopcode;假如设置了,就是软件中断(BRK)在NM1里指向BRK会导致巨经被压栈的“B”标志被设置。6502的$6C指令(间接绝对跳转)有一个BUG,当低位字节是$FF时CPU将不能正确计算有效地址。比如:C100:4FC1FF:00C200:23D000:6CFFC1-JMP(JC1FF)本来它是应该跳到$2300的,但是在计算高位字节的时候,在页面边界处地址是不能再增加的,因此实际将跳转到$4F00。需要注意的是,页面越界不可能在变址间接寻址模式发生。由于0页面的限制,由于0页面的限制,所有变址间接寻址的读写都应该在计算有效地址之后与#$FF进行逻辑与操作。比如:C00
10、0:1DX#3;从$0002+$0003读变址地址,C002:1DA($FF,X);不是$0102+$0103.4、图形处理器PPU时序:NTSC制式PA1制式基频(BaSec1ock)21477270.OHz21281364.OHzCPU主频(Cpuc1ock)1789772.5Hz1773447.OHz总扫描线数(Tota1scan1ines)262312扫描线总周期(Scan1inetota1cyc1es)1364(15.75KHz)1362(15.625KHz)水平扫描周期(H-DraWcyc1es)10241024水平空白周期(H-B1ankcyc1es)340338结束周期(End
11、cyc1es)42帧周期(Framecyc1es)1364*2621362*312帧IRQ周期(FrameIRQcyc1es)2983035469帧率(Framerate)60(59.94Hz)50Hz帧时间(Frameperiod)1000.0/60.0(ms)1000.0/50.0(ms)镜像是指通过硬件映射特殊的内存地址或者范围的一个过程。PPU内存映像:开始地址用途结束地址$0000图案表0(256x2x8,可能是VRoM)$0FFF$1000图案表1(256x2x8,可能是VROM)S1FFF$2000命名表0(32x30块)(镜像,见命名表镜像)$23BF$23C0属性表0(镜像,
12、见命名表镜像)$23FF$2400命名表1(32x30块)(镜像,见命名表镜像)$27BF$27C0属性表1(镜像,见命名表镜像)$27FF$2800命名表2(32x30块)(镜像,见命名表镜像)$2BBF$2BC0属性表2(镜像,见命名表镜像)$2BFF$2C00命名表3(32x30块)(镜像,见命名表镜像)$2FBF$2FC0属性表3(镜像,见命名表镜像)$2FFF$3000$2000-$2EFF的镜像$3EFF$3FoO背景调色板#1$3FoF$3F10精灵调色板#1$3F1F$3F20镜像,(见调色板镜像)$3FFF$4000$0000-$3FFF的镜像$7FFF命名表:NES的图像通
13、过TiIe矩阵来显示,这个网格就叫命名表。一个命名表与字符模式下的屏幕缓冲比较相象,它包含字符的代码,也就是30列的32Byte长度。每个Ti1e有8x8个象素,每个命名表有32x30个Ti1e,也就是256x240象素。PPU支持4个命名表,他们在$2000,$240命$2800,$2C00。在NTSC制式下,上面与下面的8象素通常不显示出来,只有256x224象素;在PA1制式下,屏幕有256x240象素。需要说的是,尽管PPU支持4个命名表,任天堂主机只支持2个命名表。另外两个被做了镜像。命名表储存了TiIe的编号,而Ti1e存在图案表里。计算命名表里Ti1e号对应的实际地址的公式是:(
14、Ti1e号X16)+由$20号端口指定的图案表地址命名表镜像:NES只有2048字节($800)的VRAM给命名表使用,但是如前表所示,NES有能力寻址到4个命名表。缺省情况下,NES卡带都带有水平与垂直镜像,同意你改变命名表指向PPU的VRAM位置。这种方式同时影响两个命名表,你不能单独改变其中的一个。每个卡带都操纵着PPU地址线的A1O与A11。它可能将他们设置成下列4种可能的方式的1种。下面这个图表有助于懂得NES里的各类镜像,指向PPUVRAM中命名表的12位地址相当于$2xxxx”:名字命名表#0命名表#1名#2命表命名表#3说明地址线AI1地址线A1O$000$000$400$40010垂直$000$800$000$800014屏幕镜像$000$400$800SCOO卡带里有2KVRAM,4个命名表物理上独立的11单屏幕$xoo$X00$X00SXOO所有的命名表指相同的VRAM区域,X=0、4、8、C00VROM镜像Mapper68#游戏映射VRoM到PPUVRAM的命名表,这使得命名表是基于VROM的,你不能写它但却能够通过mapper自己来操纵是否使用这种特性图案表:图案表储存了实际8x8象素的TiIe,同时也储存了用来指向NES调色板全部16种颜色的4位元矩阵的低两位。PPU支持两个图案表在$0000与$1