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

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值, 比如 F F F 9 地 址 的 值 是 FFF9地址的值是 FFF9FF, 那么写入任何bank号都没有问题, 如果$FFF9地址的值是 02 , 那 么 你 写 入 b a n k 号 为 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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值