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)
使用例子
寄存器常量声明
;假设$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_8000STA MAPPER_REG_BANK_SELECTRTS
切换 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_TestLDA #$01STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $01 & $02 = $00LDA #$02STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $02 & $02 = $02LDA #$03STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $03 & $02 = $02LDA #$04STA $FFF9;假设$FFF9 = $02, 此时生效的bank号是 $04 & $02 = $00
所以切页时写入地址请在 8000 − 8000- 8000−FFFF之间找一个值为$FF的地址作为切页寄存器, 当然, 如果使用asm编写代码, 也可以这样写:
Switch_Prg_Bank_8000STA .Prg_Bank_Reg;写入地址可以保证其值为$FFRTS
.Prg_Bank_Reg;在此标签后面定义一个字节, 其值为$FF.DB $FF