comparison segacd.c @ 2329:06d5e9b08bdb

Add NTSC composite shader by Sik
author Michael Pavone <pavone@retrodev.com>
date Wed, 23 Aug 2023 21:38:39 -0700
parents 0343f0d5add0
children c05b7c5e6f11
comparison
equal deleted inserted replaced
2328:7f8d0fdc5bca 2329:06d5e9b08bdb
1470 } 1470 }
1471 } 1471 }
1472 return main_gate_write16(address, vcontext, value16); 1472 return main_gate_write16(address, vcontext, value16);
1473 } 1473 }
1474 1474
1475 uint8_t laseractive_regs[256];
1476
1477 static uint16_t laseractive_read16(uint32_t address, void *vcontext)
1478 {
1479 printf("LaserActive 16-bit register read %X\n", address);
1480 return 0xFFFF;
1481 }
1482
1483 static uint8_t laseractive_read8(uint32_t address, void *vcontext)
1484 {
1485 printf("LaserActive 8-bit register read %X\n", address);
1486 if (address == 0xFDFE81) {
1487 return 0x80 | (laseractive_regs[0x41] & 1);
1488 } else if (address >= 0xFDFE41 && address < 0xFDFE80 && (address & 1)) {
1489 return laseractive_regs[address & 0xFF];
1490 }
1491 return 0xFF;
1492 }
1493
1494 static void *laseractive_write16(uint32_t address, void *vcontext, uint16_t value)
1495 {
1496 printf("LaserActive 16-bit register write %X: %X\n", address, value);
1497 return vcontext;
1498 }
1499
1500 static void *laseractive_write8(uint32_t address, void *vcontext, uint8_t value)
1501 {
1502 printf("LaserActive 8-bit register write %X: %X\n", address, value);
1503 laseractive_regs[address & 0xFF] = value;
1504 return vcontext;
1505 }
1506
1475 segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info) 1507 segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info)
1476 { 1508 {
1477 static memmap_chunk sub_cpu_map[] = { 1509 static memmap_chunk sub_cpu_map[] = {
1478 {0x000000, 0x01FF00, 0xFFFFFF, .flags=MMAP_READ | MMAP_CODE, .write_16 = prog_ram_wp_write16, .write_8 = prog_ram_wp_write8}, 1510 {0x000000, 0x01FF00, 0xFFFFFF, .flags=MMAP_READ | MMAP_CODE, .write_16 = prog_ram_wp_write16, .write_8 = prog_ram_wp_write8},
1479 {0x01FF00, 0x080000, 0xFFFFFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_CODE}, 1511 {0x01FF00, 0x080000, 0xFFFFFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_CODE},
1481 .read_16 = word_ram_2M_read16, .write_16 = word_ram_2M_write16, .read_8 = word_ram_2M_read8, .write_8 = word_ram_2M_write8}, 1513 .read_16 = word_ram_2M_read16, .write_16 = word_ram_2M_write16, .read_8 = word_ram_2M_read8, .write_8 = word_ram_2M_write8},
1482 {0x0C0000, 0x0E0000, 0x01FFFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_CODE | MMAP_PTR_IDX | MMAP_FUNC_NULL, .ptr_index = 1, 1514 {0x0C0000, 0x0E0000, 0x01FFFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_CODE | MMAP_PTR_IDX | MMAP_FUNC_NULL, .ptr_index = 1,
1483 .read_16 = word_ram_1M_read16, .write_16 = word_ram_1M_write16, .read_8 = word_ram_1M_read8, .write_8 = word_ram_1M_write8, .shift = 1}, 1515 .read_16 = word_ram_1M_read16, .write_16 = word_ram_1M_write16, .read_8 = word_ram_1M_read8, .write_8 = word_ram_1M_write8, .shift = 1},
1484 {0xFE0000, 0xFF0000, 0x003FFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_ONLY_ODD}, 1516 {0xFE0000, 0xFF0000, 0x003FFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_ONLY_ODD},
1485 {0xFF0000, 0xFF8000, 0x003FFF, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8}, 1517 {0xFF0000, 0xFF8000, 0x003FFF, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8},
1486 {0xFF8000, 0xFF8200, 0x0001FF, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8} 1518 {0xFF8000, 0xFF8200, 0x0001FF, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8},
1519 {0xFD0000, 0xFE0000, 0xFFFFFF, .read_16 = laseractive_read16, .write_16 = laseractive_write16, .read_8 = laseractive_read8, .write_8 = laseractive_write8}
1487 }; 1520 };
1488 1521
1489 segacd_context *cd = calloc(sizeof(segacd_context), 1); 1522 segacd_context *cd = calloc(sizeof(segacd_context), 1);
1490 uint32_t firmware_size; 1523 uint32_t firmware_size;
1491 uint8_t region = force_region; 1524 uint8_t region = force_region;