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