OSDN Git Service

1b0bfda0403b8b2de635bfbc889a57fb48b73a29
[unagi/old-svn-converted.git] / client / trunk / anago / sunsoft_fme.ad
1 board <- {\r
2         mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false,\r
3         cpu_rom = {\r
4                 size_base = 1 * mega, size_max = 2 * mega,\r
5                 banksize = 0x2000\r
6         }, cpu_ram = {\r
7                 size_base = 0x2000, size_max = 0x2000, \r
8                 banksize = 0x2000\r
9         }, ppu_rom = {\r
10                 size_base = 1 * mega, size_max = 2 *mega,\r
11                 banksize = 0x0400\r
12         }\r
13 };\r
14 \r
15 /*\r
16 SUNSOFT-5A, SUNSOFT-5B, FME-7\r
17 [CPU writemap]\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
23 \r
24 [CPU readmap]\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
30 \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
36 \r
37 [FME-7 memory register]\r
38 adr bit assignments\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
50 \r
51 address 8, bit7:6 behave on FME-7\r
52 00 enabled ROM\r
53 01 disabled ROM and RAM\r
54 10 disabled ROM and RAM\r
55 11 enabled RAM\r
56 \r
57 audio register\r
58 (not analysed yet)\r
59 \r
60 */\r
61 function sunsoft5_write(d, register_address, data)\r
62 {\r
63         cpu_write(d, 0x8000, register_address);\r
64         cpu_write(d, 0xa000, data);\r
65 }\r
66 \r
67 function cpu_dump(d, pagesize, banksize)\r
68 {\r
69 /*\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
74         }\r
75 */\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
79         }\r
80         cpu_read(d, 0xe000, banksize);\r
81 }\r
82 \r
83 function ppu_dump(d, pagesize, banksize)\r
84 {\r
85         local mul = 8;\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
89                 }\r
90                 ppu_read(d, 0, banksize * mul);\r
91         }\r
92 }\r
93 \r
94 function cpu_ram_access(d, pagesize, banksize)\r
95 {\r
96         sunsoft5_write(d, 8, 0xc0);\r
97         cpu_ramrw(d, 0x6000, banksize);\r
98         cpu_write(d, 0xa000, 0x00);\r
99 }\r
100 \r
101 /*\r
102 CPU memory bank\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
108 \r
109 PPU memory bank\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
113 0x0800-0x0fff|未使用\r
114 0x1000-0x1fff|n * 0x1000     |n   |program area\r
115 */\r
116 function program_initalize(d, cpu_banksize, ppu_banksize)\r
117 {\r
118         sunsoft5_write(d, 8, 0x40); //disable W-RAM\r
119 \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
124 \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
131 }\r
132 \r
133 function cpu_transfer(d, start, end, cpu_banksize)\r
134 {\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
138         }\r
139         cpu_program(d, 0xe000, cpu_banksize);\r
140 }\r
141 \r
142 function ppu_transfer(d, start, end, ppu_banksize)\r
143 {\r
144 /*      local mul = 1;\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
148                 }\r
149                 ppu_program(d, 0x0000, ppu_banksize * mul);\r
150         }*/\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
154         }\r
155 }\r