2 mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false,
\r
4 size_base = 1 * mega, size_max = 2 * mega,
\r
7 size_base = 0x2000, size_max = 0x2000,
\r
10 size_base = 1 * mega, size_max = 2 *mega,
\r
16 SUNSOFT-5A, SUNSOFT-5B, FME-7
\r
18 $6000-$7fff 7:0 RAM data (if RAM is enabled)
\r
19 $8000-$9fff 3:0 memory register address
\r
20 $a000-$bfff 7:0 memory register data
\r
21 $c000-$dfff 3:0 audio register address
\r
22 $e000-$ffff 7:0 audio register data
\r
25 $6000-$7fff 7:0 Program ROM bank #0 or RAM
\r
26 $8000-$9fff 7:0 Program ROM bank #1
\r
27 $a000-$bfff 7:0 Program ROM bank #2
\r
28 $c000-$dfff 7:0 Program ROM bank #3
\r
29 $e000-$ffff 7:0 Program ROM bank #4 (fixed to bottom page)
\r
31 [PPU readmap] (PPU write map is undefined)
\r
32 0x0000-0x03ff Charcter ROM bank #0|0x1000-0x13ff Charcter ROM bank #4
\r
33 0x0400-0x07ff Charcter ROM bank #1|0x1400-0x17ff Charcter ROM bank #5
\r
34 0x0800-0x0bff Charcter ROM bank #2|0x1800-0x1bff Charcter ROM bank #6
\r
35 0x0c00-0x0fff Charcter ROM bank #3|0x1c00-0x1fff Charcter ROM bank #7
\r
37 [FME-7 memory register]
\r
39 -------------------------
\r
40 0-7 7:0 Charcter ROM bank #0 to #7
\r
41 8 7 RAM enable bit 0:disable 1:enable
\r
42 6 memory select at $6000-$7fff 0:ROM 1:RAM
\r
43 4:0 CPU ROM page for bank #0
\r
44 9-b 4:0 CPU ROM page for bank #1 to #3
\r
45 c 1:0 PPU area VRAM control
\r
46 d 7 φ2 counter decrement 0:disable 1:enable
\r
47 0 φ2 counter overflow IRQ 0:disable 1:enable
\r
48 e 7:0 φ2 counter value bit7:0
\r
49 f 7:0 φ2 counter value bit15:8
\r
51 address 8, bit7:6 behave on FME-7
\r
53 01 disabled ROM and RAM
\r
54 10 disabled ROM and RAM
\r
61 function sunsoft5_write(d, register_address, data)
\r
63 cpu_write(d, 0x8000, register_address);
\r
64 cpu_write(d, 0xa000, data);
\r
67 function cpu_dump(d, pagesize, banksize)
\r
70 //dump ROM data via $6000-$7fff
\r
71 for(local i = 0; i < pagesize; i++){
\r
72 sunsoft5_write(d, 8, i);
\r
73 cpu_read(d, 0x6000, banksize);
\r
76 for(local i = 0; i < pagesize - 1; i++){
\r
77 sunsoft5_write(d, 9, i);
\r
78 cpu_read(d, 0x8000, banksize);
\r
80 cpu_read(d, 0xe000, banksize);
\r
83 function ppu_dump(d, pagesize, banksize)
\r
86 for(local i = 0; i < pagesize; i+= mul){
\r
87 for(local j = 0; j < mul; j++){
\r
88 sunsoft5_write(d, j, i + j);
\r
90 ppu_read(d, 0, banksize * mul);
\r
94 function cpu_ram_access(d, pagesize, banksize)
\r
96 sunsoft5_write(d, 8, 0xc0);
\r
97 cpu_ramrw(d, 0x6000, banksize);
\r
98 cpu_write(d, 0xa000, 0x00);
\r
103 cpu address|rom address |page|task
\r
104 $8000-$9fff|0x02000-0x03fff|1 |write 0x2aaa
\r
105 $a000-$bfff|0x04000-0x05fff|2 |write 0x5555
\r
106 $c000-$dfff|n * 0x2000 |n |program area
\r
107 $e000-$ffff|0x3c000-0x3ffff|fix |program last page
\r
110 ppu address |rom address |page|task
\r
111 0x0000-0x03ff|0x02800-0x02fff|0x0a|write 0x2aaa
\r
112 0x0400-0x07ff|0x05000-0x057ff|0x14|write 0x5555
\r
114 0x1000-0x1fff|n * 0x1000 |n |program area
\r
116 function program_initalize(d, cpu_banksize, ppu_banksize)
\r
118 sunsoft5_write(d, 8, 0x40); //disable W-RAM
\r
120 cpu_command(d, 0x2aaa, 0xe000, cpu_banksize);
\r
121 cpu_command(d, 0x5555, 0xe000, cpu_banksize);
\r
122 sunsoft5_write(d, 0xa,1);
\r
123 sunsoft5_write(d, 0xb,2);
\r
125 ppu_command(d, 0x2aaa, 0x1000, ppu_banksize);
\r
126 ppu_command(d, 0x5555, 0x1400, ppu_banksize);
\r
127 ppu_command(d, 0x0000, 0x1800, ppu_banksize);
\r
128 sunsoft5_write(d, 4, 0x0a);
\r
129 sunsoft5_write(d, 5, 0x15);
\r
130 sunsoft5_write(d, 6, 0);
\r
133 function cpu_transfer(d, start, end, cpu_banksize)
\r
135 for(local i = start; i < end - 1; i += 1){
\r
136 sunsoft5_write(d, 0xb, 3);
\r
137 cpu_program(d, 0x8000, cpu_banksize);
\r
139 cpu_program(d, 0xe000, cpu_banksize);
\r
142 function ppu_transfer(d, start, end, ppu_banksize)
\r
145 for(local i = start; i < end; i += mul){
\r
146 for(local j = 0; j < mul; j++){
\r
147 sunsoft5_write(d, j, i + j);
\r
149 ppu_program(d, 0x0000, ppu_banksize * mul);
\r
151 for(local i = start; i < end; i += 1){
\r
152 sunsoft5_write(d, 4, i);
\r
153 ppu_program(d, 0x1000, ppu_banksize);
\r