任天堂红白机 ( NES ) 文档
任天堂NES模拟器如何开发3

任天堂NES模拟器如何开发3?NES的CPU处理方框图NES的数据总线只有8位,也就是说上图4个单元数据的传输只是8位,用计算机里的就是一个字节,一次只能完成8位数据(0--255)的处理CPU(中央处理单元)方框图下有两个通道,一个是8位控制总线,一个是16位地址总线。
NES的CPU的内存寻址大小为64kB,所以它用16位地址总线的寻址范围从$0000-$FFFF.CPU的全局控制内存映像图说明:1. $0000--$00FF 6502 CPU 零页公共区 (256字节)2. $0100--$01FF 6502 CPU 公共堆栈区 (256字节)3. $0200--$0700 公共内存区 (1.5K字节)4. $0800--$1FFF $0000 -- $0700的镜像. 连做了3次镜像(6K字节)换句话说,对它们的操作(读/写)实际就是对$0000--$07FF的操作。
比如:读取 $08AB 的内容实际等于读取$00AB的内容。
而向$15CC写数据实际等于向$05CC写数据. $0800--$0FFF, $1000--$17FF, $1800--$1FFF 这3块不是物理的 RAM,它们都是镜像.5. $2000--$3FFF 6502 PPU I/O 地址区,系统使用. (8K字节)6. $4000--$43FF CPU 内部功能部件 I/O 地址区,系统使用 (1K字)7. $4400--$5FFF 扩充空间 (5K字节)可用于各种扩充外设的 I/O 端口,或扩充ROM和RAM地址空间.8. $6000--$7FFF 公共RAM空间公共内存区,可为系统程序及用户程序使用9. $8000--$BFFF 分页区间 (16K字节)按16K字节分区,页号00--FF(一个字节),最大支持4M字节容量.用于系统程序及应用程序的主要程序数据区.10.$C000--$FF00 公共RAM空间(16K字节)公共内存区,可为系统程序及用户程序使用. (注$C000--$FFFF 区间的RAM与分页区间的最后一页第FF页的RAM是同一段区域)也就是说第9和第10这32k空间是一起的!11.$FF00--$FFFF 系统区6502内部有6个可供使用的寄存器(A,X,Y,S,P,PC),其中除程序计数器PC是16位以外,其它寄存器均为8位。
任天堂NES模拟器如何开发1

任天堂NES模拟器如何开发?
入门游戏机模拟器开发
任天堂NES是一台8位的家用电视游戏机,基本是很多80后都玩过,那时小时候的回忆。
自从出现了个人电脑后,电脑程序日新月异,能够通过软件的方式模拟硬件的功能的软件被开发者们开发出来了,那就是模拟器,玩过之后突然有种想法,这是怎么做成的?于是带着这个疑问开始收集关于模拟器开发的相关资料,供需要时调来。
NES格式文件分析
NES格式文件结构(NES电脑格式文件是经过转换原游戏卡所拷贝下来的文件的一种格式)
D0-D7,表示的是二进制位,一字节8位二进制,所以从0到7一共8位。
偏移6中的trainer,是指作弊码程序,金手指。
ROM Mapper 是专用的图形处理程序。
多存储器控制器(Mult-Memory Controllers)或存储器管理控制器(MMC, Memory Management Controllers)是为任天堂娱乐系统(NES, Nintendo Entertainment System)电子游戏卡带开发者设计的多种特殊芯片。
可以扩展游戏机原本的能力并创造出主机本身力不能及的游戏。
FC模拟器出现后,用来模拟此类芯片的代码被称作Mapper。
任天堂产品系统文件

$2800 $2BC0 $2C00 $2FC0 $3000 $3F00 $3F10 $3F20 $4000
命名表 2(32x30块)(镜像,见命名表镜像) $2BBF
属性表 2(镜像,见命名表镜像)
$2BFF
命名表 3(32x30块)(镜像,见命名表镜像) $2FBF
属性表 3(镜像,见命名表镜像)
SRAM 电池 RAM,卡带上用来保存游戏记录的 EPROM-电擦写 ROM
DMC 三角波调制通道,APU用来处理数字声音的,也写作 PCM通道
EX-RAM 扩展 VRAM,用在 MMC5里,可以扩展 VRAM容量
3、中央处理器
NES定制的 6502内部特别加上了声音处理单元。NTSC制式的 NES使用 1.7897725MHz主频,PAL制式使用 1.773447MHz主频。 CPU内存映像:
水平扫描周期(H-Drawcycles)
பைடு நூலகம்1024
1024
水平空白周期(H-Blankcycles)
340
338
结束周期(Endcycles)
4
2
帧周期(Framecycles)
1364*262
1362*312
帧 IRQ周期(FrameIRQcycles)
29830
35469
帧率(Framerate)
$2FFF
$2000-$2EFF的镜像
$3EFF
背景调色板#1
$3F0F
精灵调色板#1
$3F1F
镜像,(见调色板镜像)
$3FFF
$0000-$3FFF的镜像
$7FFF
命名表: NES的图像通过 Tile矩阵来显示,这个网格就叫命名表。一个命名表和字符模 式下的屏幕缓冲比较相象,它包含字符的代码,也就是 30列的 32Byte长度。 每个 Tile有 8x8个象素,每个命名表有 32x30个 Tile,也就是 256x240象 素。PPU支持 4个命名表,他们在$2000,$2400,$2800,$2C00。在 NTSC制式 下,上面和下面的 8象素通常不显示出来,只有 256x224象素;在 PAL制式 下,屏幕有 256x240象素。 需要说的是,虽然 PPU支持 4个命名表,任天堂主机只支持 2个命名表。另外 两个被做了镜像。命名表保存了 Tile的编号,而 Tile存在图案表里。计算命 名表里 Tile号对应的实际地址的公式是: (Tile号×16)+由$2000端口指定的图案表地址
任天堂红白机(FC)游戏套装使用说明

【nnnesterJ 的基本使用说明】:
1.运行游戏:双击"nnnesterJ.exe"程序,并点击窗口左上侧的“文件”-“打开ROM”,在弹出的OpenROM窗口中,找到本目录的“rom”文件夹,并选择所需运行的游戏
5.游戏存档及读取:游戏过程中,若要保存当前进度,依次点击“编辑”-“即时存档”;若要读取以前进度,依次点击“编辑”-“即时读档”;存档位置可通过“编辑”-“存档位置”进行变更
6.软件为简体中文版本,其它基本功能外的设置,这里就不一一介绍了,还望谅解
【声明】:此游戏资源来自网络,360软件管家仅负责整理并加以说明,若侵犯您的原著权请联系我们。
2.窗口→全屏:依次点击“选项”-“全屏”(或使用快捷键ALT+回车)
ቤተ መጻሕፍቲ ባይዱ
3.全屏→窗口:将鼠标移至上方下拉菜单栏,依次点击“选项”-“全屏”(或使用快捷键ALT+回车)
4.自定义按键:依次点击“选项”-“控制器”,并在弹出的“控制器设置”窗口进行自定义按键设置,点击上方的“控制器1”、“控制器2”……可进行不同控制手柄的切换,支持外接手柄
5.文件保存路径设置:依次点击“选项”-“文件目录”,若希望将游戏过程中的截图,存档保存为当前目录下,点击“设为默认”-“确定”即可,若需指定目录,请另行逐条选择路径,并点击“确定”
6.游戏存档及读取:游戏过程中,若要保存当前进度,依次点击“文件”-“快速保存”,并指定位置;若要读取以前进度,请依次点击“文件”-“快速读取”,并选择所需的存档
7.软件为简体中文版本,其它基本功能外的设置,这里就不一一介绍了,还望谅解
任天堂FC红白机作弊码(金手指)

任天堂FC红白机作弊码(金手指)忍者蛙的无敌金手指0574-01-11鳄鱼先生无敌金手指07c5-01-07 无敌人间兵器无敌06F8-01-02二人麻将随意换牌金手指第一张~第十三张牌00E1,00E2,00E3......00E9,00EA,00EB,00EC,00ED 换牌代码1~9万(01,02,03......07,08,09)1~9饼(11,12,13......19)1`9条(21,22,23......29)东31西33南32北34白35中37发36弄清楚以后,就可以随意换牌了(在发牌前)例:第一~第三张牌要1,2,3筒00E1-02-11,00E2-02-12,00E3-02-13注意:最后的两位数一定要按小~大的顺序而且00EE-02-**的金手指必须开,否则看不见抓的牌在开始后,不要打牌或胡牌,先把金手指关了再玩,下局开始时再打开吞食天地无敌我方武将1的血量60D0-02-FFFF我方武将2的血量60D4-02-FFFF我方武将3的血量60D8-02-FFFF我方武将4的血量60DC-02-FFFF我方武将5的血量60E0-02-FFFF敌方武将1的血量60EC-02-00敌方武将2的血量60F0-02-00敌方武将3的血量60F4-02-00敌方武将4的血量60F8-02-00敌方武将5的血量60FC-02-00策略点61F4-03-FFFF赤影忍者全屏攻击轻松通关金手指06C1-03-19008E注意当与到如下情况是请按DELETE关闭金手指。
否则主角会掉下去贴子相关图片:火之鸟(无敌/定时/无限血/穿墙)金手指060A-03-999 时间0411-02-99 兽面0030-02-99 生命(无限续关)0416-03-000055 无限隐身,穿墙(向日葵的效果)0413-03-5575 小兵定身(哨子的效果)0415-03-0044 撞怪无敌(主角和小兵相遇时小兵死,BOSS无效)0412-03-9900 无限血0416-03-440055 无限隐身+撞怪无敌过关时一定要把隐身关了,否则主角不会拼图,站在那里不动金手指开的越少越好恶魔城全屏攻击法(无敌,BOSS不可)金手指015D-03-00000C 全屏闪烁(十字项链的效果,除BOSS外所有怪物秒杀)0071-03-1A0051 心的数量无限0042-03-400999 时间无限07FC-03-999999 分数无限00B8-03-6301BE 物品不消失未来战士金手指00C6-03-FFFFFF攻击力最大不过这样的话没法调防御也没法升血好处是游戏中所有怪物(包括最后BOSS)全都秒杀3颗血够用了贴子相关图片:魂斗罗闪烁无敌00AE-01-05忍者猫无敌003F-01-10七宝奇谋2无敌0516-01-11七宝奇谋1无敌05F6-01-11蝙蝠侠无限血00B7-04-0008无敌00CC-01-B0生命00BE-02-0009魔城传说无敌00C2-01-11三目童子无敌0074-01-1B忍者龙剑传无敌1代:0095-01-092代:0068-01-2F3代:无敌00AD-01-0A时间00C7-01-09猎杀红色十月053B-01-63(按A键使用的雷无限)053C-01-3F(按B键使用的雷无限)0543-02-0009(按A+B使用的雷无限)0620-01-02 [无敌(开始时你收攻击会正常掉血,血没了就无敌了,不会死)] 0545-01-09 (按SELECT使用,使用是带一圈电的那个)[无限]饿鱼先生赛车无敌0057-01-02超级马力无敌079E-01-03上尉密令无敌(受到一次攻击后)00B3-01-05快速升级03DD-01-63(盾牌)洛克人无敌1代:0055-01-062代:004B-01-153代:0039-01-054代:003C-01-025代:05B8-01-046代:00A2-01-067代:00A2-01-06西游记金钱0109-03-FFFF沙罗曼蛇2无敌0074-01-05阿拉丁无敌004B-01-10炮炮龙2代无敌0477-01-05新人类无敌0057-01-06魂斗罗2代无敌00C4-01-15萨而达传说1无敌04F0-01-03勇龙DG3 金钱HP MP 无限金手指要用模拟器改代码,在模拟器的扩展里面的编辑作弊列表输入代码金钱的代码是07AC一号角色HP代码是(主角)071C二号角色HP代码(战士)是1715三号角色HP代码(僧侣)是11392四号角色HP代码(魔法师)是0720注意不要用自己新建立的角色要用酒店里电脑自动为你准备的三个角色名字依次为主角0000战士PBH僧侣XPF魔法师DFF忍者龟2人数无限006A-02-99双截龙1代03B4-01-3C:血不减0505-01-25:时间不减忍者神龟3006A-01-09 :人数无限忍者龙剑传300A7-01-10 血格锁定帝国战机1P 0068 雷0492-01-052P 0069 雷0493-01-05天使之翼2036D-02-ffff体力直松鼠大战21P03D4-01-03:心00A7-01-09:命2P03D5-01-03:心00A8-01-09:命中东战争1P 0057-01-092P 0068-01-09生命无限冒险岛1代003F-01-09:命0076-01-09:血冒险岛2代07D2-01-09:命忍者龙牙1P 人数0303-01-052P 人数0383-01-05上尉密令#1 03DD-01-63 Diamond (A) #1 03DE-01-63 Diamond (H) #1 03D7-01-03 Power Up (A) #1 03D8-01-03 Power Up (H)#1 06E8-01-01 Exit#1 00B6-01-0A Invisible#1 041F-01-40 Invisible#1 03D9-01-14 HP (A)#1 03DA-01-14 HP (H)#2 05D8-01-00 Change place#2 05D9-01-00 Change place#2 05D4-01-A0 Space Shuttle (A) #2 05D5-01-A0 Space Shuttle (H) #2 05E1-01-0F Hidden Path#2 05D6-01-08 Current Location (A)#2 05D7-01-08 Current Location (H)赤色要塞无敌金手指0052-02-FF沙罗曼蛇1代0034-01-XX 1P人数0078-01-XX 1P技能格(00-无01-速度02-导弹03-光圈04-激光05-蓝星06-保护层)0082-01-XX 1P保护层(00-05)0076-01-XX 1P武器(00-白弹01-光圈02-激光)0086-01-XX 导弹开关00-无01-有0080-01-XX 速度设置(00-05)注意:若同时设置了0078中的03或04和0076,按A键后武器以0076的设置为准,即:0076的优先级高于0078的03和04。
使用说明

By:ColourSWAT
7.软件为简体中文版本,其它基本功能外的设置,这里就不一一介绍了,还望谅解
解压后目录下的“FC模拟器2”文件夹,为另一款经典模拟器“VirtuaNes.exe”,亦为简体中文版,操作方法与“nnnesterJ”大体相同
【VirtuaNes的基本使用说明】:
1.运行游戏:双击“VirtuaNes.exe”程序,并点击窗口左上侧的“文件”-“打开”,在弹出的“打开ROM文件”窗口中,找到本目录的“rom”文件夹,并选择所需运行的游戏
2.窗口→全屏:点击“nnnesterJ”窗口右上方的最大化按钮(或使用快捷键ALT+回车)
3.全屏→窗口:将鼠标移至上方下拉菜单栏,依次点击“选项”-“全屏”(或使用快捷键ALT+回车)
4.自定义按键:依次点击“选项”-“控制器”,并在弹出的“控制器属性”窗口进行自定义按键设置,点击上方的“player1”、“player2”……可进行不同控制手柄的切换,支持外接手柄
5.游戏存档及读取:游戏过程中,若要保存当前进度,依次点击“编辑”-“即时存档”;若要读取以前进度,依次点击“编辑”-“即时读档”;存档位置可通过“编辑”-“存档位置”进行变更
6.软件为简体中文版本,其它基本功能外的设置,这里就不一一介绍了,还望谅解
最后,在这里,代表360祝福大家假期快乐!重温童年红白机乐趣,也是一种不错的放松方式哦!
解压后文件目录下的ROM 为游戏镜像文件夹,若您计算机中还有其他红白机镜像资源,也可放到此目录下,便于管理
【nnnesterJ 的基本使用说明】:
1.运行游戏:双击"nnnesterJ.exe"程序,并点击窗口左上侧的“文件”-“打开ROM”,在弹出的OpenROM窗口中,找到本目录的“rom”文件夹,并选择所需运行的游戏
任天堂NES模拟器如何开发4

任天堂NES模拟器如何开发4?
归根结底,最终需要能用计算机的屏幕显示出NES游戏的图像,就需要模拟NES的ppu图像处理器,我们可以把他看成是计算机的绘图程序。
用计算机程序的方式描述出游戏里的资源代码里的含义。
现在看看一些硬件
这是实际PPU图形处理器的硬件,有好多引脚,引脚在计算机就像地址线,所有下面就是ppu用计算机描述的结构。
PPU图形处理器内存映像结构定义:
从表中看出有15个区域,第一和第二两个区域(即$0000和$1000),就是NES游戏文件里的VROM里的数据。
然后后面区域的数据就是需要我们自己用编程的方式处理了,游戏的点阵数据原型都保存在了8K的VROM里了,显示方法我们可以参照从第三个开始地址后的定义处理图像了。
#命名表:
NES的图像通过Tile矩阵来显示,Tile矩阵是32x30,这个网格就叫命名表。
NES通过游戏数据里的程序控制显示图像,把处理得到的图像单元数据送到显存,然后才能输出到后面的显示单元,显示单元就像电视机,电视机从处理器输出的信号显示出图像。
Nintendo Entertainment System 1985型号说明书

71374Comercializada en los Estados Unidos en 1985, la consola Nintendo Entertainment System™ (NES™) sentó las bases de la actual industria del videojuego en el mundo occidental y sumergió a millones de jugadores en los fascinantes mundos de Mario, Zelda y Metroid, entre muchos otros. Altamente valorada por aficionados de todo el planeta en la actualidad, sigue siendo “¡el sistema que revoluciona los videojuegos!”.Nintendo Entertainment System™ original Caja originalde 1985Diseñadores de LEGO®Daire McCabe,Pablo Gonzálezy Leon PijnenburgCuando nos propusimos recrear esta combinación de televisor clásico y consola, decidimos no conformarnos con un par de modelos que reflejaran el aspecto real de cada cosa. Queríamos que contaran con un montón de características y funciones que reprodujeran las de los objetos originales. De aquel punto de partida surgieron pequeños detalles de gran realismo, como los conectores de entrada/salida, la antena y los controles, o la posibilidad de introducir el cartucho del juego en la consola, cambiar el canal del televisor o ver una imagen “en movimiento”.Versión LEGO®A principios de la década de 1980, el equipo de Nintendo se fijó un ambicioso objetivo: desarrollar una nueva consola de videojuegos basada en cartuchos que ofreciera experiencias hasta entonces solo disponibles en las recreativas más potentes. La NES™ no solo permitiría disfrutar de toda la emoción de las máquinas recreativas en casa, sino que daría lugar a algo que sorprendió a todo el mundo.Pablo González, Leon Pijnenburg y Daire McCabe fueron los diseñadores de LEGO® que aceptaron el desafío de crear réplicas LEGO de la NES y de un televisor como los de los años 80. Afortunadamente, el tamaño de varios de los elementos LEGO disponibles se ajustaba a los principales detalles visuales de la consola y el mando originales, lo que permitió a los diseñadores construir modelos que se aproximaban en gran medida a las dimensiones reales. El televisor, aunque no mantiene la escala real, se ajusta a los esquemas gráficos que incluía el manual de instrucciones que acompañaba a la NES cuando se lanzó al mercado. ¿Tuvieron éxito los diseñadores de LEGO? Solo tienes que coger el mando y ejercitar tu “memoria muscular”: ¡todos los controles y botones están exactamente donde recuerdan tus pulgares!Instrucciones de inserción de un cartucho extraídas del manual originalDiseñadores de LEGO®Pablo Gonzálezy Leon PijnenburgLEGO, the LEGO logo and the Brick and Knob configurations are trademarks and/or copyrights of the LEGO Group. ©2020 The LEGO Group. TM & © 2020 Nintendo.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+---------------------------+ |任天堂红白机 (N E S)文档 | |版本.2.00| +---------------------------++------+|目录 |+------+1.说明A.弃权声明B.为什么?C.任务D.献给E.鸣谢2.A c r o n y m n sA.内部B.硬件3.C P UA.一般信息B.内存地址C.中断D.N E S定制细节E.注意4.P P UA.概述B.内存映射C.N a m e T a b l e sD.P a t t e r n T a b l e sE.A t t r i b u t e T a b l e sF.调色板G.N a m e T a b l e镜像H.调色板镜像I.背景卷轴J.屏幕和子图形的层K.子图形和 S P R-R A ML.子图形 #0点击标记M.水平和竖直空白N.$2005/2006矩阵编码O.P P U怪癖P.注意5.p A P U6.手柄,摇杆,扩展端口A.概述B.光线枪 Generated by Foxit PDF Creator © Foxit Software For evaluation only.C.四人分插D.摇杆E.P o w e r P a dF.R.O.B(R o b o t O p e r a t e d B u d d y)G.信号H.扩展端口I.注意7.硬件内存镜像8.寄存器9.文件格式A.i N E S格式 (.N E S)10.为 N E S设计程序A.概述B.C P U注意事项C.P P U注意事项11.模拟器A.概述B.C P U注意事项C.P P U注意事项D.A P U注意事项12.引用材料A.C P U I n f o r m a t i o nB.P P U I n f o r m a t i o nC.A P U I n f o r m a t i o nD.M e m o r y M a p p e r I n f o r m a t i o nE.M a i l i n g L i s t sF.W W W S i t e sG.H a r d w a r e I n f o r m a t i o n+---------+|1.说明 |+---------+A.弃权声明-----------我绝不为本文的信息所造成的结果负责.这些都是公开的信息,并且不应当被用于商业用途.如果你打算将本文用于商业用途,请在开发之前与我联系,使我能够和你商讨你的项目的大纲.我并没有打算在资金上阻碍任何人:如果你打算进行真的N E S开发,与任天堂美国公司或任天堂公司联系将是明智的.它们的地址是:N i n t e n d o o f A m e r i c a N i n t e n d o C o m p a n y,L t d.P.O.B o x95760F u k u i n eR e d m o n d,W A98073K a m i t a k a m a t s u-c h o,U S A H i g a s h i y a m a-k u,K o y o t o602,J a p a nA l l t i t l e s o f c a r t r i d g e s a n d c o n s o l e s y s t e m s a r e r e g i s t e r e d t r a d e m a r k s o f t h e i rr e s p e c t i v e o w n e r s.(我不认为有必要把他们一个一个的单独列出来 ).B.为什么?----------在本文完成时,只有一片概括了N E S内部的文章:M a r a t F a y z u l l i n的文章,也就是 "N E S.D O C".虽然 F a y z u l l i n的文章在很多地方有缺陷,它提供了一个强大的基础,并且它里面确实有对如何完成那个小黑匣子有一定的陈述.我抓住了扩展 "N E S.D O C"的机会,是以其他人的发现和我的经验为基础.这些经验使得这篇文章变成它今天的样子.本文开头部分像是 F a y z u l l i n的文章经过了缩写和一些修改的复制品.M a r a t F a y z u l l i n本人后来得到了我的文章,之后他就像别人推荐这篇文章.在我开来,如果没有 M a r a t的 "N E S.D O C",我将永远没有写这一篇的动机.C.任务-------本文的目标很简单:提供关于N E S的最准确和最新的信息,以及 F a m i c o m的相关信息.D.献给-------我把本文献给 A l e x K r a s i v s k y.A l e x是一个很好的朋友,并且在我眼里,t r u l y s t a r t e d t h eb a l l o f e m u l a t i o n r o l l i n g.开心的时间和悲伤的时间,A l e x都在.S p a s i b o,A l e x;u m n j y R u s s k i...E.鸣谢-------感谢所有帮助使本文成文今天的样子的人.没有你们我将无所作为.A l e x K r a s i v s k y-b c a t@l a p k i n.r o s p r i n t.r uA n d r e w D a v i eA v a t a r Z-s w a h l e n@n f i n i t y.c o mB a r u b a r y-b a r u b a r y@m a i l e x c i t e.c o mB l u e f o o t-d a n m c c@i n j e r s e y.c o mC i X e LC h i-W e n Y a n g-y a n g f a n w@m s4.h i n e t.n e tC h r i s H i c k m a n-t y p h o o n z@p a r o d i u s.c o mD-s l f05@c c.u s u.e d uD a n B o r i s-d a n.b o r i s@c o a t.c o mD a v i d d e R e g t-a k i l l a@e a r t h l i n k.n e tD o n a l d M o o r e-m o o r e@f u t u r e o n e.c o mF r e d r i k O l s s o n-f l u b b a@h e m2.p a s s a g e n.s eI c e r A d d i s-b l d l u s t@m a e l s t r o m.n e tJ o n M e r k e l-j p m5974@o m e g a.u t a.e d uK e v i n H o r t o n-k h o r t o n@i q u e s t.n e tL o o p y-z x c v z x c v@n e t z e r o.n e tM a r a t F a y z u l l i n-f m s@c s.u m d.e d uM a r k K n i b b s-m a r k_k@i n a m e.c o mM a r t i n N i e l s e n-m n i e l s e n@g e t2n e t.d kM a t t C o n t e-i t s b r o k e@c l a s s i c g a m i n g.c o mM a t t h e w R i c h e y-m r6v@a n d r e w.c m u.e d uM e m b l e r s-5010.0951@t c o n.n e tM i K a e l I u s h i n-a c c@t u l a t e l e c o m.r uM i k e P e r r y-m j-p e r r y@u i u c.e d uM o r g a n J o h a n s s o n-m o r g a n.j o h a n s s o n@m b o x301.s w i p n e t.s e N e i l l C o r l e t t-c o r l e t t@e l w h a.n r r c.n c s u.e d uP a t M c c o m a c k-s p l a t@p r i m e n e t.c o mP a t r i k A l e x a n d e r s s o n-p a t r i k u s@h e m2.p a s s a g e n.s eP a u l R o b s o n-A u t i s m U K@a o l.c o mR y a n A u g e-r a u g e@h a y.n e tS t u m b l e-s t u m b l e@a l p h a.p u l s a r.n e tT e n n e s s e e C a r m e l-V e i l l e u x-v e i l l e u x@a m e t h.o r gT h o m a s S t e e n-T h o m a s.S t e e n@n o.j o t a n k e r s.c o mT o n y Y o u n g-K B A A A@a o l.c o mV i n c e I n d r i o l o-i n d r i o l o@n m.p i c k e r.c o m\F i r e B u g\-l a v o s999@a o l.c o m特别感谢 S t u m b l e,他通过I R C提供了无限的信息,甚至不睡觉.+--------------+|2.A c r o n y m n s|+--------------+A.内部-------C P U-中央处理器:S e l f-e x p l a n i t o r y.N E S使用一个标准6502(N M O S)P P U-图形处理器:用来控制图形,活动块和其他视频相关特点p A P U-p s e u e d o-A u d i o处理器:固化于C P U;产生 (5)声音通道的波形::四个 (4)模拟和一个 (1)数字.在N E S内部没有处理音频的物理芯片.M M C-大量内存控制器:微型控制器,用来控制使N E S游戏使用6502的64K b y t e以外的存储器.他们也可以被用来控制使用C H R-R O M,也许被用来产生“特别效果”,比如强制和中断,以及其他一些.V R A M-图形储存器:这个储存器在P P U内部.N E S中安装了16k b i t s的V R A M.S P R-R A M-子画面储存器:用来储存子画面,共256b y t e s.虽然他也在P P U内部,但不是V R A M或者R O M的一部分.P R G-R O M-程序只读储存器:存储程序代码的存储器.也可以认为是通过M M C控制的扩展存储器中的代码部分.P R G-R A M-程序可写存储器:于P R G-R O M同义,不过这个是R A M.C H R-R O M-角色只读存储器:在P P U外部的V R A M数据,通过M M C在P P U内部与外部交换,或者在启动队列中“读入”V R A M.V R O M-与C H R-R O M同义.S R A M-存档可写存储器:一般用来保存R P G游戏的进度.就像最终幻想系列的“水井”,和“塞尔达传说”.W R A M-与S R A M同义.D M C-δ调制通道:A P U中处理数字信号的通道.通常被认为是P C M(P u l s e 信号调制器)通道.E X-R A M-扩展存储器:在任天堂的M M C5中使用的,允许游戏扩展V R A M的容量.B.硬件-------N E S-任天堂娱乐系统:S e l f-e x p l a n i t o r y.D a n y-与F a m i c o m同义(硬件范围).F a m i c o m-与N E S同义,但不支持原始的D M C数字音频重放.F D S-F a m i c o m磁盘系统:安装在F a m i c o m顶部,支持3"双面游戏软盘.+--------+|3.C P U|+--------+A.一般信息-----------N E S使用一个定制的N M O S6502C P U,由R i c o h设计制造.他最初的定制是添加了音频.N T S C制式的N E S频率是 1.7897725M H Z,P A L的是 1.773447M H Z.B.内存地址-----------+---------+-------+-------+-----------------------+|地址 |大小 |标记 |描述 |+---------+-------+-------+-----------------------+|$0000|$800||R A M||$0800|$800|M|R A M||$1000|$800|M|R A M||$1800|$800|M|R A M||$2000|8||R e g i s t e r s||$2008|$1F F8|R|R e g i s t e r s||$4000|$20||R e g i s t e r s||$4020|$1F D F||E x p a n s i o n R O M||$6000|$2000||S R A M||$8000|$4000||P R G-R O M||$C000|$4000||P R G-R O M|+---------+-------+-------+-----------------------+标记图例:M=$0000的镜像R=$2000-2008每 8b y t e s的镜像(e.g.$2008=$2000,$2018=$2000,e t c.)C.中断-------6502有三种 (3)中断:I R Q/B R K,N M I和R E S E T.每一种中断都有一个向量.向量是当中断触发时“转到”的指定位置的16位地址.I R Q/B R K在两种情况下触发,因此它有分开的名字:当软件中断请求被执行 (B R K 指令),或者硬件中断请求被执行 (通过I R Q语句).R E S E T在启动时被触发.R O M被读入内存,并且6502转到指定的R E S E T向量.没有寄存器被修改,没有内存被清空;这些仅仅发生在启动时.N M I的意思是 N o n-M a s k a b l e I n t e r r u p t(不可屏蔽中断--译注),发生在每次刷新时(V B l a n k).这些刷新的间隔依赖于所用的系统 (P A L/N T S C).N M I在N T S C控制下刷新次数为 60次/秒,P A L为50次/秒.6502的中断潜伏期为七 (7)个周期;这也就是说需要需要七 (7)个周期来移入和移出一个中断.大多数中断应当返回R T I语句.一些N E S游戏不使用这种方法,比如S q u a r e S o f t 的"F i n a l F a-n t a s y1"的标题.他们的中断使用一种非常奇怪的方式返回:通过手动操纵堆栈,然后返回一个R T S.从技术上说这是有效的,但从精神上说这应当被避免.上述的中断使用下列的向量地址,它们在内存中的地址为:$F F F A=N M I$F F F C=R E S E T$F F F E-I R Q/B R K中断优先权如下:H i g h e s t=R E S E TN M IL o w e s t=I R Q/B R KD.N E S订制细节--------------N E S的6502并不包括对d e c i m a l模式的支持.C L D和S E D o p c o d e s f u n c t i o n n o r m a l l y,但是p中的 'd'b i t在A D C和S B C中并未被使用.在游戏中将C L D先执行于代码是普遍的行为,就像启动和R E S E T时的 'd'状态并不为人知一样.音频寄存器被放置于C P U内部;所有波形的发生也都在C P U的内部.E.注意-------请注意那两个独立的16K P R G-R O M片断;他们也许是线性的,但是他们是否独立依赖于游戏容量的大小.有些游戏只用一 (1)个16K的P R G-R O M,这就需要将他读入到$C000和$8000之中(两块内存都被写入--译注).大多数游戏将他们自己读入到$8000,使用32K P R G-R O M空间.第一个这样做的游戏是S u p e rM a r i o B r o t h e r s.然而所有大于一 (1)个 16K容量的P R G-R O M也都把他们自己读入$8000.这些游戏使用M e m o r y M a p p e r s在P R G-R O M内外交换数据,C H R-R O M中也一样.当遇到B R K时,N E S的6502将C P U状态标记推入有 'b'C P U b i t集合的堆栈中.在I R Q或者N M I时,C P U将状态标记推入清除了 'b'b i t的堆栈中.这样做是因为事实上硬件I R Q (I R Q)和软件I R Q(B R K)使用同样的向量.例如,一个中断会使用下面的代码来区别上述两种中断:C134:P L A;拷贝C P U状态标记C135:P H A;将状态标记返回到堆栈C136:A N D#$10;检查 D4('b'C P U b i t)C138:B N E i s_B R K_o p c o d e;如果固定了,则它是一个软件I R Q(B R K)执行N M I中的B R K将导致被推入的 'b'b i t被固定.6502在o p c o d e$6C有一个b u g(绝对的间接跳跃).C P U并没有正确考虑到当 低字节 [l o w-b y t e]是$F F时的有效地址.例如:C100:4FC1F F:00C200:23..D000:6C F F C1-J M P($C1F F)逻辑上说,这样将转到地址$2300.然而,事实上计算中的高字节*N O T* i n c r e a s e d o n a p a g e-w r a p,事实上转到了$4F00.应当被注意的是p a g e w r a p p i g并不发生在间接地址索引模式 [i n d e x e d-i n d i r e c t a d d r e s s i n gm o d e s].由于 0页面 [z e r o-p a g e],所有 间接索引 [i n d e x e d-i n d i r e c t]的读写必须在计算后申请一个到有效地址的一个逻辑 与 [A N D]#$F F.例如:C000:L D X#3;从 $0002+$0003读间接地址 [i n d i r e c t a d d r e s s], C002:L D A($F F,X);不是 $0102+$0103.+--------+|4.P P U|+--------+A.概述-------镜像 (也被称为"s h a d o w i n g")是将特殊的地址或抵制范围通过硬件映射到其他地址的一种处理.B.内存映射-----------这里有两 (2)片内存映射.第一部分被称为 "R A M M e m o r y M a p",是一段不算长的指向N E S本身物理R A M的区域。