FC UxROM (Mapper 2) 操作

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- 8000−FFFE)

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

使用例子

寄存器常量声明

asm 复制代码
;假设$FFF9地址的值为$FF
MAPPER_REG_BANK_SELECT      =   $FFF9

切换 PRG bank 到 $8000-BFFF

asm 复制代码
;机器码: 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地址的值是 FFF9地址的值是FF, 那么写入任何bank号都没有问题, 如果$FFF9地址的值是 02 , 那么你写入 b a n k 号为 02, 那么你写入bank号为 02,那么你写入bank号为xx, 生效的bank号会变成 $xx & $02, 例如:

asm 复制代码
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- 8000−FFFF之间找一个值为$FF的地址作为切页寄存器, 当然, 如果使用asm编写代码, 也可以这样写:

asm 复制代码
Switch_Prg_Bank_8000
 STA .Prg_Bank_Reg;写入地址可以保证其值为$FF
 RTS
.Prg_Bank_Reg;在此标签后面定义一个字节, 其值为$FF
 .DB $FF
相关推荐
spencer_tseng2 天前
WeakAuras NES Script(lua)
lua·wow·nes·weakauras
1bite2 个月前
如何阅读 CPU 电路图(以 6502 为例)
nes
奉系坤阀1 年前
GoogLeNet(V1)
pytorch·深度学习·神经网络·googlenet·inception·fc·尺度