diff options
author | 2025-02-24 04:17:41 -0800 | |
---|---|---|
committer | 2025-02-24 13:17:41 +0100 | |
commit | 6addc09da6ee16ac537dd4c46183ba5edb6f28f0 (patch) | |
tree | e31e6f0f238c2a67fde8b93405dd4d1511fbe0f4 | |
parent | 67d0a1e2d521a8d948bc576394c31b573835fa9f (diff) |
linn/linndrum.cpp: Added interactive layout for the LinnDrum. (#13404)
* linn/linndrum.cpp: Added interactive layout for LinnDrum.
* linn/linndrum.cpp: Spell tuning correctly.
-rw-r--r-- | src/mame/layout/linn_linndrum.lay | 714 | ||||
-rw-r--r-- | src/mame/linn/linndrum.cpp | 170 |
2 files changed, 843 insertions, 41 deletions
diff --git a/src/mame/layout/linn_linndrum.lay b/src/mame/layout/linn_linndrum.lay new file mode 100644 index 00000000000..66530763c41 --- /dev/null +++ b/src/mame/layout/linn_linndrum.lay @@ -0,0 +1,714 @@ +<?xml version="1.0"?> +<!-- +license:CC0-1.0 +copyright-holders:m1macrophage +--> +<mamelayout version="2"> + <element name="txt_bass"><text string="BASS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_snare"><text string="SNARE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_toms"><text string="TOMS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_hihat"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_ride"><text string="RIDE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_crash"><text string="CRASH"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_congas"><text string="CONGAS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_conga"><text string="CONGA"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_cabasa"><text string="CABASA"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tambourine"><text string="TAMBOURINE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_percussion"><text string="PERCUSSION"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drums"><text string="DRUMS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <element name="txt_in"><text string="IN"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_out"><text string="OUT"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_cassette"><text string="CASSETTE"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_sync"><text string="SYNC"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_trigger"><text string="TRIGGER"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_output"><text string="OUTPUT"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_remote"><text string="REMOTE"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_play"><text string="PLAY/STOP"><color red="0.91" green="0.48" blue="0.33"/></text></element> + <element name="txt_trigger_inputs"><text string="TRIGGER INPUTS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_load"><text string="LOAD"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_verify"><text string="VERIFY"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_store"><text string="STORE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tempo"><text string="TEMPO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_bpm"><text string="BPM/TRIGGER"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_volume"><text string="VOLUME"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_ext_sync"><text string="EXT. SYNC"><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <element name="txt_drum_top_1"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_2"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_3"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_4"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_7"><text string="COWBELL"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_top_8"><text string="CLAPS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_1"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_2"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_3"><text string="OPEN"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_4"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_5"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_7"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_middle_8"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_1"><text string="SIDESTICK"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_2"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_3"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_4"><text string="3"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_5"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_6"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_7"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_drum_bottom_8"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <element name="txt_tuning"><text string="TUNING"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_decay"><text string="DECAY"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_1"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_2"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_3"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_4"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_tune_7"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <element name="txt_mixer"><text string="MIXER"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_left_1"><text string="LEFT" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_right_1"><text string="RIGHT" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_left_2"><text string="LEFT" align="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_right_2"><text string="RIGHT" align="2"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_1"><text string="BASS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_2"><text string="SNARE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_3"><text string="SIDESTICK"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_4"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_6"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_7"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_8"><text string="RIDE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_9"><text string="CRASH"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_10"><text string="CABASA"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_11"><text string="TAMB"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_12"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_13"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_14"><text string="COWBELL"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_15"><text string="CLAPS"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_slider_16"><text string="CLICK"><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <element name="txt_create"> + <text string="CREATE RHYTHM PATTERN / SONG"><color red="0.82" green="0.43" blue="0.31"/></text> + </element> + <element name="txt_select"> + <text string="SELECT RHYTHM PATTERN"><color red="0.82" green="0.43" blue="0.31"/></text> + </element> + <element name="txt_song"><text string="SONG"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_pattern"><text string="PATTERN"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_step"><text string="STEP 0/% MEM"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_pattern_num"><text string="PATTERN#"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_correct"><text string="CORRECT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_timing"><text string="TIMING"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_straight"><text string="STRAIGHT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_shuffle"><text string="SHUFFLE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_1"><text string="SONG#"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_2"><text string="END"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_3"><text string="DELETE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_4"><text string="INSERT"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_5"><text string="<-----"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_6"><text string="----->"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_top_7"><text string="ENTER"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_1"><text string="ERROR"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_2"><text string="BEFORE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_3"><text string="AFTER"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_4"><text string="COPY"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_5"><text string="LENGTH"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_6"><text string="ERASE"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_create_middle_7"><text string="RECORD"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_1"><text string="" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_2"><text string="A" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_3"><text string="B" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_4"><text string="C" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_5"><text string="D" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_6"><text string="E" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_top_7"><text string="F" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_1"><text string="1/8" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_2"><text string="1/8T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_3"><text string="1/16" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_4"><text string="1/16T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_5"><text string="1/32" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_6"><text string="1/32T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + <element name="txt_led_bottom_7"><text string="HI" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element> + + <repeat count="7"> + <param name="i" start="1" increment="1"/> + <element name="txt_~i~"><text string="~i~"><color red="0.82" green="0.43" blue="0.31"/></text></element> + </repeat> + + <element name="wood"><rect><color red="0.66" green="0.48" blue="0.37"/></rect></element> + <element name="case"><rect><color red="0.12" green="0.10" blue="0.12"/></rect></element> + <element name="line"><rect><color red="0.82" green="0.43" blue="0.31"/></rect></element> + <element name="dark_line"><rect><color red="0.61" green="0.34" blue="0.27"/></rect></element> + <element name="screw"><rect><color red="0.19" green="0.18" blue="0.18"/></rect></element> + <element name="jack"><rect><color red="0.35" green="0.35" blue="0.36"/></rect></element> + + <element name="outline_cassette_tempo"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="124" height="400" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_create"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="706" height="400" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_drumpads"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="838" height="273" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_play"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="124" height="273" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_tuning"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="783" height="195" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_volume"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="125" height="195" rx="16" ry="16"/> + ]]></data></image> + </element> + <element name="outline_mixer"> + <image><data><![CDATA[ + <rect stroke="#f28367" fill="none" stroke-width="3" width="916" height="479" rx="16" ry="16"/> + ]]></data></image> + </element> + + <group name="button_group_top"> + <element ref="line"><bounds x="0" y="0" width="~line_width~" height="2"/></element> + <element ref="line"><bounds x="0" y="0" width="2" height="17"/></element> + <element ref="line"><bounds x="~line_width~" y="0" width="2" height="17"/></element> + </group> + <group name="button_group_bottom"> + <element ref="line"><bounds x="0" y="15" width="~line_width~" height="2"/></element> + <element ref="line"><bounds x="0" y="0" width="2" height="17"/></element> + <element ref="line"><bounds x="~line_width~" y="0" width="2" height="17"/></element> + </group> + + <element name="led"> + <disk state="0"><color red="0.28" green="0.06" blue="0.10"/></disk> + <disk state="1"><color red="0.81" green="0.21" blue="0.18"/></disk> + </element> + + <element name="button"> + <rect> + <bounds x="0" y="0" width="80" height="76"/> + <color red="0.06" green="0.04" blue="0.06"/> + </rect> + <rect> + <bounds x="5" y="4" width="70" height="68"/> + <color red="0.17" green="0.16" blue="0.17"/> + </rect> + <rect state="0"> + <bounds x="12" y="12" width="56" height="52"/> + <color red="0.11" green="0.11" blue="0.13"/> + </rect> + <rect state="1"> + <bounds x="12" y="12" width="56" height="52"/> + <color red="0.31" green="0.31" blue="0.33"/> + </rect> + </element> + + <element name="knob_outer"><disk><color red="0.17" green="0.16" blue="0.18"/></disk></element> + <element name="knob_inner"><disk><color red="0.23" green="0.22" blue="0.24"/></disk></element> + <element name="knob_value_background"><rect><color red="0.0" green="0.0" blue="0.0" alpha="0.0"/></rect></element> + <element name="knob_value"> + <simplecounter maxstate="100" digits="1"><color red="1.0" green="0.5" blue="0.2"/></simplecounter> + </element> + <group name="knob"> + <element ref="knob_outer"><bounds x="0" y="0" width="68" height="68"/></element> + <element ref="knob_inner"><bounds x="9" y="9" width="50" height="50"/></element> + <element ref="knob_value_background" clickthrough="no"> + <bounds x="17" y="22" width="34" height="24"/> + </element> + <element ref="knob_value" inputtag="~knob_input~" inputmask="0x7f" inputraw="yes"> + <bounds x="17" y="22" width="34" height="24"/> + </element> + </group> + + <element name="slider_area"><rect><color red="0.0" blue="0.0" green="0.0" alpha="0.0"/></rect></element> + <element name="slider_well"><rect><color red="0.05" blue="0.04" green="0.06"/></rect></element> + <element name="slider_knob"><rect><color red="0.27" blue="0.27" green="0.27"/></rect></element> + <group name="slider"> + <element ref="slider_area" id="slider_~slider_input~"> + <bounds x="0" y="0" width="32" height="~slider_height~"/> + </element> + <element ref="slider_well"><bounds x="8" y="0" width="16" height="~slider_height~"/></element> + <element ref="slider_knob" id="slider_knob_~slider_input~">> + <animate inputtag="~slider_input~" inputmask="0x7f"/> + <bounds state="100" x="10" y="0" width="12" height="28"/> + <bounds state="0" x="10" y="~slider_knob_max_y~" width="12" height="28"/> + </element> + </group> + + <element name="display_background"><rect><color red="0.06" blue="0.01" green="0.05"/></rect></element> + <element name="display_digit"><led7seg><color red="0.81" blue="0.21" green="0.18"/></led7seg></element> + <group name="display"> + <element ref="display_background"><bounds x="0" y="0" width="80" height="46"/></element> + <element ref="display_digit" name="~display_output~0"><bounds x="6" y="5" width="30" height="38"/></element> + <element ref="display_digit" name="~display_output~1"><bounds x="44" y="5" width="30" height="38"/></element> + </group> + + <view name="Default Layout"> + <bounds x="53" y="49" width="2113" height="1112"/> + + <!-- Case --> + <element ref="screw"><bounds x="420" y="1145" width="29" height="13"/></element> + <element ref="screw"><bounds x="1780" y="1145" width="29" height="13"/></element> + <element ref="case"><bounds x="127" y="70" width="1965" height="1080"/></element> + <element ref="wood"><bounds x="55" y="50" width="72" height="1104"/></element> + <element ref="wood"><bounds x="2092" y="50" width="72" height="1104"/></element> + <element ref="dark_line"><bounds x="160" y="283" width="1897" height="3"/></element> + <element ref="dark_line"><bounds x="160" y="321" width="1897" height="3"/></element> + + <!-- I/O --> + <element ref="jack"><bounds x="655" y="64" width="18" height="6"/></element> + <element ref="txt_cassette"><bounds x="855" y="99" width="68" height="17"/></element> + <element ref="txt_in"><bounds x="847" y="76" width="20" height="17"/></element> + <element ref="jack"><bounds x="842" y="64" width="37" height="6"/></element> + <element ref="txt_out"><bounds x="903" y="76" width="31" height="17"/></element> + <element ref="jack"><bounds x="904" y="64" width="37" height="6"/></element> + <element ref="txt_sync"><bounds x="1005" y="99" width="42" height="17"/></element> + <element ref="txt_in"><bounds x="985" y="76" width="20" height="17"/></element> + <element ref="jack"><bounds x="980" y="64" width="37" height="6"/></element> + <element ref="txt_out"><bounds x="1042" y="76" width="31" height="17"/></element> + <element ref="jack"><bounds x="1042" y="64" width="37" height="6"/></element> + <element ref="txt_trigger"><bounds x="1104" y="76" width="62" height="17"/></element> + <element ref="txt_output"><bounds x="1104" y="99" width="62" height="17"/></element> + <element ref="jack"><bounds x="1117" y="64" width="37" height="6"/></element> + <element ref="txt_remote"><bounds x="1177" y="76" width="62" height="17"/></element> + <element ref="txt_play"><bounds x="1173" y="99" width="73" height="17"/></element> + <element ref="jack"><bounds x="1193" y="64" width="37" height="6"/></element> + <element ref="line"><bounds x="1265" y="107" width="155" height="2"/></element> + <element ref="line"><bounds x="1539" y="107" width="155" height="2"/></element> + <element ref="txt_trigger_inputs"><bounds x="1426" y="99" width="105" height="17"/></element> + <repeat count="5"> + <param name="i" start="1" increment="1"/> + <param name="x" start="1275" increment="94"/> + <element ref="txt_~i~"><bounds x="~x~" y="76" width="37" height="17"/></element> + <element ref="jack"><bounds x="~x~" y="64" width="37" height="6"/></element> + </repeat> + + <!-- CASSETTE --> + <element ref="outline_cassette_tempo"><bounds x="163" y="425" width="124" height="400"/></element> + <element ref="txt_cassette"><bounds x="166" y="435" width="118" height="24"/></element> + <element ref="button" inputtag="keyboard_col_2" inputmask="0x08"> + <bounds x="185" y="487" width="80" height="76"/> + </element> + <element ref="txt_store"><bounds x="166" y="564" width="118" height="17"/></element> + <element ref="led" name="led_store"><bounds x="213" y="586" width="24" height="24"/></element> + <element ref="line"><bounds x="224" y="612" width="2" height="20"/></element> + <element ref="txt_verify"><bounds x="166" y="633" width="118" height="17"/></element> + <element ref="line"><bounds x="224" y="651" width="2" height="20"/></element> + <element ref="led" name="led_load"><bounds x="213" y="673" width="24" height="24"/></element> + <element ref="txt_load"><bounds x="166" y="703" width="118" height="17"/></element> + <element ref="button" inputtag="keyboard_col_2" inputmask="0x10"> + <bounds x="185" y="720" width="80" height="76"/> + </element> + + <!-- CREATE RHYTHM PATTERN / SONG --> + + <element ref="outline_create"><bounds x="295" y="425" width="706" height="400"/></element> + <element ref="txt_create"><bounds x="463" y="435" width="355" height="24"/></element> + <element ref="line"><bounds x="311" y="445" width="150" height="2"/></element> + <element ref="line"><bounds x="819" y="445" width="165" height="2"/></element> + + <element ref="txt_song"><bounds x="311" y="467" width="80" height="17"/></element> + <element ref="led" name="led_song"><bounds x="398" y="462" width="24" height="24"/></element> + <element ref="button" inputtag="keyboard_col_1" inputmask="0x02"> + <bounds x="311" y="487" width="80" height="76"/> + </element> + <element ref="txt_pattern"><bounds x="311" y="564" width="80" height="17"/></element> + <element ref="led" name="led_pattern"><bounds x="398" y="565" width="24" height="24"/></element> + + <param name="display_output" value="display_step_"/> + <group ref="display"><bounds x="314" y="623" width="80" height="46"/></group> + <element ref="txt_pattern"><bounds x="309" y="786" width="90" height="17"/></element> + <param name="display_output" value="display_pattern_"/> + <group ref="display"><bounds x="314" y="737" width="80" height="46"/></group> + <element ref="txt_step"><bounds x="309" y="672" width="90" height="17"/></element> + + <!-- Text labels for buttons and LEDs. --> + <repeat count="7"> + <param name="i" start="1" increment="1"/> + <param name="x" start="428" increment="80"/> + <element ref="txt_create_top_~i~"><bounds x="~x~" y="467" width="80" height="17"/></element> + <element ref="txt_create_middle_~i~"><bounds x="~x~" y="564" width="80" height="17"/></element> + <element ref="txt_~i~"><bounds x="~x~" y="700" width="80" height="17"/></element> + <param name="led_txt_x" start="483" increment="80"/> + <element ref="txt_led_top_~i~"><bounds x="~led_txt_x~" y="628" width="40" height="17"/></element> + <element ref="txt_led_bottom_~i~"><bounds x="~led_txt_x~" y="665" width="40" height="17"/></element> + </repeat> + + <!-- Top row of buttons. --> + <repeat count="4"> + <param name="x" start="428" increment="80"/> + <param name="input_mask" start="0x04" lshift="1"/> + <element ref="button" inputtag="keyboard_col_1" inputmask="~input_mask~"> + <bounds x="~x~" y="487" width="80" height="76"/> + </element> + </repeat> + <repeat count="3"> + <param name="x" start="748" increment="80"/> + <param name="input_mask" start="0x01" lshift="1"/> + <element ref="button" inputtag="keyboard_col_2" inputmask="~input_mask~"> + <bounds x="~x~" y="487" width="80" height="76"/> + </element> + </repeat> + + <!-- Top row of LEDs. --> + <element ref="led" name="led_a"><bounds x="536" y="625" width="24" height="24"/></element> + <element ref="led" name="led_b"><bounds x="616" y="625" width="24" height="24"/></element> + <element ref="led" name="led_c"><bounds x="696" y="625" width="24" height="24"/></element> + <element ref="led" name="led_d"><bounds x="776" y="625" width="24" height="24"/></element> + <element ref="led" name="led_e"><bounds x="856" y="625" width="24" height="24"/></element> + <element ref="led" name="led_f"><bounds x="936" y="625" width="24" height="24"/></element> + + <!-- Bottom row of LEDs. --> + <element ref="led" name="led_1_8"><bounds x="456" y="662" width="24" height="24"/></element> + <element ref="led" name="led_1_8_t"><bounds x="536" y="662" width="24" height="24"/></element> + <element ref="led" name="led_1_16"><bounds x="616" y="662" width="24" height="24"/></element> + <element ref="led" name="led_1_16_t"><bounds x="696" y="662" width="24" height="24"/></element> + <element ref="led" name="led_1_32"><bounds x="776" y="662" width="24" height="24"/></element> + <element ref="led" name="led_1_32_t"><bounds x="856" y="662" width="24" height="24"/></element> + <element ref="led" name="led_hi"><bounds x="936" y="662" width="24" height="24"/></element> + + <!-- Bottom row of buttons. --> + <repeat count="6"> + <param name="x" start="428" increment="80"/> + <param name="input_mask" start="0x01" lshift="1"/> + <element ref="button" inputtag="keyboard_col_0" inputmask="~input_mask~"> + <bounds x="~x~" y="720" width="80" height="76"/> + </element> + </repeat> + <element ref="button" inputtag="keyboard_col_1" inputmask="0x01"> + <bounds x="908" y="720" width="80" height="76"/> + </element> + + <element ref="txt_correct"><bounds x="428" y="588" width="80" height="17"/></element> + <element ref="txt_timing"><bounds x="559" y="588" width="52" height="17"/></element> + <element ref="line"><bounds x="518" y="595" width="40" height="2"/></element> + <element ref="line"><bounds x="613" y="595" width="40" height="2"/></element> + + <element ref="txt_straight"><bounds x="508" y="606" width="80" height="17"/></element> + <element ref="txt_shuffle"><bounds x="908" y="606" width="80" height="17"/></element> + <element ref="line"><bounds x="593" y="613" width="310" height="2"/></element> + + <element ref="line"><bounds x="428" y="564" width="2" height="134"/></element> + <element ref="line"><bounds x="508" y="564" width="2" height="90"/></element> + <element ref="line"><bounds x="668" y="564" width="2" height="35"/></element> + <element ref="line"><bounds x="668" y="597" width="320" height="2"/></element> + <element ref="line"><bounds x="508" y="652" width="480" height="2"/></element> + <element ref="line"><bounds x="428" y="696" width="560" height="2"/></element> + <element ref="line"><bounds x="986" y="597" width="2" height="99"/></element> + + <element ref="txt_select"><bounds x="616" y="798" width="168" height="17"/></element> + <element ref="line"><bounds x="431" y="805" width="183" height="2"/></element> + <element ref="line"><bounds x="787" y="805" width="183" height="2"/></element> + + <!-- Drum pads --> + + <element ref="outline_drumpads"><bounds x="163" y="833" width="838" height="273"/></element> + <element ref="led" name="led_percussion"><bounds x="955" y="851" width="24" height="24"/></element> + <element ref="line"><bounds x="966" y="877" width="2" height="150"/></element> + <element ref="line"><bounds x="940" y="1027" width="26" height="2"/></element> + + <!-- Text for all drum pads. --> + <repeat count="8"> + <param name="i" start="1" increment="1"/> + <param name="x" start="187" increment="96"/> + <element ref="txt_drum_top_~i~"><bounds x="~x~" y="861" width="80" height="17"/></element> + <element ref="txt_drum_middle_~i~"><bounds x="~x~" y="957" width="80" height="17"/></element> + <element ref="txt_drum_bottom_~i~"><bounds x="~x~" y="1070" width="80" height="17"/></element> + </repeat> + + <!-- Top row of drum pads. --> + <repeat count="3"> + <param name="x" start="187" increment="96"/> + <param name="input_mask" start="0x08" lshift="1"/> + <element ref="button" inputtag="keyboard_col_4" inputmask="~input_mask~"> + <bounds x="~x~" y="878" width="80" height="76"/> + </element> + </repeat> + <repeat count="5"> + <param name="x" start="475" increment="96"/> + <param name="input_mask" start="0x01" lshift="1"/> + <element ref="button" inputtag="keyboard_col_5" inputmask="~input_mask~"> + <bounds x="~x~" y="878" width="80" height="76"/> + </element> + </repeat> + + <!-- Bottom row of drum pads. --> + <repeat count="5"> + <param name="x" start="187" increment="96"/> + <param name="input_mask" start="0x02" lshift="1"/> + <element ref="button" inputtag="keyboard_col_3" inputmask="~input_mask~"> + <bounds x="~x~" y="991" width="80" height="76"/> + </element> + </repeat> + <repeat count="3"> + <param name="x" start="667" increment="96"/> + <param name="input_mask" start="0x01" lshift="1"/> + <element ref="button" inputtag="keyboard_col_4" inputmask="~input_mask~"> + <bounds x="~x~" y="991" width="80" height="76"/> + </element> + </repeat> + + <param name="line_width" value="176"/> + <group ref="button_group_top"><bounds x="187" y="854" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="251" y="848" width="53" height="17"/></element> + <element ref="txt_cabasa"><bounds x="251" y="848" width="53" height="17"/></element> + <group ref="button_group_top"><bounds x="379" y="854" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="422" y="848" width="89" height="17"/></element> + <element ref="txt_tambourine"><bounds x="422" y="848" width="89" height="17"/></element> + <group ref="button_group_top"><bounds x="571" y="854" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="635" y="848" width="54" height="17"/></element> + <element ref="txt_conga"><bounds x="635" y="848" width="54" height="17"/></element> + + <param name="line_width" value="272"/> + <group ref="button_group_bottom"><bounds x="187" y="963" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="254" y="970" width="46" height="17"/></element> + <element ref="txt_hihat"><bounds x="254" y="970" width="46" height="17"/></element> + <group ref="button_group_bottom"><bounds x="475" y="963" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="543" y="970" width="43" height="17"/></element> + <element ref="txt_toms"><bounds x="543" y="970" width="43" height="17"/></element> + <param name="line_width" value="176"/> + <group ref="button_group_bottom"><bounds x="763" y="963" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="834" y="970" width="37" height="17"/></element> + <element ref="txt_ride"><bounds x="834" y="970" width="37" height="17"/></element> + + <param name="line_width" value="368"/> + <group ref="button_group_bottom"><bounds x="187" y="1073" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="349" y="1080" width="50" height="17"/></element> + <element ref="txt_snare"><bounds x="349" y="1080" width="50" height="17"/></element> + <param name="line_width" value="176"/> + <group ref="button_group_bottom"><bounds x="571" y="1073" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="641" y="1080" width="40" height="17"/></element> + <element ref="txt_bass"><bounds x="641" y="1080" width="40" height="17"/></element> + <element ref="txt_crash"><bounds x="780" y="1080" width="50" height="17"/></element> + <element ref="txt_percussion"><bounds x="860" y="1080" width="80" height="17"/></element> + + <!-- TEMPO --> + <element ref="outline_cassette_tempo"><bounds x="1007" y="425" width="124" height="400"/></element> + <element ref="txt_tempo"><bounds x="1010" y="435" width="118" height="24"/></element> + <param name="knob_input" value="pot_tempo"/> + <group ref="knob"><bounds x="1037" y="488" width="68" height="68"/></group> + <element ref="button" inputtag="keyboard_col_3" inputmask="0x01"> + <bounds x="1029" y="577" width="80" height="76"/> + </element> + <element ref="txt_bpm"><bounds x="1010" y="657" width="118" height="17"/></element> + <element ref="led" name="led_ext_sync"><bounds x="1057" y="686" width="24" height="24"/></element> + <element ref="button" inputtag="keyboard_col_2" inputmask="0x20"> + <bounds x="1029" y="720" width="80" height="76"/> + </element> + <element ref="txt_ext_sync"><bounds x="1010" y="798" width="118" height="17"/></element> + + <!-- PLAY/STOP --> + <element ref="outline_play"><bounds x="1007" y="833" width="124" height="273"/></element> + <element ref="led" name="led_play_stop"><bounds x="1057" y="899" width="24" height="24"/></element> + <element ref="line"><bounds x="1067" y="925" width="2" height="62"/></element> + <element ref="button" inputtag="play_stop" inputmask="0x01"> + <bounds x="1029" y="988" width="80" height="76"/> + </element> + <element ref="txt_play"><bounds x="1012" y="1068" width="114" height="24"/></element> + + <!-- TUNING --> + <element ref="outline_tuning"><bounds x="1138" y="425" width="783" height="195"/></element> + <element ref="txt_tuning"><bounds x="1473" y="435" width="118" height="24"/></element> + <element ref="line"><bounds x="1183" y="445" width="295" height="2"/></element> + <element ref="line"><bounds x="1590" y="445" width="295" height="2"/></element> + <repeat count="7"> + <param name="i" start="1" increment="1"/> + <param name="x" start="1183" increment="106"/> + <param name="knob_input" value="pot_tuning_~i~"/> + <group ref="knob"><bounds x="~x~" y="495" width="54" height="54"/></group> + <element ref="txt_tune_~i~"><bounds x="~x~" y="560" width="54" height="17"/></element> + </repeat> + <element ref="txt_snare"><bounds x="1183" y="582" width="54" height="17"/></element> + <element ref="txt_toms"><bounds x="1395" y="582" width="54" height="17"/></element> + <element ref="line"><bounds x="1286" y="590" width="108" height="2"/></element> + <element ref="line"><bounds x="1450" y="590" width="108" height="2"/></element> + <element ref="txt_congas"><bounds x="1661" y="582" width="54" height="17"/></element> + <element ref="line"><bounds x="1604" y="590" width="50" height="2"/></element> + <element ref="line"><bounds x="1720" y="590" width="50" height="2"/></element> + <element ref="txt_decay"><bounds x="1819" y="582" width="54" height="17"/></element> + + <!-- VOLUME --> + <element ref="outline_volume"><bounds x="1929" y="425" width="125" height="195"/></element> + <element ref="txt_volume"><bounds x="1933" y="435" width="118" height="24"/></element> + <param name="knob_input" value="pot_volume"/> + <group ref="knob"><bounds x="1960" y="488" width="68" height="68"/></group> + + <!-- MIXER --> + + <element ref="outline_mixer"><bounds x="1138" y="627" width="916" height="479"/></element> + <element ref="txt_mixer"><bounds x="1560" y="1067" width="75" height="24"/></element> + <element ref="line"><bounds x="1200" y="1079" width="355" height="2"/></element> + <element ref="line"><bounds x="1640" y="1079" width="355" height="2"/></element> + + <param name="line_width" value="150"/> + <group ref="button_group_top"><bounds x="1390" y="790" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="1442" y="783" width="46" height="17"/></element> + <element ref="txt_toms"><bounds x="1442" y="783" width="46" height="17"/></element> + <param name="line_width" value="98"/> + <group ref="button_group_top"><bounds x="1752" y="790" width="~line_width~" height="17"/></group> + <element ref="case"><bounds x="1775" y="783" width="55" height="17"/></element> + <element ref="txt_congas"><bounds x="1775" y="783" width="55" height="17"/></element> + + <element ref="txt_drums"><bounds x="1386" y="836" width="49" height="17"/></element> + <element ref="line"><bounds x="1180" y="844" width="201" height="2"/></element> + <element ref="line"><bounds x="1440" y="844" width="201" height="2"/></element> + <element ref="txt_percussion"><bounds x="1767" y="836" width="79" height="17"/></element> + <element ref="line"><bounds x="1653" y="844" width="108" height="2"/></element> + <element ref="line"><bounds x="1850" y="844" width="100" height="2"/></element> + + <repeat count="16"> + <param name="i" start="1" increment="1"/> + <param name="slider_x" start="1188" increment="52"/> + <param name="txt_x" start="1181" increment="52"/> + <param name="slider_height" value="96"/> + <param name="slider_knob_max_y" value="68"/> + <param name="slider_input" value="pot_pan_~i~"/> + <group ref="slider"><bounds x="~slider_x~" y="665" width="32" height="~slider_height~"/></group> + <element ref="txt_slider_~i~"><bounds x="~txt_x~" y="809" width="46" height="17"/></element> + <param name="slider_height" value="186"/> + <param name="slider_knob_max_y" value="158"/> + <param name="slider_input" value="pot_gain_~i~"/> + <group ref="slider"><bounds x="~slider_x~" y="867" width="32" height="~slider_height~"/></group> + </repeat> + + <element ref="txt_left_2"><bounds x="1148" y="671" width="40" height="17"/></element> + <element ref="txt_right_2"><bounds x="1148" y="738" width="40" height="17"/></element> + <element ref="txt_left_1"><bounds x="2006" y="671" width="40" height="17"/></element> + <element ref="txt_right_1"><bounds x="2006" y="738" width="40" height="17"/></element> + </view> + + <script><![CDATA[ + file:set_resolve_tags_callback( + function() + local id_port_index <const> = string.len("slider_knob_") + 1 + + -- State used by pointer handlers. + local sliders = {} -- Info about all sliders (constant after initialization). + local pointers = {} -- Pointer tracking state. + + -- Gather relevant elements and inputs into `sliders`. + local view = file.views["Default Layout"] + for i = 1, #view.items do + local item = view.items:at(i) + if item.id ~= nil and string.find(item.id, "slider_knob_") == 1 then + local slider_id = string.sub(item.id, id_port_index) + + local port = file.device:ioport(slider_id) + local field = nil + if port ~= nil then + for k, val in pairs(port.fields) do + field = val + break + end + if field == nil then + print("LAYOUT ERROR - Port does not have a field: " .. slider_id) + end + else + print("LAYOUT ERROR - Port not found: " .. slider_id) + end + + local slider = view.items["slider_" .. slider_id] + if slider == nil then + print("LAYOUT ERROR - Element: 'slider_" .. slider_id .. "' does not exist.") + end + + local slider_info = {} + slider_info.slider = slider + slider_info.knob = item + slider_info.field = field + table.insert(sliders, slider_info) + end + end + + local function forget_pointers() + pointers = {} + end + + local function pointer_lost(type, id, dev, x, y, up, cnt) + pointers[id] = nil + end + + local function pointer_updated(type, id, dev, x, y, btn, dn, up, cnt) + -- Button not pressed? Reset state of current pointer. + if btn & 1 == 0 then + pointers[id] = nil + return + end + + -- Button just pressed? Find affected slider, if any. + if dn & 1 ~= 0 then + for i = 1, #sliders do + if sliders[i].knob.bounds:includes(x, y) then + local pointer = {} + pointer.selected_slider = i + pointer.relative = true + pointer.start_y = y + pointer.start_value = sliders[i].field.user_value + pointers[id] = pointer + break + elseif sliders[i].slider.bounds:includes(x, y) then + local pointer = {} + pointer.selected_slider = i + pointer.relative = false + pointers[id] = pointer + break + end + end + end + + -- No slider selected by current pointer? Nothing to do. + if pointers[id] == nil then + return + end + + -- A slider is selected. Update state and, indirectly, + -- slider knob position, based on the pointer's Y position. + -- It is assumed the attached IO field is an IPT_ADJUSTER + -- with a range of 0-100 (the default). + + local pointer = pointers[id] + local slider_info = sliders[pointer.selected_slider] + + local knob_half_height = slider_info.knob.bounds.height / 2 + local min_y = slider_info.slider.bounds.y0 + knob_half_height + local max_y = slider_info.slider.bounds.y1 - knob_half_height + + local new_value = 0 + if pointer.relative then + -- User clicked on the knob. New value depends on how + -- much the knob was dragged. + new_value = pointer.start_value - 100 * (y - pointer.start_y) / (max_y - min_y) + else + -- User clicked elsewhere on the slider. New value + -- depends on the absolute position of the click. + new_value = 100 - 100 * (y - min_y) / (max_y - min_y) + end + + new_value = math.floor(new_value + 0.5) + if new_value < 0 then new_value = 0 end + if new_value > 100 then new_value = 100 end + slider_info.field.user_value = new_value + end + + view:set_pointer_updated_callback(pointer_updated) + view:set_pointer_left_callback(pointer_lost) + view:set_pointer_aborted_callback(pointer_lost) + view:set_forget_pointers_callback(forget_pointers) + end) + ]]></script> +</mamelayout> + diff --git a/src/mame/linn/linndrum.cpp b/src/mame/linn/linndrum.cpp index 2613e06dc62..608b3cd4a88 100644 --- a/src/mame/linn/linndrum.cpp +++ b/src/mame/linn/linndrum.cpp @@ -17,8 +17,7 @@ variations, which brings the total to 24 different sounds. The driver is based on the LinnDrum's service manual and schematics, and is intended as an educational tool. -Most of the digital functionality is emulated, though it is not very usable due -to the lack of a layout. Audio is not yet emulated. +Most of the digital functionality is emulated. Audio is not yet emulated. PCBoards: * CPU board. 2 sections in schematics: @@ -34,16 +33,17 @@ PCBoards: Usage: -Since there is no layout yet, usability is limited. +The driver includes a (mostly) interactive layout, including buttons, LEDs and +sliders. The only non-interactive widgets right now are the knobs (such as +tuning and volume). Those will display their current value, but they can only +be modified by the Slider Control menu. -Run the driver with `-log`: +Since there is no audio, the driver logs triggers and other info. To see these +run the driver with `-log`: ./mame -window linndrum -log Tail the log file: (on linux): tail -f error.log - -Press a few of the assigned buttons (B for bass drum, N for snare, T for toms), -and see the voice triggers in the log. */ #include "emu.h" @@ -53,6 +53,8 @@ and see the voice triggers in the log. #include "machine/rescap.h" #include "machine/timer.h" +#include "linn_linndrum.lh" + #define LOG_KEYBOARD (1U << 1) #define LOG_DEBOUNCE (1U << 2) #define LOG_TEMPO (1U << 3) @@ -368,6 +370,8 @@ void linndrum_state::linndrum(machine_config &config) TIMER(config, m_debounce_timer).configure_generic( // 556, U30B. FUNC(linndrum_state::debounce_timer_elapsed)); + config.set_default_layout(layout_linn_linndrum); + // Latches connected to cathodes of LEDs (through resistors), so they are // active-low. @@ -413,51 +417,51 @@ DECLARE_INPUT_CHANGED_MEMBER(linndrum_state::tempo_pot_adjusted) // PORT_NAMEs are based on the annotations in the schematic. INPUT_PORTS_START(linndrum) PORT_START("keyboard_col_0") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("1") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("2") - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("3") - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("4") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("5") - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("6") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("1") PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("2") PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("3") PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("4") PORT_CODE(KEYCODE_4) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("5") PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_START("keyboard_col_1") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("7") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG/PAT.") - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG#") - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("END") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("DELETE") - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("INSERT") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG/PAT.") PORT_CODE(KEYCODE_Q) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG#") PORT_CODE(KEYCODE_W) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("END") PORT_CODE(KEYCODE_E) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("DELETE") PORT_CODE(KEYCODE_R) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("INSERT") PORT_CODE(KEYCODE_T) PORT_START("keyboard_col_2") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("<-") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("->") - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("ENTER") - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("STORE") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LOAD") - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXT.SYNC") PORT_CODE(KEYCODE_S) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("<-") PORT_CODE(KEYCODE_Y) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("->") PORT_CODE(KEYCODE_U) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("ENTER") PORT_CODE(KEYCODE_I) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("STORE") PORT_CODE(KEYCODE_P) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LOAD") PORT_CODE(KEYCODE_COLON) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXT.SYNC") PORT_CODE(KEYCODE_L) PORT_START("keyboard_col_3") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BPM/TRIG.") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SIDESTICK") - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 1") PORT_CODE(KEYCODE_N) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 2") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BPM/TRIG.") PORT_CODE(KEYCODE_O) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SIDESTICK") PORT_CODE(KEYCODE_Z) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 1") PORT_CODE(KEYCODE_X) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 2") PORT_CODE(KEYCODE_C) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 3") PORT_CODE(KEYCODE_V) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 1") PORT_CODE(KEYCODE_B) PORT_START("keyboard_col_4") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 2") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CRASH") - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PERC.") PORT_CODE(KEYCODE_P) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA1 / HIHAT1") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA2 / HIHAT2") - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 1 / HIHAT O") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 2") PORT_CODE(KEYCODE_N) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CRASH") PORT_CODE(KEYCODE_M) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PERC.") PORT_CODE(KEYCODE_COMMA) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA1 / HIHAT1") PORT_CODE(KEYCODE_A) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA2 / HIHAT2") PORT_CODE(KEYCODE_S) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 1 / HIHAT O") PORT_CODE(KEYCODE_D) PORT_START("keyboard_col_5") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 2 / HI TOM") - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("HI CONGA / MID TOM") PORT_CODE(KEYCODE_T) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LO CONGA / LO TOM") - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("COWBELL / RIDE 1") - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CLAPS / RIDE 2") PORT_CODE(KEYCODE_L) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 2 / HI TOM") PORT_CODE(KEYCODE_F) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("HI CONGA / MID TOM") PORT_CODE(KEYCODE_G) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LO CONGA / LO TOM") PORT_CODE(KEYCODE_H) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("COWBELL / RIDE 1") PORT_CODE(KEYCODE_J) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CLAPS / RIDE 2") PORT_CODE(KEYCODE_K) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // The play-stop button and footswitch input are both connected together @@ -482,6 +486,90 @@ INPUT_PORTS_START(linndrum) PORT_START("pot_tempo") PORT_ADJUSTER(50, "TEMPO") PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(linndrum_state::tempo_pot_adjusted), 0) + + PORT_START("pot_volume") + PORT_ADJUSTER(100, "MASTER VOLUME") + + PORT_START("pot_tuning_1") + PORT_ADJUSTER(50, "SNARE TUNING"); + PORT_START("pot_tuning_2") + PORT_ADJUSTER(50, "HI TOM TUNING"); + PORT_START("pot_tuning_3") + PORT_ADJUSTER(50, "MID TOM TUNING"); + PORT_START("pot_tuning_4") + PORT_ADJUSTER(50, "LO TOM TUNING"); + PORT_START("pot_tuning_5") + PORT_ADJUSTER(50, "HI CONGAS TUNING"); + PORT_START("pot_tuning_6") + PORT_ADJUSTER(50, "LO CONGAS TUNING"); + PORT_START("pot_tuning_7") + PORT_ADJUSTER(50, "HIHAT DECAY"); + + PORT_START("pot_pan_1") + PORT_ADJUSTER(50, "BASS PAN") + PORT_START("pot_pan_2") + PORT_ADJUSTER(50, "SNARE PAN") + PORT_START("pot_pan_3") + PORT_ADJUSTER(50, "SIDESTICK PAN") + PORT_START("pot_pan_4") + PORT_ADJUSTER(50, "HIHAT PAN") + PORT_START("pot_pan_5") + PORT_ADJUSTER(50, "HI TOM PAN") + PORT_START("pot_pan_6") + PORT_ADJUSTER(50, "MID TOM PAN") + PORT_START("pot_pan_7") + PORT_ADJUSTER(50, "LO TOM PAN") + PORT_START("pot_pan_8") + PORT_ADJUSTER(50, "RIDE PAN") + PORT_START("pot_pan_9") + PORT_ADJUSTER(50, "CRASH PAN") + PORT_START("pot_pan_10") + PORT_ADJUSTER(50, "CABASA PAN") + PORT_START("pot_pan_11") + PORT_ADJUSTER(50, "TAMB PAN") + PORT_START("pot_pan_12") + PORT_ADJUSTER(50, "HI CONGA PAN") + PORT_START("pot_pan_13") + PORT_ADJUSTER(50, "LO CONGA PAN") + PORT_START("pot_pan_14") + PORT_ADJUSTER(50, "COWBELL PAN") + PORT_START("pot_pan_15") + PORT_ADJUSTER(50, "CLAPS PAN") + PORT_START("pot_pan_16") + PORT_ADJUSTER(50, "CLICK PAN") + + PORT_START("pot_gain_1") + PORT_ADJUSTER(100, "BASS GAIN") + PORT_START("pot_gain_2") + PORT_ADJUSTER(100, "SNARE GAIN") + PORT_START("pot_gain_3") + PORT_ADJUSTER(100, "SIDESTICK GAIN") + PORT_START("pot_gain_4") + PORT_ADJUSTER(100, "HIHAT GAIN") + PORT_START("pot_gain_5") + PORT_ADJUSTER(100, "HI TOM GAIN") + PORT_START("pot_gain_6") + PORT_ADJUSTER(100, "MID TOM GAIN") + PORT_START("pot_gain_7") + PORT_ADJUSTER(100, "LO TOM GAIN") + PORT_START("pot_gain_8") + PORT_ADJUSTER(100, "RIDE GAIN") + PORT_START("pot_gain_9") + PORT_ADJUSTER(100, "CRASH GAIN") + PORT_START("pot_gain_10") + PORT_ADJUSTER(100, "CABASA GAIN") + PORT_START("pot_gain_11") + PORT_ADJUSTER(100, "TAMB GAIN") + PORT_START("pot_gain_12") + PORT_ADJUSTER(100, "HI CONGA GAIN") + PORT_START("pot_gain_13") + PORT_ADJUSTER(100, "LO CONGA GAIN") + PORT_START("pot_gain_14") + PORT_ADJUSTER(100, "COWBELL GAIN") + PORT_START("pot_gain_15") + PORT_ADJUSTER(100, "CLAPS GAIN") + PORT_START("pot_gain_16") + PORT_ADJUSTER(100, "CLICK GAIN") INPUT_PORTS_END ROM_START(linndrum) |