UxROM (Mapper 2) 操作(NES红白机)

本文详细介绍了UxROM在任天堂NES游戏开发中的使用,涉及PRGROM和CHRROM的容量、映射方式,以及如何通过寄存器操作来切换PRGROM银行。开发者需注意寄存器值与实际银行选择的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UxROM

概览

mapper号2
卡带名UxROM
PRG ROM容量256K / 4096K
PRG ROM窗口16K + 16K fixed
PRG RAM容量
PRG RAM窗口
CHR ROM容量
CHR ROM窗口n/a
扩展声音
IRQ

寄存器

Bank 选择 (8000−8000-8000FFFE)

7  bit  0
---- ----
xxxx pPPP
     ||||
     ++++- 为 CPU $8000-$BFFF 选择 16 KB PRG ROM Bank
          (UNROM 使用位 2-0; UOROM 使用位 3-0)

使用例子

寄存器常量声明

;假设$FFF9地址的值为$FF
MAPPER_REG_BANK_SELECT      =   $FFF9

切换 PRG bank 到 $8000-BFFF

;机器码: 48 A9 07 8D 00 80 68 8D 01 80 60
Switch_Prg_Bank_8000
 STA MAPPER_REG_BANK_SELECT
 RTS

切换 PRG bank 时需要注意的是, 写入的寄存器地址的值 会 和写入值相与才得出实际bank值, 比如FFF9地址的值是FFF9地址的值是FFF9FF, 那么写入任何bank号都没有问题, 如果$FFF9地址的值是02,那么你写入bank号为02, 那么你写入bank号为02,bankxx, 生效的bank号会变成 $xx & $02, 例如:

Switch_Prg_Bank_Test
 LDA #$01
 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $01 & $02 = $00
 
 LDA #$02
 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $02 & $02 = $02
 
 LDA #$03
 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $03 & $02 = $02
 
 LDA #$04
 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $04 & $02 = $00

所以切页时写入地址请在8000−8000-8000FFFF之间找一个值为$FF的地址作为切页寄存器, 当然, 如果使用asm编写代码, 也可以这样写:

Switch_Prg_Bank_8000
 STA .Prg_Bank_Reg;写入地址可以保证其值为$FF
 RTS
.Prg_Bank_Reg;在此标签后面定义一个字节, 其值为$FF
 .DB $FF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值