Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //NES-CNROM (treble mapper)
- class Settings {
- integer mirror; //0 = horizontal, 1 = vertical
- }
- Settings settings;
- integer chr_bank;
- function prg_read(integer addr) returns integer {
- if(addr & 0x8000) return prg.read(addr & 0x7fff);
- return cpu.mdr();
- }
- function prg_write(integer addr, integer data) {
- if(addr & 0x8000) chr_bank = data & 0x03;
- }
- function chr_read(integer addr) returns integer {
- if(addr & 0x2000) {
- if(settings.mirror == 0) addr = ((addr & 0x0800) >> 1) | (addr & 0x03ff);
- return ciram.read(addr & 0x07ff);
- }
- addr = (chr_bank * 0x2000) + (addr & 0x1fff);
- return chr.read(addr);
- }
- function chr_write(integer addr, integer data) {
- if(addr & 0x2000) {
- if(settings.mirror == 0) addr = ((addr & 0x0800) >> 1) | (addr & 0x03ff);
- return ciram.write(addr & 0x07ff, data);
- }
- addr = (chr_bank * 0x2000) + (addr & 0x1fff);
- chr.write(addr, data);
- }
- function power() {
- settings.mirror = manifest("cartridge/mirror/mode") == "vertical";
- }
- function reset() {
- chr_bank = 0;
- }
- function serialize(serializer& s) {
- s.integer(chr_bank);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement