/* konami VRCIII RC821 各レジスタは4bit write $8000 IRQ cpu clock count, bit0-3?? $9000 IRQ cpu clock count, bit4-7?? $a000 IRQ cpu clock count, bit8-11 $b000 IRQ cpu clock count, bit12-15 $c000 IRQ enable $d000 IRQ Acknowledge $f000 bit0-2 pagenumber at CPU address $8000-$bfff bit3 1: ROM address 0x1c000-0x1cfff map CPU address $c000-$cfff 0: IRQ status? at CPU address $c000-$cfff read $8000-$bfff 可変エリア, write $f000 bit0-2 $c000-$cfff 可変エリア, write $f000 bit3 $d000-$ffff 固定エリア, ROM address 0x1d000-0x1ffff */ board <- { mappernum = 73, cpu_rom = { size_base = 1 * mega, size_max = 8 * mega, banksize = 0x4000 }, ppu_rom= { size_base = 0, size_max = 0, banksize = 0x2000 }, ppu_ramfind = false, vram_mirrorfind = true }; function cpu_dump(d, pagesize, banksize) { j <- 0x00; k <- 0x00; for(local i = 0; i < pagesize; i += 1){ j = i & 0x07; k = i & 0xF8; k = k << 1; k = k | 0x08; k = k | j; cpu_write(d, 0xf000, k); cpu_read(d, 0x8000, banksize); } } function program_initalize(d, cpu_banksize, ppu_banksize) { /*---- VRC3初期化 ----*/ cpu_write(d, 0xf000, 0x88); cpu_write(d, 0x8000, 0x00); cpu_write(d, 0x9000, 0x00); cpu_write(d, 0xa000, 0x00); cpu_write(d, 0xb000, 0x00); cpu_write(d, 0xc000, 0x00); cpu_write(d, 0x8000, 0x00); cpu_command(d, 0, 0x8000, cpu_banksize); cpu_command(d, 0x02aa, 0xc000, cpu_banksize); cpu_command(d, 0x0555, 0xc000, cpu_banksize); } function cpu_transfer(d, start, end, cpu_banksize) { j <- 0x00; k <- 0x00; for(local i = start; i < end; i += 1){ j = i & 0x07; k = i & 0xF8; k = k << 1; k = k | 0x08; k = k | j; cpu_write(d, 0xf000, k); cpu_program(d, 0x8000, cpu_banksize); } } function ppu_transfer(d, start, end, ppu_banksize) {}