diff code_part1/OSTC_code_asm_part1/menu_gassetup.asm @ 286:5351d47ee28a

Active gas flags simplified
author heinrichsweikamp
date Wed, 20 Apr 2011 07:51:11 +0200
parents f8f865c70a0d
children 5f2fe81fde9f
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/menu_gassetup.asm	Wed Apr 20 06:54:33 2011 +0200
+++ b/code_part1/OSTC_code_asm_part1/menu_gassetup.asm	Wed Apr 20 07:51:11 2011 +0200
@@ -1013,7 +1013,40 @@
 
 ;=============================================================================
 gassetup_sort_gaslist:			; Sorts Gaslist according to change depth
-	return			; No sort test
+	clrf	sorted_gaslist_active	; Clear all flags
+
+	read_int_eeprom		d'33'       	; Get First gas (1-5)
+    movff   EEDATA,lo
+	bsf		STATUS,C
+gassetup_sort_gaslist2:
+	rlcf	sorted_gaslist_active,F		; Shift flag for first gas
+	decfsz	lo,F
+	bra		gassetup_sort_gaslist2
+
+	read_int_eeprom	d'28'		; Change Depth Gas1
+	tstfsz	EEDATA				; =0?
+	bsf		sorted_gaslist_active,0	; No, set active
+
+	read_int_eeprom	d'29'		; Change Depth Gas2
+	tstfsz	EEDATA				; =0?
+	bsf		sorted_gaslist_active,1; No, set active
+	
+	read_int_eeprom	d'30'		; Change Depth Gas3
+	tstfsz	EEDATA				; =0?
+	bsf		sorted_gaslist_active,2	; No, set active
+
+	read_int_eeprom	d'31'		; Change Depth Gas4
+	tstfsz	EEDATA				; =0?
+	bsf		sorted_gaslist_active,3	; No, set active
+
+	read_int_eeprom	d'32'		; Change Depth Gas5
+	tstfsz	EEDATA				; =0?
+	bsf		sorted_gaslist_active,4	; No, set active
+
+	movff	sorted_gaslist_active,EEDATA
+	clrf	EEADRH
+	write_int_eeprom		d'27'	; Store results
+	return			
 
 
 ; EEPROM Locations of Gaslist
@@ -1056,208 +1089,3 @@
 ; He Current:23
 ; Change: 32
 ; Active: 27,4
-
-; reset Change depths (Important for all users who upgrade from <1.60!)
-	clrf	EEADRH
-	clrf	EEDATA
-	write_int_eeprom		d'118'		; 
-	write_int_eeprom		d'119'		; 
-	write_int_eeprom		d'120'		; 
-	write_int_eeprom		d'121'		; 
-	write_int_eeprom		d'122'		; 
-	movlw	d'21'				; O2 Current
-	movwf	EEDATA	
-	write_int_eeprom		d'96'		; 
-	write_int_eeprom		d'100'		; 
-	write_int_eeprom		d'104'		; 
-	write_int_eeprom		d'108'		; 
-	write_int_eeprom		d'112'		; 
-
-	clrf	EEDATA				; He Current
-	write_int_eeprom		d'97'		; 
-	write_int_eeprom		d'101'		; 
-	write_int_eeprom		d'105'		; 
-	write_int_eeprom		d'109'		; 
-	write_int_eeprom		d'113'		; 
-
-; Find deepest Gas
-; Copy all to RAM
-	movlw	d'3'
-	movwf	EEADR
-	clrf	EEADRH
-	lfsr	FSR2,letter			; Store gases in Letter buffer (max. 26Byte!)
-gassetup_sort_gaslist1:
-	incf	EEADR,F				; Next Adress
-	call	read_eeprom			; Read byte
-	movff	EEDATA,POSTINC2		; Copy into RAM
-	movlw	d'23'				
-	cpfseq	EEADR				; All done?
-	bra		gassetup_sort_gaslist1	; No, not yet
-; Letter+0	=	EEPROM 4
-; ...
-; Letter+19 =	EEPROM 23
-	read_int_eeprom	d'28'
-	movff	EEDATA,POSTINC2		; Change Depth Gas1 -> Letter+20
-	read_int_eeprom	d'29'
-	movff	EEDATA,POSTINC2		; Change Depth Gas2 -> Letter+21
-	read_int_eeprom	d'30'
-	movff	EEDATA,POSTINC2		; Change Depth Gas3 -> Letter+22
-	read_int_eeprom	d'31'
-	movff	EEDATA,POSTINC2		; Change Depth Gas4 -> Letter+23
-	read_int_eeprom	d'32'
-	movff	EEDATA,POSTINC2		; Change Depth Gas5 -> Letter+24
-	read_int_eeprom	d'27'
-	movff	EEDATA,POSTINC2		; Active Byte 		-> Letter+25
-
-; All change depths = 0? -> Skip sort!
-	lfsr	FSR2,letter+.20		; Change depths...
-	movlw	d'5'
-	movwf	logbook_temp3		; Gas (0-4)
-	clrf	logbook_temp1		; counter
-gassetup_sort_gaslist1a:	
-	movf	POSTINC2,W
-	addwf	logbook_temp1,F		; sum
-	decfsz	logbook_temp3,F		; Loop
-	bra		gassetup_sort_gaslist1a
-
-	tstfsz	logbook_temp1		; All depths = 0?
-	bra		gassetup_sort_gaslist1b	; No
-	return						; Yes, skip all!
-
-gassetup_sort_gaslist1b:
-; Initialize sorting...
-	bcf		menubit2				; Change Start gas only 1x
-	movlw	d'99'
-	movwf	logbook_temp4		; Last Gas change depth
-
-	movff	letter+.25, logbook_temp5	; Activity flags
-
-; Done. Copy Gas #logbook_temp3 into EEPROM Place Gas 5
-	rcall	gassetup_sort_sort	; Sort!
-	movlw	d'5'					; Gas 5
-	movwf	logbook_temp2
-	rcall	gassetup_sort_store
-
-; Done. Copy Gas #logbook_temp3 into EEPROM Place Gas 4
-	rcall	gassetup_sort_sort	; Sort!
-	movlw	d'4'					; Gas 4
-	movwf	logbook_temp2
-	rcall	gassetup_sort_store
-
-; Done. Copy Gas #logbook_temp3 into EEPROM Place Gas 3
-	rcall	gassetup_sort_sort	; Sort!
-	movlw	d'3'					; Gas 3
-	movwf	logbook_temp2
-	rcall	gassetup_sort_store
-
-; Done. Copy Gas #logbook_temp3 into EEPROM Place Gas 2
-	rcall	gassetup_sort_sort	; Sort!
-	movlw	d'2'					; Gas 2
-	movwf	logbook_temp2
-	rcall	gassetup_sort_store
-
-; Done. Copy Gas #logbook_temp3 into EEPROM Place Gas 1
-	rcall	gassetup_sort_sort	; Sort!
-	movlw	d'1'					; Gas 1
-	movwf	logbook_temp2
-	bra     gassetup_sort_store
-
-;-----------------------------------------------------------------------------
-gassetup_sort_sort:
-	clrf	logbook_temp2               ; Tested gas (0-4)
-	clrf	logbook_temp1               ; Found change depth in m
-	clrf	logbook_temp3               ; Found gas (0-4)
-;	movff	letter+.25, logbook_temp5	; Activity flags
-
-	lfsr	FSR2,letter+.20             ; Change depths Gas1
-gassetup_sort_gaslist2:
-	movf	POSTINC2,W                  ; Get Change depth into WREG
-
-	cpfsgt	logbook_temp4               ; logbook_temp4 < W? Here: Change depth of last sort run
-	bra		gassetup_sort_gaslist3      ; Skip, tested depth > max. Depth from last run
-	cpfslt	logbook_temp1               ; logbook_temp1 < W?
-	bra		gassetup_sort_gaslist3      ; Skip, tested depth < max. Depth from this run
-
-    ; Is gas active?
-    ; Should not select inactive gas, because we might have several
-    ; gas with the same depth, some active, some not...
-
-	rrcf	logbook_temp5,F				; Shift into Carry bit
-	btfss	STATUS,C                    ; Was Gas active?
-	bra		gassetup_sort_gaslist3      ; No: Skip.
-
-	movwf	logbook_temp1               ; copy new depth (current run)
-	movff	logbook_temp2,logbook_temp3 ; Holds deepest Gas 0-4 of this pass
-	
-gassetup_sort_gaslist3:
-	incf	logbook_temp2,F             ; Check next Gas
-	movlw	d'5'
-	cpfseq	logbook_temp2               ; All done?
-	bra		gassetup_sort_gaslist2      ; No
-    
-    ; Done:
-	movff	logbook_temp1,logbook_temp4 ; copy new depth (Store for next run)
-
-; Debugger
-;	movff	logbook_temp2,TXREG
-;	call	rs232_wait_tx				; wait for UART
-;	movff	logbook_temp3,TXREG
-;	call	rs232_wait_tx				; wait for UART
-;	movff	logbook_temp4,TXREG
-;	call	rs232_wait_tx				; wait for UART
-;	movff	logbook_temp5,TXREG
-;	call	rs232_wait_tx				; wait for UART
-;	WAITMS	d'255'
-	return
-
-gassetup_sort_store:
-	lfsr	FSR2,letter				; Point to Gas0
-	movf	logbook_temp3,W         ; 0..4
-	mullw	d'4'
-	movf	PRODL,W					; letter+(0..4)x4
-	addwf	FSR2L,F
-	movlw	d'0'
-	addwfc	FSR2H,F					; Point to Gas #logbook_temp3 (0-4)
-
-;	btfsc	menubit2				; Change Start gas only 1x
-;	bra		gassetup_sort_store2	; Skip
-;; First Gas: 33 (1-5)
-;; Was gas #logbook_temp3 first gas?
-;	read_int_eeprom		d'33'		; Get old first gas (1-5)
-;	incf	logbook_temp3,W			; Gas 1-5 -> WREG
-;	cpfseq	EEDATA					; Compare with EEDATA d'33'
-;	bra		gassetup_sort_store2	; Was not first gas!
-;	movff	logbook_temp5,EEDATA	; Copy new first gas
-;	write_int_eeprom	d'123'		; Store
-;	bsf		menubit2				; Done. Do not change again.
-
-gassetup_sort_store2:
-;call	enable_rs232	
-;movff	logbook_temp1,TXREG
-;call	rs232_wait_tx				    ; wait for UART
-
-	movf	logbook_temp2,W             ; Destination slot : 1-5
-	mullw	d'4'
-	movff	PRODL,EEADR                 ; Point to EEPROM of Gas #logbook_temp5
-	movlw	d'90'                       ; +90 Offset to new... 
-	addwf	EEADR,F                     ; ..sorted list!
-
-	movff	POSTINC2,EEDATA			; O2 Default
-	call	write_eeprom			; store in internal EEPROM
-	incf	EEADR,F					; +1
-	movff	POSTINC2,EEDATA			; He Default
-	call	write_eeprom			; store in internal EEPROM
-	incf	EEADR,F					; +1
-	movff	POSTINC2,EEDATA			; O2 Current
-	call	write_eeprom			; store in internal EEPROM
-	incf	EEADR,F					; +1
-	movff	POSTINC2,EEDATA			; He Current
-	call	write_eeprom			; store in internal EEPROM
-
-	movf	logbook_temp2,W			; Destination slot : 1-5
-    addlw   d'117'
-    movwf   EEADR
-	movff	logbook_temp1,EEDATA    ; Change depth -> EEDATA
-	call	write_eeprom			; store in internal EEPROM
-
-	return
\ No newline at end of file