--- /dev/null
+/*\r
+SUROM:\r
+Dragon Quest IV, Dragon Warrior III, Dragon Warrior IV, Ninjara Hoi!\r
+SXROM:\r
+Best Play Pro Yakyuu Special, Final Fantasy I & II\r
+*/\r
+board <- {\r
+ mappernum = 1, vram_mirrorfind = false, ppu_ramfind = false,\r
+ cpu_rom = {\r
+ size_base = 4 * mega, size_max = 4 * mega,\r
+ banksize = 0x4000, \r
+ }, \r
+ cpu_ram = {\r
+ size_base = 0x2000, size_max = 0x8000,\r
+ banksize = 0x2000\r
+ },\r
+ ppu_rom = {\r
+ size_base = 0, size_max = 0,\r
+ banksize = 0x1000, \r
+ }\r
+};\r
+\r
+dofile("mmc1.ai");\r
+\r
+function cpu_dump(d, pagesize, banksize)\r
+{\r
+ cpu_write(d, 0x8000, 0x80); //serial count reset\r
+ mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration\r
+ for(local i = 0; i < pagesize; i += 0x10){\r
+ mmc1_write(d, 0xa000, (i & 0x10) | 1);\r
+ for(local j = 0; j < 0x10 - 1; j += 1){\r
+ mmc1_write(d, 0xe000, j | 0x10);\r
+ cpu_read(d, 0x8000, banksize);\r
+ }\r
+ cpu_read(d, 0xc000, banksize);\r
+ }\r
+}\r
+\r
+/*\r
+http://nesdevwiki.org/wiki/SXROM\r
+ CHR bank 0 (internal, $A000-$BFFF)\r
+4bit0\r
+-----\r
+PSSxC\r
+||| |\r
+||| +- Select 4 KB CHR RAM bank at PPU $0000 (ignored in 8 KB mode)\r
+|++--- Select 8 KB PRG RAM bank\r
++----- Select 256 KB PRG ROM bank\r
+*/\r
+\r
+function cpu_ram_access(d, pagesize, banksize)\r
+{\r
+ local sxrom_page = [0, 2 << 2, 1 << 2, 3 << 2];\r
+ cpu_write(d, 0x8000, 0x80); //serial count reset\r
+ mmc1_write(d, 0x8000, 1 << 3);\r
+ mmc1_write(d, 0xe000, 0);\r
+ for(local i = 0; i < pagesize; i += 1){\r
+// mmc1_write(d, 0xa000, (i & 0x03) << 2);\r
+ mmc1_write(d, 0xa000, sxrom_page[i]);\r
+ cpu_ramrw(d, 0x6000, banksize);\r
+ }\r
+ mmc1_write(d, 0xe000, 0xff);\r
+}\r
+\r
+/*\r
+SUROM SXROM CPU memory bank\r
+cpu address|rom address |page|task\r
+--SNROM area -- even ----------------\r
+$8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area\r
+$c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555\r
+--SNROM area -- odd -----------------\r
+$8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa\r
+$c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area\r
+--SUROM area -- even ----------------\r
+$8000-$bfff|n * 0x4000|even 0x20|write 0x2aaa + write area\r
+$c000-$ffff|0x7c000-0x7ffff|fix |write 0x5555\r
+--SUROM area -- odd -----------------\r
+$8000-$bfff|0x40000-0x43fff|fix |write 0x2aaa\r
+$c000-$ffff|n * 0x4000|odd 0x21|write 0x5555 + write area\r
+*/\r
+function program_initalize(d, cpu_banksize, ppu_banksize)\r
+{\r
+ cpu_write(d, 0x8000, 0x80);\r
+ cpu_command(d, 0, 0x8000, cpu_banksize);\r
+ cpu_command(d, 0x2aaa, 0x8000, cpu_banksize);\r
+ cpu_command(d, 0x5555, 0xc000, cpu_banksize);\r
+ mmc1_write(d, 0x8000, 0x0c);\r
+ mmc1_write(d, 0xe000, 0x10); //cpubank #0\r
+ mmc1_write(d, 0xa000, 0); //ROM area 1st 2M\r
+}\r
+\r
+function cpu_transfer(d, start, end, cpu_banksize)\r
+{\r
+ local wram = 1 << 4; //W-RAM disable flag\r
+ for(local k = 0; k < 0x20; k += 0x10){\r
+ mmc1_write(d, 0xa000, k);\r
+ for(local i = 0; i < 0x10; i += 2){\r
+ //even page\r
+ mmc1_write(d, 0x8000, 0x0c);\r
+ mmc1_write(d, 0xe000, i | 0 | wram);\r
+ cpu_program(d, 0x8000, cpu_banksize);\r
+ \r
+ //odd page\r
+ mmc1_write(d, 0x8000, 0x08);\r
+ mmc1_write(d, 0xe000, i | 1 | wram);\r
+ cpu_program(d, 0xc000, cpu_banksize);\r
+ }\r
+ }\r
+}\r
+\r
+function ppu_transfer(d, start, end, bank)\r
+{\r
+}\r