// license:BSD-3-Clause // copyright-holders:AJR /**************************************************************************** Skeleton driver for Korg DSS-1 synthesizer. ****************************************************************************/ #include "emu.h" #include "bus/midi/midi.h" #include "bus/nscsi/devices.h" #include "cpu/i8085/i8085.h" #include "cpu/m6800/m6801.h" #include "cpu/nec/v5x.h" #include "imagedev/floppy.h" #include "machine/gen_latch.h" #include "machine/i8155.h" #include "machine/i8255.h" #include "machine/ncr5380n.h" #include "machine/nscsi_bus.h" #include "machine/pit8253.h" #include "machine/upd765.h" #include "video/hd44780.h" #include "emupal.h" #include "screen.h" class korg_dss1_state : public driver_device { public: korg_dss1_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_cpu1(*this, "cpu1") , m_cpu2(*this, "cpu2") , m_io1(*this, "io1") , m_io2(*this, "io2") , m_latch(*this, "latch%u", 1U) , m_pit(*this, "pit%u", 1U) , m_fdc(*this, "fdc") , m_lcdc(*this, "lcdc") , m_rombank(*this, "rombank") { } void dss1(machine_config &config); protected: virtual void machine_start() override; virtual void machine_reset() override; u8 klm782_ga1_r(offs_t offset); void klm782_ga1_w(offs_t offset, u8 data); u8 klm782_ga2_1_r(offs_t offset); void klm782_ga2_1_w(offs_t offset, u8 data); u8 klm782_ga2_2_r(offs_t offset); void klm782_ga2_2_w(offs_t offset, u8 data); u8 klm782_ga3_1_r(offs_t offset); void klm782_ga3_1_w(offs_t offset, u8 data); u8 klm782_ga3_2_r(offs_t offset); void klm782_ga3_2_w(offs_t offset, u8 data); void dmaram_lsb_w(u8 data); void dmaram_msb_w(u8 data); u8 dmaram_lsb_r(); u8 dmaram_msb_r(); void mode_select_w(u8 data); void klm780(machine_config &config); void klm781(machine_config &config); void klm782(machine_config &config); private: HD44780_PIXEL_UPDATE(lcd_pixel_update); void bank_switch_w(u8 data); void panel_led_w(u8 data); DECLARE_WRITE_LINE_MEMBER(fdc_reset_w); DECLARE_WRITE_LINE_MEMBER(fdc_tc_w); DECLARE_WRITE_LINE_MEMBER(sed9420c_trgin_w); u8 fdc_r(offs_t offset); void fdc_w(offs_t offset, u8 data); void vcf_vca_ef_w(u8 data); u8 cpu2_p5_r(); void ad_select_w(u8 data); void da_lsb_w(u8 data); void da_msb_w(u8 data); u8 kbd_r(); void kbd_w(u8 data); void cpu1_map(address_map &map); void cpu2_map(address_map &map); void palette_init_dss1(palette_device &palette); protected: optional_device m_cpu1; required_device m_cpu2; required_device m_io1; required_device m_io2; required_device_array m_latch; required_device_array m_pit; required_device m_fdc; required_device m_lcdc; optional_memory_bank m_rombank; }; class korg_dssmsrk_state : public korg_dss1_state { public: korg_dssmsrk_state(const machine_config &mconfig, device_type type, const char *tag) : korg_dss1_state(mconfig, type, tag) , m_msrkcpu(*this, "msrkcpu") , m_scsic(*this, "scsi:7:scsic") { } void dssmsrk(machine_config &config); private: void msrk_map(address_map &map); void msrk_io_map(address_map &map); u8 fdc_r(offs_t offset); void fdc_w(offs_t offset, u8 data); required_device m_msrkcpu; required_device m_scsic; }; void korg_dss1_state::machine_start() { if (m_rombank.found()) m_rombank->configure_entries(0, 2, memregion("klm780")->base(), 0x8000); } void korg_dss1_state::machine_reset() { if (m_rombank.found()) m_rombank->set_entry(0); } HD44780_PIXEL_UPDATE(korg_dss1_state::lcd_pixel_update) { if (x < 5 && y < 8 && line < 2 && pos < 20) bitmap.pix16(line * 8 + y, pos * 6 + x) = state; } void korg_dss1_state::bank_switch_w(u8 data) { m_rombank->set_entry(data & 0x01); } void korg_dss1_state::panel_led_w(u8 data) { // TODO // TODO } WRITE_LINE_MEMBER(korg_dss1_state::fdc_reset_w) { if (!state) m_fdc->soft_reset(); } WRITE_LINE_MEMBER(korg_dss1_state::fdc_tc_w) { if (m_cpu1.found()) m_fdc->tc_w(state); else { // TODO: MSRK rejumpers this to control SED9420C's MIN/STD input instead } } WRITE_LINE_MEMBER(korg_dss1_state::sed9420c_trgin_w) { // TODO } u8 korg_dss1_state::fdc_r(offs_t offset) { if (!machine().side_effects_disabled()) m_cpu1->adjust_icount(-1); if (BIT(offset, 0)) return m_fdc->fifo_r(); else return m_fdc->msr_r(); } u8 korg_dssmsrk_state::fdc_r(offs_t offset) { if (!machine().side_effects_disabled()) m_msrkcpu->adjust_icount(-1); if (BIT(offset, 0)) return m_fdc->fifo_r(); else return m_fdc->msr_r(); } void korg_dss1_state::fdc_w(offs_t offset, u8 data) { if (!machine().side_effects_disabled()) m_cpu1->adjust_icount(-1); if (BIT(offset, 0)) m_fdc->fifo_w(data); } void korg_dssmsrk_state::fdc_w(offs_t offset, u8 data) { if (!machine().side_effects_disabled()) m_msrkcpu->adjust_icount(-1); if (BIT(offset, 0)) m_fdc->fifo_w(data); } void korg_dss1_state::vcf_vca_ef_w(u8 data) { // TODO } u8 korg_dss1_state::cpu2_p5_r() { // TODO: other bits return m_latch[0]->pending_r() | (m_latch[1]->pending_r() << 1); } void korg_dss1_state::ad_select_w(u8 data) { // TODO } void korg_dss1_state::da_lsb_w(u8 data) { // TODO } void korg_dss1_state::da_msb_w(u8 data) { // TODO } u8 korg_dss1_state::kbd_r() { // TODO return 0; } void korg_dss1_state::kbd_w(u8 data) { // TODO } u8 korg_dss1_state::klm782_ga1_r(offs_t offset) { // TODO return 0; } void korg_dss1_state::klm782_ga1_w(offs_t offset, u8 data) { // TODO } u8 korg_dss1_state::klm782_ga2_1_r(offs_t offset) { // TODO return 0; } void korg_dss1_state::klm782_ga2_1_w(offs_t offset, u8 data) { // TODO } u8 korg_dss1_state::klm782_ga2_2_r(offs_t offset) { // TODO return 0; } void korg_dss1_state::klm782_ga2_2_w(offs_t offset, u8 data) { // TODO } u8 korg_dss1_state::klm782_ga3_1_r(offs_t offset) { // TODO return 0; } void korg_dss1_state::klm782_ga3_1_w(offs_t offset, u8 data) { // TODO } u8 korg_dss1_state::klm782_ga3_2_r(offs_t offset) { // TODO return 0; } void korg_dss1_state::klm782_ga3_2_w(offs_t offset, u8 data) { // TODO } void korg_dss1_state::dmaram_lsb_w(u8 data) { // TODO } void korg_dss1_state::dmaram_msb_w(u8 data) { // TODO } u8 korg_dss1_state::dmaram_lsb_r() { // TODO return 0; } u8 korg_dss1_state::dmaram_msb_r() { // TODO return 0; } void korg_dss1_state::mode_select_w(u8 data) { // TODO } void korg_dss1_state::cpu1_map(address_map &map) { map(0x0000, 0x7fff).bankr("rombank"); map(0x8000, 0x9fff).rom().region("klm780", 0x10000); map(0xa000, 0xbfff).ram(); map(0xc000, 0xc0ff).mirror(0x200).rw(m_io1, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w)); map(0xc100, 0xc107).mirror(0x2f8).rw(m_io1, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); map(0xc400, 0xc403).mirror(0x3fc).rw(m_io2, FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xc800, 0xc800).mirror(0x3ff).w(FUNC(korg_dss1_state::bank_switch_w)); map(0xd000, 0xd003).mirror(0x300).rw(m_pit[0], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd004, 0xd007).mirror(0x300).rw(m_pit[1], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd008, 0xd00b).mirror(0x300).rw(m_pit[2], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd00c, 0xd00f).mirror(0x300).rw(m_pit[3], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd010, 0xd013).mirror(0x300).rw(m_pit[4], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd014, 0xd017).mirror(0x300).rw(m_pit[5], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0xd018, 0xd018).mirror(0x303).w(FUNC(korg_dssmsrk_state::dmaram_lsb_w)); map(0xd01c, 0xd01c).mirror(0x303).w(FUNC(korg_dssmsrk_state::dmaram_msb_w)); map(0xd020, 0xd027).mirror(0x318).rw(FUNC(korg_dssmsrk_state::klm782_ga3_1_r), FUNC(korg_dssmsrk_state::klm782_ga3_1_w)); map(0xd040, 0xd047).mirror(0x318).rw(FUNC(korg_dssmsrk_state::klm782_ga3_2_r), FUNC(korg_dssmsrk_state::klm782_ga3_2_w)); map(0xd060, 0xd061).mirror(0x31e).rw(FUNC(korg_dssmsrk_state::klm782_ga1_r), FUNC(korg_dssmsrk_state::klm782_ga1_w)); map(0xd080, 0xd08f).mirror(0x310).rw(FUNC(korg_dssmsrk_state::klm782_ga2_1_r), FUNC(korg_dssmsrk_state::klm782_ga2_1_w)); map(0xd0a0, 0xd0af).mirror(0x310).rw(FUNC(korg_dssmsrk_state::klm782_ga2_2_r), FUNC(korg_dssmsrk_state::klm782_ga2_2_w)); map(0xd0c0, 0xd0c0).mirror(0x31f).r(FUNC(korg_dssmsrk_state::dmaram_lsb_r)); map(0xd0e0, 0xd0e0).mirror(0x31f).r(FUNC(korg_dssmsrk_state::dmaram_msb_r)); map(0xd400, 0xd400).mirror(0x3fe).w(m_latch[0], FUNC(generic_latch_8_device::write)); map(0xd800, 0xd800).mirror(0x3fe).r(m_latch[1], FUNC(generic_latch_8_device::read)); map(0xdc00, 0xdc01).mirror(0x3fe).rw(FUNC(korg_dss1_state::fdc_r), FUNC(korg_dss1_state::fdc_w)); map(0xe000, 0xffff).ram(); } void korg_dssmsrk_state::msrk_map(address_map &map) { map.global_mask(0x3ffff); map(0x00000, 0x07fff).rom().region("klm780", 0); map(0x08000, 0x0bfff).ram(); map(0x0c000, 0x0c0ff).mirror(0x200).rw(m_io1, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w)); map(0x0c100, 0x0c107).mirror(0x2f8).rw(m_io1, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); map(0x0c400, 0x0c403).mirror(0x3fc).rw(m_io2, FUNC(i8255_device::read), FUNC(i8255_device::write)); //map(0x0cc00, 0x0cc1f).mirror(0x3e0).w(FUNC(korg_dssmsrk_state::msrk_ga_w)); map(0x0d000, 0x0d003).mirror(0x300).rw(m_pit[0], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d004, 0x0d007).mirror(0x300).rw(m_pit[1], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d008, 0x0d00b).mirror(0x300).rw(m_pit[2], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d00c, 0x0d00f).mirror(0x300).rw(m_pit[3], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d010, 0x0d013).mirror(0x300).rw(m_pit[4], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d014, 0x0d017).mirror(0x300).rw(m_pit[5], FUNC(pit8253_device::read), FUNC(pit8253_device::write)); map(0x0d018, 0x0d018).mirror(0x303).w(FUNC(korg_dssmsrk_state::dmaram_lsb_w)); map(0x0d01c, 0x0d01c).mirror(0x303).w(FUNC(korg_dssmsrk_state::dmaram_msb_w)); map(0x0d020, 0x0d027).mirror(0x318).rw(FUNC(korg_dssmsrk_state::klm782_ga3_1_r), FUNC(korg_dssmsrk_state::klm782_ga3_1_w)); map(0x0d040, 0x0d047).mirror(0x318).rw(FUNC(korg_dssmsrk_state::klm782_ga3_2_r), FUNC(korg_dssmsrk_state::klm782_ga3_2_w)); map(0x0d060, 0x0d061).mirror(0x31e).rw(FUNC(korg_dssmsrk_state::klm782_ga1_r), FUNC(korg_dssmsrk_state::klm782_ga1_w)); map(0x0d080, 0x0d08f).mirror(0x310).rw(FUNC(korg_dssmsrk_state::klm782_ga2_1_r), FUNC(korg_dssmsrk_state::klm782_ga2_1_w)); map(0x0d0a0, 0x0d0af).mirror(0x310).rw(FUNC(korg_dssmsrk_state::klm782_ga2_2_r), FUNC(korg_dssmsrk_state::klm782_ga2_2_w)); map(0x0d0c0, 0x0d0c0).mirror(0x31f).r(FUNC(korg_dssmsrk_state::dmaram_lsb_r)); map(0x0d0e0, 0x0d0e0).mirror(0x31f).r(FUNC(korg_dssmsrk_state::dmaram_msb_r)); map(0x0d400, 0x0d400).mirror(0x3fe).w(m_latch[0], FUNC(generic_latch_8_device::write)); map(0x0d800, 0x0d800).mirror(0x3fe).r(m_latch[1], FUNC(generic_latch_8_device::read)); map(0x0e000, 0x0ffff).ram(); map(0x10000, 0x17fff).mirror(0x8000).rom().region("klm780", 0x8000); map(0x30000, 0x3ffff).rom().region("msrk", 0); } void korg_dssmsrk_state::msrk_io_map(address_map &map) { map(0xc800, 0xc807).mirror(0x3f8).rw(m_scsic, FUNC(ncr53c80_device::read), FUNC(ncr53c80_device::write)); map(0xdc00, 0xdc01).mirror(0x3fe).rw(FUNC(korg_dssmsrk_state::fdc_r), FUNC(korg_dssmsrk_state::fdc_w)); } void korg_dss1_state::cpu2_map(address_map &map) { map(0x0000, 0x001f).m(m_cpu2, FUNC(hd6303x_cpu_device::hd6301x_io)); // FIXME: internalize this map(0x0040, 0x00ff).ram(); // FIXME: internalize this map(0x0100, 0x0100).mirror(0x3cff).w(FUNC(korg_dss1_state::da_lsb_w)); map(0x0200, 0x0200).mirror(0x3cff).w(FUNC(korg_dss1_state::da_msb_w)); map(0x0300, 0x0300).mirror(0x3cff).r(m_latch[0], FUNC(generic_latch_8_device::read)); map(0x0300, 0x0300).mirror(0x3cff).w(m_latch[1], FUNC(generic_latch_8_device::write)); map(0x4000, 0x4000).mirror(0x3fff).rw(FUNC(korg_dss1_state::kbd_r), FUNC(korg_dss1_state::kbd_w)); map(0x8000, 0x9fff).mirror(0x2000).ram(); map(0xc000, 0xffff).rom().region("klm781", 0); } static INPUT_PORTS_START(dss1) INPUT_PORTS_END static void dss1_floppies(device_slot_interface &device) { device.option_add("35dd", FLOPPY_35_DD); } void korg_dss1_state::palette_init_dss1(palette_device &palette) { palette.set_pen_color(0, rgb_t(131, 136, 139)); palette.set_pen_color(1, rgb_t( 92, 83, 88)); } void korg_dss1_state::klm780(machine_config &config) { I8085A(config, m_cpu1, 10_MHz_XTAL); // uPD8085AC-2 m_cpu1->set_addrmap(AS_PROGRAM, &korg_dss1_state::cpu1_map); I8155(config, m_io1, 10_MHz_XTAL / 2); // uPD8155HC-2 m_io1->out_to_callback().set_inputline(m_cpu1, I8085_RST75_LINE); m_io1->in_pa_callback().set(m_lcdc, FUNC(hd44780_device::db_r)); m_io1->out_pa_callback().set(m_lcdc, FUNC(hd44780_device::db_w)); m_io1->out_pb_callback().set(FUNC(korg_dss1_state::panel_led_w)); m_io1->out_pc_callback().set(m_lcdc, FUNC(hd44780_device::e_w)).bit(0); m_io1->out_pc_callback().append(m_lcdc, FUNC(hd44780_device::rw_w)).bit(1); m_io1->out_pc_callback().append(m_lcdc, FUNC(hd44780_device::rs_w)).bit(2); m_io1->out_pc_callback().append(FUNC(korg_dss1_state::fdc_reset_w)).bit(3); m_io1->out_pc_callback().append(FUNC(korg_dss1_state::fdc_tc_w)).bit(4); m_io1->out_pc_callback().append(FUNC(korg_dss1_state::sed9420c_trgin_w)).bit(5); I8255(config, m_io2); // uPD8255AC-2 m_io2->out_pc_callback().set(FUNC(korg_dss1_state::mode_select_w)); UPD765A(config, m_fdc, 16_MHz_XTAL / 4, true, true); // uPD765AC; clocked through SED9420C m_fdc->intrq_wr_callback().set_inputline(m_cpu1, I8085_INTR_LINE); FLOPPY_CONNECTOR(config, "fdc:0", dss1_floppies, "35dd", floppy_image_device::default_floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, "fdc:1", dss1_floppies, nullptr, floppy_image_device::default_floppy_formats).enable_sound(true); GENERIC_LATCH_8(config, m_latch[0]); m_latch[0]->data_pending_callback().set_inputline(m_cpu1, I8085_RST65_LINE).invert(); GENERIC_LATCH_8(config, m_latch[1]); m_latch[1]->data_pending_callback().set_inputline(m_cpu1, I8085_RST55_LINE); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); screen.set_size(6*20, 8*2); screen.set_visarea_full(); screen.set_palette("palette"); PALETTE(config, "palette", FUNC(korg_dss1_state::palette_init_dss1), 2); HD44780(config, m_lcdc, 0); m_lcdc->set_lcd_size(2, 20); m_lcdc->set_pixel_update_cb(FUNC(korg_dss1_state::lcd_pixel_update)); } void korg_dss1_state::klm781(machine_config &config) { HD6303X(config, m_cpu2, 8_MHz_XTAL); // HD63B03X m_cpu2->set_addrmap(AS_PROGRAM, &korg_dss1_state::cpu2_map); m_cpu2->out_p2_cb().set(FUNC(korg_dss1_state::vcf_vca_ef_w)); m_cpu2->in_p5_cb().set(FUNC(korg_dss1_state::cpu2_p5_r)); m_cpu2->out_p6_cb().set(FUNC(korg_dss1_state::ad_select_w)); m_cpu2->out_ser_tx_cb().set("midi_out", FUNC(midi_port_device::write_txd)); MIDI_PORT(config, "midi_in", midiin_slot, "midiin"); MIDI_PORT(config, "midi_out", midiout_slot, "midiout"); } void korg_dss1_state::klm782(machine_config &config) { PIT8253(config, m_pit[0]); PIT8253(config, m_pit[1]); PIT8253(config, m_pit[2]); PIT8253(config, m_pit[3]); PIT8253(config, m_pit[4]); PIT8253(config, m_pit[5]); } void korg_dss1_state::dss1(machine_config &config) { klm780(config); klm781(config); klm782(config); } void korg_dssmsrk_state::dssmsrk(machine_config &config) { V40(config, m_msrkcpu, 16_MHz_XTAL); // uPD70208 m_msrkcpu->set_addrmap(AS_PROGRAM, &korg_dssmsrk_state::msrk_map); m_msrkcpu->set_addrmap(AS_IO, &korg_dssmsrk_state::msrk_io_map); m_msrkcpu->out_hreq_cb().set_inputline(m_msrkcpu, INPUT_LINE_HALT); m_msrkcpu->out_hreq_cb().append(m_msrkcpu, FUNC(v40_device::hack_w)); m_msrkcpu->in_ior_cb<0>().set(m_fdc, FUNC(upd765a_device::dma_r)); m_msrkcpu->out_iow_cb<0>().set(m_fdc, FUNC(upd765a_device::dma_w)); m_msrkcpu->in_ior_cb<1>().set(m_scsic, FUNC(ncr53c80_device::dma_r)); m_msrkcpu->out_iow_cb<1>().set(m_scsic, FUNC(ncr53c80_device::dma_w)); m_msrkcpu->out_eop_cb().set(m_fdc, FUNC(upd765a_device::tc_line_w)); //m_msrkcpu->out_eop_cb().append(m_scsic, FUNC(ncr53c80_device::eop_w)); m_msrkcpu->out_handler<1>().set(m_msrkcpu, FUNC(v40_device::tclk_w)); klm780(config); config.device_remove("cpu1"); m_io1->set_clock(16_MHz_XTAL / 4); // CLKOUT divider not verified m_io1->out_to_callback().set_inputline(m_msrkcpu, INPUT_LINE_IRQ1); m_fdc->intrq_wr_callback().set_inputline(m_msrkcpu, INPUT_LINE_IRQ6); m_fdc->drq_wr_callback().set(m_msrkcpu, FUNC(v40_device::dreq_w<0>)); // FIXME: delayed by 74HCT164 m_latch[0]->data_pending_callback().set_inputline(m_msrkcpu, INPUT_LINE_IRQ2).invert(); m_latch[1]->data_pending_callback().set_inputline(m_msrkcpu, INPUT_LINE_IRQ3); klm781(config); klm782(config); NSCSI_BUS(config, "scsi"); NSCSI_CONNECTOR(config, "scsi:0", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:1", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:2", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:3", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:4", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:5", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:6", default_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:7").option_set("scsic", NCR53C80).machine_config([this] (device_t *device) { auto &scsic = downcast(*device); // 48-pin DIP scsic.irq_handler().set_inputline(m_msrkcpu, INPUT_LINE_IRQ4); scsic.drq_handler().set(m_msrkcpu, FUNC(v40_device::dreq_w<1>)); }); } ROM_START(dss1) ROM_REGION(0x12000, "klm780", 0) ROM_SYSTEM_BIOS(0, "v36", "Version 36") ROM_SYSTEM_BIOS(1, "v34", "Version 34") ROM_SYSTEM_BIOS(2, "v31", "Version 31") ROMX_LOAD("860336.ic19", 0x00000, 0x8000, CRC(44515595) SHA1(f4873c219cda4158506acbfb06abb8a72224049d), ROM_BIOS(0)) // 27256 (bank 0) ROMX_LOAD("860334.ic19", 0x00000, 0x8000, CRC(076c5956) SHA1(752a26761c63e46f1a6efa1b19a60bafa7a5bc42), ROM_BIOS(1)) ROMX_LOAD("860331.ic19", 0x00000, 0x8000, CRC(fcefcc79) SHA1(2332ffcbbe61d460d1929e65cbaa01e0766ba51f), ROM_BIOS(2)) ROMX_LOAD("860436.ic18", 0x08000, 0x8000, CRC(c8830cf9) SHA1(2bcdcfd9afc9e6b2078afdf9c027622b705780a9), ROM_BIOS(0)) // 27256 (bank 1) ROMX_LOAD("860434.ic18", 0x08000, 0x8000, CRC(5b253cac) SHA1(20507004ead025b03b2f7a31af87c9dae968e8eb), ROM_BIOS(1)) ROMX_LOAD("860431.ic18", 0x08000, 0x8000, CRC(ed0e4238) SHA1(b7e56a3f414dd13bb6b9ef40262c6b93e52f5254), ROM_BIOS(2)) ROMX_LOAD("860536.ic12", 0x10000, 0x2000, CRC(547388a1) SHA1(4c3dfaebe48f441955f2a6bd42dd4d30eb63b913), ROM_BIOS(0)) // 2764 (not banked) ROMX_LOAD("860534.ic12", 0x10000, 0x2000, CRC(9b5792b7) SHA1(e031d7f3a5c4f67399a75050bd02343ed6f8926d), ROM_BIOS(1)) ROMX_LOAD("860531.ic12", 0x10000, 0x2000, CRC(a8173858) SHA1(e1d898594ad9e65a95478cf1ec14b9b3cafd0159), ROM_BIOS(2)) ROM_REGION(0x4000, "klm781", 0) ROMX_LOAD("860236.ic15", 0x0000, 0x4000, CRC(b4ea379a) SHA1(66b3586b6fb7fa5edf70a933e49f626452ffe006), ROM_BIOS(0)) ROMX_LOAD("860234.ic15", 0x0000, 0x4000, CRC(5766cdb5) SHA1(ded6c5758fbf90fd65b80d5b08e72349d38555d2), ROM_BIOS(1)) ROMX_LOAD("860231.ic15", 0x0000, 0x4000, CRC(2559b3aa) SHA1(8b7998ffc24405d0ca08a93c23c18f97aff74d16), ROM_BIOS(2)) ROM_END ROM_START(dssmsrk) ROM_REGION(0x10000, "klm780", 0) ROM_LOAD("113000.ic18", 0x00000, 0x8000, CRC(6fa13d52) SHA1(8de0e4e8ac4afe0d0fb116b6c8b64739ba81a722)) ROM_LOAD("113001.ic19", 0x08000, 0x8000, CRC(ec7e2473) SHA1(dacea4a545ce3ed1fc11d9025e86dfd1d32a222c)) // EPROM at IC12 is replaced with D4364C-15 SRAM ROM_REGION(0x4000, "klm781", 0) ROM_LOAD("860236.ic15", 0x0000, 0x4000, CRC(b4ea379a) SHA1(66b3586b6fb7fa5edf70a933e49f626452ffe006)) ROM_REGION(0x10000, "msrk", 0) ROM_LOAD("113003.u30", 0x00000, 0x10000, CRC(81b17db3) SHA1(af8a3167e06641d41b9b9e6e024335c2eb827274)) ROM_END SYST(1986, dss1, 0, 0, dss1, dss1, korg_dss1_state, empty_init, "Korg", "DSS-1 Digital Sampling Synthesizer", MACHINE_IS_SKELETON) SYST(1987, dssmsrk, dss1, 0, dssmsrk, dss1, korg_dssmsrk_state, empty_init, "Korg / Sound Logic", "DSS-1 Digital Sampling Synthesizer (Memory/SCSI Retrofit)", MACHINE_IS_SKELETON)