# HG changeset patch # User JeanDo # Date 1295570678 -3600 # Node ID 8b5b848db4cd057dcba9353d41649b16822aeb25 # Parent 999abb01c78fb25498f36c353375861361137fb2 + Clean Buhlmann tables addressing + OSTC 1.80 uses ZH-L16a coefficient, version 1995 (?), with compartiment 1a. diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_asm_part1/definitions.asm --- a/code_part1/OSTC_code_asm_part1/definitions.asm Fri Jan 21 01:44:38 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/definitions.asm Fri Jan 21 01:44:38 2011 +0100 @@ -80,11 +80,9 @@ #include "../OSTC_code_c_part2/shared_definitions.h" ;============================================================================= - -c_code_data_stack EQU 0x800 ; Reserve space for C-code data space. Eg.when calling log. - -;Variable definitions -; arrays are in hex size!! 20 = .032 +; Reserve space for C-code data space. Eg.when calling log. +; Note: overlayed with md_hash temporary space. +c_code_data_stack EQU 0x800 ;============================================================================= ; BANK0 data diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_asm_part1/pled_outputs.asm --- a/code_part1/OSTC_code_asm_part1/pled_outputs.asm Fri Jan 21 01:44:38 2011 +0100 +++ b/code_part1/OSTC_code_asm_part1/pled_outputs.asm Fri Jan 21 01:44:38 2011 +0100 @@ -2376,7 +2376,7 @@ return ;----------------------------------------------------------------------------- -; Display the decoplan (simulator or divemode) for ZHL-16c model +; Display the decoplan (simulator or divemode) for ZH-L16 model PLED_decoplan: ostc_debug 'n' ; Sends debug-information to screen if debugmode active diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_c_part2/p2_deco.c --- a/code_part1/OSTC_code_c_part2/p2_deco.c Fri Jan 21 01:44:38 2011 +0100 +++ b/code_part1/OSTC_code_c_part2/p2_deco.c Fri Jan 21 01:44:38 2011 +0100 @@ -144,18 +144,14 @@ static float N2_ratio; static float He_ratio; static float temp_ratio; -static float var_a; -static float var2_a; -static float var_b; -static float var2_b; -static float var_t05nc; -static float var2_t05nc; -static float var_e2secs; -static float var2_e2secs; -static float var_e1min; -static float var2_e1min; -static float var_halftimes; -static float var2_halftimes; +static float var_N2_a; +static float var_N2_b; +static float var_He_a; +static float var_He_b; +static float var_N2_e; +static float var_He_e; +static float var_N2_halftime; +static float var_He_halftime; static float pres_gtissue_limit; static float temp_pres_gtissue_limit; static float actual_ppO2; // new in v.102 @@ -249,10 +245,10 @@ // *********************** // *********************** -#pragma romdata tables = 0x10200 -#include "p2_tables.romdata" // new table for deco_main_v.101 (var_a modified) +#pragma romdata buhlmann_tables = 0x010200 // Needs to be in UPPER bank. +#include "p2_tables.romdata" // new table for deco_main_v.101 (var_N2_a modified) -#pragma romdata tables2 = 0x10600 +#pragma romdata hash_tables = 0x010600 // Address fixed by ASM access... rom const rom unsigned int md_pi[] = { 0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613 @@ -441,10 +437,82 @@ check_dbg(1); } -// ------------------------- +////////////////////////////////////////////////////////////////////////////// +// read buhlmann tables for compatriment ci +// If mode == 0 : 2sec interval +// 1 : 1 min interval +// 2 : 10 min interval. +// TODO: an assembleur version of the table reads... +static void read_buhlmann_compartment(static char mode) +{ + var_N2_a = buhlmann_a[ci]; + var_N2_b = buhlmann_b[ci]; + var_He_a = buhlmann_a[ci + 16]; + var_He_b = buhlmann_b[ci + 16]; + // Check reading consistency: + if( (var_N2_a < 0.231) + || (var_N2_a > 1.27) + || (var_N2_b < 0.504) + || (var_N2_b > 0.966) + || (var_He_a < 0.510) + || (var_He_a > 1.75) + || (var_He_b < 0.423) + || (var_He_b > 0.927) + ) + int_O_DBG_pre_bitfield |= DBG_ZH16ERR; + + // Integration intervals. + switch(mode) + { + case 0: //---- 2 sec ----------------------------------------------------- + var_N2_e = e2secs[ci]; + var_He_e = e2secs[ci + 16]; + + // Check reading consistency: + if( (var_N2_e < 0.0000363) + || (var_N2_e > 0.00577) + || (var_He_e < 0.0000961) + || (var_He_e > 0.150) + ) + int_O_DBG_pre_bitfield |= DBG_ZH16ERR; + + break; + + case 1: //---- 1 min ----------------------------------------------------- + var_N2_e = e1min[ci]; + var_He_e = e1min[ci + 16]; + + // Check reading consistency: + if( (var_N2_e < 1.09E-3) + || (var_N2_e > 0.1592) + || (var_He_e < 0.00288) + || (var_He_e > 0.3682) + ) + int_O_DBG_pre_bitfield |= DBG_ZH16ERR; + + break; + + case 2: //---- 10 min ---------------------------------------------------- + var_N2_e = e10min[ci]; + var_He_e = e10min[ci + 16]; + + // Check reading consistency: + if( (var_N2_e < 0.01085) + || (var_N2_e > 0.82323) + || (var_He_e < 0.02846) + || (var_He_e > 0.98986) + ) + int_O_DBG_pre_bitfield |= DBG_ZH16ERR; + + break; + } +} + +////////////////////////////////////////////////////////////////////////////// // calc_next_decodepth_GF // -// ------------------------- +// // new in v.102 +// void calc_nextdecodepth_GF(void) { // INPUT, changing during dive: @@ -733,7 +801,7 @@ // --------------- // CLEAR tissue // // --------------- -// optimized in v.101 (var_a) +// optimized in v.101 (var_N2_a) #pragma code p2_deco_suite = 0x10700 @@ -756,14 +824,13 @@ _endasm for(ci=0;ci<16;ci++) { - overlay float p; // cycle through the 16 b"uhlmann tissues - p = N2_ratio * (pres_respiration - 0.0627) ; + overlay float p = N2_ratio * (pres_respiration - 0.0627); pres_tissue[ci] = p; - var_a = ((rom float*)a_N2)[ci]; - var_b = ((rom float*)b_N2)[ci]; - p = (p - var_a) * var_b ; + read_buhlmann_compartment(0); + + p = (p - var_N2_a) * var_N2_b ; if( p < 0.0 ) p = 0.0; pres_tissue_limit[ci] = p; @@ -1202,107 +1269,23 @@ for (ci=0;ci<16;ci++) { - _asm - movlw 0x02 - movwf TBLPTRH,0 - movlb 5 // fuer ci - movf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_e2secs+1 // the order is confussing - TBLRDPOSTINC - movff TABLAT,var_e2secs // low byte first, high afterwards - TBLRDPOSTINC - movff TABLAT,var_e2secs+3 - TBLRD - movff TABLAT,var_e2secs+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_e2secs+1 - TBLRDPOSTINC - movff TABLAT,var2_e2secs - TBLRDPOSTINC - movff TABLAT,var2_e2secs+3 - TBLRD - movff TABLAT,var2_e2secs+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_a+1 - TBLRDPOSTINC - movff TABLAT,var_a - TBLRDPOSTINC - movff TABLAT,var_a+3 - TBLRD - movff TABLAT,var_a+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_a+1 - TBLRDPOSTINC - movff TABLAT,var2_a - TBLRDPOSTINC - movff TABLAT,var2_a+3 - TBLRD - movff TABLAT,var2_a+2 - addlw 0x40 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_b+1 - TBLRDPOSTINC - movff TABLAT,var_b - TBLRDPOSTINC - movff TABLAT,var_b+3 - TBLRD - movff TABLAT,var_b+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_b+1 - TBLRDPOSTINC - movff TABLAT,var2_b - TBLRDPOSTINC - movff TABLAT,var2_b+3 - TBLRD - movff TABLAT,var2_b+2 - _endasm - // the start values are the previous end values // write new values in temp - - if( (var_e2secs < 0.0000363) - || (var_e2secs > 0.00577) - || (var2_e2secs < 0.0000961) - || (var2_e2secs > 0.150) - || (var_a < 0.231) - || (var_a > 1.27) - || (var_b < 0.504) - || (var_b > 0.966) - || (var2_a < 0.510) - || (var2_a > 1.75) - || (var2_b < 0.423) - || (var2_b > 0.927) - ) - int_O_DBG_pre_bitfield |= DBG_ZH16ERR; + read_buhlmann_compartment(0); // 2 sec mode. // N2 - temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs; + temp_tissue = (temp_atem - pres_tissue[ci]) * var_N2_e; temp_tissue_safety(); pres_tissue[ci] = pres_tissue[ci] + temp_tissue; - + // He - temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs; + temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var_He_e; temp_tissue_safety(); pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue; - + temp_tissue = pres_tissue[ci] + pres_tissue[ci+16]; - var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue; - var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue; - pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b; + var_N2_a = (var_N2_a * pres_tissue[ci] + var_He_a * pres_tissue[ci+16]) / temp_tissue; + var_N2_b = (var_N2_b * pres_tissue[ci] + var_He_b * pres_tissue[ci+16]) / temp_tissue; + pres_tissue_limit[ci] = (temp_tissue - var_N2_a) * var_N2_b; if (pres_tissue_limit[ci] < 0) pres_tissue_limit[ci] = 0; if (pres_tissue_limit[ci] > pres_gtissue_limit) @@ -1462,93 +1445,23 @@ for (ci=0;ci<16;ci++) { - _asm - movlw 0x02 - movwf TBLPTRH,0 - movlb 5 // fuer ci - movf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addlw 0x80 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_a+1 - TBLRDPOSTINC - movff TABLAT,var_a - TBLRDPOSTINC - movff TABLAT,var_a+3 - TBLRD - movff TABLAT,var_a+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_a+1 - TBLRDPOSTINC - movff TABLAT,var2_a - TBLRDPOSTINC - movff TABLAT,var2_a+3 - TBLRD - movff TABLAT,var2_a+2 - addlw 0x40 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_b+1 - TBLRDPOSTINC - movff TABLAT,var_b - TBLRDPOSTINC - movff TABLAT,var_b+3 - TBLRD - movff TABLAT,var_b+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_b+1 - TBLRDPOSTINC - movff TABLAT,var2_b - TBLRDPOSTINC - movff TABLAT,var2_b+3 - TBLRD - movff TABLAT,var2_b+2 - addlw 0xC0 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_e1min+1 - TBLRDPOSTINC - movff TABLAT,var_e1min - TBLRDPOSTINC - movff TABLAT,var_e1min+3 - TBLRD - movff TABLAT,var_e1min+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_e1min+1 - TBLRDPOSTINC - movff TABLAT,var2_e1min - TBLRDPOSTINC - movff TABLAT,var2_e1min+3 - TBLRD - movff TABLAT,var2_e1min+2 - _endasm - + read_buhlmann_compartment(1); // 1 minute interval + // N2 - temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min; + temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_N2_e; temp_tissue_safety(); sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue; // He - temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min; + temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var_He_e; temp_tissue_safety(); sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue; // pressure limit temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16]; - var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue; - var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue; - sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b; + var_N2_a = (var_N2_a * sim_pres_tissue[ci] + var_He_a * sim_pres_tissue[ci+16]) / temp_tissue; + var_N2_b = (var_N2_b * sim_pres_tissue[ci] + var_He_b * sim_pres_tissue[ci+16]) / temp_tissue; + sim_pres_tissue_limit[ci] = (temp_tissue - var_N2_a) * var_N2_b; if (sim_pres_tissue_limit[ci] < 0) sim_pres_tissue_limit[ci] = 0; @@ -1571,7 +1484,7 @@ // sim_tissue_10min // //-------------------- -// Attention!! uses var_e1min und var2_e1min to load 10min data !!! +// Attention!! uses var_N2_e und var_He_e to load 10min data !!! // is identical to sim_tissue_1min routine except for the different load of those variables // optimized in v.101 @@ -1583,95 +1496,23 @@ for (ci=0;ci<16;ci++) { - _asm - movlw 0x02 - movwf TBLPTRH,0 - movlb 5 // fuer ci - movf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addlw 0x80 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_a+1 - TBLRDPOSTINC - movff TABLAT,var_a - TBLRDPOSTINC - movff TABLAT,var_a+3 - TBLRD - movff TABLAT,var_a+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_a+1 - TBLRDPOSTINC - movff TABLAT,var2_a - TBLRDPOSTINC - movff TABLAT,var2_a+3 - TBLRD - movff TABLAT,var2_a+2 - addlw 0x40 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_b+1 - TBLRDPOSTINC - movff TABLAT,var_b - TBLRDPOSTINC - movff TABLAT,var_b+3 - TBLRD - movff TABLAT,var_b+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_b+1 - TBLRDPOSTINC - movff TABLAT,var2_b - TBLRDPOSTINC - movff TABLAT,var2_b+3 - TBLRD - movff TABLAT,var2_b+2 - addlw 0xC0 // different to 1 min - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - incf TBLPTRH,1,0 // different to 1 min - TBLRDPOSTINC - movff TABLAT,var_e1min+1 - TBLRDPOSTINC - movff TABLAT,var_e1min - TBLRDPOSTINC - movff TABLAT,var_e1min+3 - TBLRD - movff TABLAT,var_e1min+2 - addlw 0x40 - movwf TBLPTRL,0 - //incf TBLPTRH,1,0 // different to 1 min - TBLRDPOSTINC - movff TABLAT,var2_e1min+1 - TBLRDPOSTINC - movff TABLAT,var2_e1min - TBLRDPOSTINC - movff TABLAT,var2_e1min+3 - TBLRD - movff TABLAT,var2_e1min+2 - _endasm - + read_buhlmann_compartment(2); // 10 minute interval + // N2 - temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min; + temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_N2_e; temp_tissue_safety(); sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue; // He - temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min; + temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var_He_e; temp_tissue_safety(); sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue; // pressure limit temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16]; - var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue; - var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue; + var_N2_a = (var_N2_a * sim_pres_tissue[ci] + var_He_a * sim_pres_tissue[ci+16]) / temp_tissue; + var_N2_b = (var_N2_b * sim_pres_tissue[ci] + var_He_b * sim_pres_tissue[ci+16]) / temp_tissue; - sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b; + sim_pres_tissue_limit[ci] = (temp_tissue - var_N2_a) * var_N2_b; if (sim_pres_tissue_limit[ci] < 0) sim_pres_tissue_limit[ci] = 0; if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit) @@ -1766,7 +1607,7 @@ // ----------------------- // calc_gradient_factor // // ----------------------- -// optimized in v.101 (var_a) +// optimized in v.101 (var_N2_a) // new code in v.102 void calc_gradient_factor(void) @@ -1835,35 +1676,8 @@ for (ci=0;ci<16;ci++) { - _asm - movlw 0x04 - movwf TBLPTRH,0 - movlb 5 // fuer ci - movf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addlw 0x80 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_halftimes+1 - TBLRDPOSTINC - movff TABLAT,var_halftimes - TBLRDPOSTINC - movff TABLAT,var_halftimes+3 - TBLRD - movff TABLAT,var_halftimes+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_halftimes+1 - TBLRDPOSTINC - movff TABLAT,var2_halftimes - TBLRDPOSTINC - movff TABLAT,var2_halftimes+3 - TBLRD - movff TABLAT,var2_halftimes+2 - _endasm + var_N2_halftime = buhlmann_ht[ci]; + var_He_halftime = buhlmann_ht[ci + 16]; // saturation_time (for flight) and N2_saturation in multiples of halftime // version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time ) @@ -1886,7 +1700,7 @@ temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary. // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested. // minus because log is negative - temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier + temp2 = var_N2_halftime * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier } else { @@ -1909,7 +1723,7 @@ temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary. // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested. // minus because log is negative - temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier + temp4 = var_He_halftime * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier } else { @@ -1991,92 +1805,22 @@ for (ci=0;ci<16;ci++) { - _asm - movlw 0x02 - movwf TBLPTRH,0 - movlb 5 // fuer ci - movf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addwf ci,0,1 - addlw 0x80 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var_a+1 - TBLRDPOSTINC - movff TABLAT,var_a - TBLRDPOSTINC - movff TABLAT,var_a+3 - TBLRD - movff TABLAT,var_a+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_a+1 - TBLRDPOSTINC - movff TABLAT,var2_a - TBLRDPOSTINC - movff TABLAT,var2_a+3 - TBLRD - movff TABLAT,var2_a+2 - addlw 0x40 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_b+1 - TBLRDPOSTINC - movff TABLAT,var_b - TBLRDPOSTINC - movff TABLAT,var_b+3 - TBLRD - movff TABLAT,var_b+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_b+1 - TBLRDPOSTINC - movff TABLAT,var2_b - TBLRDPOSTINC - movff TABLAT,var2_b+3 - TBLRD - movff TABLAT,var2_b+2 - addlw 0xC0 - movwf TBLPTRL,0 - incf TBLPTRH,1,0 - TBLRDPOSTINC - movff TABLAT,var_e1min+1 - TBLRDPOSTINC - movff TABLAT,var_e1min - TBLRDPOSTINC - movff TABLAT,var_e1min+3 - TBLRD - movff TABLAT,var_e1min+2 - addlw 0x40 - movwf TBLPTRL,0 - TBLRDPOSTINC - movff TABLAT,var2_e1min+1 - TBLRDPOSTINC - movff TABLAT,var2_e1min - TBLRDPOSTINC - movff TABLAT,var2_e1min+3 - TBLRD - movff TABLAT,var2_e1min+2 - _endasm + read_buhlmann_compartment(1); // 1 minute interval // N2 1 min - temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min; + temp_tissue = (temp_atem - pres_tissue[ci]) * var_N2_e; temp_tissue_safety(); pres_tissue[ci] = pres_tissue[ci] + temp_tissue; // He 1 min - temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min; + temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var_He_e; temp_tissue_safety(); pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue; temp_tissue = pres_tissue[ci] + pres_tissue[ci+16]; - var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue; - var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue; - pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b; + var_N2_a = (var_N2_a * pres_tissue[ci] + var_He_a * pres_tissue[ci+16]) / temp_tissue; + var_N2_b = (var_N2_b * pres_tissue[ci] + var_He_b * pres_tissue[ci+16]) / temp_tissue; + pres_tissue_limit[ci] = (temp_tissue - var_N2_a) * var_N2_b; if (pres_tissue_limit[ci] < 0) pres_tissue_limit[ci] = 0; if (pres_tissue_limit[ci] > pres_gtissue_limit) @@ -2102,22 +1846,22 @@ } // for md_i 16 _asm - movlw 0x01 + movlw 0x01 // md_pi address. movwf TBLPTRU,0 movlw 0x06 movwf TBLPTRH,0 movlw 0x00 movwf TBLPTRL,0 _endasm; - for(md_i=0;md_i<=255;md_i++) - { + md_i = 0; + do { _asm TBLRDPOSTINC movff TABLAT,md_temp _endasm - md_pi_subst[md_i] = md_temp; - } // for md_i 256 - + md_pi_subst[md_i++] = md_temp; + } while( md_i != 0 ); + _asm movlw 0x00 movwf TBLPTRU,0 diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_c_part2/p2_deco.o Binary file code_part1/OSTC_code_c_part2/p2_deco.o has changed diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_c_part2/p2_tables.romdata --- a/code_part1/OSTC_code_c_part2/p2_tables.romdata Fri Jan 21 01:44:38 2011 +0100 +++ b/code_part1/OSTC_code_c_part2/p2_tables.romdata Fri Jan 21 01:44:38 2011 +0100 @@ -1,363 +1,290 @@ - -// OSTC - diving computer code -// Copyright (C) 2008 HeinrichsWeikamp GbR - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - - -/* -INHALT ------- -{ unsigned int *rom e2secs[]; -{ unsigned int *rom a_N2[]; -{ unsigned int *rom b_N2[]; -{ unsigned int *rom t05[]; formated: und zwar t05 * -1.0 / ln(2) -{ unsigned int *rom e1min[]; -{ unsigned int *rom ht[]; t05 unmodified -*/ - - -rom const unsigned int e2secs[] = -{ -// N2 - 0x07BB, 0xBC3B, 0xD0FF, 0x3C3B, 0xF80C, 0xF23A, 0x4997, 0xA33A -, 0xE93A, 0x603A, 0x0418, 0x1E3A, 0x9009, 0xDF39, 0x014C, 0x9D39 -, 0xE53E, 0x5E39, 0x3AED, 0x2539, 0x338D, 0x0139, 0xC6BA, 0xCA38 -, 0x82DC, 0x9E38, 0x844D, 0x7838, 0x9F9D, 0x4238, 0x34AC, 0x1838 -// He -, 0xA3C9, 0x783C, 0x45BD, 0xF93B, 0xCC02, 0xA03B, 0x3E44, 0x583B -, 0x6223, 0x143B, 0x31FA, 0xD03A, 0xA46D, 0x933A, 0xDDFB, 0x4F3A -, 0x03F8, 0x123A, 0x8D71, 0xDB39, 0xAB55, 0xAB39, 0x7712, 0x8639 -, 0xEA1E, 0x5239, 0x2C54, 0x2439, 0x37B2, 0x0039, 0xDADB, 0xC938 -/* -Die e2secs Werte in float Notation: -5.7596E-03, und zwar 1 - 2^(-2sec/t05) -2.8839E-03, -1.8467e-03, -1.2481e-03, -8.5537E-04, -6.0308E-04, -4.2541E-04, -3.0002E-04, -2.1195E-04, -1.5824E-04, -1.2355E-04, -9.6669E-05, -7.5751E-05, -5.92E-05, -4.64E-05, -3.64E-05 -// e 2 sec He -sim_pres_tissue_limit[0] = 0.01518479275; -sim_pres_tissue_limit[1] = 0.007621439546; -sim_pres_tissue_limit[2] = 0.004883145696; -sim_pres_tissue_limit[3] = 0.003299965996; -sim_pres_tissue_limit[4] = 0.002260409686; -sim_pres_tissue_limit[5] = 0.00159437032; -sim_pres_tissue_limit[6] = 0.001124788578; -sim_pres_tissue_limit[7] = 0.0007933953673; -sim_pres_tissue_limit[8] = 0.0005606414716; -sim_pres_tissue_limit[9] = 0.0004185553604; -sim_pres_tissue_limit[10] =0.0003267948866; -sim_pres_tissue_limit[11] =0.0002557222899; -sim_pres_tissue_limit[12] =0.0002003867723; -sim_pres_tissue_limit[13] =0.0001567161546; -sim_pres_tissue_limit[14] =0.0001227342122; -sim_pres_tissue_limit[15] =9.625377675E-5 -*/ -}; - -rom const unsigned int a_N2[] = -{ -// N2 - 0x6744, 0xA13F, 0x0000, 0x803F, 0xED9E, 0x5C3F, 0x5396, 0x413F - , 0x52B8, 0x1E3F, 0xCE19, 0x013F, 0xC1CA, 0xE13E, 0xCDCC, 0xCC3E - , 0x0000, 0xC03E, 0x3333, 0xB33E, 0x39B4, 0xA83E, 0x91ED, 0x9C3E - , 0xE926, 0x913E, 0xCBA1, 0x853E, 0xB6F3, 0x7D3E, 0xE948, 0x6E3E -// He - , 0xF706, 0xDF3F, 0x2506, 0xB13F, 0x2E90, 0x983F, 0xC7DC, 0x853F - , 0x3108, 0x6C3F, 0x4A0C, 0x523F, 0x0C02, 0x3B3F, 0x8273, 0x263F - , 0xEC51, 0x183F, 0xB6F3, 0x0D3F, 0x5986, 0x083F, 0xA1D6, 0x043F - , 0x34A2, 0x043F, 0x6F81, 0x043F, 0x3867, 0x043F, 0xE10B, 0x033F - -/* -// a of N2 -sim_pres_tissue[0] = 1.2599; -sim_pres_tissue[1] = 1.0; -sim_pres_tissue[2] = 0.8618; -sim_pres_tissue[3] = 0.7562; -sim_pres_tissue[4] = 0.6200; -sim_pres_tissue[5] = 0.5043; -sim_pres_tissue[6] = 0.4410; -sim_pres_tissue[7] = 0.4000; -sim_pres_tissue[8] = 0.3750; -sim_pres_tissue[9] = 0.3500; -sim_pres_tissue[10] = 0.3295; -sim_pres_tissue[11] = 0.3065; -sim_pres_tissue[12] = 0.2835; -sim_pres_tissue[13] = 0.2610; -sim_pres_tissue[14] = 0.2480; -sim_pres_tissue[15] = 0.2327; -// a of He -sim_pres_tissue[16] = 1742.4 / 1000.0; -sim_pres_tissue[17] = 1383.0 / 1000.0; -sim_pres_tissue[18] = 1191.9 / 1000.0; -sim_pres_tissue[19] = 1045.8 / 1000.0; -sim_pres_tissue[20] = 9220. / 10000.0; -sim_pres_tissue[21] = 8205. / 10000.0; -sim_pres_tissue[22] = 7305. / 10000.0; -sim_pres_tissue[23] = 6502. / 10000.0; -sim_pres_tissue[24] = 5950. / 10000.0; -sim_pres_tissue[25] = 5545. / 10000.0; -sim_pres_tissue[26] = 5333. / 10000.0; -sim_pres_tissue[27] = 5189. / 10000.0; -sim_pres_tissue[28] = 5181. / 10000.0; -sim_pres_tissue[29] = 5176. / 10000.0; -sim_pres_tissue[30] = 5172. / 10000.0; -sim_pres_tissue[31] = 5119. / 10000.0; -*/ -}; - -rom const unsigned int b_N2[] = -{ -// N2 -0xAE47, 0x013F, 0x27C2, 0x263F, 0x19E2, 0x383F, 0xEC51, 0x483F, -0x8E06, 0x503F, 0x10E9, 0x573F, 0x728A, 0x5E3F, 0x9318, 0x643F, -0x55C1, 0x683F, 0x4D15, 0x6C3F, 0x0091, 0x6E3F, 0x80B7, 0x703F, -0x789C, 0x723F, 0x8F53, 0x743F, 0xABCF, 0x753F, 0xE71D, 0x773F -// He -, 0x1058, 0xD93E, 0x8A1F, 0x133F, 0x5917, 0x273F, 0xA7E8, 0x383F -, 0x6519, 0x423F, 0xFFB2, 0x4B3F, 0x41F1, 0x533F, 0xF1F4, 0x5A3F -, 0xE02D, 0x603F, 0xB3EA, 0x633F, 0xBD52, 0x663F, 0xD044, 0x683F -, 0xF085, 0x693F, 0x11C7, 0x6A3F, 0x88F4, 0x6B3F, 0x363C, 0x6D3F - -/* - 5050, Werte sind Einheitslos. 5050 ist in float als 0.5050 - 6514, - 7222, - 7825, - 8126, - 8434, - 8693, - 8910, - 9092, - 9222, - 9319, - 9403, - 9477, - 9544, - 9602, - 9653 -// b -sim_pres_tissue[16] = 0.4245; -sim_pres_tissue[17] = 0.5747; -sim_pres_tissue[18] = 0.6527; -sim_pres_tissue[19] = 0.7223; -sim_pres_tissue[20] = 0.7582; -sim_pres_tissue[21] = 0.7957; -sim_pres_tissue[22] = 0.8279; -sim_pres_tissue[23] = 0.8553; -sim_pres_tissue[24] = 0.8757; -sim_pres_tissue[25] = 0.8903; -sim_pres_tissue[26] = 0.8997; -sim_pres_tissue[27] = 0.9073; -sim_pres_tissue[28] = 0.9122; -sim_pres_tissue[29] = 0.9171; -sim_pres_tissue[30] = 0.9217; -sim_pres_tissue[31] = 0.9267; -*/ -}; - -rom const unsigned int t05[] = -{ -// N2 - 0x3BAA, 0xB8C0, 0x3BAA, 0x38C1, 0xFE44, 0x90C1, 0xD484, 0xD5C1 -, 0xA2CF, 0x1BC2, 0x5805, 0x5DC2, 0x3BAD, 0x9CC2, 0xCF2C, 0xDEC2 -, 0xF640, 0x1DC3, 0x2BA2, 0x52C3, 0x59E4, 0x86C3, 0xED66, 0xACC3 -, 0xD002, 0xDCC3, 0xABA9, 0x0CC4, 0x939D, 0x33C4, 0x2007, 0x65C4 -// He -, 0x0B6C, 0x0BC0, 0x0B6C, 0x8BC0, 0x98E7, 0xD9C0, 0xDC59, 0x21C1 -, 0xBDAD, 0x6BC1, 0x2E1F, 0xA7C1, 0xBFF2, 0xECC1, 0xC7FC, 0x27C2 -, 0x93C1, 0x6DC2, 0xA33E, 0x9FC2, 0xDEF7, 0xCBC2, 0x4455, 0x02C3 -, 0x0C54, 0x26C3, 0x9EAE, 0x54C3, 0x55C9, 0x87C3, 0x2225, 0xADC3 -/* -4, und zwar 4.0 * -1.0 / ln(2) ... -8, -12, -18, -27, -39, -55, -77, -109, -146, -187, -239, -305, -390, -498, -635 -// He; t05 * -1 /ln(2) -pres_tissue[16] = -2.178469512; -pres_tissue[17] = -4.356939024; -pres_tissue[18] = -6.809520594; -pres_tissue[19] = -10.08443834; -pres_tissue[20] = -14.72991637; -pres_tissue[21] = -20.89022419; -pres_tissue[22] = -29.61852919; -pres_tissue[23] = -41.99685264; -pres_tissue[24] = -59.43903569; -pres_tissue[25] = -79.62233931; -pres_tissue[26] = -101.9841124; -pres_tissue[27] = -130.33307; -pres_tissue[28] = -166.3283113; -pres_tissue[29] = -212.6821029; -pres_tissue[30] = -271.5729145; -pres_tissue[31] = -346.2900907; -*/ -}; - -// ab hier bei Speicher 0x4100 -rom const unsigned int e1min[] = -{ // N2 -0x0EEC, 0x223E, 0xC9F9, 0xA93D, 0xA8F2, 0x5C3D, 0x8AA0, 0x163D -, 0x23A1, 0xCF3C, 0x89EC, 0x923C, 0x9AD0, 0x4F3C, 0x52D3, 0x123C -, 0x26B7, 0xCF3B, 0x3A33, 0x9B3B, 0x7B78, 0x723B, 0xC0CA, 0x3D3B -, 0xD7C4, 0x143B, 0x58BF, 0xE83A, 0xA54E, 0xB63A, 0x0AFF, 0x8E3A -// He -, 0xBE78, 0xBC3E, 0x9001, 0x523E, 0x71DB, 0x0B3E, 0x3757, 0xC13D -, 0x186C, 0x863D, 0x2274, 0x3F3D, 0xBAFB, 0x073D, 0x1AC2, 0xC03C -, 0x44AB, 0x883C, 0x107C, 0x4C3C, 0x0EDE, 0x1F3C, 0x9174, 0xFA3B -, 0xBB6A, 0xC43B, 0x6CB5, 0x993B, 0x57E0, 0x703B, 0x8FFA, 0x3C3B -/* -Die e1min Werte in float Notation: - und zwar 1 - 2^(-1/t05) -c_2[0] = 0.1591036; -c_2[1] = 0.08299596; -c_2[2] = 0.053942353; -c_2[3] = 0.036774196; -c_2[4] = 0.02534539; -c_2[5] = 0.017935055; -c_2[6] = 0.012684012; -c_2[7] = 8.961515534E-3; -c_2[8] = 6.338971845E-3; -c_2[9] = 4.73633146E-3; -c_2[10] = 3.699808187E-3; -c_2[11] = 2.89599589E-3; -c_2[12] = 2.270033275E-3; -c_2[13] = 1.775722E-3; -c_2[14] = 1.390893611E-3; -c_2[15] = 1.090974815E-3; -// e 1 īmin He -pres_tissue[0] = 0.368108684; -pres_tissue[1] = 0.2050840824; -pres_tissue[2] = 0.1365792957; -pres_tissue[3] = 0.09440463235; -pres_tissue[4] = 0.06563586265; -pres_tissue[5] = 0.04674161154; -pres_tissue[6] = 0.03319905126; -pres_tissue[7] = 0.02353005571; -pres_tissue[8] = 0.0166832282; -pres_tissue[9] = 0.01248075064; -pres_tissue[10] = 0.009757532198; -pres_tissue[11] = 0.007643290133; -pres_tissue[12] = 0.005994168431; -pres_tissue[13] = 0.004690816669; -pres_tissue[14] = 0.003675481163; -pres_tissue[15] = 0.002883586737; -*/ -}; - -rom const unsigned int ht[] = -{ -// N2 -0x0000, 0x8040, 0x0000, 0x0041, 0x0000, 0x4841, 0x0000, 0x9441 -, 0x0000, 0xD841, 0x3333, 0x1942, 0x3333, 0x5942, 0x0000, 0x9A42 -, 0x0000, 0xDA42, 0x0000, 0x1243, 0x0000, 0x3B43, 0x0000, 0x6F43 -, 0x0080, 0x9843, 0x0000, 0xC343, 0x0000, 0xF943, 0x00C0, 0x1E44 -// He -, 0xAE47, 0xC13F, 0xAE47, 0x4140, 0x3D0A, 0x9740, 0x14AE, 0xDF40 -, 0x295C, 0x2341, 0x14AE, 0x6741, 0x713D, 0xA441, 0x48E1, 0xE841 -, 0xCDCC, 0x2442, 0x8FC2, 0x5C42, 0x4861, 0x8D42, 0x14AE, 0xB442 -, 0x7B94, 0xE642, 0x856B, 0x1343, 0x713D, 0x3C43, 0xAE07, 0x7043 -/* -He: -sim_pres_tissue[0] = 1.51; -sim_pres_tissue[1] = 3.02; -sim_pres_tissue[2] = 4.72; -sim_pres_tissue[3] = 6.99; -sim_pres_tissue[4] =10.21; -sim_pres_tissue[5] =14.48; -sim_pres_tissue[6] =20.53; -sim_pres_tissue[7] =29.11; -sim_pres_tissue[8] =41.20; -sim_pres_tissue[9] =55.19; -sim_pres_tissue[10] =70.69; -sim_pres_tissue[11] =90.34; -sim_pres_tissue[12] =115.29; -sim_pres_tissue[13] =147.42; -sim_pres_tissue[14] =188.24; -sim_pres_tissue[15] =240.03; -*/ -}; - -rom const unsigned int e10min[] = -{ -// N2 - 0xBEBE, 0x523F, 0x855D, 0x143F, 0xEEEE, 0xD93E, 0x4CFE, 0x9F3E -, 0x99D9, 0x673E, 0x2785, 0x293E, 0xAD6E, 0xF53D, 0x044E, 0xB03D -, 0x8D5C, 0x7C3D, 0xCDEA, 0x3D3D, 0xB00B, 0x153D, 0x232C, 0xEA3C -, 0x9612, 0xB83C, 0x6E4F, 0x903C, 0x8276, 0x623C, 0x9FDE, 0x313C -// He -, 0xE066, 0x7D3F, 0xC635, 0x663F, 0x7C0D, 0x453F, 0xEA07, 0x213F -, 0x0953, 0xFC3E, 0xB5C4, 0xC23E, 0x1CB5, 0x923E, 0xA5F8, 0x583E -, 0xBC90, 0x1E3E, 0x9EB7, 0xF13D, 0xC348, 0xBF3D, 0x4942, 0x973D -, 0xD400, 0x6F3D, 0x6921, 0x3C3D, 0xF514, 0x143D, 0x982E, 0xE93C -/* -He: 10 min -sim_pres_tissue[0] = 0.989851; -sim_pres_tissue[1] = 0.899258; -sim_pres_tissue[2] = 0.769737; -sim_pres_tissue[3] = 0.629027; -sim_pres_tissue[4] = 0.492821; -sim_pres_tissue[5] = 0.380407; -sim_pres_tissue[6] = 0.286538; -sim_pres_tissue[7] = 0.211886; -sim_pres_tissue[8] = 0.154849; -sim_pres_tissue[9] = 0.118026; -sim_pres_tissue[10] =0.0934005; -sim_pres_tissue[11] =0.0738569; -sim_pres_tissue[12] =0.0583504; -sim_pres_tissue[13] =0.0459303; -sim_pres_tissue[14] =0.0361528; -sim_pres_tissue[15] =0.0284646; -N2: 10 min -sim_pres_tissue[16] = 0.823223; -sim_pres_tissue[17] = 0.579552; -sim_pres_tissue[18] = 0.425651; -sim_pres_tissue[19] = 0.312487; -sim_pres_tissue[20] = 0.226416; -sim_pres_tissue[21] = 0.165547; -sim_pres_tissue[22] = 0.11984; -sim_pres_tissue[23] = 0.0860863; -sim_pres_tissue[24] = 0.0616117; -sim_pres_tissue[25] = 0.0463665; -sim_pres_tissue[26] = 0.0363881; -sim_pres_tissue[27] = 0.0285855; -sim_pres_tissue[28] = 0.0224698; -sim_pres_tissue[29] = 0.017616; -sim_pres_tissue[30] = 0.0138222; -sim_pres_tissue[31] = 0.0108563; -*/ -}; +// ************************************************************** +// OSTC - diving computer code +// Copyright (C) 2008 HeinrichsWeikamp GbR +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// HISTORY +// 2011-01-20; jDG Cleanup addressing. +// +// ************************************************************** + +rom const float buhlmann_a[32] = +{ // ??? Data ZH-L16A, from Tauchmedizin 1995 ??? +//---a for N2 ---------------------------------------------------------------- + 1.2599, /// WARNING ZH-L16c-1990 gives different values: 1.3318 + 1.0000, /// ... 1.0048 + 0.8618, /// ... 0.8653 + 0.7562, /// ... 0.7520 + 0.6200, /// ... 0.6194 + 0.5043, /// ... 0.5043 + 0.4410, /// ... 0.4396 + 0.4000, /// ... 0.3977 + 0.3750, /// ... 0.3701 + 0.3500, /// ... 0.3456 + 0.3295, /// ... 0.3269 + 0.3065, /// ... 0.3065 + 0.2835, /// ... 0.2848 + 0.2610, /// ... 0.2622 + 0.2480, /// ... 0.2486 + 0.2327, /// ... 0.2341 +//---- a of He --------------------------------------------------------------- + 1.7424, /// ... 1,7443 + 1.3830, /// ... 1,3800 + 1.1919, /// ... 1,1879 + 1.0458, /// ... 1,0455 + .9220, /// ... 0,9211 + .8205, /// ... 0,8232 + .7305, /// ... 0,7321 + .6502, /// ... 0,6508 + .5950, /// ... 0,5981 + .5545, /// ... 0,5568 + .5333, /// ... 0,5285 + .5189, /// ... 0,5178 + .5181, /// ... 0,5137 + .5176, /// ... 0,5196 + .5172, /// ... 0,5150 + .5119 /// ... 0,5109 +}; + +rom const float buhlmann_b[] = +{ +//---- b for N2 -------------------------------------------------------------- + 0.5050, /// WARNING ZH-L16c gives a different value: 0.5241 + 0.6514, /// All the other values matches ZH-L16c-1990 + 0.7222, + 0.7825, + 0.8126, + 0.8434, + 0.8693, + 0.8910, + 0.9092, + 0.9222, + 0.9319, + 0.9403, + 0.9477, + 0.9544, + 0.9602, + 0.9653, +//---- b for He -------------------------------------------------------------- + 0.4245, + 0.5747, + 0.6527, + 0.7223, + 0.7582, + 0.7957, + 0.8279, + 0.8553, + 0.8757, + 0.8903, + 0.8997, + 0.9073, + 0.9122, + 0.9171, + 0.9217, + 0.9267 +}; + +rom const float buhlmann_t05[] = +{ +//---- half-life for N2 ------------------------------------------------------ + -5.77078, // 4 min * -1/ln(2) + -11.54156, + -17.31234, + -25.96851, + -38.95277, + -56.26511, + -79.34823, + -111.08752, + -157.25376, + -210.63348, + -269.78397, + -344.80411, + -440.02199, + -562.65107, + -718.46213, + -916.11135, // 635 min * -1/ln(2) +//---- half-life for He ------------------------------------------------------ + -2.178469512, // 1.51 min * -1/ln(2) + -4.356939024, + -6.809520594, + -10.08443834, + -14.72991637, + -20.89022419, + -29.61852919, + -41.99685264, + -59.43903569, + -79.62233931, + -101.9841124, + -130.33307, + -166.3283113, + -212.6821029, + -271.5729145, + -346.2900907 // 240,03 * -1/ln(2) +}; + +rom const float buhlmann_ht[] = +{ +//---- N2 -------------------------------------------------------------------- + 4, // Compartiment length, in minute, for nitrogen. + 8, + 12, + 18, + 27, + 39, + 55, + 77, + 109, + 146, + 187, + 239, + 305, + 390, + 498, + 635, +//---- He -------------------------------------------------------------------- + 1.51, // Compartiment half-life, in minute, for helium. + 3.02, + 4.72, + 6.99, + 10.21, + 14.48, + 20.53, + 29.11, + 41.20, + 55.19, + 70.69, + 90.34, + 115.29, + 147.42, + 188.24, + 240.03 +}; + +rom const float e2secs[] = +{ +//---- N2 -------------------------------------------------------------------- + 5.7596E-03, // und zwar 1 - 2^(-2sec/HT) + 2.8839E-03, + 1.8467e-03, + 1.2481e-03, + 8.5537E-04, + 6.0308E-04, + 4.2541E-04, + 3.0002E-04, + 2.1195E-04, + 1.5824E-04, + 1.2355E-04, + 9.6669E-05, + 7.5751E-05, + 5.92E-05, + 4.64E-05, + 3.64E-05, +//---- He -------------------------------------------------------------------- + 0.01518479275, + 0.007621439546, + 0.004883145696, + 0.003299965996, + 0.002260409686, + 0.00159437032, + 0.001124788578, + 0.0007933953673, + 0.0005606414716, + 0.0004185553604, + 0.0003267948866, + 0.0002557222899, + 0.0002003867723, + 0.0001567161546, + 0.0001227342122, + 9.625377675E-5 +}; + +rom const float e1min[] = +{ +//---- N2 -------------------------------------------------------------------- + 0.1591036, // Integration constant for 1 minute, + 0.08299596, // ie. 1 - 2^(-1/ht) + 0.053942353, + 0.036774196, + 0.02534539, + 0.017935055, + 0.012684012, + 8.961515534E-3, + 6.338971845E-3, + 4.73633146E-3, + 3.699808187E-3, + 2.89599589E-3, + 2.270033275E-3, + 1.775722E-3, + 1.390893611E-3, + 1.090974815E-3, +//---- e 1min He ------------------------------------------------------------- + 0.368108684, + 0.2050840824, + 0.1365792957, + 0.09440463235, + 0.06563586265, + 0.04674161154, + 0.03319905126, + 0.02353005571, + 0.0166832282, + 0.01248075064, + 0.009757532198, + 0.007643290133, + 0.005994168431, + 0.004690816669, + 0.003675481163, + 0.002883586737 +}; + +rom const float e10min[] = +{ +//---- N2 -------------------------------------------------------------------- +// Die 10 min Werte in float Notation: +// und zwar 1 - 2^(-10/ht) + 0.823223, // 1 - 2^(-10/4.0) + 0.579552, + 0.425651, + 0.312487, + 0.226416, + 0.165547, + 0.11984, + 0.0860863, + 0.0616117, + 0.0463665, + 0.0363881, + 0.0285855, + 0.0224698, + 0.017616, + 0.0138222, + 0.0108563, +//---- He -------------------------------------------------------------------- + 0.989851, + 0.899258, + 0.769737, + 0.629027, + 0.492821, + 0.380407, + 0.286538, + 0.211886, + 0.154849, + 0.118026, + 0.0934005, + 0.0738569, + 0.0583504, + 0.0459303, + 0.0361528, + 0.0284646, +}; + diff -r 999abb01c78f -r 8b5b848db4cd code_part1/OSTC_code_c_part2/shared_definitions.h --- a/code_part1/OSTC_code_c_part2/shared_definitions.h Fri Jan 21 01:44:38 2011 +0100 +++ b/code_part1/OSTC_code_c_part2/shared_definitions.h Fri Jan 21 01:44:38 2011 +0100 @@ -87,7 +87,7 @@ VAR_UCHAR (char_O_CNS_fraction); // new in v.101 VAR_UCHAR (char_O_relative_gradient_GF); // new in v.102 -TAB_UCHAR (char_O_array_decotime, 7); // Old-school decompression table (ZHL-16) +TAB_UCHAR (char_O_array_decotime, 7); // Old-school decompression table (ZH-L16) TAB_UCHAR (char_O_array_decodepth, 6); // TAB_UCHAR (char_O_deco_table, 0x20); // New school decompression table (GF mode)