2 mappernum = 1, vram_mirrorfind = false, ppu_ramfind = true,
\r
4 size_base = 1 * mega, size_max = 2 * mega,
\r
8 size_base = 0x2000, size_max = 0x2000,
\r
12 size_base = 1 * mega, size_max = 1 * mega,
\r
19 function cpu_dump(d, pagesize, banksize)
\r
21 cpu_write(d, 0x8000, 0x80); //serial count reset
\r
22 mmc1_write(d, 0x8000, 0x0c); //CPU/PPU bank configuration
\r
23 for(local i = 0; i < pagesize - 1; i += 1){
\r
24 mmc1_write(d, 0xe000, i | 0x10);
\r
25 cpu_read(d, 0x8000, banksize);
\r
27 cpu_read(d, 0xc000, banksize);
\r
30 function ppu_dump(d, pagesize, banksize)
\r
32 for(local i = 0; i < pagesize; i += 2){
\r
33 mmc1_write(d, 0xa000, i);
\r
34 mmc1_write(d, 0xc000, i | 1);
\r
35 ppu_read(d, 0, banksize * 2);
\r
39 function cpu_ram_access(d, pagesize, banksize)
\r
41 mmc1_write(d, 0x8000, 1 << 3);
\r
42 mmc1_write(d, 0xe000, 0);
\r
43 mmc1_write(d, 0xa000, 0);
\r
44 cpu_ramrw(d, 0x6000, banksize);
\r
45 mmc1_write(d, 0xe000, 0xff);
\r
49 MMC1 ROM 2M + (ROM 1M or RAM) board
\r
50 CPU memory bank for SLROM, SKROM, SGROM, SNROM
\r
51 cpu address|rom address |page|task
\r
52 $8000-$bfff|n * 0x4000|even 0x00|write 0x2aaa + write area
\r
53 $c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555
\r
54 ---------------------------------
\r
55 $8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa
\r
56 $c000-$ffff|n * 0x4000|odd 0x01|write 0x5555 + write area
\r
58 PPU memory bank for SLROM, SKROM
\r
59 ppu area use command only mask A0-A10 device
\r
60 ppu address|rom address |page|task
\r
61 $0000-$0fff|0x00000 * n |n |write area + 0x2aa + 0x555
\r
62 $0000-$1fff|0x01000 * n |n+1 |write area
\r
64 function program_initalize(d, cpu_banksize, ppu_banksize)
\r
66 cpu_write(d, 0x8000, 0x80);
\r
67 mmc1_write(d, 0xa000, 0x10); //SNROM + MMC1A disable W-RAM
\r
68 mmc1_write(d, 0x8000, 0x1c);
\r
69 mmc1_write(d, 0xe000, 0x10); //MMC1B disable W-RAM
\r
70 cpu_command(d, 0x0000, 0x8000, cpu_banksize);
\r
71 cpu_command(d, 0x2aaa, 0x8000, cpu_banksize);
\r
72 cpu_command(d, 0x5555, 0xc000, cpu_banksize);
\r
74 ppu_command(d, 0x0000, 0, ppu_banksize);
\r
75 ppu_command(d, 0x02aa, 0, ppu_banksize);
\r
76 ppu_command(d, 0x0555, 0, ppu_banksize);
\r
79 function cpu_transfer(d, start, end, cpu_banksize)
\r
82 local wram = 1 << 4; //W-RAM disable flag
\r
83 for(i = start; i < end - 2; i += 2){
\r
84 mmc1_write(d, 0x8000, 0x1c);
\r
85 mmc1_write(d, 0xe000, i | 0 | wram);
\r
86 cpu_program(d, 0x8000, cpu_banksize);
\r
88 mmc1_write(d, 0x8000, 0x18);
\r
89 mmc1_write(d, 0xe000, i | 1 | wram);
\r
90 cpu_program(d, 0xc000, cpu_banksize);
\r
92 mmc1_write(d, 0x8000, 0x1c);
\r
93 mmc1_write(d, 0xe000, i | wram);
\r
94 cpu_program(d, 0x8000, cpu_banksize);
\r
95 cpu_program(d, 0xc000, cpu_banksize);
\r
98 function ppu_transfer(d, start, end, ppu_banksize)
\r
100 for(local i = start; i < end; i+=2){
\r
101 mmc1_write(d, 0xa000, i)
\r
102 mmc1_write(d, 0xc000, i | 1);
\r
103 ppu_program(d, 0x0000, ppu_banksize * 2);
\r