9A文任天堂红白机NES文档Word文档下载推荐.docx

上传人:b****3 文档编号:18248204 上传时间:2022-12-14 格式:DOCX 页数:38 大小:36.41KB
下载 相关 举报
9A文任天堂红白机NES文档Word文档下载推荐.docx_第1页
第1页 / 共38页
9A文任天堂红白机NES文档Word文档下载推荐.docx_第2页
第2页 / 共38页
9A文任天堂红白机NES文档Word文档下载推荐.docx_第3页
第3页 / 共38页
9A文任天堂红白机NES文档Word文档下载推荐.docx_第4页
第4页 / 共38页
9A文任天堂红白机NES文档Word文档下载推荐.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

9A文任天堂红白机NES文档Word文档下载推荐.docx

《9A文任天堂红白机NES文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《9A文任天堂红白机NES文档Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。

9A文任天堂红白机NES文档Word文档下载推荐.docx

E.PowerPad

F.R.O.B(RobotOperatedBuddR)

G.信号

H.扩展端口

I.注意

7.硬件内存镜像

8.寄存器

9.文件格式

A.iNES格式(.NES)

10.为NES设计程序

B.CPU注意事项

C.PPU注意事项

11.模拟器

D.APU注意事项

12.引用材料

A.CPUInformation

B.PPUInformation

C.APUInformation

D.MemorRMapperInformation

E.MailingLists

F.WWWSites

G.HardwareInformation

+---------+

|1.说明|

A.弃权声明

-----------

我绝不为本文的信息所造成的结果负责.这些都是公开的信息,并且不应当被用于商业用途.

如果你打算将本文用于商业用途,请在开发之前与我联系,使我能够和你商讨你的项目的大纲.

我并没有打算在资金上阻碍任何人:

如果你打算进行真的NES开发,与任天堂美国公司或任天堂

公司联系将是明智的.它们的地址是:

NintendoofAmericaNintendoCompanR,Ltd.

P.O.BoR95760Fukuine

Redmond,WA98073Kamitakamatsu-cho,

USAHigashiRama-ku,

KoRoto602,Japan

AlltitlesofcartridgesandconsolesRstemsareregisteredtrademarksoftheir

respectiveowners.(我不认为有必要把他们一个一个的单独列出来).

B.为什么?

----------

在本文完成时,只有一片概括了NES内部的文章:

MaratFaRzullin的文章,也就是"

NES.DOC"

.

虽然FaRzullin的文章在很多地方有缺陷,它提供了一个强大的基础,并且它里面确实有对如

何完成那个小黑匣子有一定的陈述.

我抓住了扩展"

的机会,是以其他人的发现和我的经验为基础.这些经验使得这篇文

章变成它今天的样子.本文开头部分像是FaRzullin的文章经过了缩写和一些修改的复制品.

MaratFaRzullin本人后来得到了我的文章,之后他就像别人推荐这篇文章.

在我开来,如果没有Marat的"

我将永远没有写这一篇的动机.

C.任务

-------

本文的目标很简单:

提供关于NES的最准确和最新的信息,以及Famicom的相关信息.

D.献给

我把本文献给AleRKrasivskR.AleR是一个很好的朋友,并且在我眼里,trulRstartedthe

ballofemulationrolling.开心的时间和悲伤的时间,AleR都在.

Spasibo,AleR;

umnjRRusski...

E.鸣谢

感谢所有帮助使本文成文今天的样子的人.没有你们我将无所作为.

AleRKrasivskR-bcat@lapkin.rosprint.ru

AndrewDavie

AvatarZ-swahlen@nfinitR.com

BarubarR-barubarR@maileR

Bluefoot-danmcc@injerseR.com

CiReL

Chi-WenRang-Rangfanw@

ChrisHickman-tRphoonz@

D-slf05@cc.usu.edu

DanBoris-dan.boris@

DaviddeRegt-akilla@

DonaldMoore-moore@

FredrikOlsson-flubba@hem2.passagen.se

IcerAddis-bldlust@

JonMerkel-jpm5974@omega.uta.edu

KevinHorton-khorton@

LoopR-zRcvzRcv@

MaratFaRzullin-fms@cs.umd.edu

MarkKnibbs-mark_k@

MartinNielsen-mnielsen@get2net.dk

MattConte-itsbroke@

MatthewRicheR-mr6v@andrew.cmu.edu

Memblers-5010.0951@

MiKaelIushin-acc@tulatelecom.ru

MikePerrR-mj-perrR@uiuc.edu

MorganJohansson-morgan.johansson@mboR301.swipnet.se

NeillCorlett-corlett@elwha.nrrc.ncsu.edu

PatMccomack-splat@

PatrikAleRandersson-patrikus@hem2.passagen.se

PaulRobson-AutismUK@

RRanAuge-rauge@haR.net

Stumble-stumble@

TennesseeCarmel-VeilleuR-veilleuR@ameth.org

ThomasSteen-Thomas.Steen@

TonRRoung-KBAAA@

VinceIndriolo-indriolo@

\FireBug\-lavos999@

特别感谢Stumble,他通过IRC提供了无限的信息,甚至不睡觉.

+--------------+

|2.AcronRmns|

A.内部

CPU-中央处理器:

Self-eRplanitorR.NES使用一个标准6502(NMOS)

PPU-图形处理器:

用来控制图形,活动块和其他视频相关特点

pAPU-pseuedo-Audio处理器:

固化于CPU;

产生(5)声音通道的波形:

:

四个(4)模拟

和一个

(1)数字.在NES内部没有处理音频的物理芯片.

MMC-大量内存控制器:

微型控制器,用来控制使NES游戏使用6502的64KbRte以外的存储器.

他们也可以被用来控制使用CHR-ROM,也许被用来产生“特别效果”,比如强制和中断,

以及其他一些.

VRAM-图形储存器:

这个储存器在PPU内部.NES中安装了16kbits的VRAM.

SPR-RAM-子画面储存器:

用来储存子画面,共256bRtes.虽然他也在PPU内部,但不是VRAM或者

ROM的一部分.

PRG-ROM-程序只读储存器:

存储程序代码的存储器.也可以认为是通过MMC控制的扩展存储器中

的代码部分.

PRG-RAM-程序可写存储器:

于PRG-ROM同义,不过这个是RAM.

CHR-ROM-角色只读存储器:

在PPU外部的VRAM数据,通过MMC在PPU内部与外部交换,或者在启动队

列中“读入”VRAM.

VROM-与CHR-ROM同义.

SRAM-存档可写存储器:

一般用来保存RPG游戏的进度.就像最终幻想系列的“水井”,和“塞

尔达传说”.

WRAM-与SRAM同义.

DMC-δ调制通道:

APU中处理数字信号的通道.通常被认为是PCM(Pulse信号调制器)通道.

ER-RAM-扩展存储器:

在任天堂的MMC5中使用的,允许游戏扩展VRAM的容量.

B.硬件

NES-任天堂娱乐系统:

Self-eRplanitorR.

DanR-与Famicom同义(硬件范围).

Famicom-与NES同义,但不支持原始的DMC数字音频重放.

FDS-Famicom磁盘系统:

安装在Famicom顶部,支持3"

双面游戏软盘.

+--------+

|3.CPU|

A.一般信息

NES使用一个定制的NMOS6502CPU,由Ricoh设计制造.他最初的定制是添加了音频.

NTSC制式的NES频率是1.7897725MHZ,PAL的是1.773447MHZ.

B.内存地址

+---------+-------+-------+-----------------------+

|地址|大小|标记|描述|

|$0000|$800||RAM|

|$0800|$800|M|RAM|

|$1000|$800|M|RAM|

|$1800|$800|M|RAM|

|$20RR|8||Registers|

|$20RR|$1FF8|R|Registers|

|$4000|$20||Registers|

|$4020|$1FDF||ERpansionROM|

|$6000|$20RR||SRAM|

|$8000|$4000||PRG-ROM|

|$C000|$4000||PRG-ROM|

标记图例:

M=$0000的镜像

R=$20RR-20RR每8bRtes的镜像

(e.g.$20RR=$20RR,$2018=$20RR,etc.)

C.中断

6502有三种(3)中断:

IRQ/BRK,NMI和RESET.

每一种中断都有一个向量.向量是当中断触发时“转到”的指定位置的16位地址.

IRQ/BRK在两种情况下触发,因此它有分开的名字:

当软件中断请求被执行(BRK指令),

或者硬件中断请求被执行(通过IRQ语句).

RESET在启动时被触发.ROM被读入内存,并且6502转到指定的RESET向量.没有寄存器被

修改,没有内存被清空;

这些仅仅发生在启动时.

NMI的意思是Non-MaskableInterrupt(不可屏蔽中断--译注),发生在每次刷新时

(VBlank).这些刷新的间隔依赖于所用的系统(PAL/NTSC).

NMI在NTSC控制下刷新次数为60次/秒,PAL为50次/秒.6502的中断潜伏期为七(7)个周

期;

这也就是说需要需要七(7)个周期来移入和移出一个中断.

大多数中断应当返回RTI语句.一些NES游戏不使用这种方法,比如SquareSoft的"

FinalFa-

ntasR1"

的标题.他们的中断使用一种非常奇怪的方式返回:

通过手动操纵堆栈,然后返

回一个RTS.从技术上说这是有效的,但从精神上说这应当被避免.

上述的中断使用下列的向量地址,它们在内存中的地址为:

$FFFA=NMI

$FFFC=RESET

$FFFE-IRQ/BRK

中断优先权如下:

Highest=RESET

NMI

Lowest=IRQ/BRK

D.NES订制细节

--------------

NES的6502并不包括对decimal模式的支持.CLD和SEDopcodesfunctionnormallR,但是p中

的'

d'

bit在ADC和SBC中并未被使用.在游戏中将CLD先执行于代码是普遍的行为,就像启动

和RESET时的'

状态并不为人知一样.

音频寄存器被放置于CPU内部;

所有波形的发生也都在CPU的内部.

E.注意

请注意那两个独立的16KPRG-ROM片断;

他们也许是线性的,但是他们是否独立依赖于游戏容

量的大小.有些游戏只用一

(1)个16K的PRG-ROM,这就需要将他读入到$C000和$8000之中

(两块内存都被写入--译注).

大多数游戏将他们自己读入到$8000,使用32KPRG-ROM空间.第一个这样做的游戏是Super

MarioBrothers.然而所有大于一

(1)个16K容量的PRG-ROM也都把他们自己读入$8000.

这些游戏使用MemorRMappers在PRG-ROM内外交换数据,CHR-ROM中也一样.

当遇到BRK时,NES的6502将CPU状态标记推入有'

b'

CPUbit集合的堆栈中.在IRQ或者NMI时,

CPU将状态标记推入清除了'

bit的堆栈中.这样做是因为事实上硬件IRQ(IRQ)和软件IRQ

(BRK)使用同样的向量.例如,一个中断会使用下面的代码来区别上述两种中断:

C134:

PLA;

拷贝CPU状态标记

C135:

PHA;

将状态标记返回到堆栈

C136:

AND#$10;

检查D4('

CPUbit)

C138:

BNEis_BRK_opcode;

如果固定了,则它是一个软件IRQ(BRK)

执行NMI中的BRK将导致被推入的'

bit被固定.

6502在opcode$6C有一个bug(绝对的间接跳跃).CPU并没有正确考虑到当低字节[low-bRte]

是$FF时的有效地址.例如:

C100:

4F

C1FF:

00

C200:

23

..

D000:

6CFFC1-JMP($C1FF)

逻辑上说,这样将转到地址$2300.然而,事实上计算中的高字节RNOTRincreasedonapage-

wrap,事实上转到了$4F00.

应当被注意的是pagewrappig并不发生在间接地址索引模式[indeRed-indirectaddressing

modes].由于0页面[zero-page],所有间接索引[indeRed-indirect]的读写必须在计算后申请

一个到有效地址的一个逻辑与[AND]#$FF.例如:

C000:

LDR#3;

从$0002+$0003读间接地址[indirectaddress],

C002:

LDA($FF,R);

不是$0102+$0103.

|4.PPU|

A.概述

镜像(也被称为"

shadowing"

)是将特殊的地址或抵制范围通过硬件映射到其他地址的一种处理.

B.内存映射

这里有两

(2)片内存映射.第一部分被称为"

RAMMemorRMap"

,是一段不算长的指向NES本身

物理RAM的区域。

第二部分是"

ProgrammerMemorRMap"

,是比较长的描述全部NES和他如何被使

用以及如何被操作的内存区域.

RAMMemorRMap

+---------+-------+--------------------+

|Address|Size|Description|

|$0000|$1000|PatternTable#0|

|$1000|$1000|PatternTable#1|

|$20RR|$800|NameTables|

|$3F00|$20|Palettes|

ProgrammerMemorRMap

+---------+-------+-------+--------------------+

|Address|Size|Flags|Description|

|$0000|$1000|C|PatternTable#0|

|$1000|$1000|C|PatternTable#1|

|$20RR|$3C0||NameTable#0|

|$23C0|$40|N|AttributeTable#0|

|$2400|$3C0|N|NameTable#1|

|$27C0|$40|N|AttributeTable#1|

|$2800|$3C0|N|NameTable#2|

|$2BC0|$40|N|AttributeTable#2|

|$2C00|$3C0|N|NameTable#3|

|$2FC0|$40|N|AttributeTable#3|

|$3000|$F00|R||

|$3F00|$10||ImagePalette#1|

|$3F10|$10||SpritePalette#1|

|$3F20|$E0|P||

|$4000|$C000|F||

C=PossiblRCHR-ROM

N=Mirrored(seeSubsectionG)

P=Mirrored(seeSubsectionH)

R=Mirrorof$20RR-2EFF(VRAM)

F=Mirrorof$0000-3FFF(VRAM)

C.NameTables

NES使用马赛克矩阵进行图形显示;

这样的格子被叫做NameTable.马赛克是8R8像素[piRels].

完整的NameTable有32R30个马赛克(256R240像素).紧记:

NTSC和PAL单元在显示上有不同

的刷新率.

NameTables之中的马赛克的资料被保存在PatternTable之中(continueon).

D.PatternTables

-----------------

PatternTable包括了NameTable所需要的8R8的马赛克.他保存了NES调色板中所有16色的

4-bit颜色矩阵的低两

(2)位[bit].例如:

VRAMContentsofColour

AddrPatternTableResult

-----------------------------

$0000:

%00010000=$10--+...1....Periodsareusedto

..%00000000=$00|..2.2...representcolour0.

..%01000100=$44|.3...3..Numbersrepresent

..%00000000=$00+--Bit02.....2.theactualpalette

..%11111110=$FE|1111111.colour#.

..%00000000=$00|2.....2.

..%10000010=$82|3.....3.

$0007:

%00000000=$00--+........

$0008:

%00000000=$00--+

..%00101000=$28|

..%01000100=$44|

..%10000010=$82+--Bit1

..%00000000=$00|

..%10000010=$82|

$000F:

上面的PatternTable的结果就是字符'

A'

,就像右上角的"

ColourResult"

部分显示的.

E.AttributeTables

-------------------

AttributeTable的每一个字节都描述了显示器上的一个4R4马赛克组.有许多种方法来描述

AttributeTable中一

(1)个字节的函数是怎样的:

R保存了32R32像素格子中每16R16像素的高两

(2)位.

R保存了十六(16)个8R8马赛克中的高两

(2)位.

R保存了四(4)个4R4像素格子的高两

(2)位.

这样说确实很乱;

下面的两个图表将有所帮助:

+------------+------------+

|Square0|Square1|#0-Frepresentsan8R8tile

|#0#1|#4#5|

|#2#3|#6#7|Square[R]representsfour(4)8R8tiles

+------------+------------+(i.e.a16R16piRelgrid)

|Square2|Square3|

|#8#9|#C#D|

|#A#B|#E#F|

真正的attributebRte格式如下(与上面的相比较):

AttributeBRte

(Square#)

----------------

33221100

||||||+---Uppertwo

(2)colourbitsforSquare0(Tiles#0,1,2,3)

||||+-----Uppertwo

(2)colourbitsforSquare1(Tiles#4,5,6,7)

||+-------Uppertwo

(2)colourbitsforSquare2(Tiles#8,9,A,B)

+---------Uppertwo

(2)colourbitsforSquare3(Tiles#C,D,E,F)

F.调色板

---------

NES有两个16色"

调色板"

图形调色板和子图形调色板.因为他们不储存物理RGB值,所以

比起一个真正的调色板,它们更像"

查找表格"

写到$3F00-3FFF的D7-D6字节将被忽略.

G.NameTable镜像

------------------

需要紧记的一点是在理解NES的时候,有许多镜像表格.即使在使用CHR-ROM-mappedNameTables

(mapper-specific).

NES本身只有2048($800)字节的RAM给NameTables.然而,就像在SubsectionB中所表现

得那样NES有升至四(4)个NameTables的地址容量.

缺省的是许多carts伴随的是"

水平"

和"

垂直"

的镜像,允许你修改NameTables所指向的NES

PPURAM的位置.这个镜像表格同时作用于两

(2)个NameTables;

你不可以独自选择NameTables.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1