注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

每周一Mapper(第二周 Mapper 76)  

2009-08-07 23:37:47|  分类: FC知识整理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

每周一Mapper

 

第二周 Mapper 76

 

Mapper 76 有助进阶学习。这个76是Mapper4(即MMC3)的精简版, 

mapper是什么

NES的mapper是模拟器上模拟解码IC的编号。--曹老师

 

 

提供 伪*七伽社   编写 维京猎人

 

1. 资料:http://nocash.emubase.de/everynes.htm#mapper76namco109prg8kvrom2k

*******************************************************************

Used by Digital Devil / Megami Tensei.

  8000h  Index/Control (3bit)

         Bit2-0 Command Number

           0 - Not used

           1 - Not used

           2 - Select 2K VROM at PPU 0000h-07FFh

           3 - Select 2K VROM at PPU 0800h-0FFFh

           4 - Select 2K VROM at PPU 1000h-17FFh

           5 - Select 2K VROM at PPU 1800h-1FFFh

           6 - Select 8K ROM at 8000h-9FFFh

           7 - Select 8K ROM at A000h-BFFFh

         N/A - Fixed 16K ROM at C000h-FFFFh (always last bank)

  8001h  Data Register (Indexed via Port 8000h)

*******************************************************************

 

2. 对应的解码IC

Mapper 76对应的IC是。。。未知。

//////////////////////////////////////////////////

 

3. 总体功能

3.1 VROM的切页。

3.2 PROM的切页。

3.3 先选择目的地址,再写入切页段。

 

 

4. PROM具体切换

///////////////////////////////////

8000h  Index/Control (3bit)

操作的端口是$8000

 

Bit2-0 Command Number

有效位是0~2,就是有效值范围是0~7

 

6 -Select 8K ROM at 8000h-9FFFh

输入6就是选择加载的地址$8000-9FFF,一次8KB

 

7 -Select 8K ROM at A000h-BFFFh

输入7就是选择加载的地址$A000-BFFF,一次8KB

 

8001h  Data Register (Indexed via Port 8000h)

端口$8001是写入数据段,切PROM的话,向这端口写入一个数X,就是将第X个bank的PROM数据段切页。这里(PROM)1 bank是8K。

///////////////////////////////////

 

向内存的$8000写入06就是将要切页到$8000-$9FFF(指内存)

再向内存的$8001写入00就是将$0010-$200F(指NES文件)切入。

这里$0010-$200F指的是NES文件的地址段,即$0000-$000F是指文件头。

每段就是8K(换算成地址段是$0000-$2000)

  

$0010为PROM开始的地址

如此类推

写入$8000的值

NES文件的地址段

切换到的内存地址段

0

$0010-$200F

$8000-$9FFF

 

或者

 

$A000-$BFFF

1

$2010-$400F

2

$4010-$600F

3

$6010-$800F

4

$8010-$1’000F

5

$1’0010-$1’200F

6

$1’2010-$1’400F

7

$1’4010-$1’600F

x

如此类推

($0010+$2000*X)

到 ($200F+$2000*X)

FD

。。。

 

注意一点:就是驻留体。驻留体就是内存中不切换的程序部分。这里的驻留体地址段就是在$C000-$FFFF。这里正好16K。这驻留体部分对应NES文件就是(除文件头外)RPOM的最后的16K。(按一个bank是8K,驻留体占了2 bank)

 

各型号所说的Bank的大小是不同的。PROM和VROM所说的Bank的大小也不同。

 

 

将6写入$8000,将0写入$8001的汇编语句

程序------

LDA #$06

STA $8000

LDA #$00

STA $8001

 

----------

 

注意,这里没有默认值。打开时只有驻留体会载入。

 

 

5. VROM具体切换

///////////////////////////////////

8000h  Index/Control (3bit)

操作的端口是$8000

 

Bit2-0 Command Number

有效位是0~2,就是有效值范围是0~7

 

2 - Select 2K VROM at PPU 0000h-07FFh

输入2就是选择加载的地址为PPU内存的$0000-07FF,就是表0的前半段,一次2KB

 

3 - Select 2K VROM at PPU 0800h-0FFFh

输入3就是选择加载的地址为PPU内存的$0800-0FFF,就是表0的后半段,一次2KB

 

4 - Select 2K VROM at PPU 1000h-17FFh

输入4就是选择加载的地址为PPU内存的$1000-17FF,就是表1的前半段,一次2KB

 

5 - Select 2K VROM at PPU 1800h-1FFFh

输入5就是选择加载的地址为PPU内存的$1800-1FFF,就是表0的后半段,一次2KB

 

8001h  Data Register (Indexed via Port 8000h)

端口$8001是写入数据段,切VROM的话,向这端口写入一个数X,就是将第X个bank的VROM数据段切页。这里(VROM)1 bank是2K。

 

///////////////////////////////////

 

向内存的$8000写入02就是将要切页到PPU $0000-$07FF(指内存)

假设你的PROM段只有64K

(这里PROM的bank是8K,所以64K=8 banks即$0010-$1’600F)

再向内存的$8001写入00就是将$1’6010-$1’680F(指NES文件)切入。

这里$0010-$200F指的是NES文件的地址段,即$0000-$000F是指文件头。

每段就是2K(换算成地址段是$0000-$07FF)

 

 

如此类推

假设PROM段有P banks,(每bank 8K)则S=$0010+$2000*P

S为VROM(CHR)开始的地址。

写入$8000的值

NES文件的地址段

切换到PPU的内存地址段

0

S – (S+$07FF)

$0000-$07FF

或者

$0800-0FFF

或者

$1000-17FF

或者

$1800-1FFF,

1

(S+$0800) – (S+$0FFF)

2

(S+$1000) – (S+$17FF)

3

(S+$1800) – (S+$1FFF)

x

如此类推

(S+$0800*X)

到 (S+$0800*X+$07FF)

FF

。。。

 

 

PPU的内存有8K。背景和精灵各4K。

 

之后用法跟Mapper0的一样了。

 

 

END.   2009-8-7

  评论这张
 
阅读(929)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017