From: naruko Date: Fri, 21 Mar 2014 11:17:54 +0000 (+0000) Subject: スクリプトファイルの属性を変更 X-Git-Url: http://git.osdn.net/view?p=unagi%2Fold-svn-converted.git;a=commitdiff_plain;h=def564246e4b7f5116680a699361faf62547ae6a スクリプトファイルの属性を変更 git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@418 24ea1065-a21e-4ca1-99c9-f5125deb0858 --- diff --git a/client/trunk/anago/bandai_fcg1.ad b/client/trunk/anago/bandai_fcg1.ad index dcbefa2..a8e6bc4 100644 --- a/client/trunk/anago/bandai_fcg1.ad +++ b/client/trunk/anago/bandai_fcg1.ad @@ -1,32 +1,32 @@ -/* -BANDAI FCG-1, FCG-2 -FCG-1 + Program ROM + Charcter ROM - ドラゴンボール 大魔王復活 - 西村京太郎ミステリー ブルートレイン殺人事件 (Irem) -FCG-2 + Program ROM + Charcter ROM - ファミコンジャンプ - 魁!!男塾 - 名門!第三野球部 - ドラゴンボール3 - 悪魔くん -*/ -board <- { - mappernum = 16, - cpu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x4000 - }, - cpu_ram = { - size_base = 0x0000, size_max = 0x0000, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x0400 - }, - ppu_ramfind = false, - vram_mirrorfind = false -}; - -const register_offset = 0x6000; -dofile("fcg3.ai"); +/* +BANDAI FCG-1, FCG-2 +FCG-1 + Program ROM + Charcter ROM + ドラゴンボール 大魔王復活 + 西村京太郎ミステリー ブルートレイン殺人事件 (Irem) +FCG-2 + Program ROM + Charcter ROM + ファミコンジャンプ + 魁!!男塾 + 名門!第三野球部 + ドラゴンボール3 + 悪魔くん +*/ +board <- { + mappernum = 16, + cpu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x4000 + }, + cpu_ram = { + size_base = 0x0000, size_max = 0x0000, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x0400 + }, + ppu_ramfind = false, + vram_mirrorfind = false +}; + +const register_offset = 0x6000; +dofile("fcg3.ai"); diff --git a/client/trunk/anago/bandai_lz93d50_jump2.ae b/client/trunk/anago/bandai_lz93d50_jump2.ae index 0c46d21..2ec6934 100644 --- a/client/trunk/anago/bandai_lz93d50_jump2.ae +++ b/client/trunk/anago/bandai_lz93d50_jump2.ae @@ -1,35 +1,35 @@ -//Famicom Jump II -board <- { - mappernum = 153, vram_mirrorfind = false, ppu_ramfind = false, - cpu_rom = { - size_base = 4 * mega, size_max = 4 * mega, - banksize = 0x4000 - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 - } - ppu_rom = { - size_base = 0, size_max = 0, - banksize = 0x2000 - } -}; - -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 0x10){ - local v = i >> 4 - cpu_write(d, 0x8000, [v, v, v, v]); - for(local j = 0; j < 0x10 - 1; j += 1){ - cpu_write(d, 0x8008, j); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0x800d, 1 << 5); - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0x800d, 0); -} +//Famicom Jump II +board <- { + mappernum = 153, vram_mirrorfind = false, ppu_ramfind = false, + cpu_rom = { + size_base = 4 * mega, size_max = 4 * mega, + banksize = 0x4000 + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 + } + ppu_rom = { + size_base = 0, size_max = 0, + banksize = 0x2000 + } +}; + +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 0x10){ + local v = i >> 4 + cpu_write(d, 0x8000, [v, v, v, v]); + for(local j = 0; j < 0x10 - 1; j += 1){ + cpu_write(d, 0x8008, j); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0x800d, 1 << 5); + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0x800d, 0); +} diff --git a/client/trunk/anago/irem_g101.ad b/client/trunk/anago/irem_g101.ad index 1d80ab4..a38a9fc 100644 --- a/client/trunk/anago/irem_g101.ad +++ b/client/trunk/anago/irem_g101.ad @@ -1,88 +1,88 @@ -/* -IREM G-101 based cartridge - -$8000-$9fff bank#0, switchable or last - 1 -$a000-$bfff bank#1, switchable -$c000-$dfff bank#2, last - 1 or switchable -$e000-$ffff -note: -Major League PCB maybe ignore write operation to $9000-$9fff -$9000-$9fff write register are fixed to bank #2 = last -1 -*/ - -board <- { - mappernum = 32, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x0400 - }, - ppu_ramfind = false, - vram_mirrorfind = false -}; - -function cpu_dump(d, pagesize, banksize) -{ - if(false){ - cpu_write(d, 0x9000, 0); - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0xa000, i | 1); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_read(d, 0xc000, banksize); - cpu_read(d, 0xe000, banksize); - }else{ - cpu_write(d, 0x9000, 2); - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0xa000, i | 1); - cpu_read(d, 0xc000, banksize); - cpu_read(d, 0xa000, banksize); - } - cpu_read(d, 0x8000, banksize); - cpu_read(d, 0xe000, banksize); - } -} -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize ; i += 8){ - for(local j = 0; j < 8; j += 1){ - cpu_write(d, 0xb000 + j, i + j); - } - ppu_read(d, 0, banksize * 8); - } -} - -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_write(d, 0x9000, 0); - cpu_write(d, 0x8000, 0); - cpu_command(d, 0, 0x8000, cpu_banksize); - cpu_command(d, 0x02aa, 0xc000, cpu_banksize); - cpu_command(d, 0x0555, 0xc000, cpu_banksize); - cpu_write(d, 0xb000, [0xa, 0x15, 0]); - cpu_command(d, 0x2aaa, 0x0000, ppu_banksize); - cpu_command(d, 0x5555, 0x0400, ppu_banksize); - cpu_command(d, 0, 0x0800, ppu_banksize); -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - for(local i = start; i < end - 1; i += 1){ - cpu_write(d, 0x8000, i); - cpu_program(d, 0x8000, cpu_banksize); - } - cpu_program(d, 0xc000, cpu_banksize); -} - -function ppu_transfer(d, start, end, ppu_banksize) -{ - for(local i = start; i < end; i +=4){ - cpu_write(d, 0xb004, [i, i+1, i+2, i+3]); - ppu_program(d, 0x1000, ppu_banksize * 4); - } -} +/* +IREM G-101 based cartridge + +$8000-$9fff bank#0, switchable or last - 1 +$a000-$bfff bank#1, switchable +$c000-$dfff bank#2, last - 1 or switchable +$e000-$ffff +note: +Major League PCB maybe ignore write operation to $9000-$9fff +$9000-$9fff write register are fixed to bank #2 = last -1 +*/ + +board <- { + mappernum = 32, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x0400 + }, + ppu_ramfind = false, + vram_mirrorfind = false +}; + +function cpu_dump(d, pagesize, banksize) +{ + if(false){ + cpu_write(d, 0x9000, 0); + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0xa000, i | 1); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_read(d, 0xc000, banksize); + cpu_read(d, 0xe000, banksize); + }else{ + cpu_write(d, 0x9000, 2); + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0xa000, i | 1); + cpu_read(d, 0xc000, banksize); + cpu_read(d, 0xa000, banksize); + } + cpu_read(d, 0x8000, banksize); + cpu_read(d, 0xe000, banksize); + } +} +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize ; i += 8){ + for(local j = 0; j < 8; j += 1){ + cpu_write(d, 0xb000 + j, i + j); + } + ppu_read(d, 0, banksize * 8); + } +} + +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_write(d, 0x9000, 0); + cpu_write(d, 0x8000, 0); + cpu_command(d, 0, 0x8000, cpu_banksize); + cpu_command(d, 0x02aa, 0xc000, cpu_banksize); + cpu_command(d, 0x0555, 0xc000, cpu_banksize); + cpu_write(d, 0xb000, [0xa, 0x15, 0]); + cpu_command(d, 0x2aaa, 0x0000, ppu_banksize); + cpu_command(d, 0x5555, 0x0400, ppu_banksize); + cpu_command(d, 0, 0x0800, ppu_banksize); +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + for(local i = start; i < end - 1; i += 1){ + cpu_write(d, 0x8000, i); + cpu_program(d, 0x8000, cpu_banksize); + } + cpu_program(d, 0xc000, cpu_banksize); +} + +function ppu_transfer(d, start, end, ppu_banksize) +{ + for(local i = start; i < end; i +=4){ + cpu_write(d, 0xb004, [i, i+1, i+2, i+3]); + ppu_program(d, 0x1000, ppu_banksize * 4); + } +} diff --git a/client/trunk/anago/konami_vrc1.ad b/client/trunk/anago/konami_vrc1.ad index 1a063f2..123ad52 100644 --- a/client/trunk/anago/konami_vrc1.ad +++ b/client/trunk/anago/konami_vrc1.ad @@ -1,35 +1,35 @@ -//konami VRC(I) -board <- { - mappernum = 75, - cpu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x2000 - }, - ppu_rom= { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x1000 - }, - ppu_ramfind = false, vram_mirrorfind = false -}; -function cpu_dump(d, pagesize, banksize) -{ - local i; - for(i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0xa000, i | 1); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_write(d, 0xc000, i); - cpu_read(d, 0xc000, banksize * 2); -} -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 0x10){ - cpu_write(d, 0x9000, i == 0 ? 0 : (0x3 << 1)); - for(local j = 0; j < 0x10; j += 2){ - cpu_write(d, 0xe000, j); - cpu_write(d, 0xf000, j | 1); - ppu_read(d, 0, banksize * 2); - } - } -} +//konami VRC(I) +board <- { + mappernum = 75, + cpu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x2000 + }, + ppu_rom= { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x1000 + }, + ppu_ramfind = false, vram_mirrorfind = false +}; +function cpu_dump(d, pagesize, banksize) +{ + local i; + for(i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0xa000, i | 1); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_write(d, 0xc000, i); + cpu_read(d, 0xc000, banksize * 2); +} +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 0x10){ + cpu_write(d, 0x9000, i == 0 ? 0 : (0x3 << 1)); + for(local j = 0; j < 0x10; j += 2){ + cpu_write(d, 0xe000, j); + cpu_write(d, 0xf000, j | 1); + ppu_read(d, 0, banksize * 2); + } + } +} diff --git a/client/trunk/anago/konami_vrc2a.ad b/client/trunk/anago/konami_vrc2a.ad index bde2932..ae57242 100644 --- a/client/trunk/anago/konami_vrc2a.ad +++ b/client/trunk/anago/konami_vrc2a.ad @@ -1,52 +1,52 @@ -/* -VRCII A0,A1 swap + charcter ROM address bus shiftx1 -051744 jumper G? -VRC-CPU|databus -A0 - A1|A0: xxxx210x -A1 - A0|A1: xxxx6543 -VRC-CHRCTER ROM -A11-A17 = A10-A16 -*/ -board <- { - mappernum = 22, vram_mirrorfind = false, ppu_ramfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x2000 / 8 - } -}; -dofile("vrc4.ai"); -function cpu_dump(d, pagesize, banksize) -{ - vrc4_cpu_dump(d, pagesize, banksize, 1, 0); -} - - -function vrc2a_ppubank_set(d, addr, i, j, r0, r1) -{ - local a1 = 1 << r0; - local a2 = 1 << r1; - local a3 = a1|a2; - - cpu_write(d, addr | a1, i >> 3); - cpu_write(d, addr, i << 1); - cpu_write(d, addr | a3, j >> 3); - cpu_write(d, addr | a2, j << 1); -} - -function ppu_dump(d, pagesize, banksize) -{ - local r0 = 1; - local r1 = 0; - - for(local i = 0; i < pagesize; i += 8){ - vrc2a_ppubank_set(d, 0xb000, i | 0, i | 1, r0, r1); - vrc2a_ppubank_set(d, 0xc000, i | 2, i | 3, r0, r1); - vrc2a_ppubank_set(d, 0xd000, i | 4, i | 5, r0, r1); - vrc2a_ppubank_set(d, 0xe000, i | 6, i | 7, r0, r1); - ppu_read(d, 0x0000, banksize * 8); - } -} +/* +VRCII A0,A1 swap + charcter ROM address bus shiftx1 +051744 jumper G? +VRC-CPU|databus +A0 - A1|A0: xxxx210x +A1 - A0|A1: xxxx6543 +VRC-CHRCTER ROM +A11-A17 = A10-A16 +*/ +board <- { + mappernum = 22, vram_mirrorfind = false, ppu_ramfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x2000 / 8 + } +}; +dofile("vrc4.ai"); +function cpu_dump(d, pagesize, banksize) +{ + vrc4_cpu_dump(d, pagesize, banksize, 1, 0); +} + + +function vrc2a_ppubank_set(d, addr, i, j, r0, r1) +{ + local a1 = 1 << r0; + local a2 = 1 << r1; + local a3 = a1|a2; + + cpu_write(d, addr | a1, i >> 3); + cpu_write(d, addr, i << 1); + cpu_write(d, addr | a3, j >> 3); + cpu_write(d, addr | a2, j << 1); +} + +function ppu_dump(d, pagesize, banksize) +{ + local r0 = 1; + local r1 = 0; + + for(local i = 0; i < pagesize; i += 8){ + vrc2a_ppubank_set(d, 0xb000, i | 0, i | 1, r0, r1); + vrc2a_ppubank_set(d, 0xc000, i | 2, i | 3, r0, r1); + vrc2a_ppubank_set(d, 0xd000, i | 4, i | 5, r0, r1); + vrc2a_ppubank_set(d, 0xe000, i | 6, i | 7, r0, r1); + ppu_read(d, 0x0000, banksize * 8); + } +} diff --git a/client/trunk/anago/konami_vrc2b.ad b/client/trunk/anago/konami_vrc2b.ad index 0326b44..5e57094 100644 --- a/client/trunk/anago/konami_vrc2b.ad +++ b/client/trunk/anago/konami_vrc2b.ad @@ -1,26 +1,26 @@ -/* -VRC2B; R0=A0, R1=A1 -じゃんン子チエ のみ d12 で dump すること。 -*/ -board <- { - mappernum = 23, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, - ppu_rom= { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 / 8 - }, - ppu_ramfind = false, vram_mirrorfind = false -}; -dofile("vrc4.ai"); -function cpu_dump(d, pagesize, banksize) -{ - vrc4_cpu_dump(d, pagesize, banksize, 0, 1); -} - -function ppu_dump(d, pagesize, banksize) -{ - vrc4_ppu_dump(d, pagesize, banksize, 0, 1); -} +/* +VRC2B; R0=A0, R1=A1 +じゃんン子チエ のみ d12 で dump すること。 +*/ +board <- { + mappernum = 23, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, + ppu_rom= { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 / 8 + }, + ppu_ramfind = false, vram_mirrorfind = false +}; +dofile("vrc4.ai"); +function cpu_dump(d, pagesize, banksize) +{ + vrc4_cpu_dump(d, pagesize, banksize, 0, 1); +} + +function ppu_dump(d, pagesize, banksize) +{ + vrc4_ppu_dump(d, pagesize, banksize, 0, 1); +} diff --git a/client/trunk/anago/konami_vrc3.ad b/client/trunk/anago/konami_vrc3.ad index f60bd58..01a7443 100644 --- a/client/trunk/anago/konami_vrc3.ad +++ b/client/trunk/anago/konami_vrc3.ad @@ -1,41 +1,41 @@ -/* -konami VRCIII -RC821 -各レジスタは4bit -write -$8000 IRQ cpu clock count, bit0-3?? -$9000 IRQ cpu clock count, bit4-7?? -$a000 IRQ cpu clock count, bit8-11 -$b000 IRQ cpu clock count, bit12-15 -$c000 IRQ enable -$d000 IRQ Acknowledge -$f000 bit0-2 pagenumber at CPU address $8000-$bfff - bit3 1: ROM address 0x1c000-0x1cfff map CPU address $c000-$cfff - 0: IRQ status? at CPU address $c000-$cfff -read -$8000-$bfff 可変エリア, write $f000 bit0-2 -$c000-$cfff 可変エリア, write $f000 bit3 -$d000-$ffff 固定エリア, ROM address 0x1d000-0x1ffff -*/ - -board <- { - mappernum = 73, - cpu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x4000 - }, - ppu_rom= { - size_base = 0, size_max = 0, - banksize = 0x2000 - }, - ppu_ramfind = false, vram_mirrorfind = true -}; -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 1; i += 1){ - cpu_write(d, 0xf000, i); - cpu_read(d, 0x8000, banksize); - } - cpu_write(d, 0xf000, 1 << 3); - cpu_read(d, 0xc000, banksize); -} +/* +konami VRCIII +RC821 +各レジスタは4bit +write +$8000 IRQ cpu clock count, bit0-3?? +$9000 IRQ cpu clock count, bit4-7?? +$a000 IRQ cpu clock count, bit8-11 +$b000 IRQ cpu clock count, bit12-15 +$c000 IRQ enable +$d000 IRQ Acknowledge +$f000 bit0-2 pagenumber at CPU address $8000-$bfff + bit3 1: ROM address 0x1c000-0x1cfff map CPU address $c000-$cfff + 0: IRQ status? at CPU address $c000-$cfff +read +$8000-$bfff 可変エリア, write $f000 bit0-2 +$c000-$cfff 可変エリア, write $f000 bit3 +$d000-$ffff 固定エリア, ROM address 0x1d000-0x1ffff +*/ + +board <- { + mappernum = 73, + cpu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x4000 + }, + ppu_rom= { + size_base = 0, size_max = 0, + banksize = 0x2000 + }, + ppu_ramfind = false, vram_mirrorfind = true +}; +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 1; i += 1){ + cpu_write(d, 0xf000, i); + cpu_read(d, 0x8000, banksize); + } + cpu_write(d, 0xf000, 1 << 3); + cpu_read(d, 0xc000, banksize); +} diff --git a/client/trunk/anago/konami_vrc4a.ad b/client/trunk/anago/konami_vrc4a.ad index f19e27f..29e16e7 100644 --- a/client/trunk/anago/konami_vrc4a.ad +++ b/client/trunk/anago/konami_vrc4a.ad @@ -1,21 +1,21 @@ -board <- { - mappernum = 21, ppu_ramfind = false, vram_mirrorfind = false, - cpu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 / 8, - } -}; -dofile("vrc4.ai"); -function cpu_dump(d, pagesize, banksize) -{ - vrc4_cpu_dump(d, pagesize, banksize, 1, 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - vrc4_ppu_dump(d, pagesize, banksize, 1, 2); -} +board <- { + mappernum = 21, ppu_ramfind = false, vram_mirrorfind = false, + cpu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 / 8, + } +}; +dofile("vrc4.ai"); +function cpu_dump(d, pagesize, banksize) +{ + vrc4_cpu_dump(d, pagesize, banksize, 1, 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + vrc4_ppu_dump(d, pagesize, banksize, 1, 2); +} diff --git a/client/trunk/anago/konami_vrc4d.ad b/client/trunk/anago/konami_vrc4d.ad index 09a31c2..7487855 100644 --- a/client/trunk/anago/konami_vrc4d.ad +++ b/client/trunk/anago/konami_vrc4d.ad @@ -1,22 +1,22 @@ -board <- { - mappernum = 25, - cpu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x2000 / 8 - }, - ppu_ramfind = false, vram_mirrorfind = false -}; -dofile("vrc4.ai"); -function cpu_dump(d, pagesize, banksize) -{ - vrc4_cpu_dump(d, pagesize, banksize, 3, 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - vrc4_ppu_dump(d, pagesize, banksize, 3, 2); -} +board <- { + mappernum = 25, + cpu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x2000 / 8 + }, + ppu_ramfind = false, vram_mirrorfind = false +}; +dofile("vrc4.ai"); +function cpu_dump(d, pagesize, banksize) +{ + vrc4_cpu_dump(d, pagesize, banksize, 3, 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + vrc4_ppu_dump(d, pagesize, banksize, 3, 2); +} diff --git a/client/trunk/anago/konami_vrc7.ag b/client/trunk/anago/konami_vrc7.ag index 0ebb3af..1150017 100644 --- a/client/trunk/anago/konami_vrc7.ag +++ b/client/trunk/anago/konami_vrc7.ag @@ -1,69 +1,69 @@ -/*VRC7 FLASH MEMORY WRITE -generic CPU memory bank -cpu address|rom address |page|task -$8000-$9fff|0x02000-0x03fff|1 |write (0x2aaa & 0x1fff) + 0x8000 -$a000-$bfff|0x04000-0x05fff|2 |write (0x5555 & 0x1fff) + 0xa000 -$c000-$dfff|n * 0x2000 |n |write area -$e000-$efff|末尾 |fix |boot area, 未使用*/ -board <- { - mappernum = 85, vram_mirrorfind = false, ppu_ramfind = true, - cpu_rom = {banksize = 0x2000, size_max = 4 * mega, size_base = 1 * mega}, - cpu_ram = {banksize = 0x2000, size_max = 0x2000, size_base = 0x2000}, - ppu_rom = {banksize = 0x2000 / 8, size_max = 2 * mega, size_base = 1* mega} -}; -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0x8018, i | 1); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_write(d, 0x9000, 0x3e); - cpu_read(d, 0xc000, banksize * 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - cpu_write(d, 0xa000, 0); - for(local i = 0; i < pagesize; i += 8){ - local t = i; - for(local j = 0xa000; j < 0xe000; j += 0x1000){ - cpu_write(d, j, t++); - cpu_write(d, j+0x18, t++); - } - ppu_read(d, 0, banksize * 8); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0xe000, 0x80); - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0xe000, 0x00); -} - -/* -this is RC851/352402 style. RV051/353429 style is not supported. -352402: Program ROM/ Charcter RAM/ Backup RAM/ R1 = A5, R0 = A4/ Extra Sound -353429: Program ROM/ Charcter ROM/ R1 = A3, R0 = ? -*/ -function initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_command(d, 0, 0xc000, cpu_banksize); - cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); - cpu_command(d, 0x5555, 0xa000, cpu_banksize); - cpu_write(d, 0x8000, 1); - cpu_write(d, 0x8010, 2); - cpu_write(d, 0x9000, 0); -} -function cpu_transfer(d, start, end, banksize) -{ - for(local i = start; i < end - 1; i += 1){ - cpu_write(d, 0x9000, i); - cpu_program(d, 0xc000, banksize); - } - cpu_program(d, 0xe000, banksize); -} -function ppu_transfer(d, start, end, size) -{ -} +/*VRC7 FLASH MEMORY WRITE +generic CPU memory bank +cpu address|rom address |page|task +$8000-$9fff|0x02000-0x03fff|1 |write (0x2aaa & 0x1fff) + 0x8000 +$a000-$bfff|0x04000-0x05fff|2 |write (0x5555 & 0x1fff) + 0xa000 +$c000-$dfff|n * 0x2000 |n |write area +$e000-$efff|末尾 |fix |boot area, 未使用*/ +board <- { + mappernum = 85, vram_mirrorfind = false, ppu_ramfind = true, + cpu_rom = {banksize = 0x2000, size_max = 4 * mega, size_base = 1 * mega}, + cpu_ram = {banksize = 0x2000, size_max = 0x2000, size_base = 0x2000}, + ppu_rom = {banksize = 0x2000 / 8, size_max = 2 * mega, size_base = 1* mega} +}; +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0x8018, i | 1); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_write(d, 0x9000, 0x3e); + cpu_read(d, 0xc000, banksize * 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + cpu_write(d, 0xa000, 0); + for(local i = 0; i < pagesize; i += 8){ + local t = i; + for(local j = 0xa000; j < 0xe000; j += 0x1000){ + cpu_write(d, j, t++); + cpu_write(d, j+0x18, t++); + } + ppu_read(d, 0, banksize * 8); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0xe000, 0x80); + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0xe000, 0x00); +} + +/* +this is RC851/352402 style. RV051/353429 style is not supported. +352402: Program ROM/ Charcter RAM/ Backup RAM/ R1 = A5, R0 = A4/ Extra Sound +353429: Program ROM/ Charcter ROM/ R1 = A3, R0 = ? +*/ +function initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_command(d, 0, 0xc000, cpu_banksize); + cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); + cpu_command(d, 0x5555, 0xa000, cpu_banksize); + cpu_write(d, 0x8000, 1); + cpu_write(d, 0x8010, 2); + cpu_write(d, 0x9000, 0); +} +function cpu_transfer(d, start, end, banksize) +{ + for(local i = start; i < end - 1; i += 1){ + cpu_write(d, 0x9000, i); + cpu_program(d, 0xc000, banksize); + } + cpu_program(d, 0xe000, banksize); +} +function ppu_transfer(d, start, end, size) +{ +} diff --git a/client/trunk/anago/lz93d50.ai b/client/trunk/anago/lz93d50.ai index a9e9e19..5b4854e 100644 --- a/client/trunk/anago/lz93d50.ai +++ b/client/trunk/anago/lz93d50.ai @@ -1,130 +1,130 @@ -//cpu_dump, ppu_dump 内で同名の関数を呼んではいけない -function cpu_dump(d, pagesize, banksize) -{ - - for(local i = 0; i < pagesize - 1; i += 1){ - cpu_write(d, register_offset + 8, i); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); -} - -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 8){ - for(local j = 0; j < 8; j += 1){ - cpu_write(d, register_offset + j, i + j); - ppu_read(d, j * banksize, banksize); - } - } -} - -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_write(d, 0x8008, 0x00); - cpu_command(d, 0x0000, 0x8000, cpu_banksize); - cpu_command(d, 0x02aa, 0xc000, cpu_banksize); - cpu_command(d, 0x0555, 0xc000, cpu_banksize); - cpu_write(d, 0x8000, [0x0a, 0x15, 0]); - ppu_command(d, 0x2aaa, 0, ppu_banksize); - ppu_command(d, 0x5555, 0x0400, ppu_banksize); - ppu_command(d, 0, 0x0800, ppu_banksize); -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - for(local i = start; i < end - 1; i +=1){ - cpu_write(d, 0x8008, i); - cpu_program(d, 0x8000, cpu_banksize); - } - cpu_program(d, 0xc000, cpu_banksize); -} - -function ppu_transfer(d, start, end, ppu_banksize) -{ - for(local i = start; i < end; i +=4){ - cpu_write(d, 0x8004, [i, i+1, i+2, i+3]); - ppu_program(d, 0x1000, ppu_banksize * 4); - } -} -/* -$800d -7 data direction 0:FCG3->EEPROM (write), 1:EEPROM->FCG3 (read) -6 data, FCG3 -> EEPROM -5 clock - -$6000-$7fff -4 data, EEPROM -> FCG3 -*/ -const I2C_READBIT = 4; -const I2C_DIRBIT = 7; -const I2C_WRITEBIT = 6; -const I2C_CLOCKBIT = 5; - -I2C_DIR_READ <- 1 << I2C_DIRBIT; -I2C_DIR_WRITE <- 0 << I2C_DIRBIT; -I2C_SEND_H <- 1 << I2C_WRITEBIT; -I2C_SEND_L <- 0 << I2C_WRITEBIT; -I2C_CLOCK_H <- 1 << I2C_CLOCKBIT; -I2C_CLOCK_L <- 0 << I2C_CLOCKBIT; - -function i2c_start(d) -{ - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_H); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_L); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); -} - -function i2c_stop(d) -{ - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_L); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_H); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); - cpu_write(d, 0x800d, I2C_DIR_READ | I2C_CLOCK_L | I2C_SEND_H); -} - -function i2c_ack_wait(d) -{ - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); - cpu_write(d, 0x800d, I2C_DIR_READ | I2C_CLOCK_H | I2C_SEND_L); - local n = cpu_read_register(d, 0x6000, 0); - n = n & (1 << I2C_READBIT); - return n == 0; -} - - -function send_bit(d, v) -{ - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | v); - cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | v); -} - -function i2c_address_set(d, address, rw) -{ - do{ - local a = address; - i2c_start(d); - for(local i = 0; i < 7; i++){ - send_bit(d, a & I2C_SEND_H); - a = a << 1; - } - send_bit(d, rw); - }while(i2c_ack_wait(d) != true); -} - -function eeprom_address_set(d, address) -{ - for(local i = 0; i < 8; i++){ - local n = I2C_SEND_L; - if(address & 0x80){ - n = I2C_SEND_H; - } - send_bit(d, n); - address = address << 1; - } - i2c_ack_wait(d); -} +//cpu_dump, ppu_dump 内で同名の関数を呼んではいけない +function cpu_dump(d, pagesize, banksize) +{ + + for(local i = 0; i < pagesize - 1; i += 1){ + cpu_write(d, register_offset + 8, i); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); +} + +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 8){ + for(local j = 0; j < 8; j += 1){ + cpu_write(d, register_offset + j, i + j); + ppu_read(d, j * banksize, banksize); + } + } +} + +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_write(d, 0x8008, 0x00); + cpu_command(d, 0x0000, 0x8000, cpu_banksize); + cpu_command(d, 0x02aa, 0xc000, cpu_banksize); + cpu_command(d, 0x0555, 0xc000, cpu_banksize); + cpu_write(d, 0x8000, [0x0a, 0x15, 0]); + ppu_command(d, 0x2aaa, 0, ppu_banksize); + ppu_command(d, 0x5555, 0x0400, ppu_banksize); + ppu_command(d, 0, 0x0800, ppu_banksize); +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + for(local i = start; i < end - 1; i +=1){ + cpu_write(d, 0x8008, i); + cpu_program(d, 0x8000, cpu_banksize); + } + cpu_program(d, 0xc000, cpu_banksize); +} + +function ppu_transfer(d, start, end, ppu_banksize) +{ + for(local i = start; i < end; i +=4){ + cpu_write(d, 0x8004, [i, i+1, i+2, i+3]); + ppu_program(d, 0x1000, ppu_banksize * 4); + } +} +/* +$800d +7 data direction 0:FCG3->EEPROM (write), 1:EEPROM->FCG3 (read) +6 data, FCG3 -> EEPROM +5 clock + +$6000-$7fff +4 data, EEPROM -> FCG3 +*/ +const I2C_READBIT = 4; +const I2C_DIRBIT = 7; +const I2C_WRITEBIT = 6; +const I2C_CLOCKBIT = 5; + +I2C_DIR_READ <- 1 << I2C_DIRBIT; +I2C_DIR_WRITE <- 0 << I2C_DIRBIT; +I2C_SEND_H <- 1 << I2C_WRITEBIT; +I2C_SEND_L <- 0 << I2C_WRITEBIT; +I2C_CLOCK_H <- 1 << I2C_CLOCKBIT; +I2C_CLOCK_L <- 0 << I2C_CLOCKBIT; + +function i2c_start(d) +{ + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_H); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_L); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); +} + +function i2c_stop(d) +{ + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_L); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | I2C_SEND_H); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); + cpu_write(d, 0x800d, I2C_DIR_READ | I2C_CLOCK_L | I2C_SEND_H); +} + +function i2c_ack_wait(d) +{ + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_H); + cpu_write(d, 0x800d, I2C_DIR_READ | I2C_CLOCK_H | I2C_SEND_L); + local n = cpu_read_register(d, 0x6000, 0); + n = n & (1 << I2C_READBIT); + return n == 0; +} + + +function send_bit(d, v) +{ + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | I2C_SEND_L); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_L | v); + cpu_write(d, 0x800d, I2C_DIR_WRITE | I2C_CLOCK_H | v); +} + +function i2c_address_set(d, address, rw) +{ + do{ + local a = address; + i2c_start(d); + for(local i = 0; i < 7; i++){ + send_bit(d, a & I2C_SEND_H); + a = a << 1; + } + send_bit(d, rw); + }while(i2c_ack_wait(d) != true); +} + +function eeprom_address_set(d, address) +{ + for(local i = 0; i < 8; i++){ + local n = I2C_SEND_L; + if(address & 0x80){ + n = I2C_SEND_H; + } + send_bit(d, n); + address = address << 1; + } + i2c_ack_wait(d); +} diff --git a/client/trunk/anago/mmc1.ai b/client/trunk/anago/mmc1.ai index 5081efb..619d8bf 100644 --- a/client/trunk/anago/mmc1.ai +++ b/client/trunk/anago/mmc1.ai @@ -1,14 +1,14 @@ -//send 1bit serial 5 times -function mmc1_write(d, address, data) -{ - local ar = []; - for(local i = 0; i < 5; i++){ - ar.append(data); - data = data >> 1; - } - cpu_write(d, address, ar); - -/* for(local i = 0; i < 5; i++){ - cpu_write(d, address, data >> i); - }*/ -} +//send 1bit serial 5 times +function mmc1_write(d, address, data) +{ + local ar = []; + for(local i = 0; i < 5; i++){ + ar.append(data); + data = data >> 1; + } + cpu_write(d, address, ar); + +/* for(local i = 0; i < 5; i++){ + cpu_write(d, address, data >> i); + }*/ +} diff --git a/client/trunk/anago/namcot_108_3433.ad b/client/trunk/anago/namcot_108_3433.ad index c28ea04..a165675 100644 --- a/client/trunk/anago/namcot_108_3433.ad +++ b/client/trunk/anago/namcot_108_3433.ad @@ -1,44 +1,44 @@ -/* -Namcot 118/119 chip with Charcter ROM A16 wired PPU A12 - -Quinty -*/ -board <- { - mappernum = 88, vram_mirrorfind = true, ppu_ramfind = false, - cpu_rom = { - size_base = 0x10000, size_max = 1*mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0, size_max = 0, banksize = 0 - } - ppu_rom = { - size_base = 0x20000, size_max = 0x20000, - banksize = 0x0400 - } -}; - -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, [6, i, 7, i+1]); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_read(d, 0xc000, banksize * 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - local i; - //ROM offset 0x00000-0x0ffff can access from PPU address 0x0000-0x0fff - for(i = 0; i < (pagesize >> 1); i += 4){ - cpu_write(d, 0x8000, [0, i, 1, i+2]); - ppu_read(d, 0x0000, banksize * 4); - } - - //ROM offset 0x10000-0x1ffff can access from PPU address 0x1000-0x1fff - for(; i < pagesize; i += 4){ - cpu_write(d, 0x8000, [2, i, 3, i+1, 4, i+2, 5, i+3]); - ppu_read(d, 0x1000, banksize * 4); - } -} +/* +Namcot 118/119 chip with Charcter ROM A16 wired PPU A12 + +Quinty +*/ +board <- { + mappernum = 88, vram_mirrorfind = true, ppu_ramfind = false, + cpu_rom = { + size_base = 0x10000, size_max = 1*mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0, size_max = 0, banksize = 0 + } + ppu_rom = { + size_base = 0x20000, size_max = 0x20000, + banksize = 0x0400 + } +}; + +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, [6, i, 7, i+1]); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_read(d, 0xc000, banksize * 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + local i; + //ROM offset 0x00000-0x0ffff can access from PPU address 0x0000-0x0fff + for(i = 0; i < (pagesize >> 1); i += 4){ + cpu_write(d, 0x8000, [0, i, 1, i+2]); + ppu_read(d, 0x0000, banksize * 4); + } + + //ROM offset 0x10000-0x1ffff can access from PPU address 0x1000-0x1fff + for(; i < pagesize; i += 4){ + cpu_write(d, 0x8000, [2, i, 3, i+1, 4, i+2, 5, i+3]); + ppu_read(d, 0x1000, banksize * 4); + } +} diff --git a/client/trunk/anago/namcot_108_34xx_nintendo_derom.ad b/client/trunk/anago/namcot_108_34xx_nintendo_derom.ad index 0d25983..fea88fc 100644 --- a/client/trunk/anago/namcot_108_34xx_nintendo_derom.ad +++ b/client/trunk/anago/namcot_108_34xx_nintendo_derom.ad @@ -1,47 +1,47 @@ -/* -Namcot 108/109/118/119 chip with generic wiring. -PCB 3401/34[01]5/34[01]6/34[01]7/3451/3413/3414 - NES-DEROM/DE1ROM/DRROM - -この IC は MMC3 より先に登場し、 MMC3 に仕様が似ている。 -仕様が似ている点で,古いエミュレータでは mapper 4 と定義されている。 - -古くて曖昧な仕様は Namco IC と MMC3 との明確な区別が再定義され、 mapper -番号も 206 へ分離された。それにも関わらず Namco のゲームは MMC3 -(mapper 4)という認識と古い ROM image が消えないのはユーザーにとって -たいした違いがないからだ。 - -NAMCOT-MC, NAMCOT-SX で動作確認済み -*/ - -board <- { - mappernum = 206, vram_mirrorfind = true, ppu_ramfind = false, - cpu_rom = { - size_base = 0x10000, size_max = 1*mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0, size_max = 0, banksize = 0 - } - ppu_rom = { - size_base = 0x8000, size_max = 0x10000, - banksize = 0x0400 - } -}; -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x8000, [6, i, 7, i+1]); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_read(d, 0xc000, banksize * 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 8){ - cpu_write(d, 0x8000, [0, i, 1, i+2]); - cpu_write(d, 0x8000, [2, i+4, 3, i+5, 4, i+6, 5, i+7]); - ppu_read(d, 0x0000, banksize * 8); - } -} +/* +Namcot 108/109/118/119 chip with generic wiring. +PCB 3401/34[01]5/34[01]6/34[01]7/3451/3413/3414 + NES-DEROM/DE1ROM/DRROM + +この IC は MMC3 より先に登場し、 MMC3 に仕様が似ている。 +仕様が似ている点で,古いエミュレータでは mapper 4 と定義されている。 + +古くて曖昧な仕様は Namco IC と MMC3 との明確な区別が再定義され、 mapper +番号も 206 へ分離された。それにも関わらず Namco のゲームは MMC3 +(mapper 4)という認識と古い ROM image が消えないのはユーザーにとって +たいした違いがないからだ。 + +NAMCOT-MC, NAMCOT-SX で動作確認済み +*/ + +board <- { + mappernum = 206, vram_mirrorfind = true, ppu_ramfind = false, + cpu_rom = { + size_base = 0x10000, size_max = 1*mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0, size_max = 0, banksize = 0 + } + ppu_rom = { + size_base = 0x8000, size_max = 0x10000, + banksize = 0x0400 + } +}; +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x8000, [6, i, 7, i+1]); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_read(d, 0xc000, banksize * 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 8){ + cpu_write(d, 0x8000, [0, i, 1, i+2]); + cpu_write(d, 0x8000, [2, i+4, 3, i+5, 4, i+6, 5, i+7]); + ppu_read(d, 0x0000, banksize * 8); + } +} diff --git a/client/trunk/anago/namcot_163.ag b/client/trunk/anago/namcot_163.ag index 8a4649a..540aa3d 100644 --- a/client/trunk/anago/namcot_163.ag +++ b/client/trunk/anago/namcot_163.ag @@ -1,46 +1,46 @@ -/* -Namcot 129/163 - -No battery, no external RAM: - Star Wars (129), Namco Classic, Youkai Douchuki, Final Lap, - Erika to Satoru no Yumebouken, Rolling Thunder, Dragon Ninja, - Mappy Kids, Namco Classic II - -Battery-backuped Memory is used by an external RAM: - Sangokushi, King of Kings, Juvei Quest, - Megami Tensei II, Sangokushi II (uses IRQ) - -Battery-backuped Memory is used by an internal RAM: - Dokuganryu Masamune, Kaiju Monogatari, Mindseeker, Hydride3, - Famista '90, Battle Fleet -*/ -board <- { - mappernum = 19, - cpu_rom = { - size_base = 2 * mega, size_max = 4 * mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0x0080, size_max = 0x2000, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x0400 - }, - ppu_ramfind = false, - vram_mirrorfind = false -}; -dofile("namcot_19.ai"); - -function cpu_ram_access(d, pagesize, banksize) -{ - if(pagesize == 0){ //internal RAM - cpu_write(d, 0xf800, 0x80); //autoinrement on - cpu_ramrw(d, 0x4800, 0x80); - }else{ //external RAM - cpu_write(d, 0xf800, 0x40); - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0xf800, 0x4f); - } -} +/* +Namcot 129/163 + +No battery, no external RAM: + Star Wars (129), Namco Classic, Youkai Douchuki, Final Lap, + Erika to Satoru no Yumebouken, Rolling Thunder, Dragon Ninja, + Mappy Kids, Namco Classic II + +Battery-backuped Memory is used by an external RAM: + Sangokushi, King of Kings, Juvei Quest, + Megami Tensei II, Sangokushi II (uses IRQ) + +Battery-backuped Memory is used by an internal RAM: + Dokuganryu Masamune, Kaiju Monogatari, Mindseeker, Hydride3, + Famista '90, Battle Fleet +*/ +board <- { + mappernum = 19, + cpu_rom = { + size_base = 2 * mega, size_max = 4 * mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0x0080, size_max = 0x2000, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x0400 + }, + ppu_ramfind = false, + vram_mirrorfind = false +}; +dofile("namcot_19.ai"); + +function cpu_ram_access(d, pagesize, banksize) +{ + if(pagesize == 0){ //internal RAM + cpu_write(d, 0xf800, 0x80); //autoinrement on + cpu_ramrw(d, 0x4800, 0x80); + }else{ //external RAM + cpu_write(d, 0xf800, 0x40); + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0xf800, 0x4f); + } +} diff --git a/client/trunk/anago/namcot_175.ae b/client/trunk/anago/namcot_175.ae index 5bcf11c..14630b2 100644 --- a/client/trunk/anago/namcot_175.ae +++ b/client/trunk/anago/namcot_175.ae @@ -1,34 +1,34 @@ -/* -Namcot 175 - -Wagan Land 2, Famista'91, Family Circuit '91, Chibimaruko chan, -Heisei Tensai Bakabon - -Family Circuit '91 has Program ROM(4M), Charcter ROM and external -Battery Backuped WorkRAM. -*/ -board <- { - mappernum = 19, //210, - cpu_rom = { - size_base = 2 * mega, size_max = 4 * mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0x0800, size_max = 0x0800, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x0400 - }, - ppu_ramfind = false, - vram_mirrorfind = true -}; -dofile("namcot_19.ai"); - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0xc000, 0x01); - cpu_ramrw(d, 0x6000, 0x0800); - cpu_write(d, 0xc000, 0x00); -} +/* +Namcot 175 + +Wagan Land 2, Famista'91, Family Circuit '91, Chibimaruko chan, +Heisei Tensai Bakabon + +Family Circuit '91 has Program ROM(4M), Charcter ROM and external +Battery Backuped WorkRAM. +*/ +board <- { + mappernum = 19, //210, + cpu_rom = { + size_base = 2 * mega, size_max = 4 * mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0x0800, size_max = 0x0800, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x0400 + }, + ppu_ramfind = false, + vram_mirrorfind = true +}; +dofile("namcot_19.ai"); + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0xc000, 0x01); + cpu_ramrw(d, 0x6000, 0x0800); + cpu_write(d, 0xc000, 0x00); +} diff --git a/client/trunk/anago/namcot_19.ai b/client/trunk/anago/namcot_19.ai index 21a330a..07b5c69 100644 --- a/client/trunk/anago/namcot_19.ai +++ b/client/trunk/anago/namcot_19.ai @@ -1,76 +1,76 @@ -/* -iNES mapper #19 - -Many cartridges uses epoxies for ROM, RAM and mapper. Few cartridges -uses discrete parts. Other functions are various though the memory -mapping is common. - -The mistake of an old document is an etymology of 'namcot 106'. I have -seen mapper IC with 163 (well known chip), 129, 175 and 340 for #19. -I have never seen labeled IC with '106'. -'106' is informal virtual name, and the relic of old emulators. -*/ -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0xe000, i); - cpu_write(d, 0xe800, i | 1); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_write(d, 0xf000, 0x3e); - cpu_read(d, 0xc000, banksize * 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - cpu_write(d, 0xe800, 0xe0); - for(local i = 0; i < pagesize; i += 8){ - local address = 0x8000; - for(local j = 0; j < 8; j++){ - cpu_write(d, address, i | j); - address += 0x0800; - } - ppu_read(d, 0, banksize * 8); - } -} - -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_command(d, 0x0000, 0xa000, cpu_banksize); - cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); - cpu_command(d, 0x5555, 0xa000, cpu_banksize); - cpu_write(d, 0xe000, 0x41); - cpu_write(d, 0xe800, 0xe2); - - ppu_command(d, 0x0000, 0x0000, ppu_banksize); - ppu_command(d, 0x2aaa, 0x0400, ppu_banksize); - ppu_command(d, 0x5555, 0x0800, ppu_banksize); - cpu_write(d, 0x8000, 0x00); - cpu_write(d, 0x8800, 0x0a); - cpu_write(d, 0x9000, 0x15); - //map 0x2000-0x2fff is RAM - cpu_write(d, 0xc000, 0xe0); - cpu_write(d, 0xc800, 0xe0); - cpu_write(d, 0xd000, 0xe1); - cpu_write(d, 0xd800, 0xe1); -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - for(local i = start; i < end - 1; i += 1){ - cpu_write(d, 0xf000, i | 0xe0); - cpu_program(d, 0xc000, cpu_banksize); - } - cpu_program(d, 0xe000, cpu_banksize) -} - -function ppu_transfer(d, start, end, ppu_banksize) -{ - for(local i = start; i < end; i += 4){ - cpu_write(d, 0xa000, i); - cpu_write(d, 0xa800, i | 1); - cpu_write(d, 0xb000, i | 2); - cpu_write(d, 0xb800, i | 3); - ppu_program(d, 0x1000, ppu_banksize * 4); - } -} +/* +iNES mapper #19 + +Many cartridges uses epoxies for ROM, RAM and mapper. Few cartridges +uses discrete parts. Other functions are various though the memory +mapping is common. + +The mistake of an old document is an etymology of 'namcot 106'. I have +seen mapper IC with 163 (well known chip), 129, 175 and 340 for #19. +I have never seen labeled IC with '106'. +'106' is informal virtual name, and the relic of old emulators. +*/ +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0xe000, i); + cpu_write(d, 0xe800, i | 1); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_write(d, 0xf000, 0x3e); + cpu_read(d, 0xc000, banksize * 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + cpu_write(d, 0xe800, 0xe0); + for(local i = 0; i < pagesize; i += 8){ + local address = 0x8000; + for(local j = 0; j < 8; j++){ + cpu_write(d, address, i | j); + address += 0x0800; + } + ppu_read(d, 0, banksize * 8); + } +} + +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_command(d, 0x0000, 0xa000, cpu_banksize); + cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); + cpu_command(d, 0x5555, 0xa000, cpu_banksize); + cpu_write(d, 0xe000, 0x41); + cpu_write(d, 0xe800, 0xe2); + + ppu_command(d, 0x0000, 0x0000, ppu_banksize); + ppu_command(d, 0x2aaa, 0x0400, ppu_banksize); + ppu_command(d, 0x5555, 0x0800, ppu_banksize); + cpu_write(d, 0x8000, 0x00); + cpu_write(d, 0x8800, 0x0a); + cpu_write(d, 0x9000, 0x15); + //map 0x2000-0x2fff is RAM + cpu_write(d, 0xc000, 0xe0); + cpu_write(d, 0xc800, 0xe0); + cpu_write(d, 0xd000, 0xe1); + cpu_write(d, 0xd800, 0xe1); +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + for(local i = start; i < end - 1; i += 1){ + cpu_write(d, 0xf000, i | 0xe0); + cpu_program(d, 0xc000, cpu_banksize); + } + cpu_program(d, 0xe000, cpu_banksize) +} + +function ppu_transfer(d, start, end, ppu_banksize) +{ + for(local i = start; i < end; i += 4){ + cpu_write(d, 0xa000, i); + cpu_write(d, 0xa800, i | 1); + cpu_write(d, 0xb000, i | 2); + cpu_write(d, 0xb800, i | 3); + ppu_program(d, 0x1000, ppu_banksize * 4); + } +} diff --git a/client/trunk/anago/namcot_340.ad b/client/trunk/anago/namcot_340.ad index 4c5e4a9..e46437e 100644 --- a/client/trunk/anago/namcot_340.ad +++ b/client/trunk/anago/namcot_340.ad @@ -1,24 +1,24 @@ -/* -Namcot 340 - -Splatter House, Top Striker, Famista '92, Dream Master, -Wagan Land3, Famista '93, Famista '94 -*/ -board <- { - mappernum = 19, //210, - cpu_rom = { - size_base = 2 * mega, size_max = 4 * mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0x0800, size_max = 0x0800, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 2 * mega, size_max = 2 * mega, - banksize = 0x0400 - }, - ppu_ramfind = false, - vram_mirrorfind = false -}; -dofile("namcot_19.ai"); +/* +Namcot 340 + +Splatter House, Top Striker, Famista '92, Dream Master, +Wagan Land3, Famista '93, Famista '94 +*/ +board <- { + mappernum = 19, //210, + cpu_rom = { + size_base = 2 * mega, size_max = 4 * mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0x0800, size_max = 0x0800, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 2 * mega, size_max = 2 * mega, + banksize = 0x0400 + }, + ppu_ramfind = false, + vram_mirrorfind = false +}; +dofile("namcot_19.ai"); diff --git a/client/trunk/anago/nintendo_mmc1_skrom.ag b/client/trunk/anago/nintendo_mmc1_skrom.ag index 99476ae..6230d5c 100644 --- a/client/trunk/anago/nintendo_mmc1_skrom.ag +++ b/client/trunk/anago/nintendo_mmc1_skrom.ag @@ -1,106 +1,106 @@ -board <- { - mappernum = 1, vram_mirrorfind = false, ppu_ramfind = true, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x4000, - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x1000, - } -}; - -dofile("mmc1.ai"); - -function cpu_dump(d, pagesize, banksize) -{ - cpu_write(d, 0x8000, 0x80); //serial count reset - mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration - for(local i = 0; i < pagesize - 1; i += 1){ - mmc1_write(d, 0xe000, i | 0x10); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); -} - -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 2){ - mmc1_write(d, 0xa000, i); - mmc1_write(d, 0xc000, i | 1); - ppu_read(d, 0, banksize * 2); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - mmc1_write(d, 0x8000, 1 << 3); - mmc1_write(d, 0xe000, 0); - mmc1_write(d, 0xa000, 0); - cpu_ramrw(d, 0x6000, banksize); - mmc1_write(d, 0xe000, 0xff); -} - -/* -MMC1 ROM 2M + (ROM 1M or RAM) board -CPU memory bank for SLROM, SKROM, SGROM, SNROM -cpu address|rom address |page|task -$8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area -$c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555 ---------------------------------- -$8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa -$c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area - -PPU memory bank for SLROM, SKROM -ppu area use command only mask A0-A10 device -ppu address|rom address |page|task -$0000-$0fff|0x00000 * n |n |write area + 0x2aa + 0x555 -$0000-$1fff|0x01000 * n |n+1 |write area -*/ -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_write(d, 0x8000, 0x80); - mmc1_write(d, 0xa000, 0x10); //SNROM + MMC1A disable W-RAM - mmc1_write(d, 0x8000, 0x1c); - mmc1_write(d, 0xe000, 0x10); //MMC1B disable W-RAM - cpu_command(d, 0x0000, 0x8000, cpu_banksize); - cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); - cpu_command(d, 0x5555, 0xc000, cpu_banksize); - - ppu_command(d, 0x0000, 0, ppu_banksize); - ppu_command(d, 0x02aa, 0, ppu_banksize); - ppu_command(d, 0x0555, 0, ppu_banksize); -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - local i = 0; - local wram = 1 << 4; //W-RAM disable flag - for(i = start; i < end - 2; i += 2){ - mmc1_write(d, 0x8000, 0x1c); - mmc1_write(d, 0xe000, i | 0 | wram); - cpu_program(d, 0x8000, cpu_banksize); - - mmc1_write(d, 0x8000, 0x18); - mmc1_write(d, 0xe000, i | 1 | wram); - cpu_program(d, 0xc000, cpu_banksize); - } - mmc1_write(d, 0x8000, 0x1c); - mmc1_write(d, 0xe000, i | wram); - cpu_program(d, 0x8000, cpu_banksize); - cpu_program(d, 0xc000, cpu_banksize); -} - -function ppu_transfer(d, start, end, ppu_banksize) -{ - for(local i = start; i < end; i+=2){ - mmc1_write(d, 0xa000, i) - mmc1_write(d, 0xc000, i | 1); - ppu_program(d, 0x0000, ppu_banksize * 2); - } -} - +board <- { + mappernum = 1, vram_mirrorfind = false, ppu_ramfind = true, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x4000, + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x1000, + } +}; + +dofile("mmc1.ai"); + +function cpu_dump(d, pagesize, banksize) +{ + cpu_write(d, 0x8000, 0x80); //serial count reset + mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration + for(local i = 0; i < pagesize - 1; i += 1){ + mmc1_write(d, 0xe000, i | 0x10); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); +} + +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 2){ + mmc1_write(d, 0xa000, i); + mmc1_write(d, 0xc000, i | 1); + ppu_read(d, 0, banksize * 2); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + mmc1_write(d, 0x8000, 1 << 3); + mmc1_write(d, 0xe000, 0); + mmc1_write(d, 0xa000, 0); + cpu_ramrw(d, 0x6000, banksize); + mmc1_write(d, 0xe000, 0xff); +} + +/* +MMC1 ROM 2M + (ROM 1M or RAM) board +CPU memory bank for SLROM, SKROM, SGROM, SNROM +cpu address|rom address |page|task +$8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area +$c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555 +--------------------------------- +$8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa +$c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area + +PPU memory bank for SLROM, SKROM +ppu area use command only mask A0-A10 device +ppu address|rom address |page|task +$0000-$0fff|0x00000 * n |n |write area + 0x2aa + 0x555 +$0000-$1fff|0x01000 * n |n+1 |write area +*/ +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_write(d, 0x8000, 0x80); + mmc1_write(d, 0xa000, 0x10); //SNROM + MMC1A disable W-RAM + mmc1_write(d, 0x8000, 0x1c); + mmc1_write(d, 0xe000, 0x10); //MMC1B disable W-RAM + cpu_command(d, 0x0000, 0x8000, cpu_banksize); + cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); + cpu_command(d, 0x5555, 0xc000, cpu_banksize); + + ppu_command(d, 0x0000, 0, ppu_banksize); + ppu_command(d, 0x02aa, 0, ppu_banksize); + ppu_command(d, 0x0555, 0, ppu_banksize); +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + local i = 0; + local wram = 1 << 4; //W-RAM disable flag + for(i = start; i < end - 2; i += 2){ + mmc1_write(d, 0x8000, 0x1c); + mmc1_write(d, 0xe000, i | 0 | wram); + cpu_program(d, 0x8000, cpu_banksize); + + mmc1_write(d, 0x8000, 0x18); + mmc1_write(d, 0xe000, i | 1 | wram); + cpu_program(d, 0xc000, cpu_banksize); + } + mmc1_write(d, 0x8000, 0x1c); + mmc1_write(d, 0xe000, i | wram); + cpu_program(d, 0x8000, cpu_banksize); + cpu_program(d, 0xc000, cpu_banksize); +} + +function ppu_transfer(d, start, end, ppu_banksize) +{ + for(local i = start; i < end; i+=2){ + mmc1_write(d, 0xa000, i) + mmc1_write(d, 0xc000, i | 1); + ppu_program(d, 0x0000, ppu_banksize * 2); + } +} + diff --git a/client/trunk/anago/nintendo_mmc1_surom.ag b/client/trunk/anago/nintendo_mmc1_surom.ag index 87c5853..0c14363 100644 --- a/client/trunk/anago/nintendo_mmc1_surom.ag +++ b/client/trunk/anago/nintendo_mmc1_surom.ag @@ -1,113 +1,113 @@ -/* -SUROM: -Dragon Quest IV, Dragon Warrior III, Dragon Warrior IV, Ninjara Hoi! -SXROM: -Best Play Pro Yakyuu Special, Final Fantasy I & II -*/ -board <- { - mappernum = 1, vram_mirrorfind = false, ppu_ramfind = false, - cpu_rom = { - size_base = 4 * mega, size_max = 4 * mega, - banksize = 0x4000, - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x8000, - banksize = 0x2000 - }, - ppu_rom = { - size_base = 0, size_max = 0, - banksize = 0x1000, - } -}; - -dofile("mmc1.ai"); - -function cpu_dump(d, pagesize, banksize) -{ - cpu_write(d, 0x8000, 0x80); //serial count reset - mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration - for(local i = 0; i < pagesize; i += 0x10){ - mmc1_write(d, 0xa000, (i & 0x10) | 1); - for(local j = 0; j < 0x10 - 1; j += 1){ - mmc1_write(d, 0xe000, j | 0x10); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); - } -} - -/* -http://nesdevwiki.org/wiki/SXROM - CHR bank 0 (internal, $A000-$BFFF) -4bit0 ------ -PSSxC -||| | -||| +- Select 4 KB CHR RAM bank at PPU $0000 (ignored in 8 KB mode) -|++--- Select 8 KB PRG RAM bank -+----- Select 256 KB PRG ROM bank -*/ - -function cpu_ram_access(d, pagesize, banksize) -{ - local sxrom_page = [0, 2 << 2, 1 << 2, 3 << 2]; - cpu_write(d, 0x8000, 0x80); //serial count reset - mmc1_write(d, 0x8000, 1 << 3); - mmc1_write(d, 0xe000, 0); - for(local i = 0; i < pagesize; i += 1){ -// mmc1_write(d, 0xa000, (i & 0x03) << 2); - mmc1_write(d, 0xa000, sxrom_page[i]); - cpu_ramrw(d, 0x6000, banksize); - } - mmc1_write(d, 0xe000, 0xff); -} - -/* -SUROM SXROM CPU memory bank -cpu address|rom address |page|task ---SNROM area -- even ---------------- -$8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area -$c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555 ---SNROM area -- odd ----------------- -$8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa -$c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area ---SUROM area -- even ---------------- -$8000-$bfff|n * 0x4000|even 0x20|write 0x2aaa + write area -$c000-$ffff|0x7c000-0x7ffff|fix |write 0x5555 ---SUROM area -- odd ----------------- -$8000-$bfff|0x40000-0x43fff|fix |write 0x2aaa -$c000-$ffff|n * 0x4000|odd 0x21|write 0x5555 + write area -*/ -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_write(d, 0x8000, 0x80); - cpu_command(d, 0, 0x8000, cpu_banksize); - cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); - cpu_command(d, 0x5555, 0xc000, cpu_banksize); - mmc1_write(d, 0x8000, 0x0c); - mmc1_write(d, 0xe000, 0x10); //cpubank #0 - mmc1_write(d, 0xa000, 0); //ROM area 1st 2M -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - local wram = 1 << 4; //W-RAM disable flag - for(local k = 0; k < 0x20; k += 0x10){ - mmc1_write(d, 0xa000, k); - for(local i = 0; i < 0x10; i += 2){ - //even page - mmc1_write(d, 0x8000, 0x0c); - mmc1_write(d, 0xe000, i | 0 | wram); - cpu_program(d, 0x8000, cpu_banksize); - - //odd page - mmc1_write(d, 0x8000, 0x08); - mmc1_write(d, 0xe000, i | 1 | wram); - cpu_program(d, 0xc000, cpu_banksize); - } - } -} - -function ppu_transfer(d, start, end, bank) -{ -} +/* +SUROM: +Dragon Quest IV, Dragon Warrior III, Dragon Warrior IV, Ninjara Hoi! +SXROM: +Best Play Pro Yakyuu Special, Final Fantasy I & II +*/ +board <- { + mappernum = 1, vram_mirrorfind = false, ppu_ramfind = false, + cpu_rom = { + size_base = 4 * mega, size_max = 4 * mega, + banksize = 0x4000, + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x8000, + banksize = 0x2000 + }, + ppu_rom = { + size_base = 0, size_max = 0, + banksize = 0x1000, + } +}; + +dofile("mmc1.ai"); + +function cpu_dump(d, pagesize, banksize) +{ + cpu_write(d, 0x8000, 0x80); //serial count reset + mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration + for(local i = 0; i < pagesize; i += 0x10){ + mmc1_write(d, 0xa000, (i & 0x10) | 1); + for(local j = 0; j < 0x10 - 1; j += 1){ + mmc1_write(d, 0xe000, j | 0x10); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); + } +} + +/* +http://nesdevwiki.org/wiki/SXROM + CHR bank 0 (internal, $A000-$BFFF) +4bit0 +----- +PSSxC +||| | +||| +- Select 4 KB CHR RAM bank at PPU $0000 (ignored in 8 KB mode) +|++--- Select 8 KB PRG RAM bank ++----- Select 256 KB PRG ROM bank +*/ + +function cpu_ram_access(d, pagesize, banksize) +{ + local sxrom_page = [0, 2 << 2, 1 << 2, 3 << 2]; + cpu_write(d, 0x8000, 0x80); //serial count reset + mmc1_write(d, 0x8000, 1 << 3); + mmc1_write(d, 0xe000, 0); + for(local i = 0; i < pagesize; i += 1){ +// mmc1_write(d, 0xa000, (i & 0x03) << 2); + mmc1_write(d, 0xa000, sxrom_page[i]); + cpu_ramrw(d, 0x6000, banksize); + } + mmc1_write(d, 0xe000, 0xff); +} + +/* +SUROM SXROM CPU memory bank +cpu address|rom address |page|task +--SNROM area -- even ---------------- +$8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area +$c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555 +--SNROM area -- odd ----------------- +$8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa +$c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area +--SUROM area -- even ---------------- +$8000-$bfff|n * 0x4000|even 0x20|write 0x2aaa + write area +$c000-$ffff|0x7c000-0x7ffff|fix |write 0x5555 +--SUROM area -- odd ----------------- +$8000-$bfff|0x40000-0x43fff|fix |write 0x2aaa +$c000-$ffff|n * 0x4000|odd 0x21|write 0x5555 + write area +*/ +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_write(d, 0x8000, 0x80); + cpu_command(d, 0, 0x8000, cpu_banksize); + cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); + cpu_command(d, 0x5555, 0xc000, cpu_banksize); + mmc1_write(d, 0x8000, 0x0c); + mmc1_write(d, 0xe000, 0x10); //cpubank #0 + mmc1_write(d, 0xa000, 0); //ROM area 1st 2M +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + local wram = 1 << 4; //W-RAM disable flag + for(local k = 0; k < 0x20; k += 0x10){ + mmc1_write(d, 0xa000, k); + for(local i = 0; i < 0x10; i += 2){ + //even page + mmc1_write(d, 0x8000, 0x0c); + mmc1_write(d, 0xe000, i | 0 | wram); + cpu_program(d, 0x8000, cpu_banksize); + + //odd page + mmc1_write(d, 0x8000, 0x08); + mmc1_write(d, 0xe000, i | 1 | wram); + cpu_program(d, 0xc000, cpu_banksize); + } + } +} + +function ppu_transfer(d, start, end, bank) +{ +} diff --git a/client/trunk/anago/nintendo_mmc4_fkrom.ae b/client/trunk/anago/nintendo_mmc4_fkrom.ae index 3a347e2..468ffa2 100644 --- a/client/trunk/anago/nintendo_mmc4_fkrom.ae +++ b/client/trunk/anago/nintendo_mmc4_fkrom.ae @@ -1,83 +1,83 @@ -/* -HVC-2I Fire Emblem Gaiden -command line option -./anago d22 mmc4_fkrom.ae hvc_2i.nes b -*/ -board <- { - mappernum = 10, vram_mirrorfind = false, ppu_ramfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x4000, - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, - banksize = 0x2000, - }, - ppu_rom = { - size_base = 0x10000, size_max = 1 * mega, - banksize = 0x1000 - } -}; - -/* -[cpu memmorymap - read] -$6000-$7fff SRAM (battery backuped, optional) -$8000-$bfff program ROM bank #0 -$c000-$ffff program ROM bank #1 (fixed) - -[cpu memmorymap - write] -$a000-$afff program ROM bank register #0 -$b000-$bfff charcter ROM bank register #0 -$c000-$cfff charcter ROM bank register #1 -$d000-$dfff charcter ROM bank register #2 -$d000-$dfff charcter ROM bank register #3 - -[ppu memorymap - read] -0x0000-0x0fff charcter ROM bank #A (#0 or #1) -0x0fd0-0x0fdf charcter ROM bank register switch to #0 -0x0fe0-0x0fef charcter ROM bank register switch to #1 -0x1000-0x1fff charcter ROM bank #B (#2 or #3) -0x1fd0-0x1fdf charcter ROM bank register switch to #2 -0x1fe0-0x1fef charcter ROM bank register switch to #3 -*/ -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 1; i += 1){ - cpu_write(d, 0xa000, i); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); -} - -/* -PPU の read 途中にバンクレジスタが切り替わるらしいので下記の処理で -同じデータを得るようにする。 -PPU address register -0x0000-0x0fdf -> #0 -0x0fe0-0x0fff -> #1 -0x1000-0x1fdf -> #2 -0x1fe0-0x1fff -> #3 - -ppu_read 前に #0 + #1 , #2 + #3 の内容は同じにしておく。 -*/ -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 2){ - ppu_read(d, 0x0fd0, 0); - cpu_write(d, 0xb000, i); - ppu_read(d, 0x0fe0, 0); - cpu_write(d, 0xc000, i); - - ppu_read(d, 0x1fd0, 0); - cpu_write(d, 0xd000, i + 1); - ppu_read(d, 0x1fe0, 0); - cpu_write(d, 0xe000, i + 1); - - ppu_read(d, 0, banksize * 2); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_ramrw(d, 0x6000, banksize); -} +/* +HVC-2I Fire Emblem Gaiden +command line option +./anago d22 mmc4_fkrom.ae hvc_2i.nes b +*/ +board <- { + mappernum = 10, vram_mirrorfind = false, ppu_ramfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x4000, + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, + banksize = 0x2000, + }, + ppu_rom = { + size_base = 0x10000, size_max = 1 * mega, + banksize = 0x1000 + } +}; + +/* +[cpu memmorymap - read] +$6000-$7fff SRAM (battery backuped, optional) +$8000-$bfff program ROM bank #0 +$c000-$ffff program ROM bank #1 (fixed) + +[cpu memmorymap - write] +$a000-$afff program ROM bank register #0 +$b000-$bfff charcter ROM bank register #0 +$c000-$cfff charcter ROM bank register #1 +$d000-$dfff charcter ROM bank register #2 +$d000-$dfff charcter ROM bank register #3 + +[ppu memorymap - read] +0x0000-0x0fff charcter ROM bank #A (#0 or #1) +0x0fd0-0x0fdf charcter ROM bank register switch to #0 +0x0fe0-0x0fef charcter ROM bank register switch to #1 +0x1000-0x1fff charcter ROM bank #B (#2 or #3) +0x1fd0-0x1fdf charcter ROM bank register switch to #2 +0x1fe0-0x1fef charcter ROM bank register switch to #3 +*/ +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 1; i += 1){ + cpu_write(d, 0xa000, i); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); +} + +/* +PPU の read 途中にバンクレジスタが切り替わるらしいので下記の処理で +同じデータを得るようにする。 +PPU address register +0x0000-0x0fdf -> #0 +0x0fe0-0x0fff -> #1 +0x1000-0x1fdf -> #2 +0x1fe0-0x1fff -> #3 + +ppu_read 前に #0 + #1 , #2 + #3 の内容は同じにしておく。 +*/ +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 2){ + ppu_read(d, 0x0fd0, 0); + cpu_write(d, 0xb000, i); + ppu_read(d, 0x0fe0, 0); + cpu_write(d, 0xc000, i); + + ppu_read(d, 0x1fd0, 0); + cpu_write(d, 0xd000, i + 1); + ppu_read(d, 0x1fe0, 0); + cpu_write(d, 0xe000, i + 1); + + ppu_read(d, 0, banksize * 2); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_ramrw(d, 0x6000, banksize); +} diff --git a/client/trunk/anago/nrom.ad b/client/trunk/anago/nrom.ad index 2995d62..7ae38fa 100644 --- a/client/trunk/anago/nrom.ad +++ b/client/trunk/anago/nrom.ad @@ -1,21 +1,21 @@ -board <- { - mappernum = 0, - cpu_rom = { - size_base = 0x8000, size_max = 0x8000 - banksize = 0x8000 - }, - ppu_rom= { - size_base = 0x8000, size_max = 0x2000, - banksize = 0x2000 - }, - ppu_ramfind = false, vram_mirrorfind = true -}; -function cpu_dump(d, pagesize, banksize) -{ - cpu_read(d, 0x8000, 0x4000); - cpu_read(d, 0xc000, 0x4000); -} -function ppu_dump(d, pagesize, banksize) -{ - ppu_read(d, 0, banksize); -} +board <- { + mappernum = 0, + cpu_rom = { + size_base = 0x8000, size_max = 0x8000 + banksize = 0x8000 + }, + ppu_rom= { + size_base = 0x8000, size_max = 0x2000, + banksize = 0x2000 + }, + ppu_ramfind = false, vram_mirrorfind = true +}; +function cpu_dump(d, pagesize, banksize) +{ + cpu_read(d, 0x8000, 0x4000); + cpu_read(d, 0xc000, 0x4000); +} +function ppu_dump(d, pagesize, banksize) +{ + ppu_read(d, 0, banksize); +} diff --git a/client/trunk/anago/sunsoft-4.ae b/client/trunk/anago/sunsoft-4.ae index 13b1e99..044542d 100644 --- a/client/trunk/anago/sunsoft-4.ae +++ b/client/trunk/anago/sunsoft-4.ae @@ -1,63 +1,63 @@ -board <- { - mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x4000 - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x0800 - } -}; - -function cpu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize - 1; i += 1){ - cpu_write(d, 0xf000, i); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); -} - -/* -After Burner CRC32 list -0x88f202f0 Program ROM -0x10935d10 Charcter ROM #0 -0x0bc56f7a Charcter ROM #1 -0xa75cb06d Charcter ROM #0+#1 -0xf2ce3641 total -*/ -function ppu_dump(d, pagesize, banksize) -{ - //dump uses 0x0000-0x1fff -/* for(local i = 0; i < pagesize; i += 4){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0x9000, i | 1); - cpu_write(d, 0xa000, i | 2); - cpu_write(d, 0xb000, i | 3); - ppu_read(d, 0, banksize * 4); - } - //dump uses 0x2000-0x27ff*/ -/* cpu_write(d, 0xe000, 0x10); - for(local i = 0; i < pagesize*2; i += 2){ - cpu_write(d, 0xc000, i); - cpu_write(d, 0xd000, i | 1); - ppu_read(d, 0x2000, banksize); - }*/ - //dump uses 0x2000-0x23ff*/ - cpu_write(d, 0xe000, 0x13); - for(local i = 0; i < pagesize*2; i += 1){ - cpu_write(d, 0xd000, i); - ppu_read(d, 0x2000, 0x400); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0xf000, 0x10); - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0xf000, 0); -} +board <- { + mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x4000 + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x0800 + } +}; + +function cpu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize - 1; i += 1){ + cpu_write(d, 0xf000, i); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); +} + +/* +After Burner CRC32 list +0x88f202f0 Program ROM +0x10935d10 Charcter ROM #0 +0x0bc56f7a Charcter ROM #1 +0xa75cb06d Charcter ROM #0+#1 +0xf2ce3641 total +*/ +function ppu_dump(d, pagesize, banksize) +{ + //dump uses 0x0000-0x1fff +/* for(local i = 0; i < pagesize; i += 4){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0x9000, i | 1); + cpu_write(d, 0xa000, i | 2); + cpu_write(d, 0xb000, i | 3); + ppu_read(d, 0, banksize * 4); + } + //dump uses 0x2000-0x27ff*/ +/* cpu_write(d, 0xe000, 0x10); + for(local i = 0; i < pagesize*2; i += 2){ + cpu_write(d, 0xc000, i); + cpu_write(d, 0xd000, i | 1); + ppu_read(d, 0x2000, banksize); + }*/ + //dump uses 0x2000-0x23ff*/ + cpu_write(d, 0xe000, 0x13); + for(local i = 0; i < pagesize*2; i += 1){ + cpu_write(d, 0xd000, i); + ppu_read(d, 0x2000, 0x400); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0xf000, 0x10); + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0xf000, 0); +} diff --git a/client/trunk/anago/sunsoft-4.ag b/client/trunk/anago/sunsoft-4.ag index f7f7f80..a3cc6a2 100644 --- a/client/trunk/anago/sunsoft-4.ag +++ b/client/trunk/anago/sunsoft-4.ag @@ -1,131 +1,131 @@ -board <- { - mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x4000 - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 - }, - ppu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x0800 - } -}; - -/* -SUNSOFT-4 manages, banksize:0x4000, pagesize:0x10 -[Nantetatte Baseball] -page 0 to 7: -uses subcartridge + SUNSOFT-6 controller -page 8 to F: -main PCB ROM data, data size is 0x20000 - -[other games] -ROM size is 0x20000, page 0 to 7 and page 8 to f are same data (mirrored). -*/ -function cpu_dump(d, pagesize, banksize) -{ - local i; - if(pagesize == 8){ - i = 8; - pagesize += 8; - }else{ - i = 0; - } - //page 0 to 7 uses via Nanntettate! Baseball Subcartridge - for(; i < 8; i += 1){ - cpu_write(d, 0xf000, i); //set page and enable SUNSOFT-6 (disable Workram) - cpu_write(d, 0x6000, 0); //active ROM - cpu_read(d, 0x8000, banksize); - } - //page 8 to 0xe uses normal ROM - for(; i < pagesize - 1; i += 1){ - cpu_write(d, 0xf000, i); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xc000, banksize); -} - -/* -SUNSOFT-4 can map Charcter ROM to nametable area. - -Charcter data (0x0000 to 0x1fff) banksize is 0x0800 -Nametable data (0x2000 to 0x2fff) banksize is 0x0400 - -Charcter data -A[17:11] = reg[6:0] -A[10:0] = PPU A[10:0] - -Nametable data -A[17] = 1 -A[16:10] = reg[6:0] -A[9:0] = PPU A[9:0] - -After Burner CRC32 list -0x88f202f0 Program ROM -0x10935d10 Charcter ROM #0 -0x0bc56f7a Charcter ROM #1 -0xa75cb06d Charcter ROM #0+#1 -0xf2ce3641 total -*/ -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 4){ - cpu_write(d, 0x8000, i); - cpu_write(d, 0x9000, i | 1); - cpu_write(d, 0xa000, i | 2); - cpu_write(d, 0xb000, i | 3); - ppu_read(d, 0, banksize * 4); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0xf000, 0x10); //enable Workram, disable SUNSOFT-6 - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0xf000, 0); -} - -/* -SUNSOFT-4 has single switchable CPU bank. flash memory program address bit can uses A10:0 type. -[CPU] -$8000-$ffff -> programming area - -[PPU] -0x0000-0x07ff -> 0x02800-0x02fff, uses 0x2aaa -0x0800-0x0fff -> 0x05000-0x05800, uses 0x5555 -0x1000-0x17ff -> ID area (reserved) -0x1800-0x1fff -> programming area -*/ -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - cpu_command(d, 0x0000, 0x8000, cpu_banksize); - cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); - cpu_command(d, 0x5555, 0xc000, cpu_banksize); - cpu_write(d, 0xf000, 0); //disable Workram - - ppu_command(d, 0x2aaa, 0x0000, ppu_banksize); - cpu_write(d, 0x8000, 0x05); - ppu_command(d, 0x5555, 0x0800, ppu_banksize); - cpu_write(d, 0x9000, 0x0a); - ppu_command(d, 0x0000, 0x1000, ppu_banksize); - cpu_write(d, 0xa000, 0); -} - -function cpu_transfer(d, start, end, banksize) -{ - for(local i = start; i < end - 1; i += 1){ - cpu_write(d, 0xf000, i); - cpu_program(d, 0x8000, banksize); - } - cpu_program(d, 0xc000, banksize) -} - -function ppu_transfer(d, start, end, banksize) -{ - for(local i = start; i < end; i += 1){ - cpu_write(d, 0xb000, i); - ppu_program(d, 0x1800, banksize); - } -} +board <- { + mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x4000 + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 + }, + ppu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x0800 + } +}; + +/* +SUNSOFT-4 manages, banksize:0x4000, pagesize:0x10 +[Nantetatte Baseball] +page 0 to 7: +uses subcartridge + SUNSOFT-6 controller +page 8 to F: +main PCB ROM data, data size is 0x20000 + +[other games] +ROM size is 0x20000, page 0 to 7 and page 8 to f are same data (mirrored). +*/ +function cpu_dump(d, pagesize, banksize) +{ + local i; + if(pagesize == 8){ + i = 8; + pagesize += 8; + }else{ + i = 0; + } + //page 0 to 7 uses via Nanntettate! Baseball Subcartridge + for(; i < 8; i += 1){ + cpu_write(d, 0xf000, i); //set page and enable SUNSOFT-6 (disable Workram) + cpu_write(d, 0x6000, 0); //active ROM + cpu_read(d, 0x8000, banksize); + } + //page 8 to 0xe uses normal ROM + for(; i < pagesize - 1; i += 1){ + cpu_write(d, 0xf000, i); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xc000, banksize); +} + +/* +SUNSOFT-4 can map Charcter ROM to nametable area. + +Charcter data (0x0000 to 0x1fff) banksize is 0x0800 +Nametable data (0x2000 to 0x2fff) banksize is 0x0400 + +Charcter data +A[17:11] = reg[6:0] +A[10:0] = PPU A[10:0] + +Nametable data +A[17] = 1 +A[16:10] = reg[6:0] +A[9:0] = PPU A[9:0] + +After Burner CRC32 list +0x88f202f0 Program ROM +0x10935d10 Charcter ROM #0 +0x0bc56f7a Charcter ROM #1 +0xa75cb06d Charcter ROM #0+#1 +0xf2ce3641 total +*/ +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 4){ + cpu_write(d, 0x8000, i); + cpu_write(d, 0x9000, i | 1); + cpu_write(d, 0xa000, i | 2); + cpu_write(d, 0xb000, i | 3); + ppu_read(d, 0, banksize * 4); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0xf000, 0x10); //enable Workram, disable SUNSOFT-6 + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0xf000, 0); +} + +/* +SUNSOFT-4 has single switchable CPU bank. flash memory program address bit can uses A10:0 type. +[CPU] +$8000-$ffff -> programming area + +[PPU] +0x0000-0x07ff -> 0x02800-0x02fff, uses 0x2aaa +0x0800-0x0fff -> 0x05000-0x05800, uses 0x5555 +0x1000-0x17ff -> ID area (reserved) +0x1800-0x1fff -> programming area +*/ +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + cpu_command(d, 0x0000, 0x8000, cpu_banksize); + cpu_command(d, 0x2aaa, 0x8000, cpu_banksize); + cpu_command(d, 0x5555, 0xc000, cpu_banksize); + cpu_write(d, 0xf000, 0); //disable Workram + + ppu_command(d, 0x2aaa, 0x0000, ppu_banksize); + cpu_write(d, 0x8000, 0x05); + ppu_command(d, 0x5555, 0x0800, ppu_banksize); + cpu_write(d, 0x9000, 0x0a); + ppu_command(d, 0x0000, 0x1000, ppu_banksize); + cpu_write(d, 0xa000, 0); +} + +function cpu_transfer(d, start, end, banksize) +{ + for(local i = start; i < end - 1; i += 1){ + cpu_write(d, 0xf000, i); + cpu_program(d, 0x8000, banksize); + } + cpu_program(d, 0xc000, banksize) +} + +function ppu_transfer(d, start, end, banksize) +{ + for(local i = start; i < end; i += 1){ + cpu_write(d, 0xb000, i); + ppu_program(d, 0x1800, banksize); + } +} diff --git a/client/trunk/anago/sunsoft-4s.ad b/client/trunk/anago/sunsoft-4s.ad index 113c6dd..703b305 100644 --- a/client/trunk/anago/sunsoft-4s.ad +++ b/client/trunk/anago/sunsoft-4s.ad @@ -1,23 +1,23 @@ -board <- { - mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, - cpu_rom = { - size_base = 0x4000, size_max = 2 * mega, - banksize = 0x4000 - }, - cpu_ram = { - size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 - }, - ppu_rom = { - size_base = 0, size_max = 0, - banksize = 0x0800 - } -}; - -function cpu_dump(d, pagesize, banksize) -{ - cpu_write(d, 0xf000, 7); - cpu_write(d, 0x6000, 0x0d); -// cpu_write(d, 0x6000, 0xb0); - cpu_read(d, 0x8000, 0x2000); - cpu_read(d, 0xa000, 0x2000); -} +board <- { + mappernum = 68, ppu_ramfind = false, vram_mirrorfind = false, + cpu_rom = { + size_base = 0x4000, size_max = 2 * mega, + banksize = 0x4000 + }, + cpu_ram = { + size_base = 0x2000, size_max = 0x2000, banksize = 0x2000 + }, + ppu_rom = { + size_base = 0, size_max = 0, + banksize = 0x0800 + } +}; + +function cpu_dump(d, pagesize, banksize) +{ + cpu_write(d, 0xf000, 7); + cpu_write(d, 0x6000, 0x0d); +// cpu_write(d, 0x6000, 0xb0); + cpu_read(d, 0x8000, 0x2000); + cpu_read(d, 0xa000, 0x2000); +} diff --git a/client/trunk/anago/sunsoft_fme.ad b/client/trunk/anago/sunsoft_fme.ad index 1b0bfda..48991c2 100644 --- a/client/trunk/anago/sunsoft_fme.ad +++ b/client/trunk/anago/sunsoft_fme.ad @@ -1,155 +1,155 @@ -board <- { - mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, cpu_ram = { - size_base = 0x2000, size_max = 0x2000, - banksize = 0x2000 - }, ppu_rom = { - size_base = 1 * mega, size_max = 2 *mega, - banksize = 0x0400 - } -}; - -/* -SUNSOFT-5A, SUNSOFT-5B, FME-7 -[CPU writemap] -$6000-$7fff 7:0 RAM data (if RAM is enabled) -$8000-$9fff 3:0 memory register address -$a000-$bfff 7:0 memory register data -$c000-$dfff 3:0 audio register address -$e000-$ffff 7:0 audio register data - -[CPU readmap] -$6000-$7fff 7:0 Program ROM bank #0 or RAM -$8000-$9fff 7:0 Program ROM bank #1 -$a000-$bfff 7:0 Program ROM bank #2 -$c000-$dfff 7:0 Program ROM bank #3 -$e000-$ffff 7:0 Program ROM bank #4 (fixed to bottom page) - -[PPU readmap] (PPU write map is undefined) -0x0000-0x03ff Charcter ROM bank #0|0x1000-0x13ff Charcter ROM bank #4 -0x0400-0x07ff Charcter ROM bank #1|0x1400-0x17ff Charcter ROM bank #5 -0x0800-0x0bff Charcter ROM bank #2|0x1800-0x1bff Charcter ROM bank #6 -0x0c00-0x0fff Charcter ROM bank #3|0x1c00-0x1fff Charcter ROM bank #7 - -[FME-7 memory register] -adr bit assignments -------------------------- -0-7 7:0 Charcter ROM bank #0 to #7 -8 7 RAM enable bit 0:disable 1:enable - 6 memory select at $6000-$7fff 0:ROM 1:RAM - 4:0 CPU ROM page for bank #0 -9-b 4:0 CPU ROM page for bank #1 to #3 -c 1:0 PPU area VRAM control -d 7 φ2 counter decrement 0:disable 1:enable - 0 φ2 counter overflow IRQ 0:disable 1:enable -e 7:0 φ2 counter value bit7:0 -f 7:0 φ2 counter value bit15:8 - -address 8, bit7:6 behave on FME-7 -00 enabled ROM -01 disabled ROM and RAM -10 disabled ROM and RAM -11 enabled RAM - -audio register -(not analysed yet) - -*/ -function sunsoft5_write(d, register_address, data) -{ - cpu_write(d, 0x8000, register_address); - cpu_write(d, 0xa000, data); -} - -function cpu_dump(d, pagesize, banksize) -{ -/* - //dump ROM data via $6000-$7fff - for(local i = 0; i < pagesize; i++){ - sunsoft5_write(d, 8, i); - cpu_read(d, 0x6000, banksize); - } -*/ - for(local i = 0; i < pagesize - 1; i++){ - sunsoft5_write(d, 9, i); - cpu_read(d, 0x8000, banksize); - } - cpu_read(d, 0xe000, banksize); -} - -function ppu_dump(d, pagesize, banksize) -{ - local mul = 8; - for(local i = 0; i < pagesize; i+= mul){ - for(local j = 0; j < mul; j++){ - sunsoft5_write(d, j, i + j); - } - ppu_read(d, 0, banksize * mul); - } -} - -function cpu_ram_access(d, pagesize, banksize) -{ - sunsoft5_write(d, 8, 0xc0); - cpu_ramrw(d, 0x6000, banksize); - cpu_write(d, 0xa000, 0x00); -} - -/* -CPU memory bank -cpu address|rom address |page|task -$8000-$9fff|0x02000-0x03fff|1 |write 0x2aaa -$a000-$bfff|0x04000-0x05fff|2 |write 0x5555 -$c000-$dfff|n * 0x2000 |n |program area -$e000-$ffff|0x3c000-0x3ffff|fix |program last page - -PPU memory bank -ppu address |rom address |page|task -0x0000-0x03ff|0x02800-0x02fff|0x0a|write 0x2aaa -0x0400-0x07ff|0x05000-0x057ff|0x14|write 0x5555 -0x0800-0x0fff|未使用 -0x1000-0x1fff|n * 0x1000 |n |program area -*/ -function program_initalize(d, cpu_banksize, ppu_banksize) -{ - sunsoft5_write(d, 8, 0x40); //disable W-RAM - - cpu_command(d, 0x2aaa, 0xe000, cpu_banksize); - cpu_command(d, 0x5555, 0xe000, cpu_banksize); - sunsoft5_write(d, 0xa,1); - sunsoft5_write(d, 0xb,2); - - ppu_command(d, 0x2aaa, 0x1000, ppu_banksize); - ppu_command(d, 0x5555, 0x1400, ppu_banksize); - ppu_command(d, 0x0000, 0x1800, ppu_banksize); - sunsoft5_write(d, 4, 0x0a); - sunsoft5_write(d, 5, 0x15); - sunsoft5_write(d, 6, 0); -} - -function cpu_transfer(d, start, end, cpu_banksize) -{ - for(local i = start; i < end - 1; i += 1){ - sunsoft5_write(d, 0xb, 3); - cpu_program(d, 0x8000, cpu_banksize); - } - cpu_program(d, 0xe000, cpu_banksize); -} - -function ppu_transfer(d, start, end, ppu_banksize) -{ -/* local mul = 1; - for(local i = start; i < end; i += mul){ - for(local j = 0; j < mul; j++){ - sunsoft5_write(d, j, i + j); - } - ppu_program(d, 0x0000, ppu_banksize * mul); - }*/ - for(local i = start; i < end; i += 1){ - sunsoft5_write(d, 4, i); - ppu_program(d, 0x1000, ppu_banksize); - } -} +board <- { + mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, cpu_ram = { + size_base = 0x2000, size_max = 0x2000, + banksize = 0x2000 + }, ppu_rom = { + size_base = 1 * mega, size_max = 2 *mega, + banksize = 0x0400 + } +}; + +/* +SUNSOFT-5A, SUNSOFT-5B, FME-7 +[CPU writemap] +$6000-$7fff 7:0 RAM data (if RAM is enabled) +$8000-$9fff 3:0 memory register address +$a000-$bfff 7:0 memory register data +$c000-$dfff 3:0 audio register address +$e000-$ffff 7:0 audio register data + +[CPU readmap] +$6000-$7fff 7:0 Program ROM bank #0 or RAM +$8000-$9fff 7:0 Program ROM bank #1 +$a000-$bfff 7:0 Program ROM bank #2 +$c000-$dfff 7:0 Program ROM bank #3 +$e000-$ffff 7:0 Program ROM bank #4 (fixed to bottom page) + +[PPU readmap] (PPU write map is undefined) +0x0000-0x03ff Charcter ROM bank #0|0x1000-0x13ff Charcter ROM bank #4 +0x0400-0x07ff Charcter ROM bank #1|0x1400-0x17ff Charcter ROM bank #5 +0x0800-0x0bff Charcter ROM bank #2|0x1800-0x1bff Charcter ROM bank #6 +0x0c00-0x0fff Charcter ROM bank #3|0x1c00-0x1fff Charcter ROM bank #7 + +[FME-7 memory register] +adr bit assignments +------------------------- +0-7 7:0 Charcter ROM bank #0 to #7 +8 7 RAM enable bit 0:disable 1:enable + 6 memory select at $6000-$7fff 0:ROM 1:RAM + 4:0 CPU ROM page for bank #0 +9-b 4:0 CPU ROM page for bank #1 to #3 +c 1:0 PPU area VRAM control +d 7 φ2 counter decrement 0:disable 1:enable + 0 φ2 counter overflow IRQ 0:disable 1:enable +e 7:0 φ2 counter value bit7:0 +f 7:0 φ2 counter value bit15:8 + +address 8, bit7:6 behave on FME-7 +00 enabled ROM +01 disabled ROM and RAM +10 disabled ROM and RAM +11 enabled RAM + +audio register +(not analysed yet) + +*/ +function sunsoft5_write(d, register_address, data) +{ + cpu_write(d, 0x8000, register_address); + cpu_write(d, 0xa000, data); +} + +function cpu_dump(d, pagesize, banksize) +{ +/* + //dump ROM data via $6000-$7fff + for(local i = 0; i < pagesize; i++){ + sunsoft5_write(d, 8, i); + cpu_read(d, 0x6000, banksize); + } +*/ + for(local i = 0; i < pagesize - 1; i++){ + sunsoft5_write(d, 9, i); + cpu_read(d, 0x8000, banksize); + } + cpu_read(d, 0xe000, banksize); +} + +function ppu_dump(d, pagesize, banksize) +{ + local mul = 8; + for(local i = 0; i < pagesize; i+= mul){ + for(local j = 0; j < mul; j++){ + sunsoft5_write(d, j, i + j); + } + ppu_read(d, 0, banksize * mul); + } +} + +function cpu_ram_access(d, pagesize, banksize) +{ + sunsoft5_write(d, 8, 0xc0); + cpu_ramrw(d, 0x6000, banksize); + cpu_write(d, 0xa000, 0x00); +} + +/* +CPU memory bank +cpu address|rom address |page|task +$8000-$9fff|0x02000-0x03fff|1 |write 0x2aaa +$a000-$bfff|0x04000-0x05fff|2 |write 0x5555 +$c000-$dfff|n * 0x2000 |n |program area +$e000-$ffff|0x3c000-0x3ffff|fix |program last page + +PPU memory bank +ppu address |rom address |page|task +0x0000-0x03ff|0x02800-0x02fff|0x0a|write 0x2aaa +0x0400-0x07ff|0x05000-0x057ff|0x14|write 0x5555 +0x0800-0x0fff|未使用 +0x1000-0x1fff|n * 0x1000 |n |program area +*/ +function program_initalize(d, cpu_banksize, ppu_banksize) +{ + sunsoft5_write(d, 8, 0x40); //disable W-RAM + + cpu_command(d, 0x2aaa, 0xe000, cpu_banksize); + cpu_command(d, 0x5555, 0xe000, cpu_banksize); + sunsoft5_write(d, 0xa,1); + sunsoft5_write(d, 0xb,2); + + ppu_command(d, 0x2aaa, 0x1000, ppu_banksize); + ppu_command(d, 0x5555, 0x1400, ppu_banksize); + ppu_command(d, 0x0000, 0x1800, ppu_banksize); + sunsoft5_write(d, 4, 0x0a); + sunsoft5_write(d, 5, 0x15); + sunsoft5_write(d, 6, 0); +} + +function cpu_transfer(d, start, end, cpu_banksize) +{ + for(local i = start; i < end - 1; i += 1){ + sunsoft5_write(d, 0xb, 3); + cpu_program(d, 0x8000, cpu_banksize); + } + cpu_program(d, 0xe000, cpu_banksize); +} + +function ppu_transfer(d, start, end, ppu_banksize) +{ +/* local mul = 1; + for(local i = start; i < end; i += mul){ + for(local j = 0; j < mul; j++){ + sunsoft5_write(d, j, i + j); + } + ppu_program(d, 0x0000, ppu_banksize * mul); + }*/ + for(local i = start; i < end; i += 1){ + sunsoft5_write(d, 4, i); + ppu_program(d, 0x1000, ppu_banksize); + } +} diff --git a/client/trunk/anago/taito_x1_005.ae b/client/trunk/anago/taito_x1_005.ae index b70aa6b..5c07924 100644 --- a/client/trunk/anago/taito_x1_005.ae +++ b/client/trunk/anago/taito_x1_005.ae @@ -1,57 +1,57 @@ -/* -Taito X1-005 -TFC-FM-5900 不動明王伝のみ Program ROM size は 2M - -Minelvaton Saga -$7f00-$7f7f save RAM area -$7f80-$7fff save RAM area, mirror -*/ -board <- { - mappernum = 80, ppu_ramfind = false, vram_mirrorfind = false, - cpu_rom = { - size_base = 1 * mega, size_max = 2 * mega, - banksize = 0x2000 - }, - cpu_ram = { - size_base = 0x100 * 0x20, size_max = 0x100 * 0x20, - banksize = 0x2000 - } - ppu_rom = { - size_base = 1 * mega, size_max = 1 * mega, - banksize = 0x2000 / 8 //0x0800*2 + 0x0400 * 4 - } -}; - -function cpu_dump(d, pagesize, banksize) -{ - local i; - for(i = 0; i < pagesize - 2; i += 2){ - cpu_write(d, 0x7efa, i); - cpu_write(d, 0x7efc, i | 1); - cpu_read(d, 0x8000, banksize * 2); - } - cpu_write(d, 0x7efe, i); - cpu_read(d, 0xc000, banksize * 2); -} - -function ppu_dump(d, pagesize, banksize) -{ - for(local i = 0; i < pagesize; i += 8){ - local ar = [i, i|2, i|4, i|5, i|6, i|7]; - cpu_write(d, 0x7ef0, ar); - ppu_read(d, 0x0000, banksize * 8); - } -} - -/* -0x2000 byte のデータの offset 0x1f00-0x1f7f のみ有効 -*/ -function cpu_ram_access(d, pagesize, banksize) -{ - cpu_write(d, 0x7ef8, 0xa3); - for(local i = 0; i < 0x1f80; i += 0x80){ - cpu_ramrw(d, 0x7f00, 0x0080); - } - cpu_ramrw(d, 0x6000, 0x0080); //offset 0x1f80-0x1fff を捨てる - cpu_write(d, 0x7ef8, 0x00); -} +/* +Taito X1-005 +TFC-FM-5900 不動明王伝のみ Program ROM size は 2M + +Minelvaton Saga +$7f00-$7f7f save RAM area +$7f80-$7fff save RAM area, mirror +*/ +board <- { + mappernum = 80, ppu_ramfind = false, vram_mirrorfind = false, + cpu_rom = { + size_base = 1 * mega, size_max = 2 * mega, + banksize = 0x2000 + }, + cpu_ram = { + size_base = 0x100 * 0x20, size_max = 0x100 * 0x20, + banksize = 0x2000 + } + ppu_rom = { + size_base = 1 * mega, size_max = 1 * mega, + banksize = 0x2000 / 8 //0x0800*2 + 0x0400 * 4 + } +}; + +function cpu_dump(d, pagesize, banksize) +{ + local i; + for(i = 0; i < pagesize - 2; i += 2){ + cpu_write(d, 0x7efa, i); + cpu_write(d, 0x7efc, i | 1); + cpu_read(d, 0x8000, banksize * 2); + } + cpu_write(d, 0x7efe, i); + cpu_read(d, 0xc000, banksize * 2); +} + +function ppu_dump(d, pagesize, banksize) +{ + for(local i = 0; i < pagesize; i += 8){ + local ar = [i, i|2, i|4, i|5, i|6, i|7]; + cpu_write(d, 0x7ef0, ar); + ppu_read(d, 0x0000, banksize * 8); + } +} + +/* +0x2000 byte のデータの offset 0x1f00-0x1f7f のみ有効 +*/ +function cpu_ram_access(d, pagesize, banksize) +{ + cpu_write(d, 0x7ef8, 0xa3); + for(local i = 0; i < 0x1f80; i += 0x80){ + cpu_ramrw(d, 0x7f00, 0x0080); + } + cpu_ramrw(d, 0x6000, 0x0080); //offset 0x1f80-0x1fff を捨てる + cpu_write(d, 0x7ef8, 0x00); +}