; ; startupreset.inc: resets the flash memory if ; requested ; ; author: Marko Kanala, raato ]a t[ mulletronic.com ; ; 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). ; check_startup_reset: ; keypress should be caught during the intro ; texts KEYEVENT KEY_START, startup_reset return startup_reset: CLEAREVENT EVENT_KEY TABLE_ADDR text_resetmem call lcd_send_text TABLE_ADDR text_resetmem2 call lcd_send_text ; wait for Accent/Fill/Enter key startup_reset_waitkey: clrwdt KEYEVENT KEY_ENTER, startup_reset_continue bra startup_reset_waitkey startup_reset_continue: TABLE_ADDR text_resetmem3 call lcd_send_text TABLE_ADDR text_resetmem4 call lcd_send_text ; prepare the data to be written lfsr FSR1, sysexdata movlw "E" movwf POSTINC1 movlw "m" movwf POSTINC1 movlw "p" movwf POSTINC1 movlw "t" movwf POSTINC1 movlw "y" movwf POSTINC1 movlw " " movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movlw 15 movwf POSTINC1 ; scale = 0, length = 16 clrf POSTINC1 ; shuffle = 0, flam = 0 movlw 24 + 22 + 22 ; 12 triggers, 11 accents, 11 flams startup_reset_loop1: clrf POSTINC1 ; clear triggers, accents, flams decfsz WREG bra startup_reset_loop1 movlw 255 ; set instrument pattern lengths to 16 movwf POSTINC1 ; bd & sd movwf POSTINC1 ; lt & mt movwf POSTINC1 ; ht & rs movwf POSTINC1 ; hc & chh movwf POSTINC1 ; ohh & cc movwf POSTINC1 ; rc & acc ; proceed to fill pattern movlw 15 movwf POSTINC1 ; scale = 0, length = 16 clrf POSTINC1 ; shuffle = 0, flam = 0 movlw 24 + 22 + 22 ; 12 triggers, 11 accents, 11 flams startup_reset_loop2: clrf POSTINC1 ; clear fill triggers, accents, flams decfsz WREG bra startup_reset_loop2 movlw 255 ; set instrument pattern lengths to 16 movwf POSTINC1 ; bd & sd movwf POSTINC1 ; lt & mt movwf POSTINC1 ; ht & rs movwf POSTINC1 ; hc & chh movwf POSTINC1 ; ohh & cc movwf POSTINC1 ; rc & acc movlw 78 startup_reset_measure_loop: clrf POSTINC1 ; clear 78 measures decfsz WREG bra startup_reset_measure_loop ; 12 bytes of track name movlw "E" movwf POSTINC1 movlw "m" movwf POSTINC1 movlw "p" movwf POSTINC1 movlw "t" movwf POSTINC1 movlw "y" movwf POSTINC1 movlw " " movwf POSTINC1 movlw "t" movwf POSTINC1 movlw "r" movwf POSTINC1 movlw "a" movwf POSTINC1 movlw "c" movwf POSTINC1 movlw "k" movwf POSTINC1 movlw " " movwf POSTINC1 ; track length clrf POSTINC1 movlw 1 movwf POSTINC1 ; write 64 dummy pages to flash memory clrf currentbank clrf currentpattern startup_reset_loop: movlw 0 call i2c_flash_save_sysex_128 ; write ... movlw 128 call i2c_flash_save_sysex_128 ; ... a page incf currentpattern ; page += 1 movlw 16 cpfseq currentpattern ; loop 16 patterns bra startup_reset_loop clrf currentpattern incf currentbank movlw 4 cpfseq currentbank ; ... per bank bra startup_reset_loop CLEAREVENT EVENT_KEY CLEARMODE MODE_RUN clrf currentbank clrf currentpattern ; reset settings movlw default_settings movwf settings movlw default_midi_channel movwf settings_midi_channel call s_save_settings return
lcd_send_text i2c_flash_save_sysex_128 s_save_settings