Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/adc_rtc.asm @ 842:454ef5c2e6aa default tip
Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware
Make year settings until 2040 possible (This is likely the final release for this model)
| author | heinrichsweikamp |
|---|---|
| date | Sat, 29 Nov 2025 14:11:07 +0100 |
| parents | 2750099bf5bb |
| children |
| rev | line source |
|---|---|
| 815 | 1 ; OSTC Mk.2, 2N and 2C - diving computer code |
|
807
c50296c3059e
BUGFIX: Divetime had unwanted "." behind the minutes
heinrichsweikamp
parents:
729
diff
changeset
|
2 ; Copyright (C) 2015 HeinrichsWeikamp GbR |
| 0 | 3 |
| 4 ; This program is free software: you can redistribute it and/or modify | |
| 5 ; it under the terms of the GNU General Public License as published by | |
| 6 ; the Free Software Foundation, either version 3 of the License, or | |
| 7 ; (at your option) any later version. | |
| 8 | |
| 9 ; This program is distributed in the hope that it will be useful, | |
| 10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 ; GNU General Public License for more details. | |
| 13 | |
| 14 ; You should have received a copy of the GNU General Public License | |
| 15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 16 | |
| 17 | |
| 18 ; routines for AD converter, Realtime clock initialisation | |
| 19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
| 20 ; written: 10/30/05 | |
| 21 ; last updated: 05/15/08 | |
| 22 ; known bugs: | |
| 23 ; ToDo: | |
| 24 | |
| 25 get_battery_voltage: ; starts ADC and waits until fnished | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
26 ; In MPLAB Sim mode (hardware emulation), use a DMCI slider to |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
27 ; directly set a 16 bit value in the range 0..1023 |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
28 ; In normal mode, jut wait for the value to be ready: |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
29 |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
30 ifndef TESTING |
| 0 | 31 bsf ADCON0,0 ; power on ADC |
| 32 nop | |
| 33 bsf ADCON0,1 ; start ADC | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
34 |
| 0 | 35 get_battery_voltage2: |
| 36 btfsc ADCON0,1 ; Wait... | |
| 37 bra get_battery_voltage2 | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
53
diff
changeset
|
38 endif |
| 0 | 39 |
| 40 ; 3.3V/1024=3,2227mV Input/Bit=9,6680mV Battery/Bit. | |
| 41 ; Example: 434*9,6680mV=4195,9mV Battery. | |
| 42 | |
| 43 movff ADRESH,xA+1 | |
| 44 movff ADRESL,xA+0 | |
| 45 movlw LOW d'966' | |
| 46 movwf xB+0 | |
| 47 movlw HIGH d'966' | |
| 48 movwf xB+1 | |
| 49 call mult16x16 ; AD_Result*966 | |
| 50 movlw d'100' | |
| 51 movwf xB+0 | |
| 52 clrf xB+1 | |
| 53 call div32x16 ;xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 54 movff xC+0,batt_voltage+0 ; store value | |
| 55 movff xC+1,batt_voltage+1 | |
| 56 bcf ADCON0,0 ; power off ADC | |
| 57 | |
| 58 ; Check if we should enter deep-sleep mode | |
| 59 | |
| 60 movff batt_voltage+0,sub_b+0 | |
| 61 movff batt_voltage+1,sub_b+1 | |
| 62 movlw LOW d'2600' ; must be greater then 2600mV... | |
| 63 movwf sub_a+0 | |
| 64 movlw HIGH d'2600' | |
| 65 movwf sub_a+1 | |
| 702 | 66 call subU16 ; sub_c = sub_a - sub_b |
| 0 | 67 bcf enter_error_sleep ; Clear flag |
| 68 btfsc neg_flag ; neg_flag=1 if eeprom40:41 < 2000 | |
| 69 bra get_battery_voltage3 ; Battery in OK range | |
| 70 | |
| 71 movlw d'2' | |
| 72 movwf fatal_error_code ; Battery very low! | |
| 73 bsf enter_error_sleep ; enter error routine | |
| 74 | |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
75 get_battery_voltage3: |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
76 SAFE_2BYTE_COPY amb_pressure, sub_b |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
77 |
|
398
ab962c4b19d6
Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents:
341
diff
changeset
|
78 movlw LOW d'15001' ; must be lower then 15001mbar |
| 0 | 79 movwf sub_a+0 |
| 80 movlw HIGH d'15001' | |
| 81 movwf sub_a+1 | |
| 702 | 82 call subU16 ; sub_c = sub_a - sub_b |
| 0 | 83 bcf enter_error_sleep ; Clear flag |
| 84 btfss neg_flag ; | |
| 85 bra get_battery_voltage4 ; Pressure in OK range | |
| 86 | |
| 87 movlw d'3' | |
| 88 movwf fatal_error_code ; too deep | |
| 89 bsf enter_error_sleep ; enter error routine | |
| 90 ; Continue with rest of routine | |
| 91 | |
| 92 get_battery_voltage4: | |
| 93 ; check if the battery control memory needs to be initialised! | |
|
665
259e4c1bf3c2
grey-out TTS and ceiling after gas change (until new plan is ready)
heinrichsweikamp
parents:
622
diff
changeset
|
94 bcf initialize_battery1 ; clear check-flag |
| 703 | 95 clrf EEADRH |
| 0 | 96 read_int_eeprom d'40' ; get lowest battery voltage seen in mV |
| 97 movff EEDATA,sub_b+0 | |
| 98 read_int_eeprom d'41' | |
| 99 movff EEDATA,sub_b+1 | |
| 100 | |
| 101 movlw LOW d'2000' ; must be greater then 2000mV... | |
| 102 movwf sub_a+0 | |
| 103 movlw HIGH d'2000' | |
| 104 movwf sub_a+1 | |
| 729 | 105 call subU16 ; sub_c = sub_a - sub_b |
| 106 btfss neg_flag ; neg_flag=1 if eeprom40:41 < 2000 | |
| 0 | 107 bsf initialize_battery1 ; battery need to be initialised |
| 108 | |
| 109 movlw LOW d'4500' ; must be lower then 4500mV... | |
| 110 movwf sub_a+0 | |
| 111 movlw HIGH d'4500' | |
| 112 movwf sub_a+1 | |
| 729 | 113 call subU16 ; sub_c = sub_a - sub_b |
| 114 btfsc neg_flag ; neg_flag=1 if eeprom40:41 < 4500 | |
|
665
259e4c1bf3c2
grey-out TTS and ceiling after gas change (until new plan is ready)
heinrichsweikamp
parents:
622
diff
changeset
|
115 bsf initialize_battery1 ; battery need to be initialised |
| 0 | 116 |
| 117 btfss initialize_battery1 ; battery need to be initialised? | |
| 118 bra get_battery_no_init ; No, we have already valid values, just check for new extremas | |
| 119 | |
| 702 | 120 get_battery_voltage_reset: |
| 0 | 121 ; Init EEPROM for battery control |
| 122 ; Reset lowest battery seen | |
| 123 movlw LOW d'4200' ; reset to 4.2V | |
| 124 movwf EEDATA | |
| 125 write_int_eeprom d'40' | |
| 126 movlw HIGH d'4200' ; reset to 4.2V | |
| 127 movwf EEDATA | |
| 128 write_int_eeprom d'41' | |
| 129 movff month,EEDATA | |
| 130 write_int_eeprom d'42' | |
| 131 movff day,EEDATA | |
| 132 write_int_eeprom d'43' | |
| 133 movff year,EEDATA | |
| 134 write_int_eeprom d'44' | |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
135 SAFE_2BYTE_COPY temperature,lo |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
136 movff lo,EEDATA |
| 0 | 137 write_int_eeprom d'45' |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
138 movff hi,EEDATA |
| 0 | 139 write_int_eeprom d'46' |
| 140 ; Reset charge statistics | |
| 53 | 141 clrf EEDATA |
| 142 write_int_eeprom d'47' ; last complete charge | |
| 143 write_int_eeprom d'48' ; last complete charge | |
| 144 write_int_eeprom d'49' ; last complete charge | |
| 145 write_int_eeprom d'50' ; total cycles | |
| 146 write_int_eeprom d'51' ; total cycles | |
| 147 write_int_eeprom d'52' ; total complete cycles | |
| 148 write_int_eeprom d'53' ; total complete cycles | |
| 0 | 149 ; Reset temperature extremas |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
150 SAFE_2BYTE_COPY temperature,lo |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
151 movff lo,EEDATA ; Reset mimimum extrema |
| 0 | 152 write_int_eeprom d'54' |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
153 movff hi,EEDATA |
| 0 | 154 write_int_eeprom d'55' |
| 155 movff month,EEDATA | |
| 156 write_int_eeprom d'56' | |
| 157 movff day,EEDATA | |
| 158 write_int_eeprom d'57' | |
| 159 movff year,EEDATA | |
| 160 write_int_eeprom d'58' | |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
161 movff lo,EEDATA ; Reset maximum extrema |
| 0 | 162 write_int_eeprom d'59' |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
163 movff hi,EEDATA |
| 0 | 164 write_int_eeprom d'60' |
| 165 movff month,EEDATA | |
| 166 write_int_eeprom d'61' | |
| 167 movff day,EEDATA | |
| 168 write_int_eeprom d'62' | |
| 169 movff year,EEDATA | |
| 170 write_int_eeprom d'63' | |
| 171 get_battery_no_init: | |
| 172 read_int_eeprom d'40' ; get lowest battery voltage seen in mV | |
| 173 movff EEDATA,sub_b+0 | |
| 174 read_int_eeprom d'41' | |
| 175 movff EEDATA,sub_b+1 | |
| 176 movff batt_voltage+0,sub_a+0 | |
| 177 movff batt_voltage+1,sub_a+1 | |
| 702 | 178 call subU16 ; sub_c = sub_a - sub_b |
| 0 | 179 btfss neg_flag ; new lowest battery voltage? |
| 180 return ; no, quit routine | |
| 181 ; Yes, store new value together with the date and temperature values | |
| 182 movff batt_voltage+0,EEDATA | |
| 183 write_int_eeprom d'40' | |
| 184 movff batt_voltage+1,EEDATA | |
| 185 write_int_eeprom d'41' | |
| 186 movff month,EEDATA | |
| 187 write_int_eeprom d'42' | |
| 188 movff day,EEDATA | |
| 189 write_int_eeprom d'43' | |
| 190 movff year,EEDATA | |
| 191 write_int_eeprom d'44' | |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
192 SAFE_2BYTE_COPY temperature,lo |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
193 movff lo,EEDATA |
| 0 | 194 write_int_eeprom d'45' |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
195 movff hi,EEDATA |
| 0 | 196 write_int_eeprom d'46' |
| 197 return | |
| 198 | |
| 199 RTCinit: ; resets RTC | |
| 200 movlw 0x80 | |
| 201 movwf TMR1H | |
| 537 | 202 nop ; See errata DS80284E-page 2 |
| 0 | 203 clrf TMR1L |
| 204 ; Reset RTC if any part of the time/date is out of range | |
| 205 movlw d'60' ; Limit | |
| 206 cpfslt secs ; Check part | |
| 207 bra RTCinit2 ; Reset time... | |
| 208 movlw d'60' ; Limit | |
| 209 cpfslt mins ; Check part | |
| 210 bra RTCinit2 ; Reset time... | |
| 211 movlw d'24' ; Limit | |
| 212 cpfslt hours ; Check part | |
| 213 bra RTCinit2 ; Reset time... | |
| 214 movlw d'32' ; Limit | |
| 215 cpfslt day ; Check part | |
| 216 bra RTCinit2 ; Reset time... | |
| 217 movlw d'12' ; Limit | |
| 218 cpfslt month ; Check part | |
| 219 bra RTCinit2 ; Reset time... | |
| 220 movlw d'100' ; Limit | |
| 221 cpfslt year ; Check part | |
| 222 bra RTCinit2 ; Reset time... | |
| 614 | 223 ; Make sure day and month <> zero |
| 224 movlw .0 | |
| 723 | 225 cpfsgt day ; =0? |
| 614 | 226 incf day,F ; Yes, +1 |
| 723 | 227 cpfsgt month ; =0? |
| 614 | 228 incf month,F ; Yes, +1 |
| 229 bsf PIE1, TMR1IE ; Enable clock int | |
| 0 | 230 return |
| 231 | |
| 232 RTCinit2: | |
| 233 movlw .00 | |
| 234 movwf secs | |
| 235 movlw .00 | |
| 236 movwf mins | |
| 237 movlw .12 | |
| 238 movwf hours | |
| 838 | 239 movlw .19 |
| 0 | 240 movwf day |
| 838 | 241 movlw .1 |
| 0 | 242 movwf month |
| 838 | 243 movlw .21 |
| 0 | 244 movwf year |
| 614 | 245 bsf PIE1, TMR1IE ; Enable clock int |
|
297
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
246 return |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
247 |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
248 reset_battery_stats: |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
249 bcf uart_reset_battery_stats ; Clear flag |
| 703 | 250 clrf EEADRH |
|
297
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
251 bcf PIE1,RCIE ; no interrupt for UART |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
252 call rs232_get_byte ; Get Byte |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
253 bcf PIR1,RCIF ; clear flag |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
254 |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
255 btfsc rs232_recieve_overflow ; Byte received? |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
256 bra reset_battery_stats_exit ; No, exit |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
257 movlw 'f' |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
258 cpfseq RCREG ; Really reset statistics? |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
259 bra reset_battery_stats_exit ; No, exit |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
260 call rs232_get_byte ; Get byte |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
261 bcf PIR1,RCIF ; clear flag |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
262 |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
263 btfsc rs232_recieve_overflow ; Byte received? |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
264 bra reset_battery_stats_exit ; No, exit |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
265 movlw 'f' |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
266 cpfseq RCREG ; Really reset statistics? |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
267 bra reset_battery_stats_exit ; No, exit |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
268 ; Yes, Reset now. |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
269 rcall get_battery_voltage_reset ; Reset Statistics |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
270 movlw 'f' |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
271 movwf TXREG |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
272 call rs232_wait_tx ; Wait for uart |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
273 |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
274 reset_battery_stats_exit: |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
275 bsf PIE1,RCIE ; re-enable interrupt for UART |
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents:
255
diff
changeset
|
276 goto surfloop_loop ; return to surface loop |
