comparison code_part1/OSTC_code_asm_part1/shared_definitions.h @ 494:e9b1f162799d

testing graphical velocity
author heinrichsweikamp
date Mon, 07 Nov 2011 08:39:21 +0100
parents
children f5a06b9e2fef
comparison
equal deleted inserted replaced
493:4b2add2adde3 494:e9b1f162799d
1 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 ;
3 ; shared_definitions.h
4 ;
5 ; Declare variables used both in C and ASM code
6 ;
7 ; This program is free software: you can redistribute it and/or modify
8 ; it under the terms of the GNU General Public License as published by
9 ; the Free Software Foundation, either version 3 of the License, or
10 ; (at your option) any later version.
11 ;
12 ; This program is distributed in the hope that it will be useful,
13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ; GNU General Public License for more details.
16 ;
17 ; You should have received a copy of the GNU General Public License
18 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
19 ;
20 ; Copyright (c) 2010, JD Gascuel.
21 ;=============================================================================
22 ; RATIONAL
23 ;
24 ; We must enforce good data passing between the C and the ASM parts of code.
25 ; The previous design used two independant definitions of each variable,
26 ; one in C, one in ASM. If they did not match, no error was generated, and
27 ; anything can happend at runtime...
28 ;
29 ; The new design use LINKING to ensure the variables defined in C are at the
30 ; same address when used in ASM code. And it uses a unique declaration file
31 ; (with suitable macros) to make sure they have the same size in both language.
32 ;
33 ; HISTORY
34 ; 2011-01-20: [jDG] Creation.
35 ;
36 ; NOTE
37 ;
38 ; This file have to obey both ASM and C syntax. The only common directives
39 ; are #if/#ifdef/#endif and the #define, so they are eavily used to do the
40 ; trick.
41 ;
42 ; BUGS
43 ;=============================================================================
44 #endif
45
46 #ifdef __18CXX
47 //------------------------------------------------------------------------
48 // C-style declarations:
49 # ifndef TEST_MAIN
50 # define VAR_UCHAR(n) extern unsigned char n
51 # define TAB_UCHAR(n,size) extern unsigned char n[size]
52 # define VAR_UINT(n) extern unsigned short n
53 # define TAB_UINT(n,size) extern unsigned short n[size]
54 # else
55 # define VAR_UCHAR(n) unsigned char n
56 # define TAB_UCHAR(n,size) unsigned char n[size]
57 # define VAR_UINT(n) unsigned short n
58 # define TAB_UINT(n,size) unsigned short n[size]
59 # endif
60 #else
61 ;-------------------------------------------------------------------------
62 ; ASM-style declarations:
63 #define VAR_UCHAR(n) n res 1
64 #define TAB_UCHAR(n,size) n res size
65 #define VAR_UINT(n) n res 2
66 #define TAB_UINT(n,size) n res 2*size
67 #endif
68
69 #ifdef __18CXX
70 //---- BANK 2 DATA -------------------------------------------------------
71 // Gather all data C-code --> ASM-code
72 # pragma udata overlay bank2=0x200
73 #else
74 bank2 udata_ovr 0x200
75 #endif
76
77 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
78 Define model dimensions.
79 NUM_COMP is the number of compartiments in the Bühlmann ZH-L16 model, ie 16.
80 NUM_STOPS is the maximum number of stops computed by decoplanning.
81 Note that the deapest stop is roughly limited to 3m * NUM_STOPS
82 (this is assuming all stops up to the surface are used).
83 Note also that if the table overflow, extra stops are ignored,
84 and not reported in TTS summing.
85 NUM_GAS is the number of (potentially) active gas considered during
86 ascent simulation.
87 #endif
88 #define NUM_COMP 0x10
89 #define NUM_STOPS 0x20
90 #define NUM_GAS 5
91
92 VAR_UINT (int_O_gtissue_limit);
93 VAR_UINT (int_O_gtissue_press);
94 VAR_UINT (int_O_desaturation_time); //
95 VAR_UINT (int_O_ascenttime); // TTS (in minutes)
96 VAR_UINT (int_O_extra_ascenttime); // TTS for @+5min variant (in minutes)
97
98 VAR_UCHAR (char_O_nullzeit); //
99 VAR_UCHAR (char_O_deco_status); // Deko state-machine state.
100 VAR_UCHAR (char_O_deco_last_stop); // Depth reached during deko planning.
101 VAR_UCHAR (char_O_gradient_factor); //
102 VAR_UCHAR (char_O_gtissue_no); //
103 VAR_UCHAR (char_O_diluent); // new in v.101
104 VAR_UCHAR (char_O_flush_ppO2); // 2011-05-01: ppO2 from diluant (CCR mode).
105 VAR_UCHAR (char_O_EAD); // 2011-05-01: Added EAD/END in deco model.
106 VAR_UCHAR (char_O_END); // 2011-05-01: Added EAD/END in deco model.
107 VAR_UCHAR (char_O_CNS_fraction); // new in v.101
108 VAR_UCHAR (char_O_relative_gradient_GF); // new in v.102
109
110 VAR_UCHAR (char_O_first_deco_depth); // Depth of first stop.
111 VAR_UCHAR (char_O_first_deco_time) ; // Duration of first stop.
112 TAB_UCHAR (char_O_deco_depth, NUM_STOPS); // Fusionned decompression table:
113 TAB_UCHAR (char_O_deco_time, NUM_STOPS); // Both ZH-L16 and L16-GF models.
114
115 TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP); // Nitrogen compartiment desaturation time, in min.
116 TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP); // Helium compartiment desaturation time, in min.
117
118 VAR_UINT (int_O_DBS_bitfield); // NOTE: 9 bytes dumped to divelog by store_dive_decodebug
119 VAR_UINT (int_O_DBS2_bitfield);
120 VAR_UINT (int_O_DBG_pre_bitfield);
121 VAR_UINT (int_O_DBG_post_bitfield);
122 VAR_UCHAR (char_O_NDL_at_20mtr);
123
124 TAB_UINT (int_O_gas_volumes, 5); // Volumes evaluation for each gas tank, in 0.1 liters.
125
126 TAB_UCHAR (char_O_hash, 16);
127
128 #ifdef __18CXX
129 //---- BANK 3 DATA -------------------------------------------------------
130 // Gather all data ASM-code --> C-code
131 # pragma udata overlay bank3=0x300
132 #else
133 ; In ASM, put the same bank, in overlay mode, at the same address
134 bank3 udata_ovr 0x300
135 #endif
136
137 VAR_UCHAR (char_I_step_is_1min); // Use 1min integration for tissue and CNS.
138
139 VAR_UINT (int_I_pres_respiration); //
140 VAR_UINT (int_I_pres_surface); //
141 VAR_UINT (int_I_temp); // new in v101
142 VAR_UINT (int_I_divemins); // Dive time (minutes)
143 VAR_UCHAR (char_I_temp); // new in v101
144 VAR_UCHAR (char_I_actual_ppO2); //
145 VAR_UCHAR (char_I_first_gas); // Gas used at start of dive (bottom mix)
146 VAR_UCHAR (char_I_current_gas); // Current gas breathed (1..6).
147 VAR_UCHAR (char_I_N2_ratio); //
148 VAR_UCHAR (char_I_He_ratio); //
149 VAR_UCHAR (char_I_saturation_multiplier); // for conservatism/safety values 1.0 no conservatism to 1.5 50% faster saturation
150 VAR_UCHAR (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
151 VAR_UCHAR (char_I_GF_High_percentage); // new in v.102
152 VAR_UCHAR (char_I_GF_Low_percentage); // new in v.102
153 VAR_UCHAR (char_I_deco_distance); //
154 VAR_UCHAR (char_I_const_ppO2); // new in v.101
155 VAR_UCHAR (char_I_depth_last_deco); // new in v.101 unit: [m]
156 VAR_UCHAR (char_I_deco_model); // new in v.102. 0 == ZH-L16, 1 = ZH-L16-GF (Grandiant facttor)
157 VAR_UCHAR (char_I_bottom_depth); // Bottom depth for planning (used in gas volume evaluation).
158 VAR_UCHAR (char_I_bottom_time); // Bottom time for planning (used in gas volume evaluation).
159 VAR_UCHAR (char_I_dive_interval); // Delay before next dive simulation.
160
161 TAB_UCHAR (char_I_deco_gas_change,NUM_GAS);// new in v.101
162 TAB_UCHAR (char_I_deco_N2_ratio, NUM_GAS); // new in v.101
163 TAB_UCHAR (char_I_deco_He_ratio, NUM_GAS); // new in v.101
164
165 #ifdef __18CXX
166 //----------------------------------------------------------------------------
167 // Access to various utilities defined in ASM-code.
168 //
169 // Note: Need to switch to BANK1 before calling most of them !
170 extern unsigned char win_top, win_leftx2, win_font, win_invert;
171 extern ram unsigned char letter[26];
172
173 extern void PLED_ClearScreen(void);
174 extern void PLED_standard_color(void);
175 extern void PLED_warnings_color(void);
176 extern void PLED_divemask_color(void);
177
178 extern void PLED_box(void);
179 extern void PLED_frame(void);
180 extern void aa_wordprocessor(void);
181
182 /// Set WREG color.
183 extern void PLED_set_color(void);
184 #endif