0
+ − 1 /*
60
+ − 2 * p2_deco_main_c_v108.c
0
+ − 3 *
60
+ − 4 * Created on: 12.05.2009
+ − 5 * Author: chsw
0
+ − 6 *
60
+ − 7 * Changes: debug / plausibiliy output
0
+ − 8 */
+ − 9
+ − 10 //#include <p2_deco_header_c_v102d.h>
+ − 11
60
+ − 12
0
+ − 13 // OSTC - diving computer code
60
+ − 14 // Copyright (C) 2008 HeinrichsWeikamp GbR
0
+ − 15
+ − 16 // This program is free software: you can redistribute it and/or modify
+ − 17 // it under the terms of the GNU General Public License as published by
+ − 18 // the Free Software Foundation, either version 3 of the License, or
+ − 19 // (at your option) any later version.
+ − 20
+ − 21 // This program is distributed in the hope that it will be useful,
+ − 22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ − 24 // GNU General Public License for more details.
+ − 25
+ − 26 // You should have received a copy of the GNU General Public License
+ − 27 // along with this program. If not, see <http://www.gnu.org/licenses/>.
+ − 28
+ − 29
+ − 30 // *****************************
+ − 31 // ** I N T R O D U C T I O N **
+ − 32 // *****************************
+ − 33 //
+ − 34 // OSTC
+ − 35 //
+ − 36 // code:
+ − 37 // p2_deco_main_c_v101.c
+ − 38 // part2 of the OSTC code
+ − 39 // code with constant O2 partial pressure routines
+ − 40 // under construction !!
+ − 41 //
+ − 42 // summary:
+ − 43 // decompression routines
+ − 44 // for the OSTC experimental project
+ − 45 // written by Christian Weikamp
+ − 46 // last revision __________
+ − 47 // comments added _________
+ − 48 //
+ − 49 // additional files:
+ − 50 // p2_tables_v100.romdata (other files)
+ − 51 // 18f4685_ostc_v100.lkr (linker script)
+ − 52 //
+ − 53 // history:
+ − 54 // 01/03/08 v100: first release candidate
+ − 55 // 03/13/08 v101: start of programming ppO2 code
+ − 56 // 03/13/25 v101a: backup of interrim version with ppO2 calculation
+ − 57 // 03/13/25 v101: open circuit gas change during deco
+ − 58 // 03/13/25 v101: CNS_fraction calculation
+ − 59 // 03/13/26 v101: optimization of tissue calc routines
+ − 60 // 07/xx/08 v102a: debug of bottom time routine
+ − 61 // 09/xx/08 v102d: Gradient Factor Model implemenation
+ − 62 // 10/10/08 v104: renamed to build v103 for v118 stable
+ − 63 // 10/14/08 v104: integration of temp_depth_last_deco for Gradient Model
60
+ − 64 // 03/31/09 v107: integration of FONT Incon24
+ − 65 // 05/23/10 v109: 5 gas changes & 1 min timer
+ − 66 // 07/13/10 v110: cns vault added
0
+ − 67
+ − 68 //
+ − 69 // literature:
+ − 70 // B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+ − 71 // Schr"oder, Kai & Reith, Steffen; 2000; S"attigungsvorg"ange beim Tauchen, das Modell ZH-L16, Funktionsweise von Tauchcomputern; http://www.achim-und-kai.de/kai/tausim/saett_faq
+ − 72 // Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+ − 73 // Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+ − 74 // Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+ − 75 // Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+ − 76
+ − 77
+ − 78 // *********************
+ − 79 // ** I N C L U D E S **
+ − 80 // *********************
+ − 81 #include <p18f4685.h>
+ − 82 #include <math.h>
+ − 83
+ − 84 // ********************************
+ − 85 // ** C O N F I G U R A T I O N **
+ − 86 // ** for simulation without asm **
+ − 87 // ********************************
+ − 88 #pragma config OSC = IRCIO67
+ − 89 #pragma config FCMEN = OFF
+ − 90 #pragma config IESO = OFF
+ − 91 #pragma config PWRT = ON
+ − 92 #pragma config BOREN = OFF
+ − 93 #pragma config WDT = OFF
+ − 94 #pragma config WDTPS = 128
+ − 95 #pragma config MCLRE = ON
+ − 96 #pragma config LPT1OSC = OFF
+ − 97 #pragma config PBADEN = OFF
+ − 98 #pragma config DEBUG = OFF
+ − 99 #pragma config XINST = OFF
+ − 100 #pragma config LVP = OFF
+ − 101 #pragma config STVREN = OFF
+ − 102
+ − 103 // ****************************
+ − 104 // ** D E F I N E S **
+ − 105 // ** missing in p18f4685.h **
+ − 106 // ****************************
+ − 107 #define INT0IF 1
+ − 108 #define INT1IF 0
+ − 109 #define TMR1IF 0
60
+ − 110
+ − 111 #define oled_clk PORTD, 0,0
+ − 112 #define oled_data PORTD, 1,0
+ − 113 #define oled_en PORTE, 0,0
+ − 114 #define oled_rs PORTE, 1,0
+ − 115 #define flag5 0x29 // in Bank1
+ − 116 //#define no_sensor_int flag5,7,1 // ; block any further access to pressure sensor
0
+ − 117
+ − 118 # define DBG_c_gas 0b0000000000000001
+ − 119 # define DBG_c_ppO2 0b0000000000000010
+ − 120 # define DBG_RUN 0b0000000000000100
+ − 121 # define DBG_RESTART 0b0000000000001000
+ − 122
+ − 123 # define DBG_CdeSAT 0b0000000000010000
+ − 124 # define DBG_C_MODE 0b0000000000100000
+ − 125 # define DBG_C_SURF 0b0000000001000000
+ − 126 # define DBG_HEwoHE 0b0000000010000000
+ − 127
+ − 128 # define DBG_C_DPPO2 0b0000000100000000
+ − 129 # define DBG_C_DGAS 0b0000001000000000
+ − 130 # define DBG_C_DIST 0b0000010000000000
+ − 131 # define DBG_C_LAST 0b0000100000000000
+ − 132
+ − 133 # define DBG_C_GF 0b0001000000000000
+ − 134 # define DBG_ZH16ERR 0b0010000000000000
+ − 135 # define DBG_PHIGH 0b0100000000000000
+ − 136 # define DBG_PLOW 0b1000000000000000
+ − 137
+ − 138
+ − 139 # define DBS_mode 0b0000000000000001
+ − 140 # define DBS_ppO2 0b0000000000000010
+ − 141 # define DBS_HE_sat 0b0000000000000100
+ − 142 # define DBS_ppO2chg 0b0000000000001000
+ − 143
+ − 144 # define DBS_SAT2l 0b0000000000010000
+ − 145 # define DBS_SAT2h 0b0000000000100000
+ − 146 # define DBS_GFLOW2l 0b0000000001000000
+ − 147 # define DBS_GFLOW2h 0b0000000010000000
+ − 148
+ − 149 # define DBS_GFHGH2l 0b0000000100000000
+ − 150 # define DBS_GFHGH2h 0b0000001000000000
+ − 151 # define DBS_GASO22l 0b0000010000000000
+ − 152 # define DBS_GASO22h 0b0000100000000000
+ − 153
+ − 154 # define DBS_DIST2h 0b0001000000000000
+ − 155 # define DBS_LAST2h 0b0010000000000000
+ − 156 # define DBS_DECOO2l 0b0100000000000000
+ − 157 # define DBS_DECOO2h 0b1000000000000000
+ − 158
+ − 159
+ − 160 # define DBS2_PRES2h 0b0000000000000001
+ − 161 # define DBS2_PRES2l 0b0000000000000010
+ − 162 # define DBS2_SURF2l 0b0000000000000100
+ − 163 # define DBS2_SURF2h 0b0000000000001000
+ − 164
+ − 165 # define DBS2_DESAT2l 0b0000000000010000
+ − 166 # define DBS2_DESAT2h 0b0000000000100000
+ − 167 # define DBS2_GFDneg 0b0000000001000000
+ − 168 # define DBS2_ 0b000000000000000
+ − 169
+ − 170 # define DBS2_ 0b000000000000000
+ − 171 # define DBS2_ 0b000000000000000
+ − 172 # define DBS2_ 0b000000000000000
+ − 173 # define DBS2_ 0b000000000000000
+ − 174
+ − 175 // NDL_at_20mtr
+ − 176
60
+ − 177 # define MBAR_REACH_GASCHANGE_AUTO_CHANGE_OFF 150
0
+ − 178
+ − 179 // ***********************
+ − 180 // ** V A R I A B L E S **
+ − 181 // ***********************
+ − 182 // prefixes etc:
+ − 183 // _O_ = output for use in the assembler code
+ − 184 // _I_ = input from the assembler code for the c code
+ − 185 // char_ and int_ = used to identify output and input size
+ − 186 // var = variable (from b"uhlmann)
+ − 187 // pres = pressure
+ − 188 // gtissue = guiding tissue, the one limiting the ascent
+ − 189 // e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+ − 190 // e1min = same for 1 minute step
+ − 191 // sim = used in simulating the ascent to the surface
+ − 192 // nullzeit = remaining ground/bottom time for "no deco"
+ − 193 // hauptroutine = main
+ − 194
+ − 195 #pragma udata bank0a=0x060
60
+ − 196 volatile unsigned char dd2_stringstore[17];
+ − 197 #pragma udata bank0b=0x071
+ − 198 volatile unsigned char keep_free_bank0[21];
+ − 199
+ − 200 #pragma udata bank0c=0x086
+ − 201 volatile unsigned char dd2_left; // 1 - 64
+ − 202 volatile unsigned char dd2_top; // 1 - 64
+ − 203 volatile unsigned char dd2_heightmax; // 1 - 37
+ − 204 volatile unsigned char dd2_oled_brightness_offset; // 0 - 15 (15 is pitch black always)
+ − 205 volatile unsigned char dd2_fontwidth; // 8, 12, 21 for Incon16, Incon24, Incon42
+ − 206 volatile unsigned char dd2_fontheight; // 14, 21, 37 for "
+ − 207 volatile unsigned long dd2_pointer; // for font lut
+ − 208 volatile unsigned char dd2_i;
+ − 209 volatile unsigned char dd2_j;
+ − 210 volatile unsigned char dd2_k;
+ − 211 volatile unsigned char dd2_char;
+ − 212 volatile unsigned char dd2_lowbyte;
+ − 213 volatile unsigned char dd2_temp;
+ − 214 volatile unsigned char dd2_data;
+ − 215 volatile unsigned long dd2_base; // for font lut
+ − 216 volatile unsigned char dd2_start; // for font lut
+ − 217 volatile unsigned char dd2_end; // for font lut
+ − 218
+ − 219
+ − 220 #pragma udata bank1=0x100
+ − 221 const unsigned char keep_free_bank1[256]; // used by the assembler code
0
+ − 222
+ − 223 #pragma udata bank2a=0x200
+ − 224 // output:
+ − 225 static unsigned int int_O_tissue_for_debug[32];
+ − 226 static unsigned int int_O_GF_spare____; // 0x240
+ − 227 static unsigned int int_O_GF_step; // 0x242
+ − 228 static unsigned int int_O_gtissue_limit; // 0x244
+ − 229 static unsigned int int_O_gtissue_press; // 0x246
+ − 230 static unsigned int int_O_limit_GF_low; // 0x248
+ − 231 static unsigned int int_O_gtissue_press_at_GF_low; // 0x24A
60
+ − 232 volatile unsigned char char_I_step_is_1min; // 0x24C
+ − 233
+ − 234 // ...
0
+ − 235 #pragma udata bank2b=0x24E
+ − 236 static unsigned char char_O_GF_low_pointer; // 0x24E
+ − 237 static unsigned char char_O_actual_pointer; // 0x24F
+ − 238 #pragma udata bank2c=0x250
+ − 239 static unsigned char char_O_deco_table[32]; // 0x250
+ − 240 #pragma udata bank2d=0x270
+ − 241 static unsigned char char_I_table_deco_done[32];
+ − 242 #pragma udata bank2e=0x290
+ − 243 static unsigned int int_O_calc_tissue_call_counter; // 0x290
+ − 244 // internal:
+ − 245 unsigned char lock_GF_depth_list;
+ − 246 static float temp_limit;
+ − 247 static float GF_low;
+ − 248 static float GF_high;
+ − 249 static float GF_delta;
+ − 250 static float GF_temp;
+ − 251 static float GF_step;
+ − 252 static float GF_step2;
+ − 253 static float temp_pres_gtissue;
+ − 254 static float temp_pres_gtissue_diff;
+ − 255 static float temp_pres_gtissue_limit_GF_low;
+ − 256 static float temp_pres_gtissue_limit_GF_low_below_surface;
+ − 257 static unsigned int temp_depth_limit;
+ − 258 static unsigned char temp_decotime;
+ − 259 static unsigned char temp_gtissue_no;
+ − 260 static unsigned int temp_depth_last_deco; // new in v.101
+ − 261
+ − 262 static unsigned char temp_depth_GF_low_meter;
+ − 263 static unsigned char temp_depth_GF_low_number;
+ − 264 static unsigned char internal_deco_pointer;
60
+ − 265
+ − 266 #pragma udata bank2f=0x2C8
+ − 267 static unsigned char internal_deco_table[32]; // 0x2C8
0
+ − 268 static float temp_pres_deco_GF_low;
+ − 269
+ − 270 static unsigned int debug_temp;
+ − 271
+ − 272
+ − 273 #pragma udata bank3a=0x300
+ − 274 static char output[32];
+ − 275 // used by the math routines
60
+ − 276 #pragma udata bank3b=0x37C
+ − 277 volatile float cns_vault;
+ − 278 #pragma udata bank3c=0x380
0
+ − 279 volatile float pres_tissue_vault[32];
+ − 280 #pragma udata bank4a=0x400
+ − 281 // internal:
+ − 282 unsigned char ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ − 283 unsigned char x;
+ − 284 unsigned int main_i;
+ − 285 unsigned int int_temp;
60
+ − 286 unsigned int int_temp2;
0
+ − 287 unsigned int int_temp_decostatus;
+ − 288 static float pres_respiration;
+ − 289 static float pres_surface;
+ − 290 static float temp1;
+ − 291 static float temp2;
+ − 292 static float temp3;
+ − 293 static float temp4;
+ − 294 static float temp_deco;
+ − 295 static float temp_atem;
+ − 296 static float temp2_atem;
+ − 297 static float temp_tissue;
+ − 298 static float temp_surface;
+ − 299 static float N2_ratio;
+ − 300 static float He_ratio;
+ − 301 static float temp_ratio;
+ − 302 static float var_a;
+ − 303 static float var2_a;
+ − 304 static float var_b;
+ − 305 static float var2_b;
+ − 306 static float var_t05nc;
+ − 307 static float var2_t05nc;
+ − 308 static float var_e2secs;
+ − 309 static float var2_e2secs;
+ − 310 static float var_e1min;
+ − 311 static float var2_e1min;
+ − 312 static float var_halftimes;
+ − 313 static float var2_halftimes;
+ − 314 static float pres_gtissue_limit;
+ − 315 static float temp_pres_gtissue_limit;
+ − 316 static float actual_ppO2; // new in v.102
60
+ − 317
0
+ − 318 #pragma udata bank4b=0x480
+ − 319 static float pres_tissue[32];
+ − 320
+ − 321 #pragma udata bank5=0x500
+ − 322 // don't move positions in this bank, the registers are addressed directly from assembler code
+ − 323 // input:
+ − 324 static unsigned int int_I_pres_respiration; // 0x500
+ − 325 static unsigned int int_I_pres_surface; // 0x502
+ − 326 static unsigned int int_I_temp; // 0x504 new in v101
+ − 327 static unsigned char char_I_temp; // 0x506 new in v101
+ − 328 static unsigned char char_I_actual_ppO2; // 0x507
60
+ − 329 static unsigned char char_I_deco_N2_ratio2; // 0x508 new in v.109
+ − 330 static unsigned char char_I_deco_He_ratio2; // 0x509 new in v.109
+ − 331 static unsigned char char_I_deco_N2_ratio3; // 0x50A new in v.109
+ − 332 static unsigned char char_I_deco_He_ratio3; // 0x50B new in v.109
+ − 333 static unsigned char char_I_deco_N2_ratio4; // 0x50C new in v.109
+ − 334 static unsigned char char_I_deco_He_ratio4; // 0x50D new in v.109
+ − 335 static unsigned char char_I_deco_N2_ratio5; // 0x50E new in v.109
+ − 336 static unsigned char char_I_deco_He_ratio5; // 0x50F new in v.109
0
+ − 337 static unsigned char char_I_N2_ratio; // 0x510
+ − 338 static unsigned char char_I_He_ratio; // 0x511
+ − 339 static unsigned char char_I_saturation_multiplier; // for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ − 340 static unsigned char char_I_desaturation_multiplier; // for conservatism/safety values 0.66 (50% slower desaturation) to 1.0 (no conservatism)// consveratism used in calc_tissue(), calc_tissue_step_1_min() and sim_tissue_1min()
+ − 341 static unsigned char char_I_GF_High_percentage; // 0x514 new in v.102
+ − 342 static unsigned char char_I_GF_Low_percentage; // 0x515 new in v.102
+ − 343 static unsigned char char_I_spare; // 0x516
+ − 344 static unsigned char char_I_deco_distance; // 0x517
+ − 345 static unsigned char char_I_const_ppO2; // 0x518 new in v.101
+ − 346 static unsigned char char_I_deco_ppO2_change; // 0x519 new in v.101
+ − 347 static unsigned char char_I_deco_ppO2; // 0x51A new in v.101
+ − 348 static unsigned char char_I_deco_gas_change; // 0x51B new in v.101
+ − 349 static unsigned char char_I_deco_N2_ratio; // 0x51C new in v.101
+ − 350 static unsigned char char_I_deco_He_ratio; // 0x51D new in v.101
+ − 351 static unsigned char char_I_depth_last_deco; // 0x51E new in v.101 unit: [m]
+ − 352 static unsigned char char_I_deco_model; // 0x51F new in v.102 ( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
60
+ − 353
+ − 354
+ − 355 // output:
0
+ − 356 static unsigned int int_O_desaturation_time; // 0x520
+ − 357 static unsigned char char_O_nullzeit; // 0x522
+ − 358 static unsigned char char_O_deco_status; // 0x523
+ − 359 static unsigned char char_O_array_decotime[7]; // 0x524
+ − 360 static unsigned char char_O_array_decodepth[6]; // 0x52B
+ − 361 static unsigned char char_O_ascenttime; // 0x531
+ − 362 static unsigned char char_O_gradient_factor; // 0x532
+ − 363 static unsigned char char_O_tissue_saturation[32]; // 0x533
+ − 364 static unsigned char char_O_array_gradient_weighted[16]; // 0x553
+ − 365 static unsigned char char_O_gtissue_no; // 0x563
+ − 366 static unsigned char char_O_diluent; // 0x564 new in v.101
+ − 367 static unsigned char char_O_CNS_fraction; // 0x565 new in v.101
+ − 368 static unsigned char char_O_relative_gradient_GF; // 0x566 new in v.102
60
+ − 369 static unsigned char char_I_deco_gas_change2; // 0x567 new in v.109
+ − 370 static unsigned char char_I_deco_gas_change3; // 0x568 new in v.109
+ − 371 static unsigned char char_I_deco_gas_change4; // 0x569 new in v.109
+ − 372 static unsigned char char_I_deco_gas_change5; // 0x56A new in v.109
0
+ − 373 // internal:
+ − 374 static float pres_tissue_limit[16];
+ − 375 static float sim_pres_tissue_limit[16];
+ − 376 static float pres_diluent; // new in v.101
+ − 377 static float deco_diluent; // new in v.101
+ − 378 static float const_ppO2; // new in v.101
+ − 379 static float deco_ppO2_change; // new in v.101
+ − 380 static float deco_ppO2; // new in v.101
+ − 381
+ − 382
+ − 383
+ − 384 #pragma udata bank6=0x600
+ − 385 // internal:
+ − 386 static float sim_pres_tissue[32];
+ − 387 static float sim_pres_tissue_backup[32];
+ − 388
60
+ − 389 #pragma udata bank7=0x700
+ − 390 const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
0
+ − 391
+ − 392 #pragma udata bank8=0x800
+ − 393 static char md_pi_subst[256];
+ − 394
+ − 395 #pragma udata bank9a=0x900
+ − 396 // output:
+ − 397 static char md_state[48]; // DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ − 398 #pragma udata bank9b=0x930
+ − 399 // output:
+ − 400 static unsigned int int_O_DBS_bitfield; // 0x930 new in v.108
+ − 401 static unsigned int int_O_DBS2_bitfield; // 0x932 new in v.108
+ − 402 static unsigned int int_O_DBG_pre_bitfield; // 0x934 new in v.108
+ − 403 static unsigned int int_O_DBG_post_bitfield; // 0x936 new in v.108
+ − 404 static char char_O_NDL_at_20mtr; // 0x938 new in v.108 // 0xFF == undefined, max. 254
+ − 405 // internal:
+ − 406 static char md_t;
+ − 407 static char md_buffer[16];
+ − 408 static char md_cksum[16];
+ − 409 static char md_i;
+ − 410 static char md_j;
+ − 411 static char md_temp;
+ − 412 static unsigned int md_pointer;
+ − 413 static float deco_N2_ratio; // new in v.101
+ − 414 static float deco_He_ratio; // new in v.101
+ − 415 static float calc_N2_ratio; // new in v.101
+ − 416 static float calc_He_ratio; // new in v.101
+ − 417 static float deco_gas_change; // new in v.101
+ − 418 static float CNS_fraction; // new in v.101
+ − 419 static float float_saturation_multiplier; // new in v.101
+ − 420 static float float_desaturation_multiplier; // new in v.101
+ − 421 static float float_deco_distance; // new in v.101
60
+ − 422 // internal, dbg:
0
+ − 423 static unsigned char DBG_char_I_deco_model; // new in v.108
+ − 424 static unsigned char DBG_char_I_depth_last_deco; // new in v.108
+ − 425 static float DBG_pres_surface; // new in v.108
+ − 426 static float DBG_GF_low; // new in v.108
+ − 427 static float DBG_GF_high; // new in v.108
+ − 428 static float DBG_const_ppO2; // new in v.108
+ − 429 static float DBG_deco_ppO2_change; // new in v.108
+ − 430 static float DBG_deco_ppO2; // new in v.108
+ − 431 static float DBG_deco_N2_ratio; // new in v.108
+ − 432 static float DBG_deco_He_ratio; // new in v.108
+ − 433 static float DBG_deco_gas_change; // new in v.108
+ − 434 static float DBG_float_saturation_multiplier; // new in v.108
+ − 435 static float DBG_float_desaturation_multiplier; // new in v.108
+ − 436 static float DBG_float_deco_distance; // new in v.108
+ − 437 static float DBG_deco_N2_ratio; // new in v.108
+ − 438 static float DBG_deco_He_ratio; // new in v.108
+ − 439 static float DBG_N2_ratio; // new in v.108
+ − 440 static float DBG_He_ratio; // new in v.108
+ − 441 static char flag_in_divemode; // new in v.108
+ − 442 static int int_dbg_i; // new in v.108
+ − 443 unsigned int temp_DBS;
+ − 444
60
+ − 445 static float deco_gas_change2; // new in v.109
+ − 446 static float deco_gas_change3; // new in v.109
+ − 447 static float deco_gas_change4; // new in v.109
+ − 448 static float deco_gas_change5; // new in v.109
+ − 449
+ − 450 static float deco_N2_ratio2; // new in v.109
+ − 451 static float deco_N2_ratio3; // new in v.109
+ − 452 static float deco_N2_ratio4; // new in v.109
+ − 453 static float deco_N2_ratio5; // new in v.109
+ − 454 static float deco_He_ratio2; // new in v.109
+ − 455 static float deco_He_ratio3; // new in v.109
+ − 456 static float deco_He_ratio4; // new in v.109
+ − 457 static float deco_He_ratio5; // new in v.109
+ − 458
+ − 459
0
+ − 460 // *************************
+ − 461 // ** P R O T O T Y P E S **
+ − 462 // *************************
+ − 463 void main_calc_hauptroutine(void);
+ − 464 void main_calc_without_deco(void);
+ − 465 void main_clear_tissue(void);
+ − 466 void main_calc_percentage(void);
+ − 467 void main_calc_wo_deco_step_1_min(void);
+ − 468 void main_debug(void);
+ − 469 void main_gradient_array(void);
+ − 470 void main_hash(void);
+ − 471
+ − 472 void calc_hauptroutine(void);
+ − 473 void calc_tissue(void);
+ − 474 void calc_nullzeit(void);
+ − 475 void backup_sim_pres_tissue(void);
+ − 476 void restore_sim_pres_tissue(void);
+ − 477
+ − 478 void calc_without_deco(void);
+ − 479 void clear_tissue(void);
+ − 480 void calc_ascenttime(void);
+ − 481 void update_startvalues(void);
+ − 482 void clear_decoarray(void);
+ − 483 void update_decoarray(void);
+ − 484 void sim_tissue_1min(void);
+ − 485 void sim_tissue_10min(void);
+ − 486 void calc_gradient_factor(void);
+ − 487 void calc_gradient_array_only(void);
+ − 488 void calc_desaturation_time(void);
+ − 489 void calc_wo_deco_step_1_min(void);
+ − 490 void calc_tissue_step_1_min(void);
60
+ − 491 //void debug(void);
0
+ − 492 void hash(void);
+ − 493 void clear_CNS_fraction(void);
+ − 494 void calc_CNS_fraction(void);
+ − 495 void calc_CNS_decrease_15min(void);
+ − 496 void calc_percentage(void);
+ − 497 void main(void);
+ − 498 void calc_hauptroutine_data_input(void);
+ − 499 void calc_hauptroutine_update_tissues(void);
+ − 500 void calc_hauptroutine_calc_deco(void);
+ − 501 void calc_hauptroutine_calc_ascend_to_deco(void);
60
+ − 502 //void build_debug_output(void);
0
+ − 503 void calc_nextdecodepth_GF(void);
+ − 504 void copy_deco_table_GF(void);
+ − 505 void clear_internal_deco_table_GF(void);
+ − 506 void update_internal_deco_table_GF(void);
+ − 507 void DD2_write(void);
+ − 508 void DD2_write_incon42(void);
60
+ − 509 void DD2_get_pointer_to_char(void);//dd2_char, &dd2_pointer);
+ − 510 void DD2_set_column(void);//top, dd2_k);void DD2_load_background(void);//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
0
+ − 511 void DD2_load_background(void);
60
+ − 512 void DD2_build_one_line_of_char(void);//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+ − 513 void DD2_print_column(void);//&dd2_columnstore, dd2_heightmax);
0
+ − 514 void DD2_CmdWrite(void);
+ − 515 void DD2_DataWrite(void);
+ − 516 void push_tissues_to_vault(void);
+ − 517 void pull_tissues_from_vault(void);
+ − 518 void main_push_tissues_to_vault(void);
+ − 519 void main_pull_tissues_from_vault(void);
+ − 520
+ − 521 // *******************************
+ − 522 // ** start **
+ − 523 // ** necessary for compilation **
+ − 524 // *******************************
+ − 525 #pragma romdata der_code = 0x0000
+ − 526 #pragma code der_start = 0x0000
+ − 527 void der_start(void)
+ − 528 {
+ − 529 _asm
+ − 530 goto main
+ − 531 _endasm
+ − 532 }
+ − 533
+ − 534 // ***********************************
+ − 535 // ** main code for simulation / **
+ − 536 // ** tests without assembler code **
+ − 537 // ** is NOT a part of the OSTC **
+ − 538 // ***********************************
+ − 539 #pragma code main = 0x9000
+ − 540 void main(void)
+ − 541 {
+ − 542 #if 1
+ − 543 // new main to test DR-5
+ − 544
60
+ − 545 char_I_deco_model = 0;
0
+ − 546
+ − 547 GF_low = 1.0;
+ − 548 GF_high = 1.0;
+ − 549
+ − 550 GF_temp = GF_low * GF_high;
+ − 551
+ − 552 clear_CNS_fraction();
+ − 553 //char_I_const_ppO2 = 100;
+ − 554 //for (main_i=0;main_i<255;main_i++)
+ − 555 //{
+ − 556 //calc_CNS_fraction();
+ − 557 //} //for
+ − 558
+ − 559
+ − 560
+ − 561
+ − 562 int_I_pres_respiration = 1000;//980;
+ − 563 int_I_pres_surface = 1000;//980;
60
+ − 564 char_I_N2_ratio = 79; //38;
+ − 565 char_I_He_ratio = 0; //50;
+ − 566 char_I_deco_distance = 10; // 10 = 1 meter
0
+ − 567 char_I_depth_last_deco = 3; // values below 3 (meter) are ignored
+ − 568
+ − 569 char_I_const_ppO2 = 0;
+ − 570 char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+ − 571 char_I_deco_ppO2 = 0;
+ − 572
60
+ − 573 char_I_deco_gas_change = 20; // [m] 1 = 1 meter
+ − 574 char_I_deco_N2_ratio = 50;
0
+ − 575 char_I_deco_He_ratio = 0;
+ − 576
60
+ − 577 char_I_deco_gas_change2 = 6; // [m] 1 = 1 meter
+ − 578 char_I_deco_N2_ratio2 = 0;
+ − 579 char_I_deco_He_ratio2 = 0;
+ − 580
+ − 581 char_I_deco_gas_change3 = 0; // [m] 1 = 1 meter
+ − 582 char_I_deco_gas_change4 = 0; // [m] 1 = 1 meter
+ − 583 char_I_deco_gas_change5 = 0; // [m] 1 = 1 meter
+ − 584
0
+ − 585 //char_I_actual_ppO2; // 0x507
+ − 586 char_I_GF_High_percentage = 100; // 0x514 new in v.102
+ − 587 char_I_GF_Low_percentage = 100; // 0x515 new in v.102
+ − 588
+ − 589 char_I_saturation_multiplier = 110;
+ − 590 char_I_desaturation_multiplier = 90;
+ − 591
+ − 592
+ − 593 main_clear_tissue();
+ − 594
60
+ − 595 char_I_step_is_1min = 1;
+ − 596 int_I_pres_respiration = 4500 + int_I_pres_surface;
+ − 597
+ − 598 for (main_i=0;main_i<29;main_i++)
+ − 599 {
+ − 600 main_calc_hauptroutine();
+ − 601 }
+ − 602
+ − 603 char_I_step_is_1min = 0;
+ − 604 char_O_deco_status = 255;
+ − 605 while (char_O_deco_status)
+ − 606 main_calc_hauptroutine();
+ − 607 _asm
+ − 608 nop
+ − 609 _endasm
0
+ − 610
+ − 611 char_O_deco_status = 255;
+ − 612 while (char_O_deco_status)
+ − 613 main_calc_hauptroutine();
+ − 614 _asm
+ − 615 nop
+ − 616 _endasm
+ − 617
+ − 618 int_I_pres_respiration = 10000;
+ − 619 for (main_i=0;main_i<1500;main_i++)
+ − 620 {
+ − 621 main_calc_hauptroutine();
+ − 622 }
+ − 623
+ − 624 _asm
+ − 625 nop
+ − 626 _endasm
+ − 627
+ − 628
+ − 629 int_I_pres_respiration = 3000;
+ − 630 for (main_i=0;main_i<150;main_i++)
+ − 631 {
+ − 632 calc_hauptroutine_data_input();
+ − 633 calc_hauptroutine_update_tissues();
+ − 634 } //for
+ − 635
+ − 636 update_startvalues();
+ − 637 clear_decoarray();
+ − 638 clear_internal_deco_table_GF();
+ − 639 calc_hauptroutine_calc_ascend_to_deco();
+ − 640 if (char_O_deco_status > 15) // can't go up to first deco, too deep to calculate in the given time slot
+ − 641 {
+ − 642 char_O_deco_status = 2;
+ − 643 // char_O_lock_depth_list = 255;
+ − 644 }
+ − 645 else
+ − 646 {
+ − 647 // char_O_lock_depth_list = lock_GF_depth_list;
+ − 648 calc_hauptroutine_calc_deco();
+ − 649 }
+ − 650 // build_debug_output();
+ − 651
+ − 652 _asm
+ − 653 nop
+ − 654 _endasm
+ − 655 while (char_O_deco_status == 1)
+ − 656 {
+ − 657 char_O_deco_status = 0;
+ − 658 // char_O_lock_depth_list = 255;
+ − 659 calc_hauptroutine_calc_deco();
+ − 660 // build_debug_output();
+ − 661 _asm
+ − 662 nop
+ − 663 _endasm
+ − 664 };
+ − 665 debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+ − 666 int_I_pres_respiration = 9980;
+ − 667 for (main_i=0;main_i<debug_temp;main_i++)
+ − 668 {
+ − 669 int_I_pres_respiration = int_I_pres_respiration - 33;
+ − 670 calc_hauptroutine_data_input();
+ − 671 calc_hauptroutine_update_tissues();
+ − 672 int_I_pres_respiration = int_I_pres_respiration - 33;
+ − 673 calc_hauptroutine_data_input();
+ − 674 calc_hauptroutine_update_tissues();
+ − 675 int_I_pres_respiration = int_I_pres_respiration - 34;
+ − 676 calc_hauptroutine_data_input();
+ − 677 calc_hauptroutine_update_tissues();
+ − 678 } //for
+ − 679 _asm
+ − 680 nop
+ − 681 _endasm
+ − 682
+ − 683 update_startvalues();
+ − 684 clear_decoarray();
+ − 685 clear_internal_deco_table_GF();
+ − 686 calc_hauptroutine_calc_ascend_to_deco();
+ − 687 if (char_O_deco_status > 15) // can't go up to first deco, too deep to calculate in the given time slot
+ − 688 {
+ − 689 char_O_deco_status = 2;
+ − 690 // char_O_lock_depth_list = 255;
+ − 691 }
+ − 692 else
+ − 693 {
+ − 694 // char_O_lock_depth_list = lock_GF_depth_list;
+ − 695 calc_hauptroutine_calc_deco();
+ − 696 }
+ − 697 // build_debug_output();
+ − 698
+ − 699 _asm
+ − 700 nop
+ − 701 _endasm
+ − 702 while (char_O_deco_status == 1)
+ − 703 {
+ − 704 char_O_deco_status = 0;
+ − 705 // char_O_lock_depth_list = 255;
+ − 706 calc_hauptroutine_calc_deco();
+ − 707 // build_debug_output();
+ − 708 _asm
+ − 709 nop
+ − 710 _endasm
+ − 711 };
+ − 712 _asm
+ − 713 nop
+ − 714 _endasm
+ − 715 debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+ − 716 int_I_pres_respiration = 9980;
+ − 717 debug_temp = debug_temp * 3;
+ − 718 for (main_i=0;main_i<debug_temp;main_i++)
+ − 719 {
+ − 720 calc_hauptroutine_data_input();
+ − 721 calc_hauptroutine_update_tissues();
+ − 722 } //for
+ − 723 _asm
+ − 724 nop
+ − 725 _endasm
+ − 726 #endif
+ − 727 // -----------------------
+ − 728
+ − 729 } // main
+ − 730
+ − 731 // ******************************************************
+ − 732 // ******************************************************
+ − 733 // ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+ − 734 // ******************************************************
+ − 735 // ******************************************************
+ − 736
+ − 737 // ***********************
+ − 738 // ***********************
+ − 739 // ** THE SUBROUTINES 2 **
+ − 740 // ***********************
+ − 741 // ***********************
+ − 742 // all new in v.102
+ − 743 // moved from 0x0D000 to 0x0C000 in v.108
+ − 744
+ − 745 #pragma code subroutines2 = 0x0C000 // can be adapted to fit the romdata tables ahead
+ − 746
+ − 747 // -------------------------------
+ − 748 // DBS - debug on start of dive //
+ − 749 // -------------------------------
+ − 750 void create_dbs_set_dbg_and_ndl20mtr(void)
+ − 751 {
+ − 752 int_O_DBS_bitfield = 0;
+ − 753 int_O_DBS2_bitfield = 0;
+ − 754 if(int_O_DBG_pre_bitfield & DBG_RUN)
+ − 755 int_O_DBG_pre_bitfield = DBG_RESTART;
+ − 756 else
+ − 757 int_O_DBG_pre_bitfield = DBG_RUN;
+ − 758 int_O_DBG_post_bitfield = 0;
+ − 759 char_O_NDL_at_20mtr = 255;
+ − 760
+ − 761 DBG_N2_ratio = N2_ratio;
+ − 762 DBG_He_ratio = He_ratio;
+ − 763 DBG_char_I_deco_model = char_I_deco_model;
+ − 764 DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+ − 765 DBG_pres_surface = pres_surface;
+ − 766 DBG_GF_low = GF_low;
+ − 767 DBG_GF_high = GF_high;
+ − 768 DBG_const_ppO2 = const_ppO2;
+ − 769 DBG_deco_ppO2_change = deco_ppO2_change;
+ − 770 DBG_deco_ppO2 = deco_ppO2;
+ − 771 DBG_deco_N2_ratio = deco_N2_ratio;
+ − 772 DBG_deco_He_ratio = deco_He_ratio;
+ − 773 DBG_deco_gas_change = deco_gas_change;
+ − 774 DBG_float_saturation_multiplier = float_saturation_multiplier;
+ − 775 DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+ − 776 DBG_float_deco_distance = float_deco_distance;
+ − 777
+ − 778 if(char_I_deco_model)
+ − 779 int_O_DBS_bitfield |= DBS_mode;
+ − 780 if(const_ppO2)
+ − 781 int_O_DBS_bitfield |= DBS_ppO2;
+ − 782 for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+ − 783 if(pres_tissue[int_dbg_i])
+ − 784 int_O_DBS_bitfield |= DBS_HE_sat;
+ − 785 if(deco_ppO2_change)
+ − 786 int_O_DBS_bitfield |= DBS_ppO2chg;
+ − 787 if(float_saturation_multiplier < 0.99)
+ − 788 int_O_DBS_bitfield |= DBS_SAT2l;
+ − 789 if(float_saturation_multiplier > 1.3)
+ − 790 int_O_DBS_bitfield |= DBS_SAT2h;
+ − 791 if(GF_low < 0.19)
+ − 792 int_O_DBS_bitfield |= DBS_GFLOW2l;
+ − 793 if(GF_low > 1.01)
+ − 794 int_O_DBS_bitfield |= DBS_GFLOW2h;
+ − 795 if(GF_high < 0.6)
+ − 796 int_O_DBS_bitfield |= DBS_GFHGH2l;
+ − 797 if(GF_high > 1.01)
+ − 798 int_O_DBS_bitfield |= DBS_GFHGH2h;
+ − 799 if((N2_ratio + He_ratio) > 0.95)
+ − 800 int_O_DBS_bitfield |= DBS_GASO22l;
+ − 801 if((N2_ratio + He_ratio) < 0.05)
+ − 802 int_O_DBS_bitfield |= DBS_GASO22h;
+ − 803 if(float_deco_distance > 0.25)
+ − 804 int_O_DBS_bitfield |= DBS_DIST2h;
+ − 805 if(char_I_depth_last_deco > 8)
+ − 806 int_O_DBS_bitfield |= DBS_LAST2h;
+ − 807 if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+ − 808 int_O_DBS_bitfield |= DBS_DECOO2l;
+ − 809 if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+ − 810 int_O_DBS_bitfield |= DBS_DECOO2h;
+ − 811 if(pres_respiration > 3.0)
+ − 812 int_O_DBS2_bitfield |= DBS2_PRES2h;
+ − 813 if(pres_surface - pres_respiration > 0.2)
+ − 814 int_O_DBS2_bitfield |= DBS2_PRES2l;
+ − 815 if(pres_surface < 0.75)
+ − 816 int_O_DBS2_bitfield |= DBS2_SURF2l;
+ − 817 if(pres_surface > 1.11)
+ − 818 int_O_DBS2_bitfield |= DBS2_SURF2h;
+ − 819 if(float_desaturation_multiplier < 0.70)
+ − 820 int_O_DBS2_bitfield |= DBS2_DESAT2l;
+ − 821 if(float_desaturation_multiplier > 1.01)
+ − 822 int_O_DBS2_bitfield |= DBS2_DESAT2h;
+ − 823 if(GF_low > GF_high)
+ − 824 int_O_DBS2_bitfield |= DBS2_GFDneg;
+ − 825 }
+ − 826
+ − 827 // -------------------------------
+ − 828 // DBG - set DBG to end_of_dive //
+ − 829 // -------------------------------
+ − 830 void set_dbg_end_of_dive(void)
+ − 831 {
+ − 832 int_O_DBG_pre_bitfield &= (~DBG_RUN);
+ − 833 int_O_DBG_post_bitfield &= (~DBG_RUN);
+ − 834 }
+ − 835
+ − 836 // -------------------------------
+ − 837 // DBG - NDL at first 20 m. hit //
+ − 838 // -------------------------------
+ − 839 void check_ndl(void)
+ − 840 {
+ − 841 if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+ − 842 {
+ − 843 char_O_NDL_at_20mtr = char_O_nullzeit;
+ − 844 if(char_O_NDL_at_20mtr == 255)
+ − 845 char_O_NDL_at_20mtr == 254;
+ − 846 }
+ − 847 }
+ − 848
+ − 849 // -------------------------------
+ − 850 // DBG - multi main during dive //
+ − 851 // -------------------------------
+ − 852 void check_dbg(char is_post_check)
+ − 853 {
+ − 854 temp_DBS = 0;
+ − 855 if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+ − 856 temp_DBS |= DBG_c_gas;
+ − 857 if(DBG_const_ppO2 != const_ppO2)
+ − 858 temp_DBS |= DBG_c_ppO2;
+ − 859 if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+ − 860 temp_DBS |= DBG_CdeSAT;
+ − 861 if(DBG_char_I_deco_model != char_I_deco_model)
+ − 862 temp_DBS |= DBG_C_MODE;
+ − 863 if(DBG_pres_surface != pres_surface)
+ − 864 temp_DBS |= DBG_C_SURF;
+ − 865 if((!DBS_HE_sat) && (!He_ratio))
+ − 866 for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+ − 867 if(pres_tissue[int_dbg_i])
+ − 868 temp_DBS |= DBG_HEwoHE;
+ − 869 if(DBG_deco_ppO2 != deco_ppO2)
+ − 870 temp_DBS |= DBG_C_DPPO2;
+ − 871 if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+ − 872 temp_DBS |= DBG_C_DGAS;
+ − 873 if(DBG_float_deco_distance != float_deco_distance)
+ − 874 temp_DBS |= DBG_C_DIST;
+ − 875 if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+ − 876 temp_DBS |= DBG_C_LAST;
+ − 877 if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+ − 878 temp_DBS |= DBG_C_GF;
+ − 879 if(pres_respiration > 13.0)
+ − 880 temp_DBS |= DBG_PHIGH;
+ − 881 if(pres_surface - pres_respiration > 0.2)
+ − 882 temp_DBS |= DBG_PLOW;
+ − 883 /*
+ − 884 if()
+ − 885 temp_DBS |= ;
+ − 886 if()
+ − 887 temp_DBS |= ;
+ − 888 */
+ − 889 if(is_post_check)
+ − 890 int_O_DBG_post_bitfield |= temp_DBS;
+ − 891 else
+ − 892 int_O_DBG_pre_bitfield |= temp_DBS;
+ − 893 }
+ − 894
+ − 895 // -------------------------------
+ − 896 // DBG - prior to calc. of dive //
+ − 897 // -------------------------------
+ − 898 void check_pre_dbg(void)
+ − 899 {
+ − 900 check_dbg(0);
+ − 901 }
+ − 902
+ − 903 // -------------------------------
+ − 904 // DBG - after decocalc of dive //
+ − 905 // -------------------------------
+ − 906 void check_post_dbg(void)
+ − 907 {
+ − 908 check_dbg(1);
+ − 909 }
+ − 910
+ − 911
+ − 912
+ − 913 // -------------------------
+ − 914 // calc_next_decodepth_GF //
+ − 915 // -------------------------
+ − 916 // new in v.102
+ − 917 void calc_nextdecodepth_GF(void)
+ − 918 {
+ − 919 // INPUT, changing during dive:
+ − 920 // temp_pres_gtissue_limit_GF_low
+ − 921 // temp_pres_gtissue_limit_GF_low_below_surface
+ − 922 // temp_pres_gtissue
+ − 923 // temp_pres_gtissue_diff
+ − 924 // lock_GF_depth_list
+ − 925
+ − 926 // INPUT, fixed during dive:
+ − 927 // pres_surface
+ − 928 // GF_delta
+ − 929 // GF_high
+ − 930 // GF_low
+ − 931 // temp_depth_last_deco
+ − 932 // float_deco_distance
+ − 933
+ − 934 // OUTPUT
+ − 935 // GF_step
+ − 936 // temp_deco
+ − 937 // temp_depth_limt
+ − 938 // lock_GF_depth_list
+ − 939
+ − 940 // USES
+ − 941 // temp1
+ − 942 // temp2
+ − 943 // int_temp
+ − 944
+ − 945 char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+ − 946 if (char_I_deco_model == 1)
+ − 947 {
+ − 948 if (lock_GF_depth_list == 0)
+ − 949 {
+ − 950 temp2 = temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; // = ... / 99.95 / 0.003;
+ − 951 int_temp = (int) (temp2 + 0.99);
+ − 952 if (int_temp > 31)
+ − 953 int_temp = 31; // deepest deco at 93 meter (31 deco stops)
+ − 954 if (int_temp < 0)
+ − 955 int_temp = 0;
+ − 956 temp_depth_GF_low_number = int_temp;
+ − 957 temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+ − 958 temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+ − 959 temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+ − 960 if (temp_depth_GF_low_number == 0)
+ − 961 GF_step = 0;
+ − 962 else
+ − 963 GF_step = GF_delta / (float)temp_depth_GF_low_number;
+ − 964 if (GF_step < 0)
+ − 965 GF_step = 0;
+ − 966 if (GF_step > GF_delta)
+ − 967 GF_step = GF_delta;
+ − 968 int_O_GF_step = (int)(GF_step * 10000);
+ − 969 int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+ − 970 int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+ − 971 char_O_GF_low_pointer = temp_depth_GF_low_number;
+ − 972 lock_GF_depth_list = 1;
+ − 973 internal_deco_pointer = 0;
+ − 974 }
+ − 975 if (internal_deco_pointer == 0) // new run
+ − 976 {
+ − 977 internal_deco_pointer = temp_depth_GF_low_number;
+ − 978 GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+ − 979 int_temp = char_I_table_deco_done[internal_deco_pointer];
+ − 980 output[8] = int_temp;
+ − 981 output[9] = 33;
+ − 982 }
+ − 983 else
+ − 984 {
+ − 985 int_temp = 1;
+ − 986 }
+ − 987 while (int_temp == 1)
+ − 988 {
+ − 989 int_temp = internal_deco_pointer - 1;
+ − 990 if (int_temp == 1) // new in v104
+ − 991 {
+ − 992 temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+ − 993 GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+ − 994 }
+ − 995 else
+ − 996 if (int_temp == 0)
+ − 997 {
+ − 998 temp2 = 0.0;
+ − 999 GF_step2 = GF_high - GF_temp;
+ − 1000 }
+ − 1001 else
+ − 1002 {
+ − 1003 temp2 = (float)(3 *int_temp) * 0.09995;
+ − 1004 GF_step2 = GF_step;
+ − 1005 }
+ − 1006 temp2 = temp2 + pres_surface; // next deco stop to be tested
+ − 1007 temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue; // upper limit (lowest pressure allowed) // changes GF_step2 in v104
+ − 1008 if (temp1 > temp2) // check if ascent to next deco stop is ok
+ − 1009 {
+ − 1010 int_temp = 0; // no
+ − 1011 }
+ − 1012 else
+ − 1013 {
+ − 1014 internal_deco_pointer = int_temp;
+ − 1015 GF_temp = GF_temp + GF_step2; // changed in v104
+ − 1016 int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+ − 1017 }
+ − 1018 } // while
+ − 1019 if (internal_deco_pointer > 0)
+ − 1020 {
+ − 1021 temp2 = (float)(0.29985 * internal_deco_pointer);
+ − 1022 temp_deco = temp2 + float_deco_distance + pres_surface;
+ − 1023 if (internal_deco_pointer == 1) // new in v104
+ − 1024 temp_depth_limit = temp_depth_last_deco;
+ − 1025 else
+ − 1026 temp_depth_limit = 3 * internal_deco_pointer;
+ − 1027 if (output[9] == 33)
+ − 1028 {
+ − 1029 output[9] = internal_deco_pointer;
+ − 1030 output[10] = char_I_table_deco_done[internal_deco_pointer];
+ − 1031 output[12] = output[12] + 1;
+ − 1032 if (output[12] == 100)
+ − 1033 output[12] = 0;
+ − 1034 }
+ − 1035 }
+ − 1036 else // if (char_I_deco_model == 1)
+ − 1037 {
+ − 1038 temp_deco = pres_surface;
+ − 1039 temp_depth_limit = 0;
+ − 1040 }
+ − 1041 }
+ − 1042 else
+ − 1043 {
+ − 1044 // calc_nextdecodepth - original
+ − 1045 // optimized in v.101
+ − 1046 // depth_last_deco included in v.101
+ − 1047
+ − 1048 temp1 = temp_pres_gtissue_limit - pres_surface;
+ − 1049 if (temp1 >= 0)
+ − 1050 {
+ − 1051 temp1 = temp1 / 0.29985; // = temp1 / 99.95 / 0.003;
+ − 1052 temp_depth_limit = (int) (temp1 + 0.99);
+ − 1053 temp_depth_limit = 3 * temp_depth_limit; // depth for deco [m]
+ − 1054 if (temp_depth_limit == 0)
+ − 1055 temp_deco = pres_surface;
+ − 1056 else
+ − 1057 {
+ − 1058 if (temp_depth_limit < temp_depth_last_deco)
+ − 1059 temp_depth_limit = temp_depth_last_deco;
+ − 1060 temp1 = (float)temp_depth_limit * 0.09995;
+ − 1061 temp_deco = temp1 + float_deco_distance + pres_surface; // depth for deco [bar]
+ − 1062 } // if (temp_depth_limit == 0)
+ − 1063 } // if (temp1 >= 0)
+ − 1064 else
+ − 1065 {
+ − 1066 temp_deco = pres_surface;
+ − 1067 temp_depth_limit = 0;
+ − 1068 } // if (temp1 >= 0)
+ − 1069 } // calc_nextdecodepth original
+ − 1070 } // calc_nextdecodepth_GF
+ − 1071
+ − 1072
+ − 1073 #if 0
+ − 1074 void build_debug_output(void)
+ − 1075 {
+ − 1076 output[0] = 0; // not used in asm PLED output
+ − 1077 output[1] = (int) (GF_low * 100);
+ − 1078 output[2] = (int) (GF_high * 100);
+ − 1079 output[3] = (int) (GF_step * 100);
+ − 1080 output[4] = (int) temp_depth_GF_low_number;
+ − 1081 output[5] = (int) temp_depth_GF_low_meter;
+ − 1082 //output[6]
+ − 1083 output[7] = (int) internal_deco_pointer;
+ − 1084 //output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+ − 1085 //output[9] = internal_deco_pointer @ new run
+ − 1086 //output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+ − 1087 output [11] = (int) (temp_pres_deco_GF_low * 10);
+ − 1088 } // build_debug_output
+ − 1089 #endif
+ − 1090
+ − 1091 // ---------------------
+ − 1092 // copy_deco_table_GF //
+ − 1093 // ---------------------
+ − 1094 // new in v.102
+ − 1095 void copy_deco_table_GF(void)
+ − 1096 {
+ − 1097 if (char_I_deco_model == 1)
+ − 1098 {
+ − 1099 int_temp = 32;
+ − 1100 for (ci=0;ci<int_temp;ci++)
+ − 1101 char_O_deco_table[ci] = internal_deco_table[ci];
+ − 1102 }
+ − 1103 } // copy_deco_table_GF
+ − 1104
+ − 1105
+ − 1106 // ------------------------------
+ − 1107 // clear_internal_deco_table_GF//
+ − 1108 // ------------------------------
+ − 1109 // new in v.102
+ − 1110 void clear_internal_deco_table_GF(void)
+ − 1111 {
+ − 1112 if (char_I_deco_model == 1)
+ − 1113 {
+ − 1114 for (ci=0;ci<32;ci++) // cycle through the 16 b"uhlmann tissues for Helium
+ − 1115 {
+ − 1116 internal_deco_table[ci] = 0;
+ − 1117 }
+ − 1118 }
+ − 1119 } // clear_internal_deco_table_GF
+ − 1120
+ − 1121
+ − 1122 // --------------------------------
+ − 1123 // update_internal_deco_table_GF //
+ − 1124 // --------------------------------
+ − 1125 // new in v.102
+ − 1126 void update_internal_deco_table_GF(void)
+ − 1127 {
+ − 1128 if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+ − 1129 internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+ − 1130 } // update_internal_deco_table_GF
+ − 1131
+ − 1132
+ − 1133 // ---------------------
+ − 1134 // temp_tissue_safety //
+ − 1135 // ---------------------
+ − 1136 // outsourced in v.102
+ − 1137 void temp_tissue_safety(void)
+ − 1138 {
+ − 1139 if (char_I_deco_model == 1)
+ − 1140 {
+ − 1141 }
+ − 1142 else
+ − 1143 {
+ − 1144 if (temp_tissue < 0.0)
+ − 1145 temp_tissue = temp_tissue * float_desaturation_multiplier;
+ − 1146 else
+ − 1147 temp_tissue = temp_tissue * float_saturation_multiplier;
+ − 1148 }
+ − 1149 } // temp_tissue_safety
+ − 1150
60
+ − 1151 // ---------------------
+ − 1152 // dd2_write_incon42 //
+ − 1153 // ---------------------
0
+ − 1154 void DD2_write_incon42(void)
+ − 1155 {
60
+ − 1156 //dd2_fontwidth = 21;
+ − 1157 //dd2_fontheight = 30;
+ − 1158 dd2_fontwidth = 19;
+ − 1159 dd2_fontheight = 28;
+ − 1160 dd2_base = 0x0F500;
+ − 1161 dd2_start = '0';
+ − 1162 dd2_end = '9';
+ − 1163 DD2_write();
0
+ − 1164 }
+ − 1165
60
+ − 1166 // ---------------------
+ − 1167 // dd2_write_incon24 //
+ − 1168 // ---------------------
0
+ − 1169 void DD2_write_incon24(void)
+ − 1170 {
60
+ − 1171 dd2_fontwidth = 12;
+ − 1172 dd2_fontheight = 16;
+ − 1173 dd2_base = 0x0E100;
+ − 1174 dd2_start = '.';
+ − 1175 dd2_end = '9' + 5;
+ − 1176 DD2_write();
0
+ − 1177 }
60
+ − 1178
+ − 1179
+ − 1180 void DD2_write(void)
0
+ − 1181 {
60
+ − 1182 dd2_i = 0;
+ − 1183 _asm
+ − 1184 movff dd2_i, POSTINC2 // write 0x00 at the end of dd2_strinstore[]
+ − 1185 bsf oled_rs
+ − 1186 _endasm
+ − 1187 dd2_stringstore[16] = 0; // safety if more than 16 letters (max at font incon16) are written, the other space is used by font remap
+ − 1188 if (dd2_top == 0) dd2_top = 1;
+ − 1189 if (dd2_left == 0) dd2_left = 1;
+ − 1190 if (dd2_heightmax > dd2_fontheight) dd2_heightmax = dd2_fontheight;
+ − 1191 if ((dd2_top + dd2_heightmax) > 65) dd2_heightmax = 65 - dd2_top;
+ − 1192
+ − 1193 dd2_k = dd2_left;
+ − 1194 dd2_j = 0;
+ − 1195 dd2_char = dd2_stringstore[dd2_j++];
+ − 1196 DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+ − 1197 dd2_i = 0;
+ − 1198 dd2_lowbyte = 1;
+ − 1199
+ − 1200 while (dd2_char != 0)
0
+ − 1201 {
60
+ − 1202 if (dd2_lowbyte == 1) DD2_load_background();//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+ − 1203 DD2_build_one_line_of_char(); //&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte); // dd2_heightmax
+ − 1204 dd2_lowbyte = dd2_lowbyte ^ 1;
+ − 1205 if (dd2_lowbyte == 1)
+ − 1206 {
+ − 1207 DD2_set_column();//top, dd2_k); //
+ − 1208 if(dd2_k < 64) dd2_k++;
+ − 1209 DD2_print_column();//&dd2_columnstore, dd2_heightmax); // dd2_column_store, dd2_heightmax
+ − 1210 }
+ − 1211 dd2_i++;
+ − 1212 if ((dd2_i >= dd2_fontwidth) | (((dd2_char == '.') |(dd2_char == ':') | (dd2_char == '<')) & (dd2_i >= 4)))
+ − 1213 {
+ − 1214 dd2_char = dd2_stringstore[dd2_j++];
+ − 1215 DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+ − 1216 dd2_i = 0;
+ − 1217 }
0
+ − 1218 }
60
+ − 1219 } // void dd2_write(void)
+ − 1220
+ − 1221 void DD2_get_pointer_to_char(void)//dd2_char, &dd2_pointer);
0
+ − 1222 {
60
+ − 1223 if((dd2_char < dd2_start) | (dd2_char > dd2_end))
+ − 1224 {
+ − 1225 dd2_pointer = 0;
+ − 1226 dd2_temp = 0;
+ − 1227 }
+ − 1228 else
+ − 1229 {
+ − 1230 dd2_pointer = dd2_char - dd2_start;
+ − 1231 dd2_pointer = dd2_pointer * ((dd2_fontheight+1)/2);
+ − 1232 dd2_pointer = dd2_pointer * dd2_fontwidth;
+ − 1233 dd2_pointer += dd2_base;
+ − 1234 if((dd2_char == '.') | (dd2_char == ':') | (dd2_char == '<'))
+ − 1235 {
+ − 1236 dd2_pointer += 2 * dd2_fontheight;
+ − 1237 }
+ − 1238
+ − 1239 }
+ − 1240 } // void DD2_get_pointer_to_char(void)
+ − 1241
+ − 1242 void DD2_set_column(void)//top, dd2_k);
+ − 1243 {
+ − 1244 dd2_data = 0x75;
+ − 1245 DD2_CmdWrite();
+ − 1246 dd2_data = dd2_top - 1;
+ − 1247 DD2_CmdWrite();
+ − 1248 dd2_data = 0x3f;
+ − 1249 DD2_CmdWrite();
+ − 1250
+ − 1251 dd2_data = 0x15;
+ − 1252 DD2_CmdWrite();
+ − 1253 dd2_data = dd2_k - 1;
+ − 1254 DD2_CmdWrite();
+ − 1255 dd2_data = dd2_k - 1;
+ − 1256 DD2_CmdWrite();
+ − 1257 } // DD2_set_column()
+ − 1258
+ − 1259 void DD2_load_background(void)//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+ − 1260 {
+ − 1261 for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+ − 1262 md_pi_subst[dd2_temp] = 0x00;
+ − 1263 } // void DD2_load_background()
+ − 1264
+ − 1265 void DD2_build_one_line_of_char(void)//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
0
+ − 1266 {
60
+ − 1267 if (dd2_pointer != 0)
+ − 1268 {
+ − 1269 dd2_temp = (char)(dd2_pointer & 255);
+ − 1270 _asm
+ − 1271 movff dd2_temp,TBLPTRL
+ − 1272 _endasm
+ − 1273 dd2_temp = (char)((dd2_pointer >> 8) & 255);
+ − 1274 _asm
+ − 1275 movff dd2_temp,TBLPTRH
+ − 1276 _endasm
+ − 1277 dd2_temp = (char)((dd2_pointer >> 16)& 255);
+ − 1278 _asm
+ − 1279 movff dd2_temp,TBLPTRU
+ − 1280 _endasm
+ − 1281
+ − 1282 for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp += 2)
+ − 1283 {
+ − 1284 _asm
+ − 1285 TBLRDPOSTINC
+ − 1286 movff TABLAT,dd2_data
+ − 1287 _endasm
+ − 1288 if (dd2_oled_brightness_offset != 0)
+ − 1289 {
+ − 1290 if ((dd2_oled_brightness_offset << 4) < (dd2_data & 0xF0))
+ − 1291 dd2_data = dd2_data - (dd2_oled_brightness_offset << 4);
+ − 1292 if ((dd2_oled_brightness_offset) < (dd2_data & 0x0F))
+ − 1293 dd2_data = dd2_data - dd2_oled_brightness_offset;
+ − 1294 }
+ − 1295 if (dd2_lowbyte == 1)
+ − 1296 {
+ − 1297 md_pi_subst[dd2_temp] = dd2_data & 0xF0;
+ − 1298 md_pi_subst[dd2_temp+1] = (dd2_data << 4) & 0xF0;
+ − 1299 }
+ − 1300 else
+ − 1301 {
+ − 1302 md_pi_subst[dd2_temp] = (md_pi_subst[dd2_temp] & 0xF0) | ((dd2_data >> 4) & 0x0F);
+ − 1303 md_pi_subst[dd2_temp+1] = (md_pi_subst[dd2_temp+1] & 0xF0) | (dd2_data & 0x0F);
+ − 1304 }
+ − 1305 }//for
+ − 1306 dd2_pointer += (dd2_fontheight+1)/2;
+ − 1307 }//if
+ − 1308 } //
+ − 1309
+ − 1310 void DD2_print_column(void)//&dd2_columnstore, dd2_heightmax);
0
+ − 1311 {
60
+ − 1312 _asm
+ − 1313 bsf oled_rs
+ − 1314 _endasm
+ − 1315 for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+ − 1316 {
+ − 1317 dd2_data = md_pi_subst[dd2_temp];
+ − 1318 DD2_DataWrite();
+ − 1319 }
+ − 1320 } // void DD2_print_column(void)
+ − 1321
+ − 1322 //; -----------------------------
+ − 1323 //; DD Write Cmd via W
+ − 1324 //; two jump_ins:
+ − 1325 //; DD_CmdWrite and DD_CmdWrite2
+ − 1326 //; -----------------------------
0
+ − 1327 void DD2_CmdWrite(void)
+ − 1328 {
60
+ − 1329 _asm
+ − 1330 bcf oled_rs
+ − 1331 _endasm
+ − 1332 DD2_DataWrite();
0
+ − 1333 }
60
+ − 1334
0
+ − 1335 void DD2_DataWrite(void)
+ − 1336 {
60
+ − 1337 _asm
+ − 1338 movlb 1
+ − 1339 // bsf no_sensor_int // flag5, no_sensor_int
+ − 1340 bcf oled_en
+ − 1341 movlb 0
+ − 1342 bcf oled_clk //; CLK=0
+ − 1343 btfsc dd2_data,7,1 //; Bit
+ − 1344 bsf oled_data
+ − 1345 bcf oled_clk //; CLK=0
+ − 1346 btfss dd2_data,7,1
+ − 1347 bcf oled_data
+ − 1348 bsf oled_clk //; CLK=1
+ − 1349 btfsc dd2_data,6,1 //; Bit
+ − 1350 bsf oled_data
+ − 1351 bcf oled_clk //; CLK=0
+ − 1352 btfss dd2_data,6,1
+ − 1353 bcf oled_data
+ − 1354 bsf oled_clk //; CLK=1
+ − 1355 btfsc dd2_data,5,1 //; Bit
+ − 1356 bsf oled_data
+ − 1357 bcf oled_clk //; CLK=0
+ − 1358 btfss dd2_data,5,1
+ − 1359 bcf oled_data //;
+ − 1360 bsf oled_clk //; CLK=1
+ − 1361 btfsc dd2_data,4,1 //; Bit
+ − 1362 bsf oled_data
+ − 1363 bcf oled_clk //; CLK=0
+ − 1364 btfss dd2_data,4,1
+ − 1365 bcf oled_data
+ − 1366 bsf oled_clk //; CLK=1
+ − 1367 btfsc dd2_data,3,1 //; Bit
+ − 1368 bsf oled_data
+ − 1369 bcf oled_clk //; CLK=0
+ − 1370 btfss dd2_data,3,1
+ − 1371 bcf oled_data
+ − 1372 bsf oled_clk //; CLK=1
+ − 1373 btfsc dd2_data,2,1 //; Bit
+ − 1374 bsf oled_data
+ − 1375 bcf oled_clk //; CLK=0
+ − 1376 btfss dd2_data,2,1
+ − 1377 bcf oled_data
+ − 1378 bsf oled_clk //; CLK=1
+ − 1379 btfsc dd2_data,1,1 //; Bit
+ − 1380 bsf oled_data
+ − 1381 bcf oled_clk //; CLK=0
+ − 1382 btfss dd2_data,1,1
+ − 1383 bcf oled_data
+ − 1384 bsf oled_clk //; CLK=1
+ − 1385 btfsc dd2_data,0,1 //; Bit
+ − 1386 bsf oled_data
+ − 1387 bcf oled_clk //; CLK=0
+ − 1388 btfss dd2_data,0,1
+ − 1389 bcf oled_data
+ − 1390 bsf oled_clk //; CLK=1
+ − 1391 bsf oled_en //; CS#=1
+ − 1392 movlb 1
+ − 1393 // bcf no_sensor_int // flag5, no_sensor_int
+ − 1394 movlb 0
+ − 1395 _endasm
+ − 1396 dd2_data = 0; // to be sure that C knows we are in Bank0
0
+ − 1397 }
60
+ − 1398 #pragma romdata font_incon_24h15 = 0x0E100
+ − 1399 rom const rom unsigned char incon24h15[] =
+ − 1400 {
+ − 1401 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1402 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1403 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1404 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1405 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80
+ − 1406 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0
+ − 1407 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0
+ − 1408 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1409 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1410 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1411 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1412 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1413 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1414 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
+ − 1415 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xf0
+ − 1416 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xff, 0xa0
+ − 1417 ,0x00, 0x00, 0x00, 0x00, 0x5c, 0xff, 0x91, 0x00
+ − 1418 ,0x00, 0x00, 0x00, 0x6d, 0xfe, 0x71, 0x00, 0x00
+ − 1419 ,0x00, 0x01, 0x7e, 0xfd, 0x60, 0x00, 0x00, 0x00
+ − 1420 ,0x01, 0x8f, 0xfd, 0x50, 0x00, 0x00, 0x00, 0x00
+ − 1421 ,0x9f, 0xfb, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1422 ,0xfa, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1423 ,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1424 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1425 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1426 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x72, 0x00, 0x00
+ − 1427 ,0x00, 0x9f, 0xfe, 0xdc, 0xdf, 0xff, 0xb2, 0x00
+ − 1428 ,0x1d, 0xf8, 0x20, 0x00, 0x05, 0xfd, 0xff, 0x30
+ − 1429 ,0xaf, 0x30, 0x00, 0x00, 0x9f, 0x90, 0x2e, 0xd0
+ − 1430 ,0xf8, 0x00, 0x00, 0x2c, 0xf5, 0x00, 0x06, 0xf0
+ − 1431 ,0xf8, 0x00, 0x04, 0xed, 0x30, 0x00, 0x05, 0xf0
+ − 1432 ,0xaf, 0x30, 0x8f, 0xb1, 0x00, 0x00, 0x0c, 0xe0
+ − 1433 ,0x1d, 0xfd, 0xf8, 0x00, 0x00, 0x16, 0xdf, 0x40
+ − 1434 ,0x00, 0x9f, 0xff, 0xdc, 0xde, 0xff, 0xc3, 0x00
+ − 1435 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x73, 0x00, 0x00
+ − 1436 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1437 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1438 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1439 ,0x02, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30
+ − 1440 ,0x0a, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+ − 1441 ,0x2f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+ − 1442 ,0xaf, 0x97, 0x77, 0x77, 0x77, 0x77, 0x79, 0xf0
+ − 1443 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+ − 1444 ,0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x26, 0xf0
+ − 1445 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+ − 1446 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd0
+ − 1447 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1448 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1449 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1450 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40
+ − 1451 ,0x07, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0
+ − 1452 ,0x4f, 0x80, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0xf0
+ − 1453 ,0xcc, 0x00, 0x00, 0x00, 0x02, 0xef, 0x57, 0xf0
+ − 1454 ,0xf7, 0x00, 0x00, 0x00, 0x2e, 0xe2, 0x07, 0xf0
+ − 1455 ,0xf8, 0x00, 0x00, 0x01, 0xde, 0x20, 0x07, 0xf0
+ − 1456 ,0xce, 0x10, 0x00, 0x2d, 0xe2, 0x00, 0x07, 0xf0
+ − 1457 ,0x4f, 0xd6, 0x58, 0xfe, 0x30, 0x00, 0x07, 0xf0
+ − 1458 ,0x06, 0xff, 0xff, 0xb1, 0x00, 0x00, 0x07, 0xf0
+ − 1459 ,0x00, 0x14, 0x52, 0x00, 0x00, 0x00, 0x05, 0x80
+ − 1460 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1461 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1462 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
+ − 1463 ,0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x50
+ − 1464 ,0x6f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xd0
+ − 1465 ,0xdb, 0x00, 0x00, 0x59, 0x00, 0x00, 0x07, 0xf0
+ − 1466 ,0xf8, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x04, 0xf0
+ − 1467 ,0xea, 0x00, 0x00, 0xcf, 0x10, 0x00, 0x06, 0xf0
+ − 1468 ,0x9f, 0x30, 0x07, 0xff, 0x90, 0x00, 0x1e, 0xe0
+ − 1469 ,0x1e, 0xfc, 0xdf, 0x87, 0xfb, 0x79, 0xef, 0x50
+ − 1470 ,0x01, 0x9d, 0xc6, 0x00, 0x7e, 0xff, 0xd5, 0x00
+ − 1471 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00
+ − 1472 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1473 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1474 ,0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0x00, 0x00
+ − 1475 ,0x00, 0x00, 0x00, 0x06, 0xff, 0xe0, 0x00, 0x00
+ − 1476 ,0x00, 0x00, 0x02, 0xcf, 0x69, 0xe0, 0x00, 0x00
+ − 1477 ,0x00, 0x00, 0x7f, 0xb1, 0x09, 0xe0, 0x00, 0x00
+ − 1478 ,0x00, 0x2c, 0xe6, 0x00, 0x09, 0xe0, 0x00, 0x00
+ − 1479 ,0x07, 0xfb, 0x10, 0x00, 0x09, 0xe0, 0x00, 0x00
+ − 1480 ,0xcf, 0xfc, 0xcc, 0xcc, 0xce, 0xfd, 0xdd, 0xd0
+ − 1481 ,0xde, 0xee, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xe0
+ − 1482 ,0x00, 0x00, 0x00, 0x00, 0x09, 0xe0, 0x00, 0x00
+ − 1483 ,0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x00, 0x00
+ − 1484 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1485 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1486 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00
+ − 1487 ,0x78, 0xab, 0xcd, 0xed, 0x00, 0x00, 0xce, 0x20
+ − 1488 ,0xff, 0xed, 0xcc, 0xfa, 0x00, 0x00, 0x5f, 0xb0
+ − 1489 ,0xf9, 0x00, 0x06, 0xf0, 0x00, 0x00, 0x08, 0xf0
+ − 1490 ,0xf9, 0x00, 0x0a, 0xb0, 0x00, 0x00, 0x04, 0xf0
+ − 1491 ,0xf9, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x04, 0xf0
+ − 1492 ,0xf9, 0x00, 0x08, 0xf3, 0x00, 0x00, 0x0b, 0xf0
+ − 1493 ,0xf9, 0x00, 0x01, 0xfe, 0x62, 0x13, 0xbf, 0x90
+ − 1494 ,0xf9, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xfb, 0x00
+ − 1495 ,0x11, 0x00, 0x00, 0x01, 0x6a, 0xa9, 0x40, 0x00
+ − 1496 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1497 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1498 ,0x00, 0x00, 0x03, 0x56, 0x65, 0x30, 0x00, 0x00
+ − 1499 ,0x00, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x00
+ − 1500 ,0x08, 0xfe, 0x96, 0x8f, 0x95, 0x6a, 0xff, 0x30
+ − 1501 ,0x6f, 0x90, 0x01, 0xf8, 0x00, 0x00, 0x3e, 0xd0
+ − 1502 ,0xec, 0x00, 0x08, 0xf0, 0x00, 0x00, 0x06, 0xf0
+ − 1503 ,0xf6, 0x00, 0x0a, 0xe0, 0x00, 0x00, 0x04, 0xf0
+ − 1504 ,0xf7, 0x00, 0x07, 0xf3, 0x00, 0x00, 0x09, 0xf0
+ − 1505 ,0xcd, 0x10, 0x01, 0xef, 0x72, 0x13, 0xaf, 0x90
+ − 1506 ,0x4d, 0x20, 0x00, 0x2d, 0xff, 0xff, 0xf9, 0x00
+ − 1507 ,0x00, 0x00, 0x00, 0x00, 0x47, 0x86, 0x10, 0x00
+ − 1508 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1509 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1510 ,0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1511 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1512 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90
+ − 1513 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x39, 0xef, 0xf0
+ − 1514 ,0xfa, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xe9, 0x40
+ − 1515 ,0xfa, 0x00, 0x05, 0xbf, 0xff, 0x94, 0x00, 0x00
+ − 1516 ,0xfa, 0x18, 0xef, 0xfb, 0x50, 0x00, 0x00, 0x00
+ − 1517 ,0xfe, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00
+ − 1518 ,0xff, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1519 ,0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1520 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1521 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1522 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x78, 0x50, 0x00
+ − 1523 ,0x03, 0xad, 0xb4, 0x00, 0x7f, 0xff, 0xfc, 0x00
+ − 1524 ,0x3f, 0xfc, 0xff, 0x66, 0xfa, 0x43, 0xaf, 0xa0
+ − 1525 ,0xcd, 0x10, 0x1c, 0xfe, 0x70, 0x00, 0x0b, 0xf0
+ − 1526 ,0xf5, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x05, 0xf0
+ − 1527 ,0xf5, 0x00, 0x00, 0xbf, 0x10, 0x00, 0x04, 0xf0
+ − 1528 ,0xec, 0x00, 0x07, 0xff, 0xb0, 0x00, 0x0a, 0xf0
+ − 1529 ,0x6f, 0xd9, 0xcf, 0x78, 0xfb, 0x32, 0x9f, 0x90
+ − 1530 ,0x07, 0xef, 0xe6, 0x00, 0x9f, 0xff, 0xfb, 0x00
+ − 1531 ,0x00, 0x01, 0x00, 0x00, 0x03, 0x88, 0x50, 0x00
+ − 1532 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1533 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1534 ,0x00, 0x03, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00
+ − 1535 ,0x04, 0xdf, 0xff, 0xfb, 0x10, 0x00, 0x0b, 0x60
+ − 1536 ,0x4f, 0xd7, 0x45, 0x9f, 0xd0, 0x00, 0x1c, 0xe0
+ − 1537 ,0xdd, 0x00, 0x00, 0x05, 0xf5, 0x00, 0x05, 0xf0
+ − 1538 ,0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x04, 0xf0
+ − 1539 ,0xf8, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x08, 0xf0
+ − 1540 ,0xbe, 0x20, 0x00, 0x06, 0xf2, 0x00, 0x5f, 0xa0
+ − 1541 ,0x2e, 0xf9, 0x54, 0x7f, 0x94, 0x7c, 0xfc, 0x00
+ − 1542 ,0x02, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0x70, 0x00
+ − 1543 ,0x00, 0x01, 0x46, 0x77, 0x75, 0x30, 0x00, 0x00
+ − 1544 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1545 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1546 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1547 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1548 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1549 ,0x00, 0x00, 0x06, 0xa1, 0x00, 0x00, 0x09, 0x80
+ − 1550 ,0x00, 0x00, 0x1f, 0xf9, 0x00, 0x00, 0x6f, 0xf0
+ − 1551 ,0x00, 0x00, 0x0d, 0xf5, 0x00, 0x00, 0x3f, 0xe0
+ − 1552 ,0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
+ − 1553 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1554 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1555 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1556 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1557 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1558 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1559 ,0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1560 ,0xba, 0xae, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1561 ,0xff, 0xe9, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1562 ,0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1563 ,0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1564 ,0x97, 0x8c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1565 ,0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1566 ,0x75, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1567 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1568 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1569 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1570 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1571 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1572 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1573 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1574 ,0x75, 0x6a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1575 ,0xff, 0xfd, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1576 ,0xa8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1577 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1578 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1579 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1580 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1581 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1582 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1583 ,0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1584 ,0x2c, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1585 ,0xdd, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1586 ,0xf2, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1587 ,0xf0, 0x00, 0x4f, 0x10, 0x00, 0x00, 0x00, 0x00
+ − 1588 ,0xea, 0x23, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1589 ,0x4f, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1590 ,0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1591 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1592 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1593 ,0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10
+ − 1594 ,0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+ − 1595 ,0x00, 0x00, 0x9f, 0xa7, 0x77, 0x77, 0x77, 0x70
+ − 1596 ,0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1597 ,0x00, 0x02, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1598 ,0x00, 0x01, 0xff, 0xcb, 0xbb, 0xbb, 0xbb, 0xb0
+ − 1599 ,0x00, 0x00, 0x4f, 0xfe, 0xee, 0xee, 0xee, 0xe0
+ − 1600 ,0x00, 0x00, 0xab, 0x20, 0x00, 0x00, 0x00, 0x00
+ − 1601 ,0x00, 0x01, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1602 ,0x00, 0x02, 0xfa, 0x55, 0x55, 0x55, 0x55, 0x50
+ − 1603 ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf0
+ − 1604 ,0x00, 0x00, 0x02, 0x44, 0x44, 0x44, 0x44, 0x40
+ − 1605 };
+ − 1606
+ − 1607 #pragma romdata font_incon_42 = 0x0F500
+ − 1608 rom const rom unsigned char incon42[] =
+ − 1609 {
+ − 1610 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1611 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1612 ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ − 1613 ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ − 1614 ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ − 1615 ,0x00, 0xbf, 0xff, 0xc7, 0x65, 0x43, 0x22, 0x33, 0x57, 0xbf, 0xff, 0xfd, 0x20, 0x00
+ − 1616 ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6e, 0xff, 0xd1, 0x00
+ − 1617 ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xfa, 0x00
+ − 1618 ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0x20
+ − 1619 ,0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x60
+ − 1620 ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ − 1621 ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1622 ,0xcf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ − 1623 ,0x4f, 0xfe, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ − 1624 ,0x07, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ − 1625 ,0x00, 0x5e, 0xff, 0xfb, 0x98, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ − 1626 ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ − 1627 ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ − 1628 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1629 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1630 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1631
+ − 1632 #if 0
+ − 1633 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1634 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1635 ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ − 1636 ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ − 1637 ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ − 1638 ,0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ − 1639 ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ − 1640 ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ − 1641 ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ − 1642 ,0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ − 1643 ,0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ − 1644 ,0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1645 ,0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ − 1646 ,0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ − 1647 ,0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ − 1648 ,0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ − 1649 ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ − 1650 ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ − 1651 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1652 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1653 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1654 #endif
+ − 1655 //
+ − 1656 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1657 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1658 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1659 ,0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1660 ,0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ − 1661 ,0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1662 ,0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1663 ,0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1664 ,0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1665 ,0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ − 1666 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1667 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1668 ,0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ − 1669 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1670 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1671 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1672 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ − 1673 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1674 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1675 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1676 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1677 //
+ − 1678 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1679 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1680 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1681 ,0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ − 1682 ,0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ − 1683 ,0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ − 1684 ,0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ − 1685 ,0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ − 1686 ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ − 1687 ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ − 1688 ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ − 1689 ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1690 ,0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1691 ,0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1692 ,0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1693 ,0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1694 ,0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1695 ,0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ − 1696 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1697 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1698 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1699 //
+ − 1700 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1701 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1702 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1703 ,0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ − 1704 ,0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ − 1705 ,0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ − 1706 ,0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ − 1707 ,0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ − 1708 ,0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1709 ,0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ − 1710 ,0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1711 ,0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ − 1712 ,0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ − 1713 ,0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ − 1714 ,0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ − 1715 ,0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ − 1716 ,0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ − 1717 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ − 1718 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1719 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1720 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1721 //
+ − 1722 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1723 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1724 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1725 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1726 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1727 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1728 ,0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1729 ,0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1730 ,0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1731 ,0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1732 ,0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1733 ,0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1734 ,0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ − 1735 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1736 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1737 ,0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ − 1738 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1739 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1740 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ − 1741 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1742 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1743 //
+ − 1744 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1745 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1746 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ − 1747 ,0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ − 1748 ,0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ − 1749 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ − 1750 ,0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ − 1751 ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ − 1752 ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ − 1753 ,0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1754 ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1755 ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1756 ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ − 1757 ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ − 1758 ,0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ − 1759 ,0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ − 1760 ,0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ − 1761 ,0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ − 1762 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ − 1763 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1764 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1765 //
+ − 1766 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1767 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1768 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1769 ,0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ − 1770 ,0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ − 1771 ,0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ − 1772 ,0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ − 1773 ,0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ − 1774 ,0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ − 1775 ,0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1776 ,0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1777 ,0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ − 1778 ,0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ − 1779 ,0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ − 1780 ,0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ − 1781 ,0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ − 1782 ,0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ − 1783 ,0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ − 1784 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1785 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1786 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1787 //
+ − 1788 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1789 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1790 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1791 ,0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1792 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1793 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ − 1794 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ − 1795 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ − 1796 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ − 1797 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ − 1798 ,0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ − 1799 ,0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ − 1800 ,0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1801 ,0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1802 ,0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1803 ,0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1804 ,0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1805 ,0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1806 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1807 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1808 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1809 //
+ − 1810 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1811 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1812 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ − 1813 ,0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ − 1814 ,0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ − 1815 ,0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ − 1816 ,0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ − 1817 ,0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ − 1818 ,0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ − 1819 ,0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1820 ,0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ − 1821 ,0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ − 1822 ,0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ − 1823 ,0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ − 1824 ,0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ − 1825 ,0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ − 1826 ,0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ − 1827 ,0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ − 1828 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ − 1829 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1830 //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1831 //
+ − 1832 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1833 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1834 ,0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1835 ,0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ − 1836 ,0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ − 1837 ,0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ − 1838 ,0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ − 1839 ,0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1840 ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1841 ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1842 ,0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ − 1843 ,0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ − 1844 ,0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ − 1845 ,0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ − 1846 ,0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ − 1847 ,0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ − 1848 ,0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ − 1849 ,0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ − 1850 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1851 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1852 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1853 };
+ − 1854
+ − 1855 #if 0
+ − 1856 #pragma romdata font_incon_42 = 0x0E000
+ − 1857 rom const rom unsigned char incon42[] =
+ − 1858 {
+ − 1859 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1860 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1861 ,0x00, 0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ − 1862 ,0x00, 0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ − 1863 ,0x00, 0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ − 1864 ,0x00, 0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ − 1865 ,0x00, 0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ − 1866 ,0x00, 0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ − 1867 ,0x00, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ − 1868 ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ − 1869 ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ − 1870 ,0x02, 0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1871 ,0x00, 0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ − 1872 ,0x00, 0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ − 1873 ,0x00, 0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ − 1874 ,0x00, 0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ − 1875 ,0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ − 1876 ,0x00, 0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ − 1877 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1878 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1879 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1880 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1881 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1882 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1883 ,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1884 ,0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ − 1885 ,0x00, 0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1886 ,0x00, 0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1887 ,0x00, 0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1888 ,0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1889 ,0x00, 0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ − 1890 ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1891 ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1892 ,0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ − 1893 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1894 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1895 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ − 1896 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ − 1897 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1898 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1899 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1900 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1901 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1902 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1903 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1904 ,0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ − 1905 ,0x00, 0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ − 1906 ,0x00, 0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ − 1907 ,0x00, 0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ − 1908 ,0x00, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ − 1909 ,0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ − 1910 ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ − 1911 ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ − 1912 ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1913 ,0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1914 ,0x00, 0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1915 ,0x00, 0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1916 ,0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1917 ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ − 1918 ,0x00, 0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ − 1919 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1920 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1921 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1922 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1923 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1924 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1925 ,0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ − 1926 ,0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ − 1927 ,0x00, 0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ − 1928 ,0x00, 0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ − 1929 ,0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ − 1930 ,0x01, 0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1931 ,0x03, 0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ − 1932 ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1933 ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ − 1934 ,0x00, 0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ − 1935 ,0x00, 0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ − 1936 ,0x00, 0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ − 1937 ,0x00, 0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ − 1938 ,0x00, 0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ − 1939 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ − 1940 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1941 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1942 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1943 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1944 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1945 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1946 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1947 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1948 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1949 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1950 ,0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1951 ,0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1952 ,0x00, 0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1953 ,0x00, 0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1954 ,0x00, 0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1955 ,0x00, 0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ − 1956 ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1957 ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ − 1958 ,0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ − 1959 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1960 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ − 1961 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ − 1962 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1963 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1964 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1965 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1966 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ − 1967 ,0x00, 0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ − 1968 ,0x01, 0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ − 1969 ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ − 1970 ,0x02, 0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ − 1971 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ − 1972 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ − 1973 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1974 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1975 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 1976 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ − 1977 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ − 1978 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ − 1979 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ − 1980 ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ − 1981 ,0x01, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ − 1982 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ − 1983 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1984 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1985 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1986 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1987 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 1988 ,0x00, 0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ − 1989 ,0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ − 1990 ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ − 1991 ,0x00, 0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ − 1992 ,0x00, 0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ − 1993 ,0x00, 0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ − 1994 ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 1995 ,0x04, 0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ − 1996 ,0x06, 0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ − 1997 ,0x06, 0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ − 1998 ,0x03, 0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ − 1999 ,0x00, 0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ − 2000 ,0x00, 0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ − 2001 ,0x00, 0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ − 2002 ,0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ − 2003 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2004 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2005 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2006 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2007 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2008 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2009 ,0x02, 0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2010 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2011 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ − 2012 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ − 2013 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ − 2014 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ − 2015 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ − 2016 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ − 2017 ,0x02, 0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ − 2018 ,0x02, 0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2019 ,0x02, 0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2020 ,0x02, 0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2021 ,0x02, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2022 ,0x02, 0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2023 ,0x02, 0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2024 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2025 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2026 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2027 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2028 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2029 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ − 2030 ,0x00, 0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ − 2031 ,0x00, 0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ − 2032 ,0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ − 2033 ,0x00, 0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ − 2034 ,0x00, 0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ − 2035 ,0x01, 0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ − 2036 ,0x05, 0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 2037 ,0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ − 2038 ,0x06, 0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ − 2039 ,0x03, 0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ − 2040 ,0x00, 0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ − 2041 ,0x00, 0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ − 2042 ,0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ − 2043 ,0x00, 0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ − 2044 ,0x00, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ − 2045 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ − 2046 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2047 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2048 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2049 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2050 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2051 ,0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ − 2052 ,0x00, 0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ − 2053 ,0x00, 0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ − 2054 ,0x00, 0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ − 2055 ,0x00, 0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ − 2056 ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 2057 ,0x05, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ − 2058 ,0x06, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ − 2059 ,0x04, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ − 2060 ,0x00, 0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ − 2061 ,0x00, 0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ − 2062 ,0x00, 0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ − 2063 ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ − 2064 ,0x00, 0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ − 2065 ,0x00, 0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ − 2066 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2067 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2068 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ − 2069 };
+ − 2070 #endif
0
+ − 2071
+ − 2072 // **********************
+ − 2073 // **********************
+ − 2074 // ** THE JUMP-IN CODE **
+ − 2075 // ** for the asm code **
+ − 2076 // **********************
+ − 2077 // **********************
60
+ − 2078 #pragma code main_calc_hauptroutine = 0x10000
+ − 2079 void main_calc_hauptroutine(void)
0
+ − 2080 {
+ − 2081 calc_hauptroutine();
+ − 2082 int_O_desaturation_time = 65535;
+ − 2083 } // divemode
60
+ − 2084 #pragma code main_without_deco = 0x10020
0
+ − 2085 void main_calc_without_deco(void)
+ − 2086 {
+ − 2087 calc_without_deco();
+ − 2088 calc_desaturation_time();
+ − 2089 }
+ − 2090
60
+ − 2091 #pragma code main_clear_CNS_fraction = 0x10030
0
+ − 2092 void main_clear_CNS_fraction(void)
+ − 2093 {
+ − 2094 clear_CNS_fraction();
+ − 2095 }
+ − 2096
60
+ − 2097 #pragma code main_calc_CNS_decrease_15min = 0x10034
+ − 2098 void main_calc_CNS_decrease_15min(void)
0
+ − 2099 {
+ − 2100 calc_CNS_decrease_15min();
+ − 2101 }
+ − 2102
60
+ − 2103 #pragma code main_calc_percentage = 0x10038
+ − 2104 void main_calc_percentage (void)
0
+ − 2105 {
+ − 2106 calc_percentage();
+ − 2107 }
+ − 2108
60
+ − 2109 #pragma code main_clear_tissue = 0x10040
0
+ − 2110 void main_clear_tissue(void)
+ − 2111 {
+ − 2112 clear_tissue();
+ − 2113 char_I_depth_last_deco = 0; // for compatibility with v.101pre_no_last_deco
+ − 2114 }
+ − 2115
60
+ − 2116 #pragma code main_calc_CNS_fraction = 0x10050
0
+ − 2117 void main_calc_CNS_fraction(void)
+ − 2118 {
+ − 2119 calc_CNS_fraction();
+ − 2120 }
+ − 2121
60
+ − 2122 #pragma code main_calc_desaturation_time = 0x10060
0
+ − 2123 void main_calc_desaturation_time(void)
+ − 2124 {
+ − 2125 calc_desaturation_time();
+ − 2126 }
+ − 2127
60
+ − 2128 #pragma code main_calc_wo_deco_step_1_min = 0x10080
0
+ − 2129 void main_calc_wo_deco_step_1_min(void)
+ − 2130 {
+ − 2131 calc_wo_deco_step_1_min();
+ − 2132 char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+ − 2133 calc_desaturation_time();
+ − 2134 } // surface mode
+ − 2135
60
+ − 2136 #pragma code main_debug = 0x100A0
+ − 2137 void main_debug(void)
+ − 2138 {
+ − 2139 //debug();
+ − 2140 }
+ − 2141
+ − 2142 #pragma code main_DD2_write_incon42 = 0x100B0
+ − 2143 void main_DD2_write_incon42(void)
0
+ − 2144 {
60
+ − 2145 DD2_write_incon42();
0
+ − 2146 }
+ − 2147
60
+ − 2148 #pragma code main_DD2_write_incon24 = 0x100B4
+ − 2149 void main_DD2_write_incon24(void)
+ − 2150 {
+ − 2151 DD2_write_incon24();
+ − 2152 }
+ − 2153
+ − 2154 #pragma code main_gradient_array = 0x100C0
0
+ − 2155 void main_gradient_array(void)
+ − 2156 {
60
+ − 2157 calc_gradient_array_only();
0
+ − 2158 }
60
+ − 2159 #pragma code main_push_tissues = 0x100C4
0
+ − 2160 void main_push_tissues_to_vault(void)
+ − 2161 {
+ − 2162 push_tissues_to_vault();
+ − 2163 }
60
+ − 2164 #pragma code main_pull_tissues = 0x100C8
0
+ − 2165 void main_pull_tissues_from_vault(void)
+ − 2166 {
+ − 2167 pull_tissues_from_vault();
+ − 2168 }
+ − 2169
60
+ − 2170 #pragma code main_hash = 0x100E0
0
+ − 2171 void main_hash(void)
+ − 2172 {
+ − 2173 hash();
+ − 2174 }
+ − 2175
+ − 2176 // ***********************
+ − 2177 // ***********************
+ − 2178 // ** THE LOOKUP TABLES **
+ − 2179 // ***********************
+ − 2180 // ***********************
+ − 2181
+ − 2182 #pragma romdata tables = 0x10200
60
+ − 2183 #include "p2_tables.romdata" // new table for deco_main_v.101 (var_a modified)
0
+ − 2184
+ − 2185 #pragma romdata tables2 = 0x10600
+ − 2186 rom const rom unsigned int md_pi[] =
+ − 2187 {
+ − 2188 0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+ − 2189 , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+ − 2190 , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+ − 2191 , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+ − 2192 , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+ − 2193 , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+ − 2194 , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+ − 2195 , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+ − 2196 , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+ − 2197 , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+ − 2198 , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+ − 2199 , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+ − 2200 , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+ − 2201 , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+ − 2202 , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+ − 2203 , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+ − 2204 };
+ − 2205
+ − 2206 // *********************
+ − 2207 // *********************
+ − 2208 // ** THE SUBROUTINES **
+ − 2209 // *********************
+ − 2210 // *********************
+ − 2211
+ − 2212 #pragma code subroutines = 0x10700 // can be adapted to fit the romdata tables ahead
+ − 2213
+ − 2214
+ − 2215 // ---------------
+ − 2216 // CLEAR tissue //
+ − 2217 // ---------------
+ − 2218 // optimized in v.101 (var_a)
+ − 2219
+ − 2220 void clear_tissue(void) // preload tissues with standard pressure for the given ambient pressure
+ − 2221 {
+ − 2222
+ − 2223 flag_in_divemode = 0;
+ − 2224 int_O_DBS_bitfield = 0;
+ − 2225 int_O_DBS2_bitfield = 0;
+ − 2226 int_O_DBG_pre_bitfield = 0;
+ − 2227 int_O_DBG_post_bitfield = 0;
+ − 2228 char_O_NDL_at_20mtr = 255;
+ − 2229
+ − 2230 _asm
+ − 2231 lfsr 1, 0x300 // C math routines shall use this variable bank
+ − 2232 movlw 0x01
+ − 2233 movwf TBLPTRU,0
+ − 2234 _endasm
+ − 2235
+ − 2236 // N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ − 2237 N2_ratio = 0.7902; // N2_ratio / 100.0;
+ − 2238 pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ − 2239 for (ci=0;ci<16;ci++) // cycle through the 16 b"uhlmann tissues
+ − 2240 {
+ − 2241 pres_tissue[ci] = N2_ratio * (pres_respiration - 0.0627) ;
+ − 2242 _asm
+ − 2243 movlw 0x02
+ − 2244 movwf TBLPTRH,0
+ − 2245 movlb 4 // fuer ci
+ − 2246 movf ci,0,1
+ − 2247 addwf ci,0,1
+ − 2248 addwf ci,0,1
+ − 2249 addwf ci,0,1
+ − 2250 addlw 0x80
+ − 2251 movwf TBLPTRL,0
+ − 2252 TBLRDPOSTINC
+ − 2253 movff TABLAT,var_a+1
+ − 2254 TBLRDPOSTINC
+ − 2255 movff TABLAT,var_a
+ − 2256 TBLRDPOSTINC
+ − 2257 movff TABLAT,var_a+3
+ − 2258 TBLRD
+ − 2259 movff TABLAT,var_a+2
+ − 2260 addlw 0x80
+ − 2261 movwf TBLPTRL,0
+ − 2262 incf TBLPTRH,1,0
+ − 2263 TBLRDPOSTINC
+ − 2264 movff TABLAT,var_b+1
+ − 2265 TBLRDPOSTINC
+ − 2266 movff TABLAT,var_b
+ − 2267 TBLRDPOSTINC
+ − 2268 movff TABLAT,var_b+3
+ − 2269 TBLRD
+ − 2270 movff TABLAT,var_b+2
+ − 2271 _endasm
+ − 2272
+ − 2273 pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+ − 2274 // now update the guiding tissue
+ − 2275 if (pres_tissue_limit[ci] < 0)
+ − 2276 pres_tissue_limit[ci] = 0;
+ − 2277 } // for 0 to 16
+ − 2278
+ − 2279 for (ci=16;ci<32;ci++) // cycle through the 16 b"uhlmann tissues for Helium
+ − 2280 {
+ − 2281 pres_tissue[ci] = 0.0;
+ − 2282 } // for
+ − 2283
+ − 2284 clear_decoarray();
+ − 2285 char_O_deco_status = 0;
+ − 2286 char_O_nullzeit = 0;
+ − 2287 char_O_ascenttime = 0;
+ − 2288 char_O_gradient_factor = 0;
+ − 2289 char_O_relative_gradient_GF = 0;
+ − 2290 } // clear_tissue(void)
+ − 2291
+ − 2292
+ − 2293 // --------------------
+ − 2294 // calc_without_deco //
+ − 2295 // fixed N2_ratio ! //
+ − 2296 // --------------------
+ − 2297 // optimized in v.101 (float_..saturation_multiplier)
+ − 2298
+ − 2299 void calc_without_deco(void)
+ − 2300 {
+ − 2301 _asm
+ − 2302 lfsr 1, 0x300
+ − 2303 _endasm
+ − 2304 N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ − 2305 pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ − 2306 pres_surface = (float)int_I_pres_surface / 1000.0;
+ − 2307 temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ − 2308 temp2_atem = 0.0;
+ − 2309 temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ − 2310 float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ − 2311 float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ − 2312
+ − 2313 calc_tissue(); // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ − 2314
+ − 2315 clear_decoarray();
+ − 2316 char_O_deco_status = 0;
+ − 2317 char_O_nullzeit = 0;
+ − 2318 char_O_ascenttime = 0;
+ − 2319 calc_gradient_factor();
+ − 2320
+ − 2321 } // calc_without_deco
+ − 2322
+ − 2323
+ − 2324 // --------------------
+ − 2325 // calc_hauptroutine //
+ − 2326 // --------------------
+ − 2327 // this is the major code in dive mode
+ − 2328 // calculates:
+ − 2329 // the tissues,
+ − 2330 // the bottom time
+ − 2331 // and simulates the ascend with all deco stops
+ − 2332
+ − 2333 void calc_hauptroutine(void)
+ − 2334 {
+ − 2335 calc_hauptroutine_data_input();
+ − 2336
+ − 2337 if(!flag_in_divemode)
+ − 2338 {
+ − 2339 flag_in_divemode = 1;
+ − 2340 create_dbs_set_dbg_and_ndl20mtr();
+ − 2341 }
+ − 2342 else
+ − 2343 check_pre_dbg();
+ − 2344
+ − 2345 calc_hauptroutine_update_tissues();
+ − 2346 calc_gradient_factor();
+ − 2347
+ − 2348
+ − 2349 switch (char_O_deco_status) // toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+ − 2350 {
+ − 2351 case 0:
+ − 2352 update_startvalues();
+ − 2353 calc_nullzeit();
+ − 2354 check_ndl();
+ − 2355 char_O_deco_status = 255; // calc deco next time
+ − 2356 break;
+ − 2357 case 1:
+ − 2358 if (char_O_deco_status == 3)
+ − 2359 break;
+ − 2360 char_O_deco_status = 0;
+ − 2361 // char_O_lock_depth_list = 255;
+ − 2362 calc_hauptroutine_calc_deco();
+ − 2363 // build_debug_output();
+ − 2364 break;
+ − 2365 case 3: // new dive
+ − 2366 clear_decoarray();
+ − 2367 clear_internal_deco_table_GF();
+ − 2368 copy_deco_table_GF();
+ − 2369 internal_deco_pointer = 0;
+ − 2370 lock_GF_depth_list = 0;
+ − 2371 update_startvalues();
+ − 2372 calc_nextdecodepth_GF();
+ − 2373 char_O_deco_status = 0;
+ − 2374 break;
+ − 2375 default:
+ − 2376 update_startvalues();
+ − 2377 clear_decoarray();
+ − 2378 clear_internal_deco_table_GF();
+ − 2379 output[6] = 1;
+ − 2380 calc_hauptroutine_calc_ascend_to_deco();
+ − 2381 if (char_O_deco_status > 15) // can't go up to first deco, too deep to calculate in the given time slot
+ − 2382 {
+ − 2383 char_O_deco_status = 2;
+ − 2384 // char_O_lock_depth_list = 255;
+ − 2385 }
+ − 2386 else
+ − 2387 {
+ − 2388 // char_O_lock_depth_list = lock_GF_depth_list;
+ − 2389 calc_hauptroutine_calc_deco();
+ − 2390 }
+ − 2391 // build_debug_output();
+ − 2392 break;
+ − 2393 }
+ − 2394 calc_ascenttime();
+ − 2395 check_post_dbg();
+ − 2396 }
+ − 2397
+ − 2398 void calc_hauptroutine_data_input(void)
+ − 2399 {
+ − 2400 pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ − 2401 pres_surface = (float)int_I_pres_surface / 1000.0;
+ − 2402
+ − 2403 N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ − 2404 He_ratio = (float)char_I_He_ratio / 100.0;;
+ − 2405 deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ − 2406 deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
60
+ − 2407 deco_N2_ratio2 = (float)char_I_deco_N2_ratio2 / 100.0;
+ − 2408 deco_He_ratio2 = (float)char_I_deco_He_ratio2 / 100.0;
+ − 2409 deco_N2_ratio3 = (float)char_I_deco_N2_ratio3 / 100.0;
+ − 2410 deco_He_ratio3 = (float)char_I_deco_He_ratio3 / 100.0;
+ − 2411 deco_N2_ratio4 = (float)char_I_deco_N2_ratio4 / 100.0;
+ − 2412 deco_He_ratio4 = (float)char_I_deco_He_ratio4 / 100.0;
+ − 2413 deco_N2_ratio5 = (float)char_I_deco_N2_ratio5 / 100.0;
+ − 2414 deco_He_ratio5 = (float)char_I_deco_He_ratio5 / 100.0;
0
+ − 2415 float_deco_distance = (float)char_I_deco_distance / 100.0;
60
+ − 2416
+ − 2417 // ____________________________________________________
+ − 2418 //
+ − 2419 // _____________ G A S _ C H A N G E S ________________
+ − 2420 // ____________________________________________________
+ − 2421
+ − 2422 int_temp = (int_I_pres_respiration - int_I_pres_surface) + MBAR_REACH_GASCHANGE_AUTO_CHANGE_OFF;
+ − 2423
+ − 2424 deco_gas_change = 0;
+ − 2425 deco_gas_change2 = 0;
+ − 2426 deco_gas_change3 = 0;
+ − 2427 deco_gas_change4 = 0;
+ − 2428 deco_gas_change5 = 0;
+ − 2429
0
+ − 2430 if(char_I_deco_gas_change)
+ − 2431 {
60
+ − 2432 int_temp2 = ((int)char_I_deco_gas_change) * 100;
+ − 2433 if(int_temp > int_temp2)
+ − 2434 {
+ − 2435 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+ − 2436 deco_gas_change += float_deco_distance;
+ − 2437 }
+ − 2438 }
+ − 2439 if(char_I_deco_gas_change2)
+ − 2440 {
+ − 2441 int_temp2 = ((int)char_I_deco_gas_change2) * 100;
+ − 2442 if(int_temp > int_temp2)
+ − 2443 {
+ − 2444 deco_gas_change2 = (float)char_I_deco_gas_change2 / 9.995 + pres_surface;
+ − 2445 deco_gas_change2 += float_deco_distance;
+ − 2446 }
0
+ − 2447 }
60
+ − 2448 if(char_I_deco_gas_change3)
+ − 2449 {
+ − 2450 int_temp2 = ((int)char_I_deco_gas_change3) * 100;
+ − 2451 if(int_temp > int_temp2)
+ − 2452 {
+ − 2453 deco_gas_change3 = (float)char_I_deco_gas_change3 / 9.995 + pres_surface;
+ − 2454 deco_gas_change3 += float_deco_distance;
+ − 2455 }
+ − 2456 }
+ − 2457 if(char_I_deco_gas_change4)
+ − 2458 {
+ − 2459 int_temp2 = ((int)char_I_deco_gas_change4) * 100;
+ − 2460 if(int_temp > int_temp2)
+ − 2461 {
+ − 2462 deco_gas_change4 = (float)char_I_deco_gas_change4 / 9.995 + pres_surface;
+ − 2463 deco_gas_change4 += float_deco_distance;
+ − 2464 }
+ − 2465 }
+ − 2466 if(char_I_deco_gas_change5)
+ − 2467 {
+ − 2468 int_temp2 = ((int)char_I_deco_gas_change5) * 100;
+ − 2469 if(int_temp > int_temp2)
+ − 2470 {
+ − 2471 deco_gas_change5 = (float)char_I_deco_gas_change5 / 9.995 + pres_surface;
+ − 2472 deco_gas_change5 += float_deco_distance;
+ − 2473 }
+ − 2474 }
+ − 2475
0
+ − 2476 const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ − 2477 deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ − 2478 deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ − 2479 deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ − 2480 float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ − 2481 float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ − 2482 GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ − 2483 GF_high = (float)char_I_GF_High_percentage / 100.0;
+ − 2484 GF_delta = GF_high - GF_low;
+ − 2485
+ − 2486 temp2 = (pres_respiration - pres_surface) / 0.29985;
+ − 2487 int_temp = (int)(temp2);
+ − 2488 if (int_temp < 0)
+ − 2489 int_temp = 0;
+ − 2490 if (int_temp > 255)
+ − 2491 int_temp = 255;
+ − 2492 char_O_actual_pointer = int_temp;
+ − 2493
+ − 2494 temp_depth_last_deco = (int)char_I_depth_last_deco;
+ − 2495 }
+ − 2496
+ − 2497 void calc_hauptroutine_update_tissues(void)
+ − 2498 {
+ − 2499 int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ − 2500 if (char_I_const_ppO2 == 0) // new in v.101
+ − 2501 pres_diluent = pres_respiration; // new in v.101
+ − 2502 else // new in v.101
+ − 2503 pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio)); // new in v.101
+ − 2504 if (pres_diluent > pres_respiration) // new in v.101
+ − 2505 pres_diluent = pres_respiration; // new in v.101
+ − 2506 if (pres_diluent > 0.0627) // new in v.101
+ − 2507 {
+ − 2508 temp_atem = N2_ratio * (pres_diluent - 0.0627); // changed in v.101
+ − 2509 temp2_atem = He_ratio * (pres_diluent - 0.0627); // changed in v.101
+ − 2510 char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ − 2511 }
+ − 2512 else // new in v.101
+ − 2513 {
+ − 2514 temp_atem = 0.0; // new in v.101
+ − 2515 temp2_atem = 0.0; // new in v.101
+ − 2516 char_O_diluent = 0;
+ − 2517 }
+ − 2518 temp_surface = pres_surface;
60
+ − 2519
+ − 2520 if(!char_I_step_is_1min)
+ − 2521 calc_tissue();
+ − 2522 else
+ − 2523 calc_tissue_step_1_min();
+ − 2524
0
+ − 2525 int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+ − 2526 int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ − 2527 if (char_I_deco_model == 1)
+ − 2528 {
+ − 2529 temp1 = temp1 * GF_high;
+ − 2530 }
+ − 2531 else
+ − 2532 {
+ − 2533 temp1 = temp_surface;
+ − 2534 }
+ − 2535 if (pres_gtissue_limit > temp1 && char_O_deco_status == 0) // if guiding tissue can not be exposed to surface pressure immediately
+ − 2536 {
+ − 2537 char_O_nullzeit = 0; // deco necessary
+ − 2538 char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ − 2539 }
+ − 2540 } // calc_hauptroutine_update_tissues
+ − 2541 void calc_hauptroutine_calc_deco(void)
+ − 2542 {
+ − 2543 do
+ − 2544 {
+ − 2545 int_temp_decostatus = 0;
+ − 2546 calc_nextdecodepth_GF();
+ − 2547 if (temp_depth_limit > 0)
+ − 2548 {
60
+ − 2549 calc_N2_ratio = N2_ratio;
+ − 2550 calc_He_ratio = He_ratio;
+ − 2551
+ − 2552 if (char_I_const_ppO2 == 0) // new in v.101
0
+ − 2553 {
+ − 2554 deco_diluent = temp_deco; // new in v.101
60
+ − 2555
+ − 2556 if(deco_gas_change && (temp_deco < deco_gas_change))
+ − 2557 {
+ − 2558 calc_N2_ratio = deco_N2_ratio;
+ − 2559 calc_He_ratio = deco_He_ratio;
+ − 2560 }
+ − 2561 if(deco_gas_change2 && (temp_deco < deco_gas_change2))
+ − 2562 {
+ − 2563 calc_N2_ratio = deco_N2_ratio2;
+ − 2564 calc_He_ratio = deco_He_ratio2;
+ − 2565 }
+ − 2566 if(deco_gas_change3 && (temp_deco < deco_gas_change3))
+ − 2567 {
+ − 2568 calc_N2_ratio = deco_N2_ratio3;
+ − 2569 calc_He_ratio = deco_He_ratio3;
+ − 2570 }
+ − 2571 if(deco_gas_change4 && (temp_deco < deco_gas_change4))
+ − 2572 {
+ − 2573 calc_N2_ratio = deco_N2_ratio4;
+ − 2574 calc_He_ratio = deco_He_ratio4;
+ − 2575 }
+ − 2576 if(deco_gas_change5 && (temp_deco < deco_gas_change5))
+ − 2577 {
+ − 2578 calc_N2_ratio = deco_N2_ratio5;
+ − 2579 calc_He_ratio = deco_He_ratio5;
+ − 2580 }
0
+ − 2581 }
+ − 2582 else // new in v.101
+ − 2583 {
+ − 2584 if (temp_deco > deco_ppO2_change)
+ − 2585 {
+ − 2586 deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio)); // new in v.101
+ − 2587 }
+ − 2588 else
+ − 2589 {
+ − 2590 deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio)); // new in v.101
+ − 2591 }
+ − 2592 }
+ − 2593 if (deco_diluent > temp_deco) // new in v.101
+ − 2594 deco_diluent = temp_deco; // new in v.101
+ − 2595 if (deco_diluent > 0.0627) // new in v.101
+ − 2596 {
+ − 2597 temp_atem = calc_N2_ratio * (deco_diluent - 0.0627); // changed in v.101
+ − 2598 temp2_atem = calc_He_ratio * (deco_diluent - 0.0627); // changed in v.101
+ − 2599 }
+ − 2600 else // new in v.101
+ − 2601 {
+ − 2602 temp_atem = 0.0; // new in v.101
+ − 2603 temp2_atem = 0.0; // new in v.101
+ − 2604 }
+ − 2605 sim_tissue_1min();
+ − 2606 update_internal_deco_table_GF();
+ − 2607 temp_decotime = 1;
+ − 2608 update_decoarray();
+ − 2609 char_O_deco_status = char_O_deco_status + 1;
+ − 2610 if (char_O_deco_status < 16)
+ − 2611 int_temp_decostatus = 1;
+ − 2612 }
+ − 2613 else // if (temp_depth_limit > 0)
+ − 2614 {
+ − 2615 char_O_deco_status = 0;
+ − 2616 }
+ − 2617 } while (int_temp_decostatus == 1);
+ − 2618 if (char_O_deco_status > 15)
+ − 2619 {
+ − 2620 char_O_deco_status = 1;
+ − 2621 }
+ − 2622 else
+ − 2623 {
+ − 2624 copy_deco_table_GF();
+ − 2625 char_O_deco_status = 0;
+ − 2626 }
+ − 2627 }
+ − 2628
+ − 2629 void calc_hauptroutine_calc_ascend_to_deco(void)
+ − 2630 {
+ − 2631 update_startvalues();
+ − 2632 char_O_deco_status = 0;
+ − 2633 temp_deco = pres_respiration;
+ − 2634 lock_GF_depth_list = 1; // new in v.102
+ − 2635 do // go up to first deco
+ − 2636 {
+ − 2637 int_temp_decostatus = 0;
+ − 2638 temp_deco = temp_deco - 1.0;
+ − 2639 if ( char_I_deco_model == 1) // new in v.102 , 4 = deep stops
+ − 2640 temp_limit = temp_pres_gtissue_limit_GF_low;
+ − 2641 else
+ − 2642 temp_limit = temp_pres_gtissue_limit;
+ − 2643 if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) // changes in v.102
+ − 2644 {
+ − 2645 lock_GF_depth_list = 0; // new in v.102, distance to first stop > 10 mtr.
+ − 2646 output[6] = 0;
60
+ − 2647 temp_deco += 0.5;
+ − 2648
+ − 2649 calc_N2_ratio = N2_ratio;
+ − 2650 calc_He_ratio = He_ratio;
+ − 2651
+ − 2652 if (char_I_const_ppO2 == 0) // new in v.101 // calculate at half of the ascent
0
+ − 2653 {
60
+ − 2654 deco_diluent = temp_deco; // new in v.101
+ − 2655
+ − 2656 if(deco_gas_change && (temp_deco < deco_gas_change))
+ − 2657 {
0
+ − 2658 calc_N2_ratio = deco_N2_ratio;
+ − 2659 calc_He_ratio = deco_He_ratio;
+ − 2660 }
60
+ − 2661 if(deco_gas_change2 && (temp_deco < deco_gas_change2))
+ − 2662 {
+ − 2663 calc_N2_ratio = deco_N2_ratio2;
+ − 2664 calc_He_ratio = deco_He_ratio2;
+ − 2665 }
+ − 2666 if(deco_gas_change3 && (temp_deco < deco_gas_change3))
+ − 2667 {
+ − 2668 calc_N2_ratio = deco_N2_ratio3;
+ − 2669 calc_He_ratio = deco_He_ratio3;
+ − 2670 }
+ − 2671 if(deco_gas_change4 && (temp_deco < deco_gas_change4))
+ − 2672 {
+ − 2673 calc_N2_ratio = deco_N2_ratio4;
+ − 2674 calc_He_ratio = deco_He_ratio4;
+ − 2675 }
+ − 2676 if(deco_gas_change5 && (temp_deco < deco_gas_change5))
+ − 2677 {
+ − 2678 calc_N2_ratio = deco_N2_ratio5;
+ − 2679 calc_He_ratio = deco_He_ratio5;
+ − 2680 }
0
+ − 2681 }
+ − 2682 else // new in v.101
+ − 2683 {
60
+ − 2684 if (temp_deco > deco_ppO2_change)
+ − 2685 deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio)); // new in v.101 // calculate at half of the ascent
0
+ − 2686 else
60
+ − 2687 deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio)); // new in v.101 // calculate at half of the ascent
+ − 2688 if (deco_diluent > (temp_deco)) // new in v.101
+ − 2689 deco_diluent = temp_deco; // new in v.101 // calculate at half of the ascent
0
+ − 2690 }
60
+ − 2691 temp_deco -= 0.5;
0
+ − 2692 if (deco_diluent > 0.0627) // new in v.101
+ − 2693 {
+ − 2694 temp_atem = calc_N2_ratio * (deco_diluent - 0.0627); // changed in v.101
+ − 2695 temp2_atem = calc_He_ratio * (deco_diluent - 0.0627); // changed in v.101
+ − 2696 }
+ − 2697 else // new in v.101
+ − 2698 {
+ − 2699 temp_atem = 0.0; // new in v.101
+ − 2700 temp2_atem = 0.0; // new in v.101
+ − 2701 }
+ − 2702 sim_tissue_1min();
+ − 2703 char_O_deco_status = char_O_deco_status + 1;
+ − 2704 if (char_O_deco_status < 16) // 16 is the limit of calculations for one time slot
+ − 2705 int_temp_decostatus = 1;
+ − 2706 }
+ − 2707 } while (int_temp_decostatus == 1);
+ − 2708 } // calc_hauptroutine_calc_ascend_to_deco
+ − 2709
+ − 2710 // --------------
+ − 2711 // calc_tissue //
+ − 2712 // --------------
+ − 2713 // optimized in v.101
+ − 2714
+ − 2715 void calc_tissue(void)
+ − 2716 {
+ − 2717 _asm
+ − 2718 lfsr 1, 0x300
+ − 2719 movlw 0x01
+ − 2720 movwf TBLPTRU,0
+ − 2721 _endasm
+ − 2722
+ − 2723 char_O_gtissue_no = 255;
+ − 2724 pres_gtissue_limit = 0.0;
+ − 2725
+ − 2726 for (ci=0;ci<16;ci++)
+ − 2727 {
+ − 2728 _asm
+ − 2729 movlw 0x02
+ − 2730 movwf TBLPTRH,0
+ − 2731 movlb 4 // fuer ci
+ − 2732 movf ci,0,1
+ − 2733 addwf ci,0,1
+ − 2734 addwf ci,0,1
+ − 2735 addwf ci,0,1
+ − 2736 movwf TBLPTRL,0
+ − 2737 TBLRDPOSTINC
+ − 2738 movff TABLAT,var_e2secs+1 // the order is confussing
+ − 2739 TBLRDPOSTINC
+ − 2740 movff TABLAT,var_e2secs // low byte first, high afterwards
+ − 2741 TBLRDPOSTINC
+ − 2742 movff TABLAT,var_e2secs+3
+ − 2743 TBLRD
+ − 2744 movff TABLAT,var_e2secs+2
+ − 2745 addlw 0x40
+ − 2746 movwf TBLPTRL,0
+ − 2747 TBLRDPOSTINC
+ − 2748 movff TABLAT,var2_e2secs+1
+ − 2749 TBLRDPOSTINC
+ − 2750 movff TABLAT,var2_e2secs
+ − 2751 TBLRDPOSTINC
+ − 2752 movff TABLAT,var2_e2secs+3
+ − 2753 TBLRD
+ − 2754 movff TABLAT,var2_e2secs+2
+ − 2755 addlw 0x40
+ − 2756 movwf TBLPTRL,0
+ − 2757 TBLRDPOSTINC
+ − 2758 movff TABLAT,var_a+1
+ − 2759 TBLRDPOSTINC
+ − 2760 movff TABLAT,var_a
+ − 2761 TBLRDPOSTINC
+ − 2762 movff TABLAT,var_a+3
+ − 2763 TBLRD
+ − 2764 movff TABLAT,var_a+2
+ − 2765 addlw 0x40
+ − 2766 movwf TBLPTRL,0
+ − 2767 TBLRDPOSTINC
+ − 2768 movff TABLAT,var2_a+1
+ − 2769 TBLRDPOSTINC
+ − 2770 movff TABLAT,var2_a
+ − 2771 TBLRDPOSTINC
+ − 2772 movff TABLAT,var2_a+3
+ − 2773 TBLRD
+ − 2774 movff TABLAT,var2_a+2
+ − 2775 addlw 0x40
+ − 2776 movwf TBLPTRL,0
+ − 2777 incf TBLPTRH,1,0
+ − 2778 TBLRDPOSTINC
+ − 2779 movff TABLAT,var_b+1
+ − 2780 TBLRDPOSTINC
+ − 2781 movff TABLAT,var_b
+ − 2782 TBLRDPOSTINC
+ − 2783 movff TABLAT,var_b+3
+ − 2784 TBLRD
+ − 2785 movff TABLAT,var_b+2
+ − 2786 addlw 0x40
+ − 2787 movwf TBLPTRL,0
+ − 2788 TBLRDPOSTINC
+ − 2789 movff TABLAT,var2_b+1
+ − 2790 TBLRDPOSTINC
+ − 2791 movff TABLAT,var2_b
+ − 2792 TBLRDPOSTINC
+ − 2793 movff TABLAT,var2_b+3
+ − 2794 TBLRD
+ − 2795 movff TABLAT,var2_b+2
+ − 2796 _endasm
+ − 2797 // the start values are the previous end values // write new values in temp
+ − 2798
+ − 2799 if( (var_e2secs < 0.0000363)
+ − 2800 || (var_e2secs > 0.00577)
+ − 2801 || (var2_e2secs < 0.0000961)
+ − 2802 || (var2_e2secs > 0.150)
+ − 2803 || (var_a < 0.231)
+ − 2804 || (var_a > 1.27)
+ − 2805 || (var_b < 0.504)
+ − 2806 || (var_b > 0.966)
+ − 2807 || (var2_a < 0.510)
+ − 2808 || (var2_a > 1.75)
+ − 2809 || (var2_b < 0.423)
+ − 2810 || (var2_b > 0.927)
+ − 2811 )
+ − 2812 int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+ − 2813
+ − 2814 // N2
+ − 2815 temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ − 2816 temp_tissue_safety();
+ − 2817 pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+ − 2818
+ − 2819 // He
+ − 2820 temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ − 2821 temp_tissue_safety();
+ − 2822 pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+ − 2823
+ − 2824 temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ − 2825
+ − 2826 var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ − 2827 var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ − 2828 pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ − 2829 if (pres_tissue_limit[ci] < 0)
+ − 2830 pres_tissue_limit[ci] = 0;
+ − 2831 if (pres_tissue_limit[ci] > pres_gtissue_limit)
+ − 2832 {
+ − 2833 pres_gtissue_limit = pres_tissue_limit[ci];
+ − 2834 char_O_gtissue_no = ci;
+ − 2835 }//if
+ − 2836 } // for
+ − 2837 }//calc_tissue(void)
+ − 2838
+ − 2839 // ----------------
+ − 2840 // calc_nullzeit //
+ − 2841 // ----------------
+ − 2842 // calculates the remaining bottom time
+ − 2843
+ − 2844 // unchanged in v.101
+ − 2845
+ − 2846 void calc_nullzeit(void)
+ − 2847 {
+ − 2848 char_O_nullzeit = 0;
+ − 2849 int_temp = 1;
+ − 2850 do
+ − 2851 {
+ − 2852 backup_sim_pres_tissue();
+ − 2853 sim_tissue_10min();
+ − 2854 char_O_nullzeit = char_O_nullzeit + 10;
+ − 2855 int_temp = int_temp + 1;
+ − 2856 if (char_I_deco_model == 1)
+ − 2857 temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+ − 2858 else
+ − 2859 temp1 = temp_pres_gtissue_limit;
+ − 2860 if (temp1 > temp_surface) // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+ − 2861 int_temp = 255;
+ − 2862 } while (int_temp < 17);
+ − 2863 if (int_temp == 255)
+ − 2864 {
+ − 2865 restore_sim_pres_tissue();
+ − 2866 char_O_nullzeit = char_O_nullzeit - 10;
+ − 2867 } //if int_temp == 255]
+ − 2868 int_temp = 1;
+ − 2869 if (char_O_nullzeit < 60)
+ − 2870 {
+ − 2871 do
+ − 2872 {
+ − 2873 sim_tissue_1min();
+ − 2874 char_O_nullzeit = char_O_nullzeit + 1;
+ − 2875 int_temp = int_temp + 1; // new in v.102a
+ − 2876 if (char_I_deco_model == 1)
+ − 2877 temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+ − 2878 else
+ − 2879 temp1 = temp_pres_gtissue_limit;
+ − 2880 if (temp1 > temp_surface) // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+ − 2881 int_temp = 255;
+ − 2882 } while (int_temp < 10);
+ − 2883 if (int_temp == 255)
+ − 2884 char_O_nullzeit = char_O_nullzeit - 1;
+ − 2885 } // if char_O_nullzeit < 60
+ − 2886 } //calc_nullzeit
+ − 2887
+ − 2888 // -------------------------
+ − 2889 // backup_sim_pres_tissue //
+ − 2890 // -------------------------
+ − 2891 void backup_sim_pres_tissue(void)
+ − 2892 {
+ − 2893 for (x = 0;x<16;x++)
+ − 2894 {
+ − 2895 sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+ − 2896 sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+ − 2897 }
+ − 2898 } // backup_sim
+ − 2899
+ − 2900 // --------------------------
+ − 2901 // restore_sim_pres_tissue //
+ − 2902 // --------------------------
+ − 2903 void restore_sim_pres_tissue(void)
+ − 2904 {
+ − 2905 for (x = 0;x<16;x++)
+ − 2906 {
+ − 2907 sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+ − 2908 sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+ − 2909 }
+ − 2910 } // restore_sim
+ − 2911
+ − 2912 // ------------------
+ − 2913 // calc_ascenttime //
+ − 2914 // ------------------
+ − 2915
+ − 2916 void calc_ascenttime(void)
+ − 2917 {
+ − 2918 if (pres_respiration > pres_surface)
+ − 2919 {
+ − 2920 switch (char_O_deco_status)
+ − 2921 {
+ − 2922 case 2:
+ − 2923 char_O_ascenttime = 255;
+ − 2924 break;
+ − 2925 case 1:
+ − 2926 break;
+ − 2927 default:
+ − 2928 temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+ − 2929 if (temp1 < 0)
+ − 2930 temp1 = 0;
+ − 2931 if (temp1 > 255)
+ − 2932 temp1 = 255;
+ − 2933 char_O_ascenttime = (char)temp1;
+ − 2934
+ − 2935 for(ci=0;ci<7;ci++)
+ − 2936 {
+ − 2937 x = char_O_ascenttime + char_O_array_decotime[ci];
+ − 2938 if (x < char_O_ascenttime)
+ − 2939 char_O_ascenttime = 255;
+ − 2940 else
+ − 2941 char_O_ascenttime = x;
+ − 2942 }
+ − 2943 }
+ − 2944 }
+ − 2945 else
+ − 2946 char_O_ascenttime = 0;
+ − 2947 } // calc_ascenttime()
+ − 2948
+ − 2949
+ − 2950 // ---------------------
+ − 2951 // update_startvalues //
+ − 2952 // ---------------------
+ − 2953 // updated in v.102
+ − 2954
+ − 2955 void update_startvalues(void)
+ − 2956 {
+ − 2957 temp_pres_gtissue_limit = pres_gtissue_limit;
+ − 2958 temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+ − 2959 temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue; // negative number
+ − 2960 temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+ − 2961 temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+ − 2962 if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+ − 2963 temp_pres_gtissue_limit_GF_low_below_surface = 0;
+ − 2964
+ − 2965 temp_gtissue_no = char_O_gtissue_no;
+ − 2966 for (x = 0;x<16;x++)
+ − 2967 {
+ − 2968 sim_pres_tissue[x] = pres_tissue[x];
+ − 2969 sim_pres_tissue[x+16] = pres_tissue[x+16];
+ − 2970 sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+ − 2971 }
+ − 2972 } // update_startvalues
+ − 2973
+ − 2974
+ − 2975 // ------------------
+ − 2976 // sim_tissue_1min //
+ − 2977 // ------------------
+ − 2978 // optimized in v.101
+ − 2979
+ − 2980 void sim_tissue_1min(void)
+ − 2981 {
+ − 2982 temp_pres_gtissue_limit = 0.0;
+ − 2983 temp_gtissue_no = 255;
+ − 2984
+ − 2985 _asm
+ − 2986 lfsr 1, 0x300
+ − 2987 movlw 0x01
+ − 2988 movwf TBLPTRU,0
+ − 2989 _endasm
+ − 2990
+ − 2991
+ − 2992 for (ci=0;ci<16;ci++)
+ − 2993 {
+ − 2994 _asm
+ − 2995 movlw 0x02
+ − 2996 movwf TBLPTRH,0
+ − 2997 movlb 4 // fuer ci
+ − 2998 movf ci,0,1
+ − 2999 addwf ci,0,1
+ − 3000 addwf ci,0,1
+ − 3001 addwf ci,0,1
+ − 3002 addlw 0x80
+ − 3003 movwf TBLPTRL,0
+ − 3004 TBLRDPOSTINC
+ − 3005 movff TABLAT,var_a+1
+ − 3006 TBLRDPOSTINC
+ − 3007 movff TABLAT,var_a
+ − 3008 TBLRDPOSTINC
+ − 3009 movff TABLAT,var_a+3
+ − 3010 TBLRD
+ − 3011 movff TABLAT,var_a+2
+ − 3012 addlw 0x40
+ − 3013 movwf TBLPTRL,0
+ − 3014 TBLRDPOSTINC
+ − 3015 movff TABLAT,var2_a+1
+ − 3016 TBLRDPOSTINC
+ − 3017 movff TABLAT,var2_a
+ − 3018 TBLRDPOSTINC
+ − 3019 movff TABLAT,var2_a+3
+ − 3020 TBLRD
+ − 3021 movff TABLAT,var2_a+2
+ − 3022 addlw 0x40
+ − 3023 movwf TBLPTRL,0
+ − 3024 incf TBLPTRH,1,0
+ − 3025 TBLRDPOSTINC
+ − 3026 movff TABLAT,var_b+1
+ − 3027 TBLRDPOSTINC
+ − 3028 movff TABLAT,var_b
+ − 3029 TBLRDPOSTINC
+ − 3030 movff TABLAT,var_b+3
+ − 3031 TBLRD
+ − 3032 movff TABLAT,var_b+2
+ − 3033 addlw 0x40
+ − 3034 movwf TBLPTRL,0
+ − 3035 TBLRDPOSTINC
+ − 3036 movff TABLAT,var2_b+1
+ − 3037 TBLRDPOSTINC
+ − 3038 movff TABLAT,var2_b
+ − 3039 TBLRDPOSTINC
+ − 3040 movff TABLAT,var2_b+3
+ − 3041 TBLRD
+ − 3042 movff TABLAT,var2_b+2
+ − 3043 addlw 0xC0
+ − 3044 movwf TBLPTRL,0
+ − 3045 incf TBLPTRH,1,0
+ − 3046 TBLRDPOSTINC
+ − 3047 movff TABLAT,var_e1min+1
+ − 3048 TBLRDPOSTINC
+ − 3049 movff TABLAT,var_e1min
+ − 3050 TBLRDPOSTINC
+ − 3051 movff TABLAT,var_e1min+3
+ − 3052 TBLRD
+ − 3053 movff TABLAT,var_e1min+2
+ − 3054 addlw 0x40
+ − 3055 movwf TBLPTRL,0
+ − 3056 TBLRDPOSTINC
+ − 3057 movff TABLAT,var2_e1min+1
+ − 3058 TBLRDPOSTINC
+ − 3059 movff TABLAT,var2_e1min
+ − 3060 TBLRDPOSTINC
+ − 3061 movff TABLAT,var2_e1min+3
+ − 3062 TBLRD
+ − 3063 movff TABLAT,var2_e1min+2
+ − 3064 _endasm
+ − 3065 // N2
+ − 3066 temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ − 3067 temp_tissue_safety();
+ − 3068 sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+ − 3069 // He
+ − 3070 temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ − 3071 temp_tissue_safety();
+ − 3072 sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+ − 3073 // pressure limit
+ − 3074 temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ − 3075 var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ − 3076 var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ − 3077 sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ − 3078
+ − 3079 if (sim_pres_tissue_limit[ci] < 0)
+ − 3080 sim_pres_tissue_limit[ci] = 0;
+ − 3081 if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+ − 3082 {
+ − 3083 temp_pres_gtissue = temp_tissue;
+ − 3084 temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+ − 3085 temp_gtissue_no = ci;
+ − 3086 }
+ − 3087 } // for
+ − 3088 temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+ − 3089 temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+ − 3090 temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+ − 3091 if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+ − 3092 temp_pres_gtissue_limit_GF_low_below_surface = 0;
+ − 3093 } //sim_tissue_1min()
+ − 3094
+ − 3095 //--------------------
+ − 3096 // sim_tissue_10min //
+ − 3097 //--------------------
+ − 3098
+ − 3099 // Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+ − 3100 // is identical to sim_tissue_1min routine except for the different load of those variables
+ − 3101
+ − 3102 // optimized in v.101
+ − 3103
+ − 3104 void sim_tissue_10min(void)
+ − 3105 {
+ − 3106 temp_pres_gtissue_limit = 0.0;
+ − 3107 temp_gtissue_no = 255;
+ − 3108
+ − 3109 _asm
+ − 3110 lfsr 1, 0x300
+ − 3111 movlw 0x01
+ − 3112 movwf TBLPTRU,0
+ − 3113 _endasm
+ − 3114
+ − 3115 for (ci=0;ci<16;ci++)
+ − 3116 {
+ − 3117 _asm
+ − 3118 movlw 0x02
+ − 3119 movwf TBLPTRH,0
+ − 3120 movlb 4 // fuer ci
+ − 3121 movf ci,0,1
+ − 3122 addwf ci,0,1
+ − 3123 addwf ci,0,1
+ − 3124 addwf ci,0,1
+ − 3125 addlw 0x80
+ − 3126 movwf TBLPTRL,0
+ − 3127 TBLRDPOSTINC
+ − 3128 movff TABLAT,var_a+1
+ − 3129 TBLRDPOSTINC
+ − 3130 movff TABLAT,var_a
+ − 3131 TBLRDPOSTINC
+ − 3132 movff TABLAT,var_a+3
+ − 3133 TBLRD
+ − 3134 movff TABLAT,var_a+2
+ − 3135 addlw 0x40
+ − 3136 movwf TBLPTRL,0
+ − 3137 TBLRDPOSTINC
+ − 3138 movff TABLAT,var2_a+1
+ − 3139 TBLRDPOSTINC
+ − 3140 movff TABLAT,var2_a
+ − 3141 TBLRDPOSTINC
+ − 3142 movff TABLAT,var2_a+3
+ − 3143 TBLRD
+ − 3144 movff TABLAT,var2_a+2
+ − 3145 addlw 0x40
+ − 3146 movwf TBLPTRL,0
+ − 3147 incf TBLPTRH,1,0
+ − 3148 TBLRDPOSTINC
+ − 3149 movff TABLAT,var_b+1
+ − 3150 TBLRDPOSTINC
+ − 3151 movff TABLAT,var_b
+ − 3152 TBLRDPOSTINC
+ − 3153 movff TABLAT,var_b+3
+ − 3154 TBLRD
+ − 3155 movff TABLAT,var_b+2
+ − 3156 addlw 0x40
+ − 3157 movwf TBLPTRL,0
+ − 3158 TBLRDPOSTINC
+ − 3159 movff TABLAT,var2_b+1
+ − 3160 TBLRDPOSTINC
+ − 3161 movff TABLAT,var2_b
+ − 3162 TBLRDPOSTINC
+ − 3163 movff TABLAT,var2_b+3
+ − 3164 TBLRD
+ − 3165 movff TABLAT,var2_b+2
+ − 3166 addlw 0xC0 // different to 1 min
+ − 3167 movwf TBLPTRL,0
+ − 3168 incf TBLPTRH,1,0
+ − 3169 incf TBLPTRH,1,0 // different to 1 min
+ − 3170 TBLRDPOSTINC
+ − 3171 movff TABLAT,var_e1min+1
+ − 3172 TBLRDPOSTINC
+ − 3173 movff TABLAT,var_e1min
+ − 3174 TBLRDPOSTINC
+ − 3175 movff TABLAT,var_e1min+3
+ − 3176 TBLRD
+ − 3177 movff TABLAT,var_e1min+2
+ − 3178 addlw 0x40
+ − 3179 movwf TBLPTRL,0
+ − 3180 //incf TBLPTRH,1,0 // different to 1 min
+ − 3181 TBLRDPOSTINC
+ − 3182 movff TABLAT,var2_e1min+1
+ − 3183 TBLRDPOSTINC
+ − 3184 movff TABLAT,var2_e1min
+ − 3185 TBLRDPOSTINC
+ − 3186 movff TABLAT,var2_e1min+3
+ − 3187 TBLRD
+ − 3188 movff TABLAT,var2_e1min+2
+ − 3189 _endasm
+ − 3190 // N2
+ − 3191 temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ − 3192 temp_tissue_safety();
+ − 3193 sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+ − 3194 // He
+ − 3195 temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ − 3196 temp_tissue_safety();
+ − 3197 sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+ − 3198 // pressure limit
+ − 3199 temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ − 3200 var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ − 3201 var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ − 3202
+ − 3203 sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ − 3204 if (sim_pres_tissue_limit[ci] < 0)
+ − 3205 sim_pres_tissue_limit[ci] = 0;
+ − 3206 if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+ − 3207 {
+ − 3208 temp_pres_gtissue = temp_tissue;
+ − 3209 temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+ − 3210 temp_gtissue_no = ci;
+ − 3211 }
+ − 3212 } // for
+ − 3213 temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue; // negative number
+ − 3214 temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+ − 3215 temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+ − 3216 if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+ − 3217 temp_pres_gtissue_limit_GF_low_below_surface = 0;
+ − 3218 } //sim_tissue_10min()
+ − 3219
+ − 3220
+ − 3221 // ------------------
+ − 3222 // clear_decoarray //
+ − 3223 // ------------------
+ − 3224 // unchanged in v.101
+ − 3225
+ − 3226 void clear_decoarray(void)
+ − 3227 {
+ − 3228 char_O_array_decodepth[0] = 0;
+ − 3229 char_O_array_decodepth[1] = 0;
+ − 3230 char_O_array_decodepth[2] = 0;
+ − 3231 char_O_array_decodepth[3] = 0;
+ − 3232 char_O_array_decodepth[4] = 0;
+ − 3233 char_O_array_decodepth[5] = 0;
+ − 3234 char_O_array_decotime[0] = 0;
+ − 3235 char_O_array_decotime[1] = 0;
+ − 3236 char_O_array_decotime[2] = 0;
+ − 3237 char_O_array_decotime[3] = 0;
+ − 3238 char_O_array_decotime[4] = 0;
+ − 3239 char_O_array_decotime[5] = 0;
+ − 3240 char_O_array_decotime[6] = 0;
+ − 3241 } // clear_decoarray
+ − 3242
+ − 3243
+ − 3244 // -------------------
+ − 3245 // update_decoarray //
+ − 3246 // -------------------
+ − 3247 // unchanged in v.101
+ − 3248
+ − 3249 void update_decoarray()
+ − 3250 {
+ − 3251 x = 0;
+ − 3252 do
+ − 3253 {
+ − 3254 if (char_O_array_decodepth[x] == temp_depth_limit)
+ − 3255 {
+ − 3256 int_temp = char_O_array_decotime[x] + temp_decotime;
+ − 3257 if (int_temp < 0)
+ − 3258 int_temp = 0;
+ − 3259 if (int_temp > 240)
+ − 3260 int_temp = 240;
+ − 3261 char_O_array_decotime[x] = int_temp;
+ − 3262 x = 10; // exit
+ − 3263 } // if
+ − 3264 else
+ − 3265 {
+ − 3266 if (char_O_array_decodepth[x] == 0)
+ − 3267 {
+ − 3268 if (temp_depth_limit > 255)
+ − 3269 char_O_array_decodepth[x] = 255;
+ − 3270 else
+ − 3271 char_O_array_decodepth[x] = (char)temp_depth_limit;
+ − 3272 int_temp = char_O_array_decotime[x] + temp_decotime;
+ − 3273 if (int_temp > 240)
+ − 3274 char_O_array_decotime[x] = 240;
+ − 3275 else
+ − 3276 char_O_array_decotime[x] = (char)int_temp;
+ − 3277 x = 10; // exit
+ − 3278 } // if
+ − 3279 else
+ − 3280 x++;
+ − 3281 } // else
+ − 3282 } while (x<6);
+ − 3283 if (x == 6)
+ − 3284 {
+ − 3285 int_temp = char_O_array_decotime[6] + temp_decotime;
+ − 3286 if (int_temp > 220)
+ − 3287 char_O_array_decotime[6] = 220;
+ − 3288 else
+ − 3289 char_O_array_decotime[6] = (char)int_temp;
+ − 3290 } // if x == 6
+ − 3291 } // update_decoarray
+ − 3292
+ − 3293
+ − 3294 // -----------------------
+ − 3295 // calc_gradient_factor //
+ − 3296 // -----------------------
+ − 3297 // optimized in v.101 (var_a)
+ − 3298 // new code in v.102
+ − 3299
+ − 3300 void calc_gradient_factor(void)
+ − 3301 {
+ − 3302 // tissue > respiration (entsaettigungsvorgang)
+ − 3303 // gradient ist wieviel prozent an limit mit basis tissue
+ − 3304 // dh. 0% = respiration == tissue
+ − 3305 // dh. 100% = respiration == limit
+ − 3306 temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+ − 3307 temp1 = temp_tissue - pres_respiration;
+ − 3308 temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no]; // changed in v.102
+ − 3309 temp2 = temp1/temp2;
+ − 3310 temp2 = temp2 * 100; // displayed in percent
+ − 3311 if (temp2 < 0)
+ − 3312 temp2 = 0;
+ − 3313 if (temp2 > 255)
+ − 3314 temp2 = 255;
+ − 3315 if (temp1 < 0)
+ − 3316 char_O_gradient_factor = 0;
+ − 3317 else
+ − 3318 char_O_gradient_factor = (char)temp2;
+ − 3319
+ − 3320 temp3 = temp2;
+ − 3321
+ − 3322 if (char_I_deco_model == 1) // calculate relative gradient factor
+ − 3323 {
+ − 3324 temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+ − 3325 temp2 = pres_respiration - pres_surface;
+ − 3326 if (temp2 <= 0)
+ − 3327 temp1 = GF_high;
+ − 3328 else
+ − 3329 if (temp2 >= temp1)
+ − 3330 temp1 = GF_low;
+ − 3331 else
+ − 3332 temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+ − 3333 if (temp_depth_GF_low_meter == 0)
+ − 3334 temp1 = GF_high;
+ − 3335 temp2 = temp3 / temp1; // temp3 is already in percent
+ − 3336 if (temp2 < 0)
+ − 3337 temp2 = 0;
+ − 3338 if (temp2 > 255)
+ − 3339 temp2 = 255;
+ − 3340 char_O_relative_gradient_GF = (char)temp2;
+ − 3341 } // calc relative gradient factor
+ − 3342 else
+ − 3343 {
+ − 3344 char_O_relative_gradient_GF = char_O_gradient_factor;
+ − 3345 }
+ − 3346 } // calc_gradient
+ − 3347
+ − 3348 // ---------------------------
+ − 3349 // calc_gradient_array_only //
+ − 3350 // ---------------------------
+ − 3351 // optimized in v.101 (var_a)
+ − 3352 // new code in v.102
+ − 3353
+ − 3354 void calc_gradient_array_only()
+ − 3355 {
+ − 3356 pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ − 3357 for (ci=0;ci<16;ci++)
+ − 3358 {
+ − 3359 temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ − 3360 temp1 = temp_tissue - pres_respiration;
+ − 3361 temp2 = temp_tissue - pres_tissue_limit[ci];
+ − 3362 temp2 = temp1/temp2;
+ − 3363 temp2 = temp2 * 200; // because of output in (Double-)percentage
+ − 3364 if (temp2 < 0)
+ − 3365 temp2 = 0;
+ − 3366 if (temp2 > 255)
+ − 3367 temp2 = 255;
+ − 3368 if (temp1 < 0)
+ − 3369 char_O_array_gradient_weighted[ci] = 0;
+ − 3370 else
+ − 3371 char_O_array_gradient_weighted[ci] = (char)temp2;
+ − 3372 } // for
+ − 3373 } // calc_gradient_array_only
+ − 3374
+ − 3375
+ − 3376 // -------------------------
+ − 3377 // calc_desaturation_time //
+ − 3378 // -------------------------
+ − 3379 // FIXED N2_ratio
+ − 3380 // unchanged in v.101
+ − 3381
+ − 3382 void calc_desaturation_time(void)
+ − 3383 {
+ − 3384 _asm
+ − 3385 lfsr 1, 0x300
+ − 3386 movlw 0x01
+ − 3387 movwf TBLPTRU,0
+ − 3388 _endasm
+ − 3389 N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ − 3390 pres_surface = (float)int_I_pres_surface / 1000.0;
+ − 3391 temp_atem = N2_ratio * (pres_surface - 0.0627);
+ − 3392 int_O_desaturation_time = 0;
+ − 3393 float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101 (70,42%/100.=142)
+ − 3394
+ − 3395 for (ci=0;ci<16;ci++)
+ − 3396 {
+ − 3397 _asm
+ − 3398 movlw 0x04
+ − 3399 movwf TBLPTRH,0
+ − 3400 movlb 4 // fuer ci
+ − 3401 movf ci,0,1
+ − 3402 addwf ci,0,1
+ − 3403 addwf ci,0,1
+ − 3404 addwf ci,0,1
+ − 3405 addlw 0x80
+ − 3406 movwf TBLPTRL,0
+ − 3407 TBLRDPOSTINC
+ − 3408 movff TABLAT,var_halftimes+1
+ − 3409 TBLRDPOSTINC
+ − 3410 movff TABLAT,var_halftimes
+ − 3411 TBLRDPOSTINC
+ − 3412 movff TABLAT,var_halftimes+3
+ − 3413 TBLRD
+ − 3414 movff TABLAT,var_halftimes+2
+ − 3415 addlw 0x40
+ − 3416 movwf TBLPTRL,0
+ − 3417 TBLRDPOSTINC
+ − 3418 movff TABLAT,var2_halftimes+1
+ − 3419 TBLRDPOSTINC
+ − 3420 movff TABLAT,var2_halftimes
+ − 3421 TBLRDPOSTINC
+ − 3422 movff TABLAT,var2_halftimes+3
+ − 3423 TBLRD
+ − 3424 movff TABLAT,var2_halftimes+2
+ − 3425 _endasm
+ − 3426
+ − 3427 // saturation_time (for flight) and N2_saturation in multiples of halftime
+ − 3428 // version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+ − 3429 // new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+ − 3430 // changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+ − 3431 // N2
+ − 3432 temp1 = 1.05 * temp_atem;
+ − 3433 temp1 = temp1 - pres_tissue[ci];
+ − 3434 temp2 = temp_atem - pres_tissue[ci];
+ − 3435 if (temp2 >= 0.0)
+ − 3436 {
+ − 3437 temp1 = 0;
+ − 3438 temp2 = 0;
+ − 3439 }
+ − 3440 else
+ − 3441 temp1 = temp1 / temp2;
+ − 3442 if (temp1 > 0.0)
+ − 3443 {
+ − 3444 temp1 = log(1.0 - temp1);
+ − 3445 temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+ − 3446 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+ − 3447 // minus because log is negative
+ − 3448 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
+ − 3449 }
+ − 3450 else
+ − 3451 {
+ − 3452 temp1 = 0;
+ − 3453 temp2 = 0;
+ − 3454 }
+ − 3455
+ − 3456 // He
+ − 3457 temp3 = 0.1 - pres_tissue[ci+16];
+ − 3458 if (temp3 >= 0.0)
+ − 3459 {
+ − 3460 temp3 = 0;
+ − 3461 temp4 = 0;
+ − 3462 }
+ − 3463 else
+ − 3464 temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+ − 3465 if (temp3 > 0.0)
+ − 3466 {
+ − 3467 temp3 = log(1.0 - temp3);
+ − 3468 temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+ − 3469 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+ − 3470 // minus because log is negative
+ − 3471 temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+ − 3472 }
+ − 3473 else
+ − 3474 {
+ − 3475 temp3 = 0;
+ − 3476 temp4 = 0;
+ − 3477 }
+ − 3478
+ − 3479 // saturation_time (for flight)
+ − 3480 if (temp4 > temp2)
+ − 3481 int_temp = (int)temp4;
+ − 3482 else
+ − 3483 int_temp = (int)temp2;
+ − 3484 if(int_temp > int_O_desaturation_time)
+ − 3485 int_O_desaturation_time = int_temp;
+ − 3486
+ − 3487 // N2 saturation in multiples of halftime for display purposes
+ − 3488 temp2 = temp1 * 20.0; // 0 = 1/8, 120 = 0, 249 = 8
+ − 3489 temp2 = temp2 + 80.0; // set center
+ − 3490 if (temp2 < 0.0)
+ − 3491 temp2 = 0.0;
+ − 3492 if (temp2 > 255.0)
+ − 3493 temp2 = 255.0;
+ − 3494 char_O_tissue_saturation[ci] = (char)temp2;
+ − 3495 // He saturation in multiples of halftime for display purposes
+ − 3496 temp4 = temp3 * 20.0; // 0 = 1/8, 120 = 0, 249 = 8
+ − 3497 temp4 = temp4 + 80.0; // set center
+ − 3498 if (temp4 < 0.0)
+ − 3499 temp4 = 0.0;
+ − 3500 if (temp4 > 255.0)
+ − 3501 temp4 = 255.0;
+ − 3502 char_O_tissue_saturation[ci+16] = (char)temp4;
+ − 3503 } // for
+ − 3504 } // calc_desaturation_time
+ − 3505
+ − 3506
+ − 3507 // --------------------------
+ − 3508 // calc_wo_deco_step_1_min //
+ − 3509 // --------------------------
+ − 3510 // FIXED N2 Ratio
+ − 3511 // optimized in v.101 (...saturation_multiplier)
+ − 3512 // desaturation slowed down to 70,42%
+ − 3513
+ − 3514 void calc_wo_deco_step_1_min(void)
+ − 3515 {
+ − 3516 if(flag_in_divemode)
+ − 3517 {
+ − 3518 flag_in_divemode = 0;
+ − 3519 set_dbg_end_of_dive();
+ − 3520 }
+ − 3521 _asm
+ − 3522 lfsr 1, 0x300
+ − 3523 _endasm
+ − 3524 N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ − 3525 pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ − 3526 pres_surface = (float)int_I_pres_surface / 1000.0;
+ − 3527 temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ − 3528 temp2_atem = 0.0;
+ − 3529 temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ − 3530 float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101 (70,42%/100.=142)
+ − 3531 float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ − 3532
+ − 3533 calc_tissue_step_1_min(); // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ − 3534 clear_decoarray();
+ − 3535 char_O_deco_status = 0;
+ − 3536 char_O_nullzeit = 0;
+ − 3537 char_O_ascenttime = 0;
+ − 3538 calc_gradient_factor();
+ − 3539
+ − 3540 } // calc_wo_deco_step_1_min(void)
+ − 3541
+ − 3542
+ − 3543 // -------------------------
+ − 3544 // calc_tissue_step_1_min //
+ − 3545 // -------------------------
+ − 3546 // optimized in v.101
+ − 3547
+ − 3548 void calc_tissue_step_1_min(void)
+ − 3549 {
+ − 3550 _asm
+ − 3551 lfsr 1, 0x300
+ − 3552 movlw 0x01
+ − 3553 movwf TBLPTRU,0
+ − 3554 _endasm
+ − 3555
+ − 3556 char_O_gtissue_no = 255;
+ − 3557 pres_gtissue_limit = 0.0;
+ − 3558
+ − 3559 for (ci=0;ci<16;ci++)
+ − 3560 {
+ − 3561 _asm
+ − 3562 movlw 0x02
+ − 3563 movwf TBLPTRH,0
+ − 3564 movlb 4 // fuer ci
+ − 3565 movf ci,0,1
+ − 3566 addwf ci,0,1
+ − 3567 addwf ci,0,1
+ − 3568 addwf ci,0,1
+ − 3569 addlw 0x80
+ − 3570 movwf TBLPTRL,0
+ − 3571 TBLRDPOSTINC
+ − 3572 movff TABLAT,var_a+1
+ − 3573 TBLRDPOSTINC
+ − 3574 movff TABLAT,var_a
+ − 3575 TBLRDPOSTINC
+ − 3576 movff TABLAT,var_a+3
+ − 3577 TBLRD
+ − 3578 movff TABLAT,var_a+2
+ − 3579 addlw 0x40
+ − 3580 movwf TBLPTRL,0
+ − 3581 TBLRDPOSTINC
+ − 3582 movff TABLAT,var2_a+1
+ − 3583 TBLRDPOSTINC
+ − 3584 movff TABLAT,var2_a
+ − 3585 TBLRDPOSTINC
+ − 3586 movff TABLAT,var2_a+3
+ − 3587 TBLRD
+ − 3588 movff TABLAT,var2_a+2
+ − 3589 addlw 0x40
+ − 3590 movwf TBLPTRL,0
+ − 3591 incf TBLPTRH,1,0
+ − 3592 TBLRDPOSTINC
+ − 3593 movff TABLAT,var_b+1
+ − 3594 TBLRDPOSTINC
+ − 3595 movff TABLAT,var_b
+ − 3596 TBLRDPOSTINC
+ − 3597 movff TABLAT,var_b+3
+ − 3598 TBLRD
+ − 3599 movff TABLAT,var_b+2
+ − 3600 addlw 0x40
+ − 3601 movwf TBLPTRL,0
+ − 3602 TBLRDPOSTINC
+ − 3603 movff TABLAT,var2_b+1
+ − 3604 TBLRDPOSTINC
+ − 3605 movff TABLAT,var2_b
+ − 3606 TBLRDPOSTINC
+ − 3607 movff TABLAT,var2_b+3
+ − 3608 TBLRD
+ − 3609 movff TABLAT,var2_b+2
+ − 3610 addlw 0xC0
+ − 3611 movwf TBLPTRL,0
+ − 3612 incf TBLPTRH,1,0
+ − 3613 TBLRDPOSTINC
+ − 3614 movff TABLAT,var_e1min+1
+ − 3615 TBLRDPOSTINC
+ − 3616 movff TABLAT,var_e1min
+ − 3617 TBLRDPOSTINC
+ − 3618 movff TABLAT,var_e1min+3
+ − 3619 TBLRD
+ − 3620 movff TABLAT,var_e1min+2
+ − 3621 addlw 0x40
+ − 3622 movwf TBLPTRL,0
+ − 3623 TBLRDPOSTINC
+ − 3624 movff TABLAT,var2_e1min+1
+ − 3625 TBLRDPOSTINC
+ − 3626 movff TABLAT,var2_e1min
+ − 3627 TBLRDPOSTINC
+ − 3628 movff TABLAT,var2_e1min+3
+ − 3629 TBLRD
+ − 3630 movff TABLAT,var2_e1min+2
+ − 3631 _endasm
+ − 3632
+ − 3633 // N2 1 min
+ − 3634 temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ − 3635 temp_tissue_safety();
+ − 3636 pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+ − 3637
+ − 3638 // He 1 min
+ − 3639 temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ − 3640 temp_tissue_safety();
+ − 3641 pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+ − 3642
+ − 3643 temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ − 3644 var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ − 3645 var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ − 3646 pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ − 3647 if (pres_tissue_limit[ci] < 0)
+ − 3648 pres_tissue_limit[ci] = 0;
+ − 3649 if (pres_tissue_limit[ci] > pres_gtissue_limit)
+ − 3650 {
+ − 3651 pres_gtissue_limit = pres_tissue_limit[ci];
+ − 3652 char_O_gtissue_no = ci;
+ − 3653 }//if
+ − 3654
60
+ − 3655 if(!char_I_step_is_1min)
+ − 3656 {
+ − 3657 // gradient factor array for graphical display
+ − 3658 // display range is 0 to 250! in steps of 5 for 1 pixel
+ − 3659 // the display is divided in 6 blocks
+ − 3660 // -> double the gradient 100% = 200
+ − 3661 // tissue > respiration (entsaettigungsvorgang)
+ − 3662 // gradient ist wieviel prozent an limit von tissue aus
+ − 3663 // dh. 0% = respiration == tissue
+ − 3664 // dh. 100% = respiration == limit
+ − 3665 temp1 = temp_tissue - pres_respiration;
+ − 3666 temp2 = temp_tissue - pres_tissue_limit[ci]; // changed in v.102
+ − 3667 temp2 = temp1/temp2;
+ − 3668 temp2 = temp2 * 200; // because of output in (Double-)percentage
+ − 3669 if (temp2 < 0)
+ − 3670 temp2 = 0;
+ − 3671 if (temp2 > 255)
+ − 3672 temp2 = 255;
+ − 3673 if (temp1 < 0)
+ − 3674 char_O_array_gradient_weighted[ci] = 0;
+ − 3675 else
+ − 3676 char_O_array_gradient_weighted[ci] = (char)temp2;
+ − 3677 }
0
+ − 3678 } // for
+ − 3679 } // calc wo deco 1min
+ − 3680
+ − 3681 #if 0
+ − 3682 // --------
+ − 3683 // debug //
+ − 3684 // --------
+ − 3685 void debug(void)
+ − 3686 {
+ − 3687 for (ci=0;ci<32;ci++)
+ − 3688 {
+ − 3689 int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+ − 3690 }
+ − 3691 } // void debug(void)
+ − 3692 #endif
+ − 3693
+ − 3694 // ----------
+ − 3695 // md hash //
+ − 3696 // ----------
+ − 3697 void hash(void)
+ − 3698 {
+ − 3699 // init
+ − 3700 for (md_i=0;md_i<16;md_i++)
+ − 3701 {
+ − 3702 md_state[md_i] = 0;
+ − 3703 md_cksum[md_i] = 0;
+ − 3704 } // for md_i 16
+ − 3705
+ − 3706 _asm
+ − 3707 movlw 0x01
+ − 3708 movwf TBLPTRU,0
+ − 3709 movlw 0x06
+ − 3710 movwf TBLPTRH,0
+ − 3711 movlw 0x00
+ − 3712 movwf TBLPTRL,0
60
+ − 3713 _endasm;
0
+ − 3714 for (md_i=0;md_i<127;md_i++)
+ − 3715 {
+ − 3716 _asm
+ − 3717 TBLRDPOSTINC
+ − 3718 movff TABLAT,md_temp
+ − 3719 _endasm
+ − 3720 md_pi_subst[md_i] = md_temp;
+ − 3721 } // for md_i 256
+ − 3722 _asm
+ − 3723 TBLRDPOSTINC
+ − 3724 movff TABLAT,md_temp
60
+ − 3725 _endasm;
0
+ − 3726 md_pi_subst[127] = md_temp;
+ − 3727 for (md_i=0;md_i<127;md_i++)
+ − 3728 {
+ − 3729 _asm
+ − 3730 TBLRDPOSTINC
+ − 3731 movff TABLAT,md_temp
+ − 3732 _endasm
+ − 3733 md_pi_subst[md_i+128] = md_temp;
+ − 3734 } // for md_i 256
+ − 3735 _asm
+ − 3736 TBLRD
+ − 3737 movff TABLAT,md_temp
+ − 3738 _endasm
+ − 3739 md_pi_subst[255] = md_temp;
+ − 3740
+ − 3741 _asm
+ − 3742 movlw 0x00
+ − 3743 movwf TBLPTRU,0
+ − 3744 movlw 0x00
+ − 3745 movwf TBLPTRH,0
+ − 3746 movlw 0x00
+ − 3747 movwf TBLPTRL,0
+ − 3748 _endasm
+ − 3749 // cycle buffers
+ − 3750 for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+ − 3751 {
+ − 3752 md_t = 0;
+ − 3753 for (md_i=0;md_i<16;md_i++)
+ − 3754 {
+ − 3755 if(md_pointer == 9)
+ − 3756 md_temp = md_cksum[md_i];
+ − 3757 else
+ − 3758 {
+ − 3759 _asm
+ − 3760 TBLRDPOSTINC
+ − 3761 movff TABLAT,md_temp
+ − 3762 _endasm
+ − 3763 } // else
+ − 3764 md_buffer[md_i] = md_temp;
+ − 3765 md_state[md_i+16] = md_buffer[md_i];
+ − 3766 md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ − 3767 } // for md_i 16
+ − 3768
+ − 3769 for (md_i=0;md_i<18;md_i++)
+ − 3770 {
+ − 3771 for (md_j=0;md_j<48;md_j++)
+ − 3772 {
+ − 3773 md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+ − 3774 md_t = md_state[md_j];
+ − 3775 } // for md_j 48
+ − 3776 md_t = (unsigned char)(md_t+1);
+ − 3777 } // for md_i 18
+ − 3778 md_t = md_cksum[15];
+ − 3779
+ − 3780 for (md_i=0;md_i<16;md_i++)
+ − 3781 {
+ − 3782 md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+ − 3783 md_t = md_cksum[md_i];
+ − 3784 } // for md_i 16
+ − 3785 } // for md_pointer
+ − 3786 } // void hash(void)
+ − 3787
+ − 3788 // ---------------------
+ − 3789 // clear_CNS_fraction //
+ − 3790 // ---------------------
+ − 3791 // new in v.101
+ − 3792
+ − 3793 void clear_CNS_fraction(void)
+ − 3794 {
+ − 3795 CNS_fraction = 0.0;
+ − 3796 char_O_CNS_fraction = 0;
+ − 3797 } // void clear_CNS_fraction(void)
+ − 3798
+ − 3799
+ − 3800 // --------------------
+ − 3801 // calc_CNS_fraction //
+ − 3802 // --------------------
+ − 3803 // new in v.101
+ − 3804 // optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+ − 3805
+ − 3806 // Input: char_I_actual_ppO2
+ − 3807 // Output: char_O_CNS_fraction
+ − 3808 // Uses and Updates: CNS_fraction
+ − 3809 // Uses: acutal_ppO2
+ − 3810
+ − 3811 void calc_CNS_fraction(void)
+ − 3812 {
+ − 3813 actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+ − 3814
+ − 3815 if (char_I_actual_ppO2 < 50)
+ − 3816 CNS_fraction = CNS_fraction;// no changes
+ − 3817 else if (char_I_actual_ppO2 < 60)
+ − 3818 CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ − 3819 else if (char_I_actual_ppO2 < 70)
+ − 3820 CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ − 3821 else if (char_I_actual_ppO2 < 80)
+ − 3822 CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ − 3823 else if (char_I_actual_ppO2 < 90)
+ − 3824 CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ − 3825 else if (char_I_actual_ppO2 < 110)
+ − 3826 CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ − 3827 else if (char_I_actual_ppO2 < 150)
+ − 3828 CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ − 3829 else if (char_I_actual_ppO2 < 160)
+ − 3830 CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ − 3831 else if (char_I_actual_ppO2 < 165)
+ − 3832 CNS_fraction = 0.000755 + CNS_fraction; // Arieli et all.(2002): Modeling pulmonary and CNS O2 toxicity... Formula (A1) based on value for 1.55 and c=20
+ − 3833 else if (char_I_actual_ppO2 < 170)
+ − 3834 CNS_fraction = 0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ − 3835 else if (char_I_actual_ppO2 < 175)
+ − 3836 CNS_fraction = 0.00136 + CNS_fraction;
+ − 3837 else if (char_I_actual_ppO2 < 180)
+ − 3838 CNS_fraction = 0.00180 + CNS_fraction;
+ − 3839 else if (char_I_actual_ppO2 < 185)
+ − 3840 CNS_fraction = 0.00237 + CNS_fraction;
+ − 3841 else if (char_I_actual_ppO2 < 190)
+ − 3842 CNS_fraction = 0.00310 + CNS_fraction;
+ − 3843 else if (char_I_actual_ppO2 < 195)
+ − 3844 CNS_fraction = 0.00401 + CNS_fraction;
+ − 3845 else if (char_I_actual_ppO2 < 200)
+ − 3846 CNS_fraction = 0.00517 + CNS_fraction;
+ − 3847 else if (char_I_actual_ppO2 < 230)
+ − 3848 CNS_fraction = 0.0209 + CNS_fraction;
+ − 3849 else
+ − 3850 CNS_fraction = 0.0482 + CNS_fraction; // value for 2.5
+ − 3851
+ − 3852 if (CNS_fraction > 2.5)
+ − 3853 CNS_fraction = 2.5;
+ − 3854 if (CNS_fraction < 0.0)
+ − 3855 CNS_fraction = 0.0;
+ − 3856 char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+ − 3857 } // void calc_CNS_fraction(void)
+ − 3858
+ − 3859 // --------------------------
+ − 3860 // calc_CNS_decrease_15min //
+ − 3861 // --------------------------
+ − 3862 // new in v.101
+ − 3863
+ − 3864 // calculates the half time of 90 minutes in 6 steps of 15 min
+ − 3865
+ − 3866 // Output: char_O_CNS_fraction
+ − 3867 // Uses and Updates: CNS_fraction
+ − 3868
+ − 3869 void calc_CNS_decrease_15min(void)
+ − 3870 {
+ − 3871 CNS_fraction = 0.890899 * CNS_fraction;
+ − 3872 char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+ − 3873 }// calc_CNS_decrease_15min(void)
+ − 3874
+ − 3875
+ − 3876 // ------------------
+ − 3877 // calc_percentage //
+ − 3878 // ------------------
+ − 3879 // new in v.101
+ − 3880
+ − 3881 // calculates int_I_temp * char_I_temp / 100
+ − 3882 // output is int_I_temp
+ − 3883
+ − 3884 void calc_percentage(void)
+ − 3885 {
+ − 3886 temp1 = (float)int_I_temp;
+ − 3887 temp2 = (float)char_I_temp / 100.0;
+ − 3888 temp3 = temp1 * temp2;
+ − 3889 int_I_temp = (int)temp3;
+ − 3890 }
+ − 3891 void push_tissues_to_vault(void)
+ − 3892 {
60
+ − 3893 cns_vault = CNS_fraction;
0
+ − 3894 for (ci=0;ci<32;ci++)
+ − 3895 pres_tissue_vault[ci] = pres_tissue[ci];
+ − 3896 }
+ − 3897 void pull_tissues_from_vault(void)
+ − 3898 {
60
+ − 3899 CNS_fraction = cns_vault;
0
+ − 3900 for (ci=0;ci<32;ci++)
+ − 3901 pres_tissue[ci] = pres_tissue_vault[ci];
+ − 3902 }
+ − 3903