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)

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

使用例子

寄存器常量声明

;假设$FFF9地址的值为$FFMAPPER_REG_BANK_SELECT= $FFF9

切换 PRG bank 到 $8000-BFFF

;机器码: 48 A9 07 8D 00 80 68 8D 01 80 60Switch_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, 例如:

Switch_Prg_Bank_Test LDA #$01 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $01 & $02 = $00LDA #$02 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $02 & $02 = $02LDA #$03 STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $03 & $02 = $02LDA #$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