OSDN Git Service

48991c25598bd8bd45a5bcd99f2353d3478dcb5b
[unagi/old-svn-converted.git] / client / trunk / anago / sunsoft_fme.ad
1 board <- {
2         mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false,
3         cpu_rom = {
4                 size_base = 1 * mega, size_max = 2 * mega,
5                 banksize = 0x2000
6         }, cpu_ram = {
7                 size_base = 0x2000, size_max = 0x2000, 
8                 banksize = 0x2000
9         }, ppu_rom = {
10                 size_base = 1 * mega, size_max = 2 *mega,
11                 banksize = 0x0400
12         }
13 };
14
15 /*
16 SUNSOFT-5A, SUNSOFT-5B, FME-7
17 [CPU writemap]
18 $6000-$7fff 7:0 RAM data (if RAM is enabled)
19 $8000-$9fff 3:0 memory register address
20 $a000-$bfff 7:0 memory register data
21 $c000-$dfff 3:0 audio register address
22 $e000-$ffff 7:0 audio register data
23
24 [CPU readmap]
25 $6000-$7fff 7:0 Program ROM bank #0 or RAM
26 $8000-$9fff 7:0 Program ROM bank #1
27 $a000-$bfff 7:0 Program ROM bank #2
28 $c000-$dfff 7:0 Program ROM bank #3
29 $e000-$ffff 7:0 Program ROM bank #4 (fixed to bottom page)
30
31 [PPU readmap] (PPU write map is undefined)
32 0x0000-0x03ff Charcter ROM bank #0|0x1000-0x13ff Charcter ROM bank #4
33 0x0400-0x07ff Charcter ROM bank #1|0x1400-0x17ff Charcter ROM bank #5
34 0x0800-0x0bff Charcter ROM bank #2|0x1800-0x1bff Charcter ROM bank #6
35 0x0c00-0x0fff Charcter ROM bank #3|0x1c00-0x1fff Charcter ROM bank #7
36
37 [FME-7 memory register]
38 adr bit assignments
39 -------------------------
40 0-7 7:0 Charcter ROM bank #0 to #7
41 8   7   RAM enable bit 0:disable 1:enable
42     6   memory select at $6000-$7fff 0:ROM 1:RAM
43     4:0 CPU ROM page for bank #0
44 9-b 4:0 CPU ROM page for bank #1 to #3
45 c   1:0 PPU area VRAM control
46 d   7   φ2 counter decrement 0:disable 1:enable
47     0   φ2 counter overflow IRQ 0:disable 1:enable
48 e   7:0 φ2 counter value bit7:0
49 f   7:0 φ2 counter value bit15:8
50
51 address 8, bit7:6 behave on FME-7
52 00 enabled ROM
53 01 disabled ROM and RAM
54 10 disabled ROM and RAM
55 11 enabled RAM
56
57 audio register
58 (not analysed yet)
59
60 */
61 function sunsoft5_write(d, register_address, data)
62 {
63         cpu_write(d, 0x8000, register_address);
64         cpu_write(d, 0xa000, data);
65 }
66
67 function cpu_dump(d, pagesize, banksize)
68 {
69 /*
70         //dump ROM data via $6000-$7fff
71         for(local i = 0; i < pagesize; i++){
72                 sunsoft5_write(d, 8, i);
73                 cpu_read(d, 0x6000, banksize);
74         }
75 */
76         for(local i = 0; i < pagesize - 1; i++){
77                 sunsoft5_write(d, 9, i);
78                 cpu_read(d, 0x8000, banksize);
79         }
80         cpu_read(d, 0xe000, banksize);
81 }
82
83 function ppu_dump(d, pagesize, banksize)
84 {
85         local mul = 8;
86         for(local i = 0; i < pagesize; i+= mul){
87                 for(local j = 0; j < mul; j++){
88                         sunsoft5_write(d, j, i + j);
89                 }
90                 ppu_read(d, 0, banksize * mul);
91         }
92 }
93
94 function cpu_ram_access(d, pagesize, banksize)
95 {
96         sunsoft5_write(d, 8, 0xc0);
97         cpu_ramrw(d, 0x6000, banksize);
98         cpu_write(d, 0xa000, 0x00);
99 }
100
101 /*
102 CPU memory bank
103 cpu address|rom address    |page|task
104 $8000-$9fff|0x02000-0x03fff|1   |write 0x2aaa
105 $a000-$bfff|0x04000-0x05fff|2   |write 0x5555
106 $c000-$dfff|n * 0x2000     |n   |program area
107 $e000-$ffff|0x3c000-0x3ffff|fix |program last page
108
109 PPU memory bank
110 ppu address  |rom address    |page|task
111 0x0000-0x03ff|0x02800-0x02fff|0x0a|write 0x2aaa
112 0x0400-0x07ff|0x05000-0x057ff|0x14|write 0x5555
113 0x0800-0x0fff|未使用
114 0x1000-0x1fff|n * 0x1000     |n   |program area
115 */
116 function program_initalize(d, cpu_banksize, ppu_banksize)
117 {
118         sunsoft5_write(d, 8, 0x40); //disable W-RAM
119
120         cpu_command(d, 0x2aaa, 0xe000, cpu_banksize);
121         cpu_command(d, 0x5555, 0xe000, cpu_banksize);
122         sunsoft5_write(d, 0xa,1);
123         sunsoft5_write(d, 0xb,2);
124
125         ppu_command(d, 0x2aaa, 0x1000, ppu_banksize);
126         ppu_command(d, 0x5555, 0x1400, ppu_banksize);
127         ppu_command(d, 0x0000, 0x1800, ppu_banksize);
128         sunsoft5_write(d, 4, 0x0a);
129         sunsoft5_write(d, 5, 0x15);
130         sunsoft5_write(d, 6, 0);
131 }
132
133 function cpu_transfer(d, start, end, cpu_banksize)
134 {
135         for(local i = start; i < end - 1; i += 1){
136                 sunsoft5_write(d, 0xb, 3);
137                 cpu_program(d, 0x8000, cpu_banksize);
138         }
139         cpu_program(d, 0xe000, cpu_banksize);
140 }
141
142 function ppu_transfer(d, start, end, ppu_banksize)
143 {
144 /*      local mul = 1;
145         for(local i = start; i < end; i += mul){
146                 for(local j = 0; j < mul; j++){
147                         sunsoft5_write(d, j, i + j);
148                 }
149                 ppu_program(d, 0x0000, ppu_banksize * mul);
150         }*/
151         for(local i = start; i < end; i += 1){
152                 sunsoft5_write(d, 4, i);
153                 ppu_program(d, 0x1000, ppu_banksize);
154         }
155 }