Mercurial > repos > blastem
diff 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 |
line wrap: on
line diff
--- a/segacd.c Wed Aug 23 21:36:09 2023 -0700 +++ b/segacd.c Wed Aug 23 21:38:39 2023 -0700 @@ -1472,6 +1472,38 @@ return main_gate_write16(address, vcontext, value16); } +uint8_t laseractive_regs[256]; + +static uint16_t laseractive_read16(uint32_t address, void *vcontext) +{ + printf("LaserActive 16-bit register read %X\n", address); + return 0xFFFF; +} + +static uint8_t laseractive_read8(uint32_t address, void *vcontext) +{ + printf("LaserActive 8-bit register read %X\n", address); + if (address == 0xFDFE81) { + return 0x80 | (laseractive_regs[0x41] & 1); + } else if (address >= 0xFDFE41 && address < 0xFDFE80 && (address & 1)) { + return laseractive_regs[address & 0xFF]; + } + return 0xFF; +} + +static void *laseractive_write16(uint32_t address, void *vcontext, uint16_t value) +{ + printf("LaserActive 16-bit register write %X: %X\n", address, value); + return vcontext; +} + +static void *laseractive_write8(uint32_t address, void *vcontext, uint8_t value) +{ + printf("LaserActive 8-bit register write %X: %X\n", address, value); + laseractive_regs[address & 0xFF] = value; + return vcontext; +} + segacd_context *alloc_configure_segacd(system_media *media, uint32_t opts, uint8_t force_region, rom_info *info) { static memmap_chunk sub_cpu_map[] = { @@ -1483,7 +1515,8 @@ .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}, {0xFE0000, 0xFF0000, 0x003FFF, .flags=MMAP_READ | MMAP_WRITE | MMAP_ONLY_ODD}, {0xFF0000, 0xFF8000, 0x003FFF, .read_16 = pcm_read16, .write_16 = pcm_write16, .read_8 = pcm_read8, .write_8 = pcm_write8}, - {0xFF8000, 0xFF8200, 0x0001FF, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8} + {0xFF8000, 0xFF8200, 0x0001FF, .read_16 = sub_gate_read16, .write_16 = sub_gate_write16, .read_8 = sub_gate_read8, .write_8 = sub_gate_write8}, + {0xFD0000, 0xFE0000, 0xFFFFFF, .read_16 = laseractive_read16, .write_16 = laseractive_write16, .read_8 = laseractive_read8, .write_8 = laseractive_write8} }; segacd_context *cd = calloc(sizeof(segacd_context), 1);