




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、任天堂产产品系统统文件(Pm 译、编 220022/100/100)目录 HYPERLINK /fc/nessys.htm#1、系统简介 l 1、系统简介 1、系系统简介介 HYPERLINK /fc/nessys.htm#2、缩写表 l 2、缩写表 2、缩写表表 HYPERLINK /fc/nessys.htm#3、中央处理器 l 3、中央处理器 3、中央处处理器 HYPERLINK /fc/nessys.htm#4、图形处理器 l 4、图形处理器 4、图图形处理理器 HYPERLINK /fc/nessys.htm#5、声音处理器 l 5、声音处理器 55、声音音处理器器 HYPERLIN
2、K /fc/nessys.htm#6、手柄、控制器和扩展口 l 6、手柄、控制器和扩展口 6、手柄、控制器器和扩展展口 HYPERLINK /fc/nessys.htm#7、内存映射硬件 l 7、内存映射硬件 77、内存存映像硬硬件 HYPERLINK /fc/nessys.htm#8、I/O端口 l 8、I/O端口 88、I/O端口口 HYPERLINK /fc/nessys.htm#9、NES文件格式 l 9、NES文件格式 9、NESS文件格格式 HYPERLINK /fc/nessys.htm#10、任天堂磁碟机系统 l 10、任天堂磁碟机系统 110、任任天堂磁磁碟机系系统_ 1、系
3、统统简介任天堂主主机由665022处理器器和一个个特制的的图形处处理器组组成。CCPU是是65002,而而不是传传言中的的65CC02(CMOOS)。PPUU的显存存是和CCPU的的内存是是分离的的,可以以通过对对特殊端端口的读读/写来来操作。卡带可可能包含含的内容容有位于于处理器器地址$80000-$FFFFF的RROM,和位于于PPUU地址$00000-$1FFFF的VVROMM。由于于NESS只有22K的RRAM,因此变变量的可可用的变变量空间间只有从从$00000到到$077FF共共8个页页面。在在开机之之后RAAM和VVRAMM中的内内容是00,但是是注意:复位并并不改变变其中的的内
4、容。在更小小的卡带带,比如如只有116KBB的ROOM,它它占有$C0000-$FFFFF,而而$80000-$BFFFF的的空间是是不用的的。那些些大于332KBB的卡带带,它被被特殊的的电路分分页到一一定的地地址空间间。一些些卡带在在$60000-$7FFFF有有SRAAM,那那是电池池存储的的位置。卡带VVROMM被用来来做图案案表(例例如 TTilee 表, 角色色发生器器等等)。通常常的数量量是8KKB,包包含两个个图案表表。大于于8KBB 的VVROMM被特殊殊的电路路分页到到一定的的地址空空间。内内部的VVRAMM在 PPPU 内存里里定位于于$20000-$3FFFF,它用来来
5、存储命命名表(例如屏屏幕缓冲冲)。虽虽然PPPU 支支持4个个命名表表,但只只能支持持两个的的存放空空间。另另外的两两个是开开始两个个的镜像像。NEES共有有1544条指令令。在本本文本里里,你将将遇到如如下形式式的符号号:“DDn (5 位,33 位,等等)。位是是按从最最低位(0 位位)到最最高位(7 位位)。所所有的十十六进制制都在前前面加上上一个美美圆符号号($)($220022,$440266,等等等)是在在65002处理理器汇编编里常用用的符号号,二进进制前面面加上一一个百分分号%。 2、缩写写表NES 任天堂娱娱乐系统统 Famiicomm 任天堂家家用计算算机,即即FC FDS
6、 任天堂磁磁碟机系系统 CPU 中央处理理器,NNES使使用一个个定制的的65002(NNMOSS)芯片片,有些些型号为为65227 PPU 图像处理理器,用用来处理理背景,精灵和和其他图图像特性性,通常常为65538 APU 声音处理理器,集集合在CCPU内内部,包包含4个个模拟通通道和11个数字字通道 MMC ROM和和VROOM的扩扩容控制制,用来来控制访访问超过过65002限制制的644K地址址,同样样,也可可以扩容容VROOM VRAMM 图像RAAM,PPPU专专用,22K字节节 VROMM 图像ROOM,储储存图像像数据的的地方,可以由由MMCC切换到到VRAAM里 ROM 程序
7、ROOM,实实际程序序储存的的地方,扩容部部分可以以通过MMMC切切换到PPRGRAMM里 RAM 程序RAAM,和和ROMM同义,不同的的是它是是RAMM SPRRAMM 精灵RAAM,RRAM中中的2556字节节,专用用于储存存精灵,它不属属于VRRAM或或ROMM SRAMM 电池RAAM,卡卡带上用用来保存存游戏记记录的EEPROOM电电擦写RROM DMC 三角波调调制通道道,APPU用来来处理数数字声音音的,也也写作PPCM通通道 EXRRAM 扩展VRRAM,用在MMMC55里,可可以扩展展VRAAM容量量 3、中央央处理器器NES定定制的665022内部特特别加上上了声音音处理
8、单单元。NNTSCC制式的的NESS使用11.788977725MMHz主主频,PPAL制制式使用用1.77734447MMHz主主频。CCPU内内存映像像:开始地址址 用途 结束地址址 $00000 2K字节节RAMM,做44次镜象象(即$00000-$07FFF可用用) $1FFFF $20000 寄存器 $20007 $20008 寄存器($20000-$20008的的镜像,每8个个字节镜镜像一次次) $3FFFF $40000 寄存器 $4011F $40220 扩展ROOM $5FFFF $60000 卡带的SSRAMM(需要要有电池池支持) $7FFFF $80000 卡带的下下层
9、ROOM $BFFFF $C0000 卡带的上上层ROOM $FFFFF 中断:665022有3个个中断IIRQ/BRKK、NMMI和RRESEET,每每个中断断都有一一个166位的向向量,即即指针,用来存存放该中中断发生生时中断断服务函函数的地地址。中中断发生生时CPPU都会会把状态态标志和和返回地地址压栈栈,然后后调用中中断服务务程序。IRQQ/BRRK中断断由一下下两种情情况产生生:一是是软件通通过BRRK指令令产生,一是硬硬件通过过IRQQ引脚产产生。RRESEET在开开机的时时候触发发,这是是ROMM被装入入,65502跳跳到REESETT向量指指向的地地址没有有寄存器器被修改改,没
10、有有内存被被清空,这些都都只在开开机是发发生。NNMI指指不可屏屏蔽中断断,它在在VBllankk即屏幕幕刷新时时发生,持续时时间根据据系统(NTSSC/PPAL)不同而而不同。NTSSC是每每秒600次,而而PALL是每秒秒50次次。65502的的中断延延时是77个时钟钟周期,也就是是说,进进入和离离开中断断都需要要7个时时钟周期期。它产产生于PPPU的的每一帧帧结束,NMII中断可可以由$20000的第第7位的的1/00控制允允许/禁禁止。大大部分中中断应该该使用RRTI指指令返回回,但是是有些游游戏不用用,例如如最终终幻想11。它它用一个个很奇怪怪的方式式:手工工修改堆堆栈指针针,然后后
11、执行RRTS指指令。这这种方法法在技术术上是可可行的,但是应应该尽量量避免。以上中中断在RROM内内有以下下对应的的地址: 中断地址址 中断 优先权 $FFFFA NMI 中 $FFFFC RESEET 高 $FFFFE IRQ/BRKK 低 特别说明明:NEES的665022不支持持10进进制。虽虽然CLLD和SSED指指令都正正常工作作,但是是ADCC和SBBC都不不使用CCPU状状态标志志的“DD”位。由于复复位后“D”位位的状态态是不确确定的,所以游游戏通常常在程序序开始时时使用一一个CLLD指令令。声音音寄存器器映射到到CPUU内部,所有波波形发生生的工作作都在CCPU内内部完成成。
12、注意意那两个个分开的的16KK ROOM段,它们可可能是连连续的,但是它它们根据据卡带的的大小扮扮演不同同的角色色。有的的卡带只只有一个个16KK ROOM,那那么它就就同时被被装入$80000和$COOOO。所所有游戏戏都将它它们自己己装入$80000,使使用322K RRAM,但是它它们都能能够通过过内存映映射把多多于一个个16KK ROOM装入入$80000。VROOM也是是同样的的道理。当BRRK中断断发生的的时候,CPUU把状态态标志压压入堆栈栈,同时时设置“B”标标志。而而IRQQ中断发发生时,CPUU把状态态标志压压入堆栈栈,同时时清除“B”标标志。这这是因为为65002使用用同
13、一个个向量来来处理两两种中断断,用“B”标标志来区区分它们们。你可可以用以以下程序序来区别别两种中中断: C1334: PLAA ; 拷贝贝CPUU状态标标志到AA C1135: PHHA ; 把把状态标标志还回回给堆栈栈 C1136: ANND #$100 ; 检检查“BB”标志志 C1138: BNNE iis_BBRK_opccodee; 如如果设置置了,就就是软件件中断(BRKK)在NNMI里里指向BBRK会会导致已已经被压压栈的“B”标标志被设设置。665022的$66C指令令(间接接绝对跳跳转)有有一个BBUG,当低位位字节是是$FFF时CPPU将不不能正确确计算有有效地址址。例如
14、如: CC1000: 44F CC1FFF: 000 CC2000: 223 . DD0000: 66C FFF CC1 - JMMP ($C11FF)本来它它是应该该跳到$23000的,但是在在计算高高位字节节的时候候,在页页面边界界处地址址是不能能再增加加的,所所以实际际将跳转转到$44F000。需要要注意的的是,页页面越界界不会在在变址间间接寻址址模式发发生。由由于0页页面的限限制,由由于0页页面的限限制,所所有变址址间接寻寻址的读读写都应应该在计计算有效效地址之之后和#$FFF进行逻逻辑与操操作。例例如: C0000: LDXX #33 ; 从从 $000022+$000033 读变变
15、址地址址, CC0022: LLDA ($FFF,XX) ; 不是是 $001022+$001033._ 4、图形形处理器器PPU时时序:NTSCC制式PAL制制式基频(BBasee cllockk)2147772770.00Hz2128813664.00HzCPU主主频(CCpu cloock)178997722.5HHz177334477.0HHz总扫描线线数(TTotaal sscannlinnes)262312扫描线总总周期(Scaanliine tottal cyccless)13644(155.755KHzz)13622(155.6225KHHz)水平扫描描周期(H-DDraww
16、cyyclees)1024410244水平空白白周期(H-BBlannk ccyclles)340338结束周期期(Ennd ccyclles)42帧周期(Fraame cyccless)13644*266213622*3112帧IRQQ周期(FraameIIRQ cyccless)298330354669帧率(FFramme rratee)60(559.994Hzz)50Hzz帧时间(Fraame perriodd)10000.0/60.0(mms)10000.0/50.0(mms)镜像是指指通过硬硬件映射射特殊的的内存地地址或范范围的一一个过程程。PPPU内存存映像:开始地址址 用途 结束
17、地址址 $00000 图案表00(2556x22x8,可能是是VROOM) $0FFFF $10000 图案表11(2556x22x8,可能是是VROOM) $1FFFF $20000 命名表00(322x300块)(镜像,见命名名表镜像像) $23BBF $23CC0 属性表00(镜像像,见命命名表镜镜像) $23FFF $24000 命名表11(322x300块)(镜像,见命名名表镜像像) $27BBF $27CC0 属性表11(镜像像,见命命名表镜镜像) $27FFF $28000 命名表22(322x300块)(镜像,见命名名表镜像像) $2BBBF $2BCC0 属性表22(镜像像,
18、见命命名表镜镜像) $2BFFF $2C000 命名表33(322x300块)(镜像,见命名名表镜像像) $2FBBF $2FCC0 属性表33(镜像像,见命命名表镜镜像) $2FFFF $30000 $20000-$2EFFF的镜镜像 $3EFFF $3F000 背景调色色板#11 $3F00F $3F110 精灵调色色板#11 $3F11F $3F220 镜像,(见调色色板镜像像) $3FFFF $40000 $00000-$3FFFF的镜镜像 $7FFFF 命名表:NESS的图像像通过TTilee矩阵来来显示,这个网网格就叫叫命名表表。一个个命名表表和字符符模式下下的屏幕幕缓冲比比较相象
19、象,它包包含字符符的代码码,也就就是300列的332Byyte长长度。每每个Tiile有有8x88个象素素,每个个命名表表有322x300个Tiile,也就是是2566x2440象素素。PPPU支持持4个命命名表,他们在在$20000,$24400,$28800,$2CC00。在NTTSC制制式下,上面和和下面的的8象素素通常不不显示出出来,只只有2556x2224象象素;在在PALL制式下下,屏幕幕有2556x2240象象素。需需要说的的是,虽虽然PPPU支持持4个命命名表,任天堂堂主机只只支持22个命名名表。另另外两个个被做了了镜像。命名表表保存了了Tille的编编号,而而Tille存在在
20、图案表表里。计计算命名名表里TTilee号对应应的实际际地址的的公式是是:(TTilee号116)由$220000端口指指定的图图案表地地址 命名表镜镜像:NNES只只有20048字字节($8000)的VVRAMM给命名名表使用用,但是是如前表表所示,NESS有能力力寻址到到4个命命名表。缺省情情况下,NESS卡带都都带有水水平和垂垂直镜像像,允许许你改变变命名表表指向PPPU的的VRAAM位置置。这种种方式同同时影响响两个命命名表,你不能能单独改改变其中中的一个个。每个个卡带都都控制着着PPUU地址线线的A110 和和A111。它可可能将他他们设置置成以下下4种可可能的方方式的11种。下下面
21、这个个图表有有助于理理解NEES里的的各种镜镜像,指指向PPPU VVRAMM中命名名表的112位地地址相当当于“$2xxxxx”: 名字 命名 表表#0 命名 表表#1 命名 表表#2 命名 表表#3 说明 地址线线A111 地址线AA10 水平 $0000 $0000 $4000 $4000 1 0 垂直 $0000 $8000 $0000 $8000 0 1 4屏幕镜镜像 $0000 $4000 $8000 $C000 卡带里有有2K VRAAM,44个命名名表物理理上独立立的 1 1 单屏幕 $X000 $X000$X000 $X000 所有的命命名表指指相同的的VRAAM区域域,X=
22、0、44、8、C 0 0 VROMM镜像 Mappper 68#游戏映映射VRROM到到PPUU VRRAM的的命名表表,这使使得命名名表是基基于VRROM的的,你不不能写它它但却可可以通过过mappperr自己来来控制是是否使用用这种特特性 图案表:图案表表储存了了实际88x8象象素的TTilee,同时时也储存存了用来来指向NNES调调色板全全部166种颜色色的4位位元矩阵阵的低两两位。PPPU支支持两个个图案表表在$000000和$110000。他们们有以下下格式: VRAMM地址 图案表内内容 颜色效果果 $00000.$000077 %0000100000 = $10%00000000
23、00 = $00%0100001100 = $44%0000000000 = $00%1111111110 = $FE%0000000000 = $00%1000000010 = $82%0000000000 = $00 组 0 .11.2.22.3.33.22.22.111111111.2.2.33.33. $00008.$0000FF %0000000000 = $00%0011010000 = $28%0100001100 = $44%1000000010 = $82%00000000000 = $000%10000000100 = $822%10000000100 = $822%000
24、00000000 = $000 组 1 点表示00号颜色色,数字字表示实实际调色色板颜色色代号 注意在图图案表里里存储的的是每个个点的22个位。其他两两个由属属性表得得到。所所以,在在屏幕上上总体出出现的颜颜色数是是16,而每个个块里只只有4种种颜色。 属性表:每个命命名表有有它自己己的属性性表。属属性表的的每一个个字节代代表了屏屏幕上的的一组44x4的的Tille,一一共有88x8个个字节。有几种种方法来来描述属属性表里里一个字字节的功功能: *保存存32xx32象象素方格格的高22位颜色色,每116x116象素素用2位位; *保存116个88x8 Tille的高高2位颜颜色; *保存存4个
25、44x4 Tille格子子的高22位颜色色。看以以下两个个图表帮帮助理解解:1、一个116x116 象象素的格格子:#0-FF 代表表了一个个8x88 Tiile,方块 x 代表表了4个个8x88 Tiile, 方块 0 #0 #1 #2 #3 方块 1 #4 #5 #6 #7 方块 2 #8 #9 #A #B 方块 3 #C #D #E #F 2、属性性表一个个字节的的实际格格式定义义如下(对应于于上面的的例子): 位 描述 0、1 方块 00的高两两位颜色色(Tiile #0,1,22,3) 2、3 方块 11的高两两位颜色色(Tiile #4,5,66,7) 4、5 方块 22的高两两位
26、颜色色(Tiile #8,9,AA,B) 6、7 方块 33的高两两位颜色色(Tiile #C,D,EE,F) 调色板:NESS有两个个调色板板,背景景调色板板和精灵灵调色板板。调色色板不包包含实际际的RGGB值,它们更更象一个个索引表表。写到到$3FF00-$3FFFF的的D6D7字字节被忽忽略。 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 调色板镜镜像:镜镜像发生生在背景景调色板板和精灵灵调色板板
27、之间,例如所所有写到到$3FF00的的数据会会被镜像像到$33F100,$33F044镜像到到$3FF14。背景和和精灵的的最高33个调色色板的00号色盘盘定义为为透明,存在那那里的颜颜色不会会被画出出来。PPPU使使用放在在$3FF00里里的颜色色作为背背景色,详细如如下: *$00D被写写到$33F000(镜像像到$33F100); *$003被写写到$33F088(镜像像到$33F188); *$11A被写写到$33F188; *$3FF08被被读到累累加器。PPUU使用$0D作作为背景景颜色,尽管$3F008有一一个颜色色$033(因为为0号颜颜色在所所有的调调色板里里都定义义为透明明
28、)。最最后,累累加器上上有一个个值$11A,这这是从$3F118映像像过来的的。又一一次,这这个$11A值没没有被画画出,因因为所有有的调色色板的00号颜色色被定义义为透明明。整个个背景和和精灵调调色板同同时也映映像到VVRAMM的其他他区域,$3FF20-$3FFFF全全部都是是这两个个调色板板分别的的映像。写到$3F000-$3FFFF的DD6DD7字节节被忽略略。 背景滚动动:NEES可以以通过预预提取命命名表,图案表表和属性性表来使使背景滚滚动,背背景是独独立于精精灵而位位于最下下层的。可以水水平和垂垂直滚动动。 水平滚动动 垂直滚动动 0512 A B A 0480 B 命名表AA通
29、过$20000的DD1-DD0指定定,B是是跟在后后面的一一个命名名表,根根据镜像像不同BB是动态态的。这这个不能能工作在在水平和和垂直同同时滚动动的游戏戏里。背背景会跨跨越多个个命名表表,如下下所示: 命名表#2($28000) 命名表#3($2C000) 命名表#0($20000) 命名表#1($24000) 在$20005里里写到水水平滚动动的值可可以从002556,写写到垂直直滚动的的值从002339,2239是是考虑了了负值的的结果,例如2248代代表88。 屏幕和精精灵分层层:下面面是NEES画图图的循序序: 前台 后台 CI OBJss 0-63 BG OBJss 0-63 EX
30、T 精灵RRAMBGPPRI=0 精灵RRAMBBGPRRI=1 CI代表表颜色亮亮度,相相当于$20001的DD7-DD5;BBG是背背景;EEXT是是扩展口口的图像像信号。BGPPRI代代表VRRAM里里背景优先权权位,每个精精灵都有有的,即即第二字字节的DD5位。OBJJ数代表表了实际际精灵的的号码,不是TTilee索引值值。前台台高于任任何其他他层,最最后被画画上,后后台低于于任何其其他层,最先被被画上。 精灵和精精灵RAAM:NNES用用一个页页面(2256字字节)来来存放动动画,每每个精灵灵4个字字节,一一共可以以有644个动画画/精灵灵,它们们可以是是8x88或8xx16象象素。
31、动动画/精精灵图案案被存储储在VRRAM的的图案表表其中一一个里面面。精灵灵属性,例如翻翻转和优优先权被被储存在在一个特特殊的2256字字节的精精灵RAAM,它它不是CCPU或或PPUU的地址址的一部部分。整整个精灵灵RAMM可以通通过$440144的DMMA方式式来写,写一个个8位的的数到$40114就将将这个88位数所所指定的的内存页页面整个个拷贝到到精灵RRAM上上。也可可以通过过把开始始地址放放在$220033然后读读/写于于$20004(每次存存取地址址自动加加一),它是一一个一个个字节存存取的。动画/精灵的的属性格格式是:动画/精灵属属性RAAM:| 精灵灵#0 | 精精灵#11
32、| . | 精灵#62 | 精精灵#663 | 字节 位描述 0 YYYYYYYYYY 精灵左上上角的YY坐标1 1 IIIIIIIIII Tilee索引号号 2 vhp0000ccc v垂直直翻转(1翻翻转) h水平平翻转(1翻翻转) p背景景优先权权(0前台11后台台) c颜色色的高22位 3 XXXXXXXXXX 精灵左上上角的XX坐标 Tilee索引号号就和命命名表里里的一样样。精灵灵图案可可以象TTilee图案对对于背景景图片一一样抓取取。唯一一的不同同是在88x166的精灵灵时,上上半部分分(偶数数号码)的Tiile索索引由精精灵图案案表的$00000开始始,而下下半部分分(奇数数
33、号码)由$110000开始。$20000寄寄存器对对8x116精灵灵无效。全部664个精精灵有自自己内部部的优先先权,00号最高高(最后后被画),633号最低低(最先先被画)。每条条扫描线线只能显显示8个个精灵,每个精精灵RAAM条目目都会被被检查是是否处于于其他精精灵的水水平范围围内。注注意,这这是基于于扫描线线的,不不是基于于精灵的的,也就就是说,会进行行2566次检查查,而不不是2556/88或2556/116次。在一个个真实的的NESS芯片里里,如果果精灵被被禁止($20001的的D4是是0)很很长一段段时间,精灵数数据会渐渐渐消失失。可以以理解为为精灵RRAM是是一个DDRAMM,D
34、44控制了了DRAAM的周周期刷新新信号。 碰撞标志志:碰撞撞标志是是PPUU状态寄寄存器($20002)的第66位(DD6)。PPUU能够找找出0号号精灵的的位置,然后设设置D66,它是是这样工工作的:PPUU扫描出出背景图图案象素素和精灵灵象素同同时不是是透明的的第一个个地方。比如,屏幕的的背景是是一个非非透明颜颜色(颜颜色号0),0号精精灵的坐坐标是(12,34),它只只是在第第4行的的开始才才有象素素,那么么,碰撞撞标志在在屏幕刷刷新到(12,37)时才被被设置。要记住住,0号号颜色被被定义为为透明。引起DD6被设设置的象象素必须须是已经经被画出出来的。下面的的例子能能帮助理理解,这这
35、是两个个Tille,下下划线表表示透明明的0号号颜色,*号表表示碰撞撞标志被被设置。 精灵 + 背景 = 结果 *会会用2号号颜色画画出 _111111_11111111_111222221111122_22111112_211111122222111_11111111_11111_ _22_21_2111_221111_211111_21111111_2211111111 _11111_111111112211222222111112_*1111112_2221111122222211_111111111_2211111111 这个例子子说的是是背景精灵,但是对对于靠近近背景的的精灵也也通用
36、,即精灵灵精灵灵,通过过设置背背景优先先权来实实现。DD6不可可以通过过读PPPU的状状态来复复位,只只在每次次VBllankk之后被被清零。Hitt标志可可以用在在水平或或者垂直直屏幕分分割的时时候,还还有许多多好玩的的效果。 水平和垂垂直消隐隐:所有有的游戏戏机都有有一个刷刷新动作作,用来来重新定定位电子子枪显示示可见的的数据。最通用用的显示示设备是是电视机机,它分分为每秒秒刷新660次的的NTSSC制式式和500次的PPAL制制式。电电子枪从从左到右右画出象象素,它它每次只只能画一一条扫描描线,画画下一条条之前要要先回到到左面并并且做好好准备,这之间间有一段段时间叫叫做水平平消隐(HBl
37、lankk)。在在画完全全部2556条扫扫描线之之后它又又回到屏屏幕左上上角准备备下一次次画屏幕幕(帧),这之之间的一一段时间间就是垂垂直消隐隐(VBBlannk)。电子枪枪就是一一个不断断的走之字字形的过过程。VVBlaank标标志就是是$20002的的D7,它表明明PPUU是否在在VBllankk期间,当VBBlannk标志志存在时时,你就就可以通通过$220066和$220077访问PPPU内内存。一一个程序序可以通通过读$20002来使使D7复复位。在在屏幕刷刷新期间间,我们们不能访访问PPPU,而而PPUU会在CCPU背背后修改改VRAAM指针针,这样样我们很很容易在在写入VVRAM
38、M时出错错,为了了让PPPU停下下来,可可以对$20000和$20001写000。 访问PPPU RRAM:在一个个任天堂堂主机,访问PPPU内内存只可可以在VVBlaank期期间。当当在屏幕幕刷新时时访问会会破坏刷刷新地址址寄存器器,一般般它经常常用来做做隐含的的“分割割屏幕”效果(见“在在屏幕刷刷新的时时候访问问VRAAM”)。很多多小些的的ROMM用只读读存储体体(VRROM)用做图图案表。在这种种情况下下,你不不可以写写PPUU地址,只可以以读。写写PPUU记忆体体: aa) 写写高位地地址字节节到$220066 b) 写低低位地址址字节到到$20006 c) 写数据据到$220077
39、。每一一个写操操作后,地址会会增加11($220000的第二二位是00)或增增加322($220000的第二二位是11)。读读PPUU记忆体体: aa) 写写高位地地址字节节到$220066 b) 写低低位地址址字节到到$20006 c) 从$220077读数据据。从$20007读到到的第一一个字节节是无效效的(见见下例)。然后后每读一一次地址址就增加加一($20000的第第二位是是0)或或增加 32($20000的的第二位位是1)。例子子:VRRAM的的$20000里里有$AAA $BB $CCC $DDD。VVRAMM的增量量是1。执行效效果如下下: LLDA #$220 SSTA $20
40、006 LDAA #$00 STAA $220066 ; VRAAM 地地址设为为 $220000 LDDA $20007 ; A=? VRRAM 缓冲=$AAA LDDA $20007 ; A=$AAA VRRAM 缓冲=$BBB LDDA $20007 ; A=$BBB VRRAM 缓冲=$CCC LDDA #$200 STTA $20006 LLDA #$000 SSTA $20006 ; VVRAMM 地址址设为 $20000 LDAA $220077 ; A=$CC VRAAM 缓缓冲=$AA LDAA $220077 ; A=$AA VRAAM 缓缓冲=$BB这这个只适适用于$00
41、000-$FEFFF,访访问调色色板数据据没有这这种现象象。 在屏幕刷刷新的时时候访问问VRAAM:前前面说过过,在屏屏幕刷新新的时候候存取VVRAMM的地址址和数据据是不合合法的。许多程程序存取取这些寄寄存器来来制造不不同的滚滚动效果果。比如如,一些些游戏从从屏幕底底部开始始滚动,那么它它可能向向$20006写写第一行行的状态态来复位位屏幕滚滚动。更更好的诡诡计是PPPU在在屏幕刷刷新时用用VRAAM的地地址寄存存器来储储存当前前地址。通过向向$20006修修改地址址以及让让PPUU从一个个不同的的地方接接着刷新新。关于于$20007如如何影响响屏幕刷刷新仍不不了解。 当不不知道向向$200
42、06中中写什么么数据时时,看下下面的图图表。 写到$20006的地地址 位 描述 04 Tilees的水水平偏移移量(例例如1 = 88象素);水平平位置水平偏偏移量8 59 Tilees的垂垂直偏移移量(例例如1 = 88象素);垂直直位置垂直偏偏移量8 A、B 命名表的的号码($20000,$24400,$28800,$2CC00); C、D 附加的垂垂直偏移移量,单单位:象象素(00.33);扫扫描线垂直偏偏移量附加的的垂直偏偏移量 E、F 00 5、声音音处理器器NES的的集成CCPU里里包含了了一个44声道的的声音处处理器(2A003),为播放放音乐提提供准模模拟的声声音。44个声道
43、道分别是是:2个个方波,一个三三角波和和一个噪噪声发生生通道,每个声声道的特特性都不不一样。声道:方方波声道道能够产产生544.6HHz到112.44KHzz的方波波,它的的主要特特性是频频率扫略略功能和和调整输输出的占占空周期期;三角角波声道道可产生生27.3Hzz到555.9KKHz分分辨率是是4位(16级级)的三三角波,它的主主要特性性是输出出模拟三三角波和和线性计计数器(可用来来定时关关闭声道道);噪噪声通道道能产生生29.3Hzz到444.7KKHz的的随机噪噪声,它它的主要要特性是是产生伪伪随机数数,在声声道输出出随机频频率。帧计数器器:2AA03有有一个内内含的帧帧计数器器,它能
44、能够产生生60HHz(11/1帧帧率)、1200Hz(1/22帧率)和2440Hzz(1/4帧率率)的信信号,提提供给其其他一些些声音硬硬件使用用。1/4帧率率的信号号是由CCPU频频率乘以以2即3357995455Hz再再除以1149115得到到的。声音硬件件延迟:在2AA03复复位之后后,到各各个声音音硬件开开始接收收时钟信信号之间间有20048个个时钟周周期的延延迟。当当这2KK个时钟钟周期之之后,声声音开始始正常工工作,输输出使能能有效。这种现现象只发发生在系系统复位位之后的的20448个时时钟周期期内。这这个资料料的准确确性有待待验证。控制寄存存器:22A033的声音音控制寄寄存器在
45、在CPUU内分配配的特殊殊地址如如下:寄存器地地址 描述 $40000-$40003 方波1 $40004-$40007 方波2 $40008-$4000B 三角波 $4000C-$4000F 噪声 $40115 声道使能能、音长长计数状状态 只有$440155是可读读可写的的,其他他都是只只能够写写的,如如果你读读这些寄寄存器最最可能得得到的是是$400(因为为NESS数据线线的重负负荷)。读这些些只写寄寄存器对对寄存器器本身和和声道都都没有任任何影响响。每个个声音通通道都有有4个寄寄存器,具体描描述如下下:寄存器位 0 1 2 3 4 5 6 7 $40000/$40004/$4000C
46、音量衰减减率 无衰减 音长计数数中止/衰减循循环使能能 占空周期期类型 $40001/$40005 右移量 1减少/0增加加波长 扫描更新新率 扫描使能能 $40002/$40006/$4000A 波长低八八位 $40003/$40007/$4000B/$4000F 波长高三三位 音长计数数值 $40008 线性计数数值 音长计数数中止/线性计计数开始始 $40009/$4000D 未使用 $4000E 播放采样样率 未使用 随机数类类型发生生 $40115:音音长状态态(读) 方1 方2 三角 噪声 DMC 未使用 DMC的的IRQQ状态 $40115:通通道使能能(写) 方1 方2 三角
47、噪声 DMC 未使用 声道结构构体系:总表:设备 三角波 噪声 方波 三角阶梯梯发生器器 线性计数数器 可编程定定时器 音长计数数器 4位DAAC 音量衰减减单元 扫频单元元 占空周期期发生器器 波长转换换器 随机数发发生器 三角阶梯梯发生器器:这是是一个55位的单单向的计计数器,只存在在于三角角波通道道,计数数器输出出的低44位分别别通到一一个XNNOR(异或非非)门。4个XXNORR门被同同一个选选通信号号控制,当选通通是0时时,计数数器输出出的4个个低位在在门电路路的输出出端反相相;当选选通是11时,不不反相。选通信信号连到到计数器器的最高高位,这这样就可可以在XXNORR门的输输出端产
48、产生一个个计数序序列,就就造出了了一个比比较理想想的三角角阶梯信信号发生生器。XXNORR门的输输出反馈馈到一个个4位的的DACC输入端端。当三三角波的的音长计计数器或或线性计计数器是是0时,这个55位的计计算器会会暂停,同时锁锁定,计计数器不不会被重重设置到到某一个个特定的的状态。在系统统复位的的时候,计数器器装入00。计数数器的时时钟输入入直接连连接到三三角波通通道内一一个111位的可可编程定定时器的的输出端端,这样样,这个个5位的的三角波波阶梯信信号发生生器的输输出频率率就是通通道内可可编程定定时器频频率的11/322。线性计数数器:($40008)这是一一个7位位的递减减计数器器,只存
49、存在于三三角波通通道,计计数器减减到0时时输出。计数器器的时钟钟是2440Hzz(1/4帧率率),用用帧来计计算长度度就是00.255N,其中NN是预先先装入的的7位的的值。计计数器会会保持计计数状态态直到输输出0,这时线线性计数数器和三三角阶梯梯发生器器的时钟钟信号被被禁止,导致两两个计数数器被锁锁定,线线性计数数器的输输出保持持是0,声道因因此而出出现静音音。线性性计算器器有两种种工作模模式:装装入和计计数。在在装入模模式,所所有的输输入(写写到$440088)的值值都会在在传送到到输出,也就没没有计数数;在计计数模式式,计数数器会从从当前值值向下减减,在$40008的数数会被忽忽略。下下
50、表表示示了如何何通过$40008的最最高位设设置计数数器:旧值 新值 模式 0 X 计数 1 0 在写周期期没有变变化,计计数 1 1 没有变化化 可编程定定时器($40002/3、$40006/77、$4400AA/B、$4000F):这是是一个111位可可预设的的递减计计数器,每个声声音通道道都有,但是注注意在噪噪声通道道不是直直接可用用的,详详见“波波长转换换器”。这个计计数器在在计数完完成的时时候自动动重载,因此它它在减到到0前会会计算NN1个个时钟周周期,其其中N是是预装入入的111位值。这个计计数器直直接使用用65002的频频率(11.799MHzz)作为为时钟,输出频频率是11.
51、799MHzz/(NN1)。当到到达计数数终点的的时候会会产生一一个1时时钟周期期的脉冲冲,而输输出频率率会被反反馈到对对应于声声音通道道的特殊殊设备。对于方方波,这这个计数数终点脉脉冲会被被送到占占空周期期发生器器;对于于三角波波,会被被送到三三角阶梯梯发生器器;对于于噪声,会被送送到随机机数发生生器。音长计数数器($40003、$40007、$4000B、$4000F):这是一一个7位位的递减减计数器器,时钟钟是600Hz,每个声声音通道道都有。当计数数器减到到0,计计数停止止,相应应的通道道出现静静音。可可以通过过设置音音长计数数时钟的的禁止位位来暂停停计数,写1则则中止计计数,00则允
52、许许计数。在不同同的寄存存器里,这个位位的位置置不同,见寄存存器表。计数值值通过$40003、$40007、$4000B和$4000F的337位位来写入入。输入入的5位位值通过过下面22个表转转换到计计数器的的7位值值:第3位0 46位位的值 帧 第7位0 第7位1 0 05 06 1 0A 0C 2 14 18 3 28 30 4 50 60 5 1E 24 6 07 08 7 0E 10 第3位1 47位位 帧 0 7F 1 01 2 02 3 03 4 04 5 05 6 06 7 07 8 08 9 09 A 0A B 0B C 0C D 0C E 0E F 0F 音长计数数器的状状态
53、可以以通过$40115来读读取,00表示计计数器处处于0状状态(停停止在00),11表示处处于非00状态。通过写写0到$40115可以以令音长长计数器器永远处处于0状状态,使使得声道道被禁止止;写11可以取取消禁止止状态,但它不不会改变变计数器器里面的的值。在在系统复复位时这这个寄存存器全部部5个使使用的位位都被设设置为00。4位DAAC:这这是一个个标准的的4位DDAC(数模转转换)单单元,有有16级级输出电电压,44个声道道共用。在2AA03里里,方波波1和方方波2混混合通过过引脚11输入,三角波波和噪音音通过引引脚2输输入。这这些模拟拟量输出出需要一一个负的的电流源源,以使使得电压压的级
54、输输出变成成平滑的的声音信信号。因因为NEES只外外置了一一个1000欧姆姆的下拉拉电阻,使得输输出波形形的幅值值很小,但是也也获得最最小的不不平滑度度。这个个不平滑滑度小到到难以发发现,就就算用示示波器也也不明显显。音量衰减减单元($40000、$40004、$4000C):音量量衰减器器只存在在于方波波和噪声声通道。当衰减减禁止位位(第44位)被被设置为为1,当当前的音音量值(033位)被被直接送送到DAAC。在在下列情情况中,音量值值会被忽忽略,而而直接送送0到DDAC。声道道硬件要要停止声声音,例例如音长长计数器器或扫频频单元;处于于占空周周期或随随机数发发生器输输出频率率信号的的负值
55、部部分,也也即在声声音使能能的时候候送到DDAC的的或者是是音量值值或者是是0(无无声)。当衰减减禁止位位被清零零,03位当当前的值值就是衰衰减率。衰减率率是指音音量从最最大值向向下线性性衰减的的速度,衰减速速度是2240/(N+1),N的值值从$00$FF。当衰衰减到00之后,根据寄寄存器第第5位的的状态将将发生两两种情况况: 第5位 行为 0 音量停在在0,声声道静音音 1 音量循环环不断从从最大值值减到00 只有通过过对寄存存器进行行写操作作才能重重新设置置硬件的的衰减状状态,否否则就一一直按当当前状态态进行衰衰减甚至至循环,即使寄寄存器的的第4位位被设置置成禁止止衰减也也没有用用。扫频
56、频单元:这个东东西只存存在在方方波通道道中。当当寄存器器的第77位被设设为1,扫频被被激活,波长会会实时地地增加或或减少(对应频频率降低低或提高高)。波波长的值值通过$40002/33和$440066/7被被不断的的读入和和更新,写到那那里的值值会立刻刻反应到到声音里里。第446位位代表了了频率扫扫略速度度,或者者说$440022/3和和$40006/7里波波长值被被改变的的频率。刷新率率是1220Hzz/(NN+1),N是是写入的的值,从从077。第33位控制制扫频的的模式,1表示示波长减减少,00表示波波长增加加。第002位位是右移移量,用用来控制制波长增增量的右右移量,见下表表: 第3位
57、 表达式,N是右右移量从从077 0 波长波波长(波长N) 1 波长波波长(波长N) 当满足以以下3个个条件,波长寄寄存器每每个周期期都会被被更新:第77位被设设置,即即扫频使使能;右移量量不等于于0;音量计计数器的的值非00。以下下两种情情况会暂暂停扫描描时钟,使声道道静音,而不管管扫描刷刷新率是是多少或或扫描使使能位是是否设置置:111位的的波长值值小于$0088;扫扫频处于于增加模模式,而而进位标标志11。硬件件在波长长寄存器器被更新新之前总总要检查查进位标标志的。 占空周期期发生器器($440000、$440044):占占空周期期发生器器只存在在于方波波通道,它使用用可编程程定时器器的
58、输出出频率作作为时钟钟,使用用4位计计数器来来产生44种类型型的占空空周期,因此它它的输出出频率是是可编程程定时器器的1/16,输出信信号反馈馈到音量量衰减器器。占空空类型见见下表: 6、7位位 一个时钟钟周期里里的占空空周期(正/负负) 00 2/144 01 4/122 10 8/8 11 12/44 波长转换换器($4000E):这个东东西只存存在于噪噪声通道道,用来来将一个个给定的的4位值值转换成成11位位的波长长,然后后送到可可编程定定时器。下表是是转换关关系: 03位位 音度 音阶 CPU时时钟周期期(111位波长长1) 0 15 A 002 1 14 A 004 2 13 A 0
59、08 3 12 A 010 4 11 A 020 5 11 D 030 6 10 A 040 7 10 F 050 8 10 C 065 9 9 A 07F A 9 D 0BE B 8 A 0FE C 8D 17D D 7 A 1FC E 6 A 3F9 F 5 A 7F2 随机数发发生器($4000E):噪声声通道有有一个11位的伪伪随机数数发生器器,它是是由一个个15位位的移位位寄存器器和一个个异或门门组成,它能够够提供长和和短两种类类型的伪伪随机数数序列:当寄存存器第77位是00时,产产生3227677位的长长序列(32KK模式);是11时,产产生933位的短短序列(93位位模式)。93
60、3位模式式通常在在声道中中产生较较高频率率的声音音回放。下表说说明了在在移位寄寄存器的的那些位位里进行行异或: 模式 EDCBBA9887655432210- 写| 写|V 3 精灵图案案表地址址, 11$110000, 00$000000 4 屏幕图案案表地址址, 11$110000, 00$000000 5 精灵尺寸寸, 118xx16, 08x88 6 PPU 主/从从模式, 没有有在NEES里使使用 7 Vblaank使使能, 1在在Vbllankk时发生生中断 $20001 读写 PPU控控制寄存存器2 0 显示模式式,0彩色,1单单色 1 背景掩码码,0不显示示屏幕的的左8列列 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年二班级班主任教学工作方案
- 关节镜的护理查房
- 2025年个人学校工作方案
- 酒店消防知识培训课件
- 酒店帐篷知识培训课件
- 2025年幼儿园小班六月份工作方案参考
- 1、中医药膳基础1、中医药膳基础
- 四川省泸州市2025届高三第二次模拟考试英语试题(详细答案版)含解析
- 郑州财税金融职业学院《物理课程理论与课程开发》2023-2024学年第二学期期末试卷
- 河北省承德市丰宁满族自治县2025年初三质量普查调研考试英语试题试卷含答案
- 技术负责人岗位责任制度
- 通风与空调系统调试方案
- 学校食堂家长委员会制度【9篇】
- 第三单元名著导读《经典常谈》04《诗经》第四 统编版语文八年级下册
- 2022-2023学年江苏省苏州市市区七年级(下)期中数学试卷-普通用卷
- 2023年玻璃幕墙维修合同(三篇)
- 山东种业集团有限公司校园招聘考试真题及答案2022
- 曲臂车高空作业车施工方案
- 张颂《朗读学》张颂
- 初中数学 导学案:正方形
- 2023年微山县事业单位招聘考试《公共基础知识》题库及答案解析
评论
0/150
提交评论