diff --git a/src/dmdreader.cpp b/src/dmdreader.cpp index 2f61bec..c66bba2 100644 --- a/src/dmdreader.cpp +++ b/src/dmdreader.cpp @@ -354,6 +354,11 @@ DmdType detect_dmd() { (de < 9600) && (rdata > 65) && (rdata < 80)) { return DMD_ALVING; + // Island/SPinball(?) -> DOTCLK: 2323000 | DE: 18150 | RDATA: 565 + } else if ((dotclk > 2200000) && (dotclk < 2450000) && (de > 17650) && + (de < 18500) && (rdata > 540) && (rdata < 590)) { + return DMD_ISLAND; + // Capcom -> DOTCLK: 4168000 | DE: 16280 | RDATA: 510 } else if ((dotclk > 4000000) && (dotclk < 4300000) && (de > 16000) && (de < 16500) && (rdata > 490) && (rdata < 530)) { @@ -877,6 +882,26 @@ bool dmdreader_init(bool return_on_no_detection) { break; } + case DMD_ISLAND: { + uint input_pins[] = {RDATA}; + dmdreader_programs_init( + &dmd_reader_gottlieb_program, + dmd_reader_gottlieb_program_get_default_config, + &dmd_framedetect_gottlieb_program, + dmd_framedetect_gottlieb_program_get_default_config, input_pins, 1, + 0); + + source_width = 128; + source_height = 32; + source_bitsperpixel = 4; + target_bitsperpixel = 4; + source_planesperframe = 4; + source_planehistoryperframe = 0; + source_lineoversampling = LINEOVERSAMPLING_NONE; + source_mergeplanes = MERGEPLANES_ADD; + break; + } + case DMD_CAPCOM: { uint input_pins[] = {RDATA, RCLK}; dmdreader_programs_init(&dmd_reader_capcom_program,