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)
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-8000−FFFF之间找一个值为$FF的地址作为切页寄存器, 当然, 如果使用asm编写代码, 也可以这样写:
Switch_Prg_Bank_8000 STA .Prg_Bank_Reg;写入地址可以保证其值为$FF RTS.Prg_Bank_Reg;在此标签后面定义一个字节, 其值为$FF .DB $FF