; ; utility.inc: general utility calls ; ; 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). ; ; decodes the number in W register to a single bit get_bit: addwf WREG addwf PCL retlw b'10000000' retlw b'01000000' retlw b'00100000' retlw b'00010000' retlw b'00001000' retlw b'00000100' retlw b'00000010' retlw b'00000001' ; decodes step key to name entering character ; note: this function should be called with ; step key code - 1 in WREG get_keyboard_char: addwf WREG addwf PCL retlw "A" ; "abc" retlw "D" ; "def" retlw "G" ; "ghi" retlw "J" ; "jkl" retlw "M" ; "mno" retlw "P" ; "pqrs" retlw "T" ; "tuv" retlw "W" ; "wxyz" retlw "W" + 4 ; dummy retlw "9" + 1 ; numbers ; ; resolves the scale value from WREG ; to the number of 48 ppqn ticks ; get_scaleticks: addwf WREG addwf PCL retlw SCALE_16_TICKS retlw SCALE_32_TICKS retlw SCALE_8TR_TICKS retlw SCALE_16TR_TICKS ;; decodes the keypress to led register get_ledreg: movlw KEY_NONE cpfsgt keypress retlw 0 ; return 0 if no step key pressed cpfsgt KEY_S8 retlw leds_busa_1 ; step key leds 1 - 8 are at bus a_1 cpfsgt KEY_S16 retlw leds_busa_2 ; step key leds 9 - 16 are at bus a_2 retlw leds_busb_1 ; other key leds are at bus b_1 ; decodes the keypress to led register bit get_ledbit: movlw 1 subwf keypress, W ; decodes a step key press to a single bit ; note: should be called only if sure ; that keypress == step key get_stepbit: movlw KEY_S8 cpfsgt keypress bra get_stepbit_firsthalf ; second half subwf keypress, W bra get_stepbit_get get_stepbit_firsthalf: ; first half movf keypress, W get_stepbit_get: decf WREG call get_bit return ; decodes a currentstep to a single bit get_currentbit: movlw 8 cpfsgt currentstep bra get_currentbit_firsthalf ; second half subwf currentstep, W bra get_currentbit_get get_currentbit_firsthalf: ; first half movf currentstep, W get_currentbit_get: decf WREG call get_bit return
get_bit