-board <- {\r
- mappernum = 69, vram_mirrorfind = false, ppu_ramfind = false,\r
- cpu_rom = {\r
- size_base = 1 * mega, size_max = 2 * mega,\r
- banksize = 0x2000\r
- }, cpu_ram = {\r
- size_base = 0x2000, size_max = 0x2000, \r
- banksize = 0x2000\r
- }, ppu_rom = {\r
- size_base = 1 * mega, size_max = 2 *mega,\r
- banksize = 0x0400\r
- }\r
-};\r
-\r
-/*\r
-SUNSOFT-5A, SUNSOFT-5B, FME-7\r
-[CPU writemap]\r
-$6000-$7fff 7:0 RAM data (if RAM is enabled)\r
-$8000-$9fff 3:0 memory register address\r
-$a000-$bfff 7:0 memory register data\r
-$c000-$dfff 3:0 audio register address\r
-$e000-$ffff 7:0 audio register data\r
-\r
-[CPU readmap]\r
-$6000-$7fff 7:0 Program ROM bank #0 or RAM\r
-$8000-$9fff 7:0 Program ROM bank #1\r
-$a000-$bfff 7:0 Program ROM bank #2\r
-$c000-$dfff 7:0 Program ROM bank #3\r
-$e000-$ffff 7:0 Program ROM bank #4 (fixed to bottom page)\r
-\r
-[PPU readmap] (PPU write map is undefined)\r
-0x0000-0x03ff Charcter ROM bank #0|0x1000-0x13ff Charcter ROM bank #4\r
-0x0400-0x07ff Charcter ROM bank #1|0x1400-0x17ff Charcter ROM bank #5\r
-0x0800-0x0bff Charcter ROM bank #2|0x1800-0x1bff Charcter ROM bank #6\r
-0x0c00-0x0fff Charcter ROM bank #3|0x1c00-0x1fff Charcter ROM bank #7\r
-\r
-[FME-7 memory register]\r
-adr bit assignments\r
--------------------------\r
-0-7 7:0 Charcter ROM bank #0 to #7\r
-8 7 RAM enable bit 0:disable 1:enable\r
- 6 memory select at $6000-$7fff 0:ROM 1:RAM\r
- 4:0 CPU ROM page for bank #0\r
-9-b 4:0 CPU ROM page for bank #1 to #3\r
-c 1:0 PPU area VRAM control\r
-d 7 φ2 counter decrement 0:disable 1:enable\r
- 0 φ2 counter overflow IRQ 0:disable 1:enable\r
-e 7:0 φ2 counter value bit7:0\r
-f 7:0 φ2 counter value bit15:8\r
-\r
-address 8, bit7:6 behave on FME-7\r
-00 enabled ROM\r
-01 disabled ROM and RAM\r
-10 disabled ROM and RAM\r
-11 enabled RAM\r
-\r
-audio register\r
-(not analysed yet)\r
-\r
-*/\r
-function sunsoft5_write(d, register_address, data)\r
-{\r
- cpu_write(d, 0x8000, register_address);\r
- cpu_write(d, 0xa000, data);\r
-}\r
-\r
-function cpu_dump(d, pagesize, banksize)\r
-{\r
-/*\r
- //dump ROM data via $6000-$7fff\r
- for(local i = 0; i < pagesize; i++){\r
- sunsoft5_write(d, 8, i);\r
- cpu_read(d, 0x6000, banksize);\r
- }\r
-*/\r
- for(local i = 0; i < pagesize - 1; i++){\r
- sunsoft5_write(d, 9, i);\r
- cpu_read(d, 0x8000, banksize);\r
- }\r
- cpu_read(d, 0xe000, banksize);\r
-}\r
-\r
-function ppu_dump(d, pagesize, banksize)\r
-{\r
- local mul = 8;\r
- for(local i = 0; i < pagesize; i+= mul){\r
- for(local j = 0; j < mul; j++){\r
- sunsoft5_write(d, j, i + j);\r
- }\r
- ppu_read(d, 0, banksize * mul);\r
- }\r
-}\r
-\r
-function cpu_ram_access(d, pagesize, banksize)\r
-{\r
- sunsoft5_write(d, 8, 0xc0);\r
- cpu_ramrw(d, 0x6000, banksize);\r
- cpu_write(d, 0xa000, 0x00);\r
-}\r
-\r
-/*\r
-CPU memory bank\r
-cpu address|rom address |page|task\r
-$8000-$9fff|0x02000-0x03fff|1 |write 0x2aaa\r
-$a000-$bfff|0x04000-0x05fff|2 |write 0x5555\r
-$c000-$dfff|n * 0x2000 |n |program area\r
-$e000-$ffff|0x3c000-0x3ffff|fix |program last page\r
-\r
-PPU memory bank\r
-ppu address |rom address |page|task\r
-0x0000-0x03ff|0x02800-0x02fff|0x0a|write 0x2aaa\r
-0x0400-0x07ff|0x05000-0x057ff|0x14|write 0x5555\r
-0x0800-0x0fff|未使用\r
-0x1000-0x1fff|n * 0x1000 |n |program area\r
-*/\r
-function program_initalize(d, cpu_banksize, ppu_banksize)\r
-{\r
- sunsoft5_write(d, 8, 0x40); //disable W-RAM\r
-\r
- cpu_command(d, 0x2aaa, 0xe000, cpu_banksize);\r
- cpu_command(d, 0x5555, 0xe000, cpu_banksize);\r
- sunsoft5_write(d, 0xa,1);\r
- sunsoft5_write(d, 0xb,2);\r
-\r
- ppu_command(d, 0x2aaa, 0x1000, ppu_banksize);\r
- ppu_command(d, 0x5555, 0x1400, ppu_banksize);\r
- ppu_command(d, 0x0000, 0x1800, ppu_banksize);\r
- sunsoft5_write(d, 4, 0x0a);\r
- sunsoft5_write(d, 5, 0x15);\r
- sunsoft5_write(d, 6, 0);\r
-}\r
-\r
-function cpu_transfer(d, start, end, cpu_banksize)\r
-{\r
- for(local i = start; i < end - 1; i += 1){\r
- sunsoft5_write(d, 0xb, 3);\r
- cpu_program(d, 0x8000, cpu_banksize);\r
- }\r
- cpu_program(d, 0xe000, cpu_banksize);\r
-}\r
-\r
-function ppu_transfer(d, start, end, ppu_banksize)\r
-{\r
-/* local mul = 1;\r
- for(local i = start; i < end; i += mul){\r
- for(local j = 0; j < mul; j++){\r
- sunsoft5_write(d, j, i + j);\r
- }\r
- ppu_program(d, 0x0000, ppu_banksize * mul);\r
- }*/\r
- for(local i = start; i < end; i += 1){\r
- sunsoft5_write(d, 4, i);\r
- ppu_program(d, 0x1000, ppu_banksize);\r
- }\r
-}\r
+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);
+ }
+}