; ; mode_settings.inc: handles settings mode ; ; author: Marko Kanala, raato ]a t[ mulletronic.com ; ; Allows editing the following sequencer settings: ; ; - din input on/off ; - din output on/off ; - midi sync in on/off ; - midi sync out on/off ; - midi notes out on/off ; - midi channel 0-16 ; ; LICENSE ; Creative Commons Attribution-NonCommercial-ShareALike 2.5 ; ; You are free: ; ; * to copy, distribute, display, and perform the work ; * to make derivative works ; ; Under the following conditions: ; ; 1. Attribution. You must attribute the work in the manner specified by the ; author or licensor. ; 2. Noncommercial. You may not use this work for commercial purposes. ; 3. Share Alike. If you alter, transform, or build upon this work, you may ; distribute the resulting work only under a license identical to this one. ; ; * For any reuse or distribution, you must make clear to others the license ; terms of this work. ; * Any of these conditions can be waived if you get permission from the ; copyright holder. ; ; Your fair use and other rights are in no way affected by the above. ; ; This is a human-readable summary of the Legal Code. ; See full license at http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode ; ; Copyright: Marko Kanala (raato@mulletronic.com). ; ; called when the settings mode is entered mode_settings_enter: SETDISPLAY s_s_main ; see lcd.inc clrf selected_setting clrf select_pressed ; clear all leds to indicate settings mode clrf leds_busa_1 clrf leds_busa_2 clrf leds_busb_1 return ; called in continuous loop when in settings mode mode_settings: ; refresh lcd display if needed call lcd_refresh ; do we have key events ? IFNOEVENT EVENT_KEY, s_no_keyevents ; exits settings mode KEYEVENT KEY_STOPCONT, s_exit ; KEYEVENT KEY_S1, s_stepkey ; din in ; KEYEVENT KEY_S2, s_stepkey ; din out ; KEYEVENT KEY_S3, s_stepkey ; midi sync in ; KEYEVENT KEY_S4, s_stepkey ; midi sync out ; KEYEVENT KEY_S5, s_stepkey ; midi notes out ; KEYEVENT KEY_S6, s_stepkey ; midi channel ; KEYEVENT KEY_S7, s_stepkey ; KEYEVENT KEY_S8, s_stepkey ; KEYEVENT KEY_S9, s_stepkey ; KEYEVENT KEY_S10, s_stepkey ; KEYEVENT KEY_S11, s_stepkey ; KEYEVENT KEY_S12, s_stepkey ; KEYEVENT KEY_S13, s_stepkey ; KEYEVENT KEY_S14, s_stepkey ; select (for channel) ; KEYEVENT KEY_S15, s_stepkey ; on ; KEYEVENT KEY_S16, s_stepkey ; off ; optimized for space STEPKEYEVENT s_stepkey KEYEVENT KEY_PATTPLAYWRITE, s_pattplaywrite KEYEVENT KEY_TRACKPLAYWRITE, s_trackplaywrite s_no_keyevents: ; set default display SETDISPLAY s_s_main call s_refreshleds return s_keydone_lcdrefresh: FORCEDISPLAYREFRESH ; all keyhandlers should call this afterwards s_keydone: call s_refreshleds s_keydone_keepleds: CLEAREVENT EVENT_KEY return ; lights up the selected settings s_refreshleds: movf selected_setting, W call get_bit movwf leds_busa_1 ; settings only in lower half clrf leds_busa_2 return ; switches to track play mode and exists s_trackplaywrite: call s_save_settings SETMODE MODE_TPLAY call mode_trackplay_enter bra s_keydone_keepleds ; switches to pattern play mode and exists s_pattplaywrite: call s_save_settings SETMODE MODE_PPLAY call mode_pattplay_enter bra s_keydone_keepleds ; exits from settings mode to the previous mode s_exit: call s_save_settings CLEARSETTINGSMODE ; sets the previous mode IFMODECALL MODE_PPLAY, mode_pattplay_enter IFMODECALL MODE_PWRITE, mode_pattwrite_enter IFMODECALL MODE_TPLAY, mode_trackplay_enter IFMODECALL MODE_TWRITE, mode_trackwrite_enter bra s_keydone_keepleds ; handles step key presses s_stepkey: ; shift pressed, commands IFKEYDOWN DOWNKEY_SHIFTFUNC, s_shiftcommand movlw 0 cpfseq select_pressed bra s_select_value s_stepkey_normal: ; no "select" pressed KEYEVENT KEY_S14, s_select_pressed KEYEVENT KEY_S15, s_on_pressed KEYEVENT KEY_S16, s_off_pressed ; lower keys select setting movlw 7 cpfslt keypress bra s_keydone ; ignore keypresses 7 - 13 s_stepkey_select_setting: decf keypress, W movwf selected_setting bra s_keydone_lcdrefresh ; [select] pressed s_select_pressed: ; allowed only for setting 5 (midi channel) movlw 5 cpfseq selected_setting bra s_keydone movff selected_setting, select_pressed bra s_keydone_lcdrefresh ; [on] pressed s_on_pressed: ; not allowed for setting 5 (midi channel) movlw 5 cpfslt selected_setting bra s_keydone movf selected_setting, W call get_bit iorwf settings bra s_keydone_lcdrefresh ; [off] pressed s_off_pressed: ; not allowed for setting 5 (midi channel) movlw 5 cpfslt selected_setting bra s_keydone movf selected_setting, W call get_bit comf WREG andwf settings bra s_keydone_lcdrefresh ; select is pressed for a setting and a value should ; be selected s_select_value: ; ... only midi channel is selectable and ; translates directly to channel number movff keypress, settings_midi_channel clrf select_pressed bra s_keydone_lcdrefresh ; loads settings from flash s_load_settings: movlw eeprom_settings call eeprom_load movff EEDATA, settings movlw eeprom_midi_channel call eeprom_load movff EEDATA, settings_midi_channel ; sanity check movlw 17 cpfslt settings_midi_channel bra s_reset_defaults movlw 0 cpfsgt settings_midi_channel bra s_reset_defaults return s_reset_defaults: movlw default_settings movwf settings movlw default_midi_channel movwf settings_midi_channel return ; saves settings to flash s_save_settings: movff settings, EEDATA movlw eeprom_settings call eeprom_save movff settings_midi_channel, EEDATA movlw eeprom_midi_channel call eeprom_save return ; -- Commands --> ; handles shifted commands ; ; s16 == exit s_shiftcommand: KEYEVENT KEY_S16, s_exit bra s_keydone
lcd_refresh s_refreshleds get_bit s_save_settings mode_trackplay_enter mode_pattplay_enter eeprom_load eeprom_save