OSDN Git Service

cartrdige script を管理開始 (なぜかやってなかった)
[unagi/old-svn-converted.git] / client / trunk / anago / vrc6b.af
diff --git a/client/trunk/anago/vrc6b.af b/client/trunk/anago/vrc6b.af
new file mode 100644 (file)
index 0000000..752c587
--- /dev/null
@@ -0,0 +1,75 @@
+/*VRC6 type B/351949A/address bus A0=R1, A1=R0
+CPU memory bank
+cpu address|rom address    |page|task
+$8000-$bfff|n * 0x4000     |even|write area + write 0x2aaa
+$c000-$dfff|0x04000-0x05fff|2   |write 0x5555
+-------------------------------------
+$8000-$bfff|n * 0x4000     |odd |write area + write 0x5555
+$c000-$dfff|0x02000-0x03fff|1   |write 0x2aaa
+$e000-$efff|末尾           |fix |boot area, 未使用
+
+PPU memory bank
+ppu address|rom address    |page|task
+$0000-$03ff|0x02800-0x02bff|0x0a|write (0x2aaa & 0x03ff) + 0
+$0400-$07ff|0x05400-0x057ff|0x15|write (0x5555 & 0x03ff) + 0x400
+$1000-$1fff|n * 0x1000     |n   |write area*/
+board <- {
+       mappernum = 26, vram_mirrorfind = false,
+       cpu = {banksize = 0x4000, maxsize = 2 * mega},
+       ppu = {banksize = 0x0400, maxsize = 2 * mega},
+}
+function cpubank_even_set(d, bank, cpu_banksize)
+{
+       cpu_command(d, 0x2aaa, 0x8000, cpu_banksize);
+       cpu_command(d, 0x5555, 0xc000, 0x2000);
+       cpu_write(d, 0x8000, bank)
+       cpu_write(d, 0xc000, 2)
+}
+function initalize(d, cpu_banksize, ppu_banksize)
+{
+       cpubank_even_set(d, 0, cpu_banksize);
+       cpu_command(d, 0, 0x8000, cpu_banksize);
+
+       ppu_command(d, 0x2aaa, 0, ppu_banksize);
+       ppu_command(d, 0x5555, 0x0400, ppu_banksize);
+       ppu_command(d, 0, 0x0800, ppu_banksize);
+       
+       cpu_write(d, 0xb003, 0); //work ram disable
+       cpu_write(d, 0xd000, 0x0a);
+       cpu_write(d, 0xd002, 0x15);
+       cpu_write(d, 0xd001, 0x00);
+       cpu_write(d, 0xd003, 0x00);
+}
+function cpu_transfer(d, start, end, cpu_banksize)
+{
+       local i;
+       for(i = start; i < end - 2; i += 2){
+               cpubank_even_set(d, i, cpu_banksize);
+               cpu_program(d, 0x8000, cpu_banksize);
+               
+               cpu_command(d, 0x5555, 0x8000, cpu_banksize);
+               cpu_command(d, 0x2aaa, 0xc000, 0x2000);
+               cpu_write(d, 0x8000, i | 1)
+               cpu_write(d, 0xc000, 1)
+               cpu_program(d, 0x8000, cpu_banksize);
+       }
+       cpubank_even_set(d, i, cpu_banksize);
+       cpu_program(d, 0x8000, cpu_banksize);
+
+       cpu_command(d, 0x5555, 0x8000, cpu_banksize);
+       cpu_command(d, 0x2aaa, 0xc000, 0x2000);
+       cpu_write(d, 0x8000, i | 1)
+       cpu_write(d, 0xc000, 1)
+       cpu_program(d, 0x8000, cpu_banksize);
+}
+
+function ppu_transfer(d, start, end, ppu_banksize)
+{
+       for(local i = start; i < end; i += 4){
+               cpu_write(d, 0xe000, i | 0);
+               cpu_write(d, 0xe002, i | 1);
+               cpu_write(d, 0xe001, i | 2);
+               cpu_write(d, 0xe003, i | 3);
+               ppu_program(d, 0x1000, ppu_banksize * 4);
+       }
+}