diff code_part1/OSTC_code_asm_part1/menu_custom.asm @ 360:d4ca9196e830

Added 1/10/100 steps for CF menu. * Displays steps formated with type. * Special 0:01, 0:10, 1:00 steps for mm:ss type. * * * * * *
author JeanDo
date Wed, 08 Jun 2011 00:01:53 +0200
parents f49d6f0fc870
children 6e57b5bb98ce
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/menu_custom.asm	Tue Jun 07 19:10:49 2011 +0200
+++ b/code_part1/OSTC_code_asm_part1/menu_custom.asm	Wed Jun 08 00:01:53 2011 +0200
@@ -66,14 +66,20 @@
 ;
 CF_INT15	EQU	0x80; Default display. Flag for 15bit, typeless values.
 
-; Overlay our tmp data with some unused variables. But use more
-; meaningfull labels...
-#define cf32_x4     divemins+0      ; CF# modulus 32, time 4.
-#define cf_type     divemins+1      ; Type of the edited CF
-#define cf_value    divesecs
-#define cf_min      apnoe_mins
-#define cf_max      apnoe_secs
-            
+;=============================================================================
+; Overlay our tmp data in ACCESS0 bank
+    CBLOCK  0x010           ; Keep space for aa_wordprocessor module.
+        cf32_x4             ; CF# modulus 32, time 4.
+        cf_type             ; Type of the edited CF
+        cf_default:2
+        cf_value:2   
+        cf_min     
+        cf_max     
+        cf_step             ; Value ad add/substract: 1, 10, 100
+    ENDC
+
+;=============================================================================
+
 GETCUSTOM8	macro	custom8
 	movlw	custom8
 	call	getcustom8_1
@@ -164,7 +170,8 @@
 	clrf	decodata+0				; here: # of CustomFunction
 	clrf	cf32_x4                 ; here: # of CustomFunction*4
 	bcf		first_FA				; here: =1: -, =0: +
-	bcf		second_FA				; here: =1: stepsize 1, =0: stepsize 10
+    movlw   1                       ; Stepsize: 1, 10, or 100.
+    movwf   cf_step
 
 	call	PLED_topline_box
 	WIN_INVERT	.1	; Init new Wordprocessor	
@@ -239,39 +246,42 @@
 	call	word_processor		
 
 	WIN_TOP		.95
-	STRCPY  "1/10: 1"
-	movlw	'0'
-	btfsc	second_FA
-	movwf	POSTINC2
-	STRCAT_PRINT " "
+	STRCPY  "Step:"
+    clrf    hi
+    movff   cf_step,lo
+	call	display_formated	        ; Typed display, w/o fill line.
+	STRCAT_PRINT "   "                   ; 2 spaces for "0.01"->"1"
 
 menu_custom_functions10b:
 	WIN_LEFT 	.20
 	WIN_TOP		.125
 	lfsr	FSR2,letter
-	OUTPUTTEXT	d'89'				;"Default:"
+	OUTPUTTEXT	d'89'				    ; "Default:"
 
-	call	display_customfunction	; Typed display.
+    movff   cf_default+0,lo
+    movff   cf_default+1,hi
+	call	display_customfunction	    ; Typed display.
 
 	WIN_LEFT 	.20
 	WIN_TOP		.155
 	lfsr	FSR2,letter
-	OUTPUTTEXT	d'97'				; "Current:"
+	OUTPUTTEXT	d'97'			        ; "Current:"
 
 	movf	cf32_x4,W
 	addlw	0x82
 	movwf	EEADR
 	call	read_eeprom				; Lowbyte
-	movff	EEDATA,lo
-	movff   EEDATA, cf_value        ; Backup low 8bit value.
+	movff   EEDATA,cf_value+0
 
 	movf	cf32_x4,W
 	addlw	0x83
 	movwf	EEADR
 	call	read_eeprom				; Highbyte
-	movff	EEDATA,hi
+	movff	EEDATA,cf_value+1
 
 	call    PLED_standard_color     ; Changed by color swatches, but trash EEADRH...
+    movff   cf_value+0,lo
+    movff   cf_value+1,hi
 	call	display_customfunction
 
 ; End of mask: min/max and the exit line...
@@ -336,7 +346,7 @@
 ; Read default value, type, and constraints
 ;
 ; Input: customfunction_page, cf32_x4
-; Output: hi:lo, cf_type, cf_min, cf_max.
+; Output: cf_default, cf_type, cf_min, cf_max.
 ; Trashes: TBLPTR
 
 cf_read_default:
@@ -356,12 +366,12 @@
     addwfc  TBLPTRH,F                   ; Propagate to 16bit (but not 24bits).
 
     tblrd*+
-    movff   TABLAT,lo                   ; Low byte --> lo
+    movff   TABLAT,cf_default+0         ; Low byte
     tblrd*+
-    movff   TABLAT,hi                   ; High byte --> hi
-    btfss   hi,7                        ; 15bit ?
-    clrf    hi                          ; NO: clear extra type flags
-    bcf     hi,7                        ; clear 15bit flag
+    movff   TABLAT,cf_default+1         ; High byte
+    btfss   cf_default+1,7              ; 15bit ?
+    clrf    cf_default+1                ; NO: clear extra type flags
+    bcf     cf_default+1,7              ; clear 15bit flag
     
     movff   TABLAT,cf_type              ; type (high byte) --> cf_type
 
@@ -481,7 +491,7 @@
 cf_max_unsigned:
     movf    cf_value,W          ; Retrieve current max bound
     subwf   cf_max,W            ; Compute (max-lo)
-    bc     cf_max_passed        ; Ok if no carry, ie. max <= lo
+    bc      cf_max_passed       ; Ok if no carry, ie. max <= lo
 
 cf_max_failed:
     call    PLED_warnings_color
@@ -598,8 +608,13 @@
 cf_type_07:						; Type == 7 is CF_COLOR swatch.
     bcf     leftbind            ; Keep leading space (better alignement)
 	output_8
+
+    movff   win_top,WREG        ; Is it the step value ?
+    xorlw   .95                 ; Line for "Step:"
+    btfsc   STATUS,Z            
+    retlw   -1                  ; YES : return
+
 	STRCAT_PRINT " "
-
 	movf	lo,W				; Get color.
 	call    PLED_set_color
 	movlw	.23
@@ -686,7 +701,30 @@
 ;-----------------------------------------------------------------------------
 
 toggle_oneorten:
-	btg		second_FA
+    movlw   .10                     ; Multiply step by 10,
+    mulwf   cf_step                 ; Result in PROD low.
+
+    movf    PRODH,W                 ; Check 1000
+    bz      toggle_oneorten_1       ; HIGH(new step) null == no overflow
+    movlw   .1                      ; Cycle to 1.
+    movwf   cf_step
+    bra     toggle_oneorten_3
+
+toggle_oneorten_1:                  ; Special case for mm:ss
+    movf    cf_type,W               ; Get type
+    andlw   CF_TYPES                ; w/o min/max/neg flags.
+    xorlw   CF_SEC                  ; Check for mm:ss ?
+    bnz     toggle_oneorten_2       ; no: continue
+    movlw   .100                    ; Step = 100 ?
+    xorwf   PRODL,W
+    bnz     toggle_oneorten_2       ; no: continue
+    movlw   .60                     ; yes: replace by 1:00
+    movff   WREG,cf_step
+    bra     toggle_oneorten_3       ; Done.
+
+toggle_oneorten_2:
+    movff   PRODL,cf_step           ; Just keep result.
+toggle_oneorten_3:
 	movlw	d'3'
 	movwf	menupos
 	bra		menu_custom_functions1	; also debounces switches
@@ -694,17 +732,17 @@
 ;-----------------------------------------------------------------------------
 
 restore_cfn_value:
-    rcall    cf_read_default        ; hi:lo is trashed by min/max display.
-
 	movf	cf32_x4,W               ; store default value
 	addlw	0x82
 	movwf	EEADR
-	movff	lo,EEDATA
+	movff	cf_default+0,EEDATA
+	movff	cf_default+0,cf_value+0
 	call	write_eeprom			; Lowbyte
 	movf	cf32_x4,W
 	addlw	0x83
 	movwf	EEADR
-	movff	hi,EEDATA
+	movff	cf_default+1,EEDATA
+	movff	cf_default+1,cf_value+1
 	call	write_eeprom			; Highbyte
 
 	movlw	d'4'
@@ -733,9 +771,7 @@
 	bra		adjust_cfn_value3		    ; Store result
 
 adjust_cfn_value1:
-	movlw	d'1'
-	btfsc	second_FA			    	; -10?
-	movlw	d'10'
+    movf    cf_step,W                   ; 1, 10, 100 ?
 	
 	btfss	first_FA				    ; Minus?
 	bra		adjust_cfn_value2	    	; No, Plus
@@ -833,7 +869,7 @@
 
 ; Check one CF value ---------------------------------------------------------
 check_one_cf:
-    rcall   cf_read_default             ; Sets hi:lo, cf_type, cf_min, cf_max.
+    rcall   cf_read_default             ; Sets cf_value, cf_type, cf_min, cf_max.
     
     btfsc   cf_type,7                   ; A 15bit type ?
     bra     check_cf_check              ; Then we have to check it...
@@ -887,7 +923,7 @@
     ; Uses 16bit sub for checking signed min value.
     movff   lo,sub_a+0          ; A <- value
     clrf    sub_a+1
-    btfsc   cf_value,7          ; extend sign if value < 0
+    btfsc   lo,7                ; extend sign if value < 0
     setf    sub_a+1
 
     movff   cf_min,sub_b+0      ; B <- min (with signed extend)
@@ -916,7 +952,7 @@
 
     movff   lo,sub_b+0          ; B <- value
     clrf    sub_b+1
-    btfsc   cf_value,7          ; extend sign if value < 0
+    btfsc   lo,7                ; extend sign if value < 0
     setf    sub_b+1
     call    sub16               ; Compute (A-B)