Mercurial > public > hwos_code
diff src/options.asm @ 582:b455b31ce022
work on 2.97 stable
author | heinrichsweikamp |
---|---|
date | Mon, 26 Feb 2018 16:40:28 +0100 |
parents | 8b7ea27ea1fa |
children | ca4556fb60b9 |
line wrap: on
line diff
--- a/src/options.asm Sun Feb 25 18:25:38 2018 +0100 +++ b/src/options.asm Mon Feb 26 16:40:28 2018 +0100 @@ -1,6 +1,6 @@ ;============================================================================= ; -; File options.asm REFACTORED VERSION V2.91 +; File options.asm REFACTORED VERSION V2.97 ; ; Manage all options data. ; @@ -13,87 +13,75 @@ ; ; Provides a centralized file with -#include "hwos.inc" ; Mandatory header -#include "strings.inc" -#include "convert.inc" -#include "ghostwriter.inc" -#include "eeprom_rs232.inc" -#include "external_flash.inc" -#include "wait.inc" +#include "hwos.inc" ; Mandatory header +#include "strings.inc" +#include "convert.inc" +#include "ghostwriter.inc" +#include "eeprom_rs232.inc" +#include "external_flash.inc" +#include "wait.inc" - extern write_eeprom - extern read_eeprom - extern eeprom_serial_save,eeprom_opt_backup - extern option_table_begin,option_table_end + extern write_eeprom + extern read_eeprom + extern eeprom_serial_save,eeprom_opt_backup + extern option_table_begin,option_table_end - global option_reset_all ; Reset all options to factory default. - global option_check_all ; Check all option and reset option if out of min/max boundary - global option_reset ; Reset FSR0 option to factory default. - global option_save_all ; Save options to EEPROM. - global option_restore_all ; Restore options from EEPROM. - global option_inc ; Increment FSR0 option. - global option_draw ; STRCAT FRS0 option. + global option_reset_all ; Reset all options to factory default. + global option_check_all ; Check all option and reset option if out of min/max boundary + global option_reset ; Reset FSR0 option to factory default. + global option_save_all ; Save options to EEPROM. + global option_restore_all ; Restore options from EEPROM. + global option_inc ; Increment FSR0 option. + global option_draw ; STRCAT FRS0 option. +gui CODE ; Appends to other GUI segment + ;============================================================================= - CBLOCK tmp+0x12 ; Reserve space for wordprocessor & convert - opt_type - opt_default - opt_inc ; Also default+1 (string), and enum low - opt_min ; also enum high - opt_max - opt_unit:2 ; Multi-lingual unit text. - opt_eeprom - opt_backup_tbl:3 - ; Reserved to tmp+0x1C... - ENDC - -gui CODE ; Appends to other GUI segment -;============================================================================= -; Reset all options to factory defauts. +; Reset all options to factory defaults. ; ; INPUT: none ; OUTPUT: none ; TRASH: TBLPTR, TABLAT, WREG, FSR0, FSR1, FSR2 option_reset_all: - clrf EEADRH - read_int_eeprom .2 - tstfsz EEDATA ; Total dives=0? - bra option_reset_all2 ; No, skip resetting logbook - read_int_eeprom .3 - tstfsz EEDATA ; Total dives=0? - bra option_reset_all2 ; No, skip resetting logbook + clrf EEADRH + read_int_eeprom .2 + tstfsz EEDATA ; Total dives=0? + bra option_reset_all2 ; No, skip resetting logbook + read_int_eeprom .3 + tstfsz EEDATA ; Total dives=0? + bra option_reset_all2 ; No, skip resetting logbook - clrf EEDATA - write_int_eeprom .4 - write_int_eeprom .5 - write_int_eeprom .6 - write_int_eeprom .2 ; Also, delete total dive counter - write_int_eeprom .3 - call ext_flash_erase_logbook ; And complete logbook (!) + clrf EEDATA + write_int_eeprom .4 + write_int_eeprom .5 + write_int_eeprom .6 + write_int_eeprom .2 ; Also, delete total dive counter + write_int_eeprom .3 + call ext_flash_erase_logbook ; And complete logbook (!) option_reset_all2: - clrf lo - clrf hi - call do_logoffset_common_write ; reset Logbook offset + clrf lo + clrf hi + call do_logoffset_common_write ; reset Logbook offset - ; Point to option table begin - movlw LOW(option_table_begin) - movwf FSR0L - movlw HIGH(option_table_begin) - movwf FSR0H + ; Point to option table begin + movlw LOW(option_table_begin) + movwf FSR0L + movlw HIGH(option_table_begin) + movwf FSR0H option_reset_all_1: movlw LOW(option_table_end) cpfseq FSR0L - bra option_reset_all_2 ; Not yet done... + bra option_reset_all_2 ; Not yet done... movlw HIGH(option_table_end) cpfseq FSR0H - bra option_reset_all_2 ; Not yet done... - return ; All done. + bra option_reset_all_2 ; Not yet done... + return ; All done. option_reset_all_2: - rcall option_reset ; Reset one option. - bra option_reset_all_1 ; and loop. + rcall option_reset ; Reset one option. + bra option_reset_all_1 ; and loop. ;============================================================================= ; Check all option and reset option if out of min/max boundary @@ -102,23 +90,23 @@ ; OUTPUT: none ; TRASH: TBLPTR, TABLAT, WREG, FSR0, FSR1, FSR2 option_check_all: - ; Point to option table begin - movlw LOW(option_table_begin) - movwf FSR0L - movlw HIGH(option_table_begin) - movwf FSR0H + ; Point to option table begin + movlw LOW(option_table_begin) + movwf FSR0L + movlw HIGH(option_table_begin) + movwf FSR0H option_check_all_1: - movlw LOW(option_table_end) + movlw LOW(option_table_end) cpfseq FSR0L - bra option_check_all_2 ; Not yet done... + bra option_check_all_2 ; Not yet done... movlw HIGH(option_table_end) cpfseq FSR0H - bra option_check_all_2 ; Not yet done... - return ; All done. + bra option_check_all_2 ; Not yet done... + return ; All done. option_check_all_2: - rcall option_check ; check one option. - bra option_check_all_1 ; and loop + rcall option_check ; check one option. + bra option_check_all_1 ; and loop ;============================================================================= ; Read option handle @@ -126,38 +114,38 @@ ; OUTPUT: FSR1 = address of variable. ; TRASH: TBLPTR, TABLAT, WREG, FSR0, FSR1 option_read: - movff FSR0L,TBLPTRL - movlw HIGH(option_table_begin); Get 8 high bits. - andlw 0xF0 ; Keep only the 4 highest ones. - iorwf FSR0H,W ; Cat with the known 4 lower ones. - movwf TBLPTRH ; And we have the high byte. - movlw UPPER(option_table_begin) - movwf TBLPTRU + movff FSR0L,TBLPTRL + movlw HIGH(option_table_begin) ; Get 8 high bits. + andlw 0xF0 ; Keep only the 4 highest ones. + iorwf FSR0H,W ; Cat with the known 4 lower ones. + movwf TBLPTRH ; And we have the high byte. + movlw UPPER(option_table_begin) + movwf TBLPTRU - ; Read type, default and register from table - tblrd*+ - movff TABLAT,opt_type - tblrd*+ - movff TABLAT,opt_default - tblrd*+ - movff TABLAT,opt_inc - tblrd*+ - movff TABLAT,opt_min - tblrd*+ - movff TABLAT,opt_max - tblrd*+ - movff TABLAT,opt_eeprom - tblrd*+ - movff TABLAT,opt_unit+0 - tblrd*+ - movff TABLAT,opt_unit+1 - tblrd*+ - movff TABLAT,FSR1L - tblrd*+ - movff TABLAT,FSR1H - movff TBLPTRL,FSR0L ; Advance handle too, for reset_all - movff TBLPTRH,FSR0H - return + ; Read type, default and register from table + tblrd*+ + movff TABLAT,opt_type + tblrd*+ + movff TABLAT,opt_default + tblrd*+ + movff TABLAT,opt_inc + tblrd*+ + movff TABLAT,opt_min + tblrd*+ + movff TABLAT,opt_max + tblrd*+ + movff TABLAT,opt_eeprom + tblrd*+ + movff TABLAT,opt_unit+0 + tblrd*+ + movff TABLAT,opt_unit+1 + tblrd*+ + movff TABLAT,FSR1L + tblrd*+ + movff TABLAT,FSR1H + movff TBLPTRL,FSR0L ; Advance handle too, for reset_all + movff TBLPTRH,FSR0H + return ;============================================================================= ; Check one option and reset if it's out of it's min/max boundaries @@ -166,39 +154,39 @@ ; TRASH: TBLPTR, TABLAT, WREG, FSR1, FSR2, lo ; option_check: - ; Read type, default and register from table - rcall option_read + ; Read type, default and register from table + rcall option_read - ; Switch on type - movf opt_type,W ; Type == STRING ? - xorlw 2 - bz option_check_string ; String: Do not reset strings + ; Switch on type + movf opt_type,W ; Type == STRING ? + xorlw 2 + bz option_check_string ; String: Do not reset strings - movf opt_type,W ; Type == ENUM8 ? - xorlw 1 - bz option_check_enum8 ; ENUM8: Check if lower then max. value only + movf opt_type,W ; Type == ENUM8 ? + xorlw 1 + bz option_check_enum8 ; ENUM8: Check if lower then max. value only - tstfsz opt_min ; opt_min=0? - bra option_check_both ; no - bra option_check_enum8 ; Check max only + tstfsz opt_min ; opt_min=0? + bra option_check_both ; no + bra option_check_enum8 ; Check max only option_check_both: - decf opt_min,W - cpfsgt INDF1 ; bigger then opt_min-1? - bra option_check_reset ; No, reset option -option_check_enum8: ; ENUM8: Check max only - infsnz opt_max,W ; Max = 255? - return ; Yes, igonore max. test - cpfslt INDF1 ; smaller then opt_max+1? - bra option_check_reset ; No, reset option - return ; in range, return + decf opt_min,W + cpfsgt INDF1 ; bigger then opt_min-1? + bra option_check_reset ; No, reset option +option_check_enum8: ; ENUM8: Check max only + infsnz opt_max,W ; Max = 255? + return ; Yes, ignore max. test + cpfslt INDF1 ; smaller then opt_max+1? + bra option_check_reset ; No, reset option + return ; in range, return option_check_reset: - movff opt_default,INDF1 ; reset option to default - return ; Done. + movff opt_default,INDF1 ; reset option to default + return ; Done. option_check_string: - return + return ;============================================================================= ; Reset an option to its default value. @@ -207,179 +195,179 @@ ; TRASH: TBLPTR, TABLAT, WREG, FSR1, FSR2 ; option_reset: - ; Read type, default and register from table - rcall option_read + ; Read type, default and register from table + rcall option_read - ; Switch on type - movf opt_type,W ; Type == STRING ? - xorlw 2 - bz opt_reset_string ; YES: special copy - - movff opt_default,INDF1 ; NO: just a 8bit indirect copy - return + ; Switch on type + movf opt_type,W ; Type == STRING ? + xorlw 2 + bz opt_reset_string ; YES: special copy + + movff opt_default,INDF1 ; NO: just a 8bit indirect copy + return opt_reset_string: - movff FSR1L,FSR2L ; set string destination address. - movff FSR1H,FSR2H + movff FSR1L,FSR2L ; set string destination address. + movff FSR1H,FSR2H - movff opt_default+0,FSR1L ; Get handle to multi-lingual text in FSR1 - movff opt_default+1,FSR1H + movff opt_default+0,FSR1L ; Get handle to multi-lingual text in FSR1 + movff opt_default+1,FSR1H - movff TBLPTRL,opt_backup_tbl+0; TBLPTR trashed by text routine... - movff TBLPTRH,opt_backup_tbl+1 - movff TBLPTRU,opt_backup_tbl+2 + movff TBLPTRL,opt_backup_tbl+0 ; TBLPTR trashed by text routine... + movff TBLPTRH,opt_backup_tbl+1 + movff TBLPTRU,opt_backup_tbl+2 - call strcat_text ; Copy translated text to FSR2 + call strcat_text ; Copy translated text to FSR2 - movff opt_backup_tbl+0,TBLPTRL - movff opt_backup_tbl+1,TBLPTRH - movff opt_backup_tbl+2,TBLPTRU + movff opt_backup_tbl+0,TBLPTRL + movff opt_backup_tbl+1,TBLPTRH + movff opt_backup_tbl+2,TBLPTRU - return + return ;============================================================================= ; Save all options to EEPROM option_save_all: - ;---- Save option serial into EEPROM to detect reset and new version - movlw LOW(eeprom_serial_save) - movwf EEADR - movlw HIGH(eeprom_serial_save) - movwf EEADRH - movlw LOW(eeprom_opt_serial) - movwf EEDATA - call write_eeprom - incf EEADR,F - movlw HIGH(eeprom_opt_serial) - movwf EEDATA - call write_eeprom - - ;---- Save all options - movlw LOW(option_table_begin) - movwf FSR0L - movlw HIGH(option_table_begin) - movwf FSR0H + ;---- Save option serial into EEPROM to detect reset and new version + movlw LOW(eeprom_serial_save) + movwf EEADR + movlw HIGH(eeprom_serial_save) + movwf EEADRH + movlw LOW(eeprom_opt_serial) + movwf EEDATA + call write_eeprom + incf EEADR,F + movlw HIGH(eeprom_opt_serial) + movwf EEDATA + call write_eeprom + + ;---- Save all options + movlw LOW(option_table_begin) + movwf FSR0L + movlw HIGH(option_table_begin) + movwf FSR0H option_save_all_1: - movlw LOW(option_table_end) + movlw LOW(option_table_end) cpfseq FSR0L - bra option_save_all_2 ; Not yet done... + bra option_save_all_2 ; Not yet done... movlw HIGH(option_table_end) cpfseq FSR0H - bra option_save_all_2 ; Not yet done... - return ; All done. + bra option_save_all_2 ; Not yet done... + return ; All done. option_save_all_2: - rcall option_save ; Save one option. - bra option_save_all_1 ; and loop. + rcall option_save ; Save one option. + bra option_save_all_1 ; and loop. - global option_save + global option_save option_save: - rcall option_read - incf opt_eeprom,W ; Should we save it ? - btfsc STATUS,Z ; eeprom address is FFh ? - return ; YES: nothing to do. + rcall option_read + incf opt_eeprom,W ; Should we save it ? + btfsc STATUS,Z ; EEPROM address is FFh ? + return ; YES: nothing to do. - movf opt_eeprom,W ; Compute backup address in EEPROM - addlw LOW(eeprom_opt_backup) ; Add offset - movwf EEADR - movlw HIGH(eeprom_opt_backup) - btfsc STATUS,C ; >256 - addlw .1 ; Yes: +1 - movwf EEADRH + movf opt_eeprom,W ; Compute backup address in EEPROM + addlw LOW(eeprom_opt_backup) ; Add offset + movwf EEADR + movlw HIGH(eeprom_opt_backup) + btfsc STATUS,C ; >256 + addlw .1 ; Yes: +1 + movwf EEADRH - movf opt_type,W ; Option type is string ? - xorlw 2 - bz option_save_string + movf opt_type,W ; Option type is string ? + xorlw 2 + bz option_save_string - ; One byte to save to eeprom - movff INDF1,EEDATA - btfss EEADRH,1 ; EEADR:EEADRH < 512? - call write_eeprom ; Yes, write - return - + ; One byte to save to EEPROM + movff INDF1,EEDATA + btfss EEADRH,1 ; EEADR:EEADRH < 512? + call write_eeprom ; Yes, write + return + option_save_string: - movff POSTINC1,EEDATA ; Write one byte - btfss EEADRH,1 ; EEADR:EEADRH < 512? - call write_eeprom ; Yes, write - infsnz EEADR,F - incf EEADRH,F - - decfsz opt_max ; Decrement string length - bra option_save_string ; And loop while not finished + movff POSTINC1,EEDATA ; Write one byte + btfss EEADRH,1 ; EEADR:EEADRH < 512? + call write_eeprom ; Yes, write + infsnz EEADR,F + incf EEADRH,F - return + decfsz opt_max ; Decrement string length + bra option_save_string ; And loop while not finished + + return ;============================================================================= option_restore_all: - ;---- Read option serial from EEPROM - movlw LOW(eeprom_serial_save) - movwf EEADR - movlw HIGH(eeprom_serial_save) - movf EEADRH - call read_eeprom - movlw LOW(eeprom_opt_serial) - xorwf EEDATA,W - bnz option_restore_bad ; Auto reset if changed. - incf EEADR,F - call read_eeprom - movlw HIGH(eeprom_opt_serial) - xorwf EEDATA,W - bz option_restore_ok ; Auto reset if changed. + ;---- Read option serial from EEPROM + movlw LOW(eeprom_serial_save) + movwf EEADR + movlw HIGH(eeprom_serial_save) + movf EEADRH + call read_eeprom + movlw LOW(eeprom_opt_serial) + xorwf EEDATA,W + bnz option_restore_bad ; Auto reset if changed. + incf EEADR,F + call read_eeprom + movlw HIGH(eeprom_opt_serial) + xorwf EEDATA,W + bz option_restore_ok ; Auto reset if changed. option_restore_bad: - call option_reset_all ; Reset RAM contains - goto option_save_all ; Then save to EEPROM + call option_reset_all ; Reset RAM contains + goto option_save_all ; Then save to EEPROM - ;---- Proper restore + ;---- Proper restore option_restore_ok: - movlw LOW(option_table_begin) - movwf FSR0L - movlw HIGH(option_table_begin) - movwf FSR0H + movlw LOW(option_table_begin) + movwf FSR0L + movlw HIGH(option_table_begin) + movwf FSR0H option_restore_all_1: - movlw LOW(option_table_end) + movlw LOW(option_table_end) cpfseq FSR0L - bra option_restore_all_2 ; Not yet done... + bra option_restore_all_2 ; Not yet done... movlw HIGH(option_table_end) cpfseq FSR0H - bra option_restore_all_2 ; Not yet done... - return ; All done. + bra option_restore_all_2 ; Not yet done... + return ; All done. option_restore_all_2: - rcall option_restore ; Restore one option. - bra option_restore_all_1 ; and loop. + rcall option_restore ; Restore one option. + bra option_restore_all_1 ; and loop. option_restore: - rcall option_read - incf opt_eeprom,W ; Should we save it ? - btfsc STATUS,Z ; eeprom address is FFh ? - return ; YES: nothing to do. + rcall option_read + incf opt_eeprom,W ; Should we save it ? + btfsc STATUS,Z ; EEPROM address is FFh ? + return ; YES: nothing to do. - movf opt_eeprom,W ; Compute backup address in EEPROM - addlw LOW(eeprom_opt_backup) ; Add offset - movwf EEADR - movlw HIGH(eeprom_opt_backup) - btfsc STATUS,C ; >256 - addlw .1 ; Yes: +1 - movwf EEADRH + movf opt_eeprom,W ; Compute backup address in EEPROM + addlw LOW(eeprom_opt_backup) ; Add offset + movwf EEADR + movlw HIGH(eeprom_opt_backup) + btfsc STATUS,C ; >256 + addlw .1 ; Yes: +1 + movwf EEADRH - movf opt_type,W ; Option type is string ? - xorlw 2 - bz option_restore_string + movf opt_type,W ; Option type is string ? + xorlw 2 + bz option_restore_string - ; Read one byte from eeprom - call read_eeprom - movff EEDATA, INDF1 ; And restore option register. - return + ; Read one byte from EEPROM + call read_eeprom + movff EEDATA, INDF1 ; And restore option register. + return option_restore_string: - call read_eeprom ; Read one byte, and - movff EEDATA,POSTINC1 ; restore it - infsnz EEADR,F - incf EEADRH,F - - decfsz opt_max ; Decrement string length - bra option_restore_string ; And loop while not finished - return + call read_eeprom ; Read one byte, and + movff EEDATA,POSTINC1 ; restore it + infsnz EEADR,F + incf EEADRH,F + + decfsz opt_max ; Decrement string length + bra option_restore_string ; And loop while not finished + return ;============================================================================= ; Increment an option, based on type, and boundary. @@ -387,120 +375,117 @@ ; OUTPUT: none ; TRASH: TBLPTR, TABLAT, WREG, FSR0, FSR1 option_inc: - ; Read type, default and register from table - rcall option_read - - ; Switch on type - movf opt_type,W - bz option_inc_uint8 - dcfsnz WREG - bra option_inc_enum8 - dcfsnz WREG - bra option_inc_string + ; Read type, default and register from table + rcall option_read + + ; Switch on type + movf opt_type,W + bz option_inc_uint8 + dcfsnz WREG + bra option_inc_enum8 + dcfsnz WREG + bra option_inc_string - -option_inc_uint8: ; Defaults type too... - movf INDF1,W - addwf opt_inc,W - cpfslt opt_max - bra option_inc_1 - movf opt_min,W +option_inc_uint8: ; Defaults type too... + movf INDF1,W + addwf opt_inc,W + cpfslt opt_max + bra option_inc_1 + movf opt_min,W option_inc_1: - movwf INDF1 - - ; NEW FROM HERE... ## voting logic (allow sensors for pSCR) + movwf INDF1 + ; Now some rather crude hack into this routine to unify CCR & pSCR mode setting: - movlw .25 ; eeprom address of option oCCRMode - cpfseq opt_eeprom ; skip next line if we deal with this option right now - bra option_inc_2 - btfsc FLAG_pscr_mode ; skip next line if we are not in PSCR mode - bcf opt_ccr_mode,1 ; in pSCR mode, opt_ccr_mode may only be 0 or 1 + movlw .25 ; EEPROM address of option oCCRMode + cpfseq opt_eeprom ; skip next line if we deal with this option right now + bra option_inc_2 + btfsc FLAG_pscr_mode ; skip next line if we are not in PSCR mode + bcf opt_ccr_mode,1 ; in pSCR mode, opt_ccr_mode may only be 0 or 1 option_inc_2: -; ...UNTILL HERE ; Now some rather crude hack into this routine to make CCR Calibration more convenient: - movlw .149 ; eeprom address of option CalGasO2 - cpfseq opt_eeprom ; skip next line if we deal with this option right now - return - - btfsc FLAG_pscr_mode ; skip next line if we are not in PSCR mode - return - movlw .26 - cpfseq INDF1 ; skip next line if current option value is =26 - return - movlw .95 ; current option value =26, advance it to 95 - movwf INDF1 + movlw .149 ; EEPROM address of option CalGasO2 + cpfseq opt_eeprom ; skip next line if we deal with this option right now return -option_inc_enum8: ; Always +1 - incf INDF1,W - cpfsgt opt_max - clrf WREG - movwf INDF1 - return + btfsc FLAG_pscr_mode ; skip next line if we are not in PSCR mode + return + movlw .26 + cpfseq INDF1 ; skip next line if current option value is = 26 + return + movlw .95 ; current option value =26, advance it to 95 + movwf INDF1 + return + -option_inc_string: ; No edition yet... - return +option_inc_enum8: ; Always +1 + incf INDF1,W + cpfsgt opt_max + clrf WREG + movwf INDF1 + return + + +option_inc_string: ; No editing yet... + return ;============================================================================= ; Strcat option into FSR2 buffer. option_draw: - ; Read type, default and register from table - rcall option_read - - ; Switch on type - movf opt_type,W - bz option_draw_uint8 - dcfsnz WREG - bra option_draw_enum8 - dcfsnz WREG - bra option_draw_string - return ; Unknown: return... + ; Read type, default and register from table + rcall option_read + + ; Switch on type + movf opt_type,W + bz option_draw_uint8 + dcfsnz WREG + bra option_draw_enum8 + dcfsnz WREG + bra option_draw_string + return ; Unknown: return... option_draw_uint8: - movff INDF1,lo ; Draw value. - bsf leftbind - output_8 - bcf leftbind - clrf INDF2 ; Make sure to close string... + movff INDF1,lo ; Draw value. + bsf leftbind + output_8 + bcf leftbind + clrf INDF2 ; Make sure to close string... - movf opt_unit+0,W ; Is there a unit to append ? - iorwf opt_unit+1,W - rcall option_draw_unit + movf opt_unit+0,W ; Is there a unit to append ? + iorwf opt_unit+1,W + rcall option_draw_unit - movf opt_default,W ; Default value - cpfseq lo ; Current value - bra option_draw_uint8_2 ; Not default, add * - return ; Default, Done. + movf opt_default,W ; Default value + cpfseq lo ; Current value + bra option_draw_uint8_2 ; Not default, add * + return ; Default, Done. option_draw_uint8_2: - PUTC "*" - return ; Done. + PUTC "*" + return ; Done. option_draw_unit: - movff opt_unit+0,FSR1L - movff opt_unit+1,FSR1H - goto strcat_text - + movff opt_unit+0,FSR1L + movff opt_unit+1,FSR1H + goto strcat_text ;---- Draw an enumerated value (set of translated strings) option_draw_enum8: - movf INDF1,W ; Get current value. - cpfsgt opt_max ; Bound value - clrf WREG - addwf WREG ; *= 2 - addwf opt_inc,W ; Base text + 2 * value - movwf FSR1L - movlw 0 - addwfc opt_min,W ; Propagate carry - movwf FSR1H ; Into FSR1 - - goto strcat_text + movf INDF1,W ; Get current value. + cpfsgt opt_max ; Bound value + clrf WREG + addwf WREG ; *= 2 + addwf opt_inc,W ; Base text + 2 * value + movwf FSR1L + movlw .0 + addwfc opt_min,W ; Propagate carry + movwf FSR1H ; Into FSR1 + goto strcat_text option_draw_string: - movff POSTINC1,POSTINC2 - decfsz opt_max - bra option_draw_string - return + movff POSTINC1,POSTINC2 + decfsz opt_max + bra option_draw_string + return - END + END \ No newline at end of file