comparison genesis.c @ 2134:9caebcfeac72

Implement word RAM interleaving in 1M mode, now passes mcd-verificator word RAM tests
author Michael Pavone <pavone@retrodev.com>
date Fri, 18 Mar 2022 20:49:07 -0700
parents 00b6592cad42
children a418fa599b2e
comparison
equal deleted inserted replaced
2133:8554751f17b5 2134:9caebcfeac72
1797 } 1797 }
1798 1798
1799 static genesis_context *shared_init(uint32_t system_opts, rom_info *rom, uint8_t force_region) 1799 static genesis_context *shared_init(uint32_t system_opts, rom_info *rom, uint8_t force_region)
1800 { 1800 {
1801 static memmap_chunk z80_map[] = { 1801 static memmap_chunk z80_map[] = {
1802 { 0x0000, 0x4000, 0x1FFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, NULL, NULL, NULL, NULL }, 1802 { 0x0000, 0x4000, 0x1FFF, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE},
1803 { 0x8000, 0x10000, 0x7FFF, 0, 0, 0, NULL, NULL, NULL, z80_read_bank, z80_write_bank}, 1803 { 0x8000, 0x10000, 0x7FFF, .read_8 = z80_read_bank, .write_8 = z80_write_bank},
1804 { 0x4000, 0x6000, 0x0003, 0, 0, 0, NULL, NULL, NULL, z80_read_ym, z80_write_ym}, 1804 { 0x4000, 0x6000, 0x0003, .read_8 = z80_read_ym, .write_8 = z80_write_ym},
1805 { 0x6000, 0x6100, 0xFFFF, 0, 0, 0, NULL, NULL, NULL, NULL, z80_write_bank_reg}, 1805 { 0x6000, 0x6100, 0xFFFF, .write_8 = z80_write_bank_reg},
1806 { 0x7F00, 0x8000, 0x00FF, 0, 0, 0, NULL, NULL, NULL, z80_vdp_port_read, z80_vdp_port_write} 1806 { 0x7F00, 0x8000, 0x00FF, .read_8 = z80_vdp_port_read, .write_8 = z80_vdp_port_write}
1807 }; 1807 };
1808 1808
1809 char *m68k_divider = tern_find_path(config, "clocks\0m68k_divider\0", TVAL_PTR).ptrval; 1809 char *m68k_divider = tern_find_path(config, "clocks\0m68k_divider\0", TVAL_PTR).ptrval;
1810 if (!m68k_divider) { 1810 if (!m68k_divider) {
1811 m68k_divider = "7"; 1811 m68k_divider = "7";
1924 1924
1925 return gen; 1925 return gen;
1926 } 1926 }
1927 1927
1928 static memmap_chunk base_map[] = { 1928 static memmap_chunk base_map[] = {
1929 {0xE00000, 0x1000000, 0xFFFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, 1929 {0xE00000, 0x1000000, 0xFFFF, .flags = MMAP_READ | MMAP_WRITE | MMAP_CODE},
1930 NULL, NULL, NULL, NULL}, 1930 {0xC00000, 0xE00000, 0x1FFFFF, .read_16 = (read_16_fun)vdp_port_read, .write_16 =(write_16_fun)vdp_port_write,
1931 {0xC00000, 0xE00000, 0x1FFFFF, 0, 0, 0, NULL, 1931 .read_8 = (read_8_fun)vdp_port_read_b, .write_8 = (write_8_fun)vdp_port_write_b},
1932 (read_16_fun)vdp_port_read, (write_16_fun)vdp_port_write, 1932 {0xA00000, 0xA12000, 0x1FFFF, .read_16 = (read_16_fun)io_read_w, .write_16 = (write_16_fun)io_write_w,
1933 (read_8_fun)vdp_port_read_b, (write_8_fun)vdp_port_write_b}, 1933 .read_8 = (read_8_fun)io_read, .write_8 = (write_8_fun)io_write},
1934 {0xA00000, 0xA12000, 0x1FFFF, 0, 0, 0, NULL, 1934 {0x000000, 0xFFFFFF, 0xFFFFFF, .read_16 = (read_16_fun)unused_read, .write_16 = unused_write,
1935 (read_16_fun)io_read_w, (write_16_fun)io_write_w, 1935 .read_8 = (read_8_fun)unused_read_b, .write_8 = (write_8_fun)unused_write_b}
1936 (read_8_fun)io_read, (write_8_fun)io_write},
1937 {0x000000, 0xFFFFFF, 0xFFFFFF, 0, 0, 0, NULL,
1938 (read_16_fun)unused_read, (write_16_fun)unused_write,
1939 (read_8_fun)unused_read_b, (write_8_fun)unused_write_b}
1940 }; 1936 };
1941 const size_t base_chunks = sizeof(base_map)/sizeof(*base_map); 1937 const size_t base_chunks = sizeof(base_map)/sizeof(*base_map);
1942 1938
1943 genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region) 1939 genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region)
1944 { 1940 {