// license:BSD-3-Clause // copyright-holders:Curt Coder /********************************************************************** Wersi Wersiboard Music 64 / Siel CMK 49 Keyboard emulation Copyright MESS Team. Visit http://mamedev.org for licensing and usage restrictions. **********************************************************************/ /* 5 PRINT "MUSIC 64 & CMK 49 TEST" 6 PRINT " BY CARLO MERLANO" 7 PRINT "PLAY THE MUSIC KEYBOARD!" 8 F1=65.4:POKE 54296,15 9 POKE 54277,25:POKE 54278,68 10 IF PE=255 THEN POKE 54276,0 20 FOR I=1 TO 8 30 PO=57087+I:PE=PEEK(PO) 40 IF PE<255 THEN GOSUB 100 50 NEXT I 60 GOTO 10 100 KK=LOG(255-PE)/LOG(2)+8*I-7 110 FKK=(2^(1/12))^(KK-1)*F1 120 N=FKK*16.3835 130 NHI=INT(N/256):NLO=N-NHI*256 140 POKE 54276,17 150 POKE 54273,NHI:POKE 54272,NLO 160 I=0 170 RETURN */ #include "music64.h" //************************************************************************** // DEVICE DEFINITIONS //************************************************************************** const device_type C64_MUSIC64 = &device_creator; //------------------------------------------------- // MACHINE_CONFIG_FRAGMENT( c64_music64 ) //------------------------------------------------- static MACHINE_CONFIG_FRAGMENT( c64_music64 ) MCFG_C64_PASSTHRU_EXPANSION_SLOT_ADD() MACHINE_CONFIG_END //------------------------------------------------- // machine_config_additions - device-specific // machine configurations //------------------------------------------------- machine_config_constructor c64_music64_cartridge_device::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( c64_music64 ); } //------------------------------------------------- // INPUT_PORTS( c64_music64 ) //------------------------------------------------- static INPUT_PORTS_START( c64_music64 ) PORT_START("KB0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#2") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#2") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E2") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F2") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#2") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G2") PORT_START("KB1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A3") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#3") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B3") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C3") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#3") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D3") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#3") PORT_START("KB2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E3") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F3") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#3") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G3") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#3") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A4") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#4") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B4") PORT_START("KB3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C4") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#4") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D4") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#4") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E4") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F4") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#4") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G4") PORT_START("KB4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#4") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A5") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#5") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B5") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C5") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C#5") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D5") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("D#5") PORT_START("KB5") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E5") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F5") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F#5") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G5") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("G#5") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A6") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("A#6") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("B6") PORT_START("KB6") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C6") PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END //------------------------------------------------- // input_ports - device-specific input ports //------------------------------------------------- ioport_constructor c64_music64_cartridge_device::device_input_ports() const { return INPUT_PORTS_NAME( c64_music64 ); } //************************************************************************** // LIVE DEVICE //************************************************************************** //------------------------------------------------- // c64_music64_cartridge_device - constructor //------------------------------------------------- c64_music64_cartridge_device::c64_music64_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C64_MUSIC64, "C64 Music 64 cartridge", tag, owner, clock, "c64_music64", __FILE__), device_c64_expansion_card_interface(mconfig, *this), m_exp(*this, C64_EXPANSION_SLOT_TAG), m_kb0(*this, "KB0"), m_kb1(*this, "KB1"), m_kb2(*this, "KB2"), m_kb3(*this, "KB3"), m_kb4(*this, "KB4"), m_kb5(*this, "KB5"), m_kb6(*this, "KB6") { } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- void c64_music64_cartridge_device::device_start() { } //------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- void c64_music64_cartridge_device::device_reset() { } //------------------------------------------------- // c64_cd_r - cartridge data read //------------------------------------------------- UINT8 c64_music64_cartridge_device::c64_cd_r(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2) { data = m_exp->cd_r(space, offset, data, sphi2, ba, roml, romh, io1, io2); if (!io2) { switch (offset & 0x07) { case 0x00: data = m_kb0->read(); break; case 0x01: data = m_kb1->read(); break; case 0x02: data = m_kb2->read(); break; case 0x03: data = m_kb3->read(); break; case 0x04: data = m_kb4->read(); break; case 0x05: data = m_kb5->read(); break; case 0x06: data = m_kb6->read(); break; } } return data; } //------------------------------------------------- // c64_cd_w - cartridge data write //------------------------------------------------- void c64_music64_cartridge_device::c64_cd_w(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2) { m_exp->cd_w(space, offset, data, sphi2, ba, roml, romh, io1, io2); } //------------------------------------------------- // c64_game_r - GAME read //------------------------------------------------- int c64_music64_cartridge_device::c64_game_r(offs_t offset, int sphi2, int ba, int rw) { return m_exp->game_r(offset, sphi2, ba, rw, m_slot->hiram()); } //------------------------------------------------- // c64_exrom_r - EXROM read //------------------------------------------------- int c64_music64_cartridge_device::c64_exrom_r(offs_t offset, int sphi2, int ba, int rw) { return m_exp->exrom_r(offset, sphi2, ba, rw, m_slot->hiram()); }