Mercurial > public > hwos_code
annotate src/sleepmode.asm @ 626:be8787f2034d
compass3 support for 3.01 branch
author | heinrichsweikamp |
---|---|
date | Sun, 23 Jun 2019 15:21:16 +0200 |
parents | ca4556fb60b9 |
children |
rev | line source |
---|---|
0 | 1 ;============================================================================= |
2 ; | |
604 | 3 ; File sleepmode.asm Version 2.99e |
0 | 4 ; |
5 ; Sleepmode | |
6 ; | |
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
582 | 8 ;============================================================================== |
0 | 9 ; HISTORY |
10 ; 2011-08-12 : [mH] moving from OSTC code | |
11 | |
582 | 12 #include "hwos.inc" ; Mandatory header |
13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | |
14 #include "surfmode.inc" | |
15 #include "tft.inc" | |
16 #include "isr.inc" | |
17 #include "start.inc" | |
18 #include "adc_lightsensor.inc" | |
19 #include "math.inc" | |
20 #include "ms5541.inc" | |
21 #include "wait.inc" | |
22 #include "eeprom_rs232.inc" | |
23 #include "external_flash.inc" | |
24 #include "ghostwriter.inc" | |
25 #include "i2c.inc" | |
26 #include "mcp.inc" | |
0 | 27 |
133
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
123
diff
changeset
|
28 |
582 | 29 extern vault_decodata_into_eeprom |
30 | |
31 | |
32 ;---- Private local variables ------------------------------------------------- | |
133
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
123
diff
changeset
|
33 |
582 | 34 CBLOCK local1 ; max size is 16 Byte !!! |
35 sm_temp1 ; sleepmode temporary 1 | |
36 sm_temp2 ; sleepmode temporary 2 | |
37 sm_timer1 ; timer for pressure check every 10 seconds | |
38 sm_timer2 ; timer for 10 minutes tasks (updating of tissues) | |
39 sm_timer3 ; timer for 15 minutes tasks (updating of surface pressure) | |
40 ENDC ; used: 5 byte, remaining: 11 byte | |
41 | |
42 | |
604 | 43 slmode CODE |
582 | 44 |
45 ;============================================================================== | |
0 | 46 |
47 global sleeploop | |
604 | 48 sleeploop: ; enter sleep mode |
582 | 49 call disable_ir_s8 ; IR/S8 off |
50 call mcp_sleep | |
51 bcf LEDg | |
52 bcf LEDr | |
0 | 53 call TFT_Display_FadeOut |
582 | 54 call TFT_DisplayOff ; display off |
604 | 55 |
56 IFDEF _screendump | |
57 bcf enable_screen_dumps ; =1: Ignore vin_usb, wait for "l" command (screen dump) | |
58 ENDIF | |
59 | |
582 | 60 call disable_rs232 ; USB off |
61 call vault_decodata_into_eeprom ; store deco data | |
62 call ext_flash_enable_protection ; enable write protection for external flash | |
63 call update_battery_registers ; update battery registers into EEPROM | |
64 clrf sm_temp1 | |
65 clrf sm_temp2 | |
66 clrf sm_timer1 | |
67 clrf sm_timer2 | |
68 clrf sm_timer3 | |
626 | 69 ; call speed_normal |
70 call speed_eco | |
604 | 71 bsf no_sensor_int ; inhibit sensor interrupts |
72 clrf ADCON0 ; power-down ADC module | |
582 | 73 |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
74 sleeploop_pre: |
604 | 75 bcf deep_sleep ; normal sleep mode |
582 | 76 call I2C_sleep_accelerometer |
77 call I2C_sleep_compass | |
604 | 78 btfss analog_switches ; OSTC with analog switches? |
79 bra sleeploop_loop ; NO - no analog switches | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
80 |
582 | 81 bsf power_sw1 |
82 btfss power_sw1 | |
83 bra $-4 | |
84 bsf power_sw2 | |
85 btfss power_sw2 | |
86 bra $-4 | |
604 | 87 movlw .4 ; wait for button circuity |
88 movwf sm_temp1 ; used as temp | |
89 bcf onesecupdate | |
582 | 90 |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
91 sleeploop_pre1: |
491 | 92 rcall sleepmode_sleep |
604 | 93 btfss onesecupdate ; wait 1 second |
582 | 94 bra sleeploop_pre1 |
95 bcf onesecupdate | |
96 decfsz sm_temp1,F | |
97 bra sleeploop_pre1 | |
604 | 98 movlw .32 ; wait for button circuity |
99 movwf sm_temp1 ; used as temp | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
100 |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
101 sleeploop_pre2: |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
102 call get_analog_switches |
582 | 103 decfsz sm_temp1,F |
104 bra sleeploop_pre2 | |
105 | |
106 bcf PIR1,TMR1IF | |
107 bcf INTCON,INT0IF | |
108 bcf INTCON3,INT1IF | |
109 bcf PIR5,TMR7IF | |
110 bcf switch_left | |
111 bcf switch_right | |
112 bcf analog_sw2_pressed | |
113 bcf analog_sw1_pressed | |
604 | 114 bsf PIE1,0 ; (re)start timer 1 interrupt |
115 bsf PIE2,1 ; (re)start timer 2 interrupt | |
116 bsf PIE5,3 ; (re)start timer 7 interrupt | |
117 bsf INTCON,4 ; (re)start INT0 interrupt | |
118 bsf INTCON3,3 ; (re)start INT1 interrupt | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
119 |
0 | 120 sleeploop_loop: |
582 | 121 btfsc onesecupdate ; one second in sleep? |
122 rcall onesec_sleep ; check switches, check pressure sensor, etc. | |
123 | |
124 btfss sleepmode ; wake up? (This bit will be set in other routines) | |
604 | 125 goto restart ; YES |
0 | 126 |
604 | 127 btfsc deep_sleep ; enter deep sleep? |
128 bra deepsleep ; YES | |
582 | 129 |
491 | 130 no_deepsleep: |
626 | 131 bcf deep_sleep ; Clear flag to avoid putting the unit into deep sleep immediately when removed from charger |
604 | 132 rcall sleepmode_sleep ; wait at least 35 ms (every 62.5ms timer7 wakeup) |
0 | 133 |
134 ; Any button pressed in sleep? | |
604 | 135 ; btfsc switch_left |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
136 ; rcall onesec_sleep1a |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
137 ; btfsc switch_right |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
138 ; rcall onesec_sleep1a |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
139 ; |
604 | 140 ; btfss sleepmode ; wake up? (this bit will be set in other routines) |
141 ; goto restart ; YES | |
0 | 142 |
582 | 143 bra sleeploop_loop ; do loop until something happens |
0 | 144 |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
145 deepsleep: |
582 | 146 btfss analog_switches |
147 bra no_deepsleep ; no analog switches, no deep sleep required | |
626 | 148 btfsc cc_active ; Charging? |
149 bra no_deepsleep ; Yes, no deep sleep required | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
150 |
604 | 151 bcf PIE1,0 ; stop timer 1 interrupt |
152 bcf PIE2,1 ; stop timer 2 interrupt | |
153 bcf PIE5,3 ; stop timer 7 interrupt | |
154 bcf INTCON,4 ; stop INT0 interrupt | |
155 bcf INTCON3,3 ; stop INT1 interrupt | |
582 | 156 bcf power_sw1 |
157 bcf power_sw2 | |
604 | 158 rcall deepsleep_get_accel ; read accelerometer into WREG |
159 movwf sm_temp1 ; store init value | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
160 |
582 | 161 deepsleep_loop: |
162 btfsc onesecupdate ; one second in sleep? | |
604 | 163 rcall onesec_deepsleep ; YES - check accelerometer |
582 | 164 |
165 btfsc onesecupdate ; one second in sleep? | |
604 | 166 rcall onesec_sleep ; YES - check switches, check pressure sensor, etc. |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
167 |
626 | 168 btfsc cc_active ; Charging? |
169 bcf deep_sleep ; Yes, no deep sleep required | |
170 | |
491 | 171 rcall sleepmode_sleep |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
172 |
604 | 173 btfss deep_sleep ; enter normal sleep mode? |
582 | 174 bra sleeploop_pre ; Yes |
175 | |
176 bra deepsleep_loop ; do loop until something happens | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
177 |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
178 onesec_deepsleep: |
604 | 179 rcall deepsleep_get_accel ; read accelerometer into WREG |
180 subwf sm_temp1,W ; sm_temp1 - accel_DZ+0 -> WREG | |
181 btfsc STATUS,N ; result negative? | |
182 negf WREG ; YES - negate it | |
183 movwf sm_temp2 ; change of acceleration in Z-axis | |
184 movlw .50 ; threshold (mg) | |
185 cpfslt sm_temp2 ; bigger then the threshold? | |
186 bcf deep_sleep ; YES | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
187 |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
188 ; extern piezo_config_tx |
582 | 189 ; movff sm_temp1,WREG |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
190 ; call piezo_config_tx |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
191 ; movff accel_DZ+0,WREG |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
192 ; call piezo_config_tx |
582 | 193 ; movff sm_temp2,WREG |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
194 ; call piezo_config_tx |
582 | 195 |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
196 return |
582 | 197 |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
198 deepsleep_get_accel: |
582 | 199 call I2C_init_compass ; required for compass1 |
200 call I2C_init_accelerometer ; required for compass2 | |
626 | 201 rcall sleepmode_sleep |
604 | 202 call I2C_RX_accelerometer ; read accelerometer |
582 | 203 call I2C_sleep_compass ; required for compass1 |
204 call I2C_sleep_accelerometer ; required for compass2 | |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
205 movff accel_DZ+0,WREG |
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
206 return |
582 | 207 |
134
4574aed5cd4c
Show clock in Apnea mode, minor layout changes in Apnea mode
heinrichsweikamp
parents:
133
diff
changeset
|
208 onehour_sleep: |
582 | 209 call update_battery_registers ; update battery registers into EEPROM |
210 call vault_decodata_into_eeprom ; update deco data | |
211 bcf onehourupdate ; all done | |
212 return | |
0 | 213 |
214 onemin_sleep: | |
582 | 215 btfsc onehourupdate ; one hour in sleep? |
604 | 216 rcall onehour_sleep ; YES |
582 | 217 |
218 btfsc battery_gauge_available | |
604 | 219 call get_battery_voltage ; check for charger |
198
c511dc403d7e
(Slightly) reduce current consumption in Eco and sleep mode
heinrichsweikamp
parents:
134
diff
changeset
|
220 |
582 | 221 ;---- update tissues and CNS every 10 minutes when gradient factor is 0 (no supersaturation in any tissue any more) |
222 movff int_O_gradient_factor+0,WREG ; get gradient factor, only the lower byte is used for the value | |
223 tstfsz WREG ; gradient factor = 0? | |
224 bra onemin_sleep1 ; NO - continue with air pressure compensation | |
225 incf sm_timer2,F ; count-up... | |
226 movlw d'9' ; ...to 9 | |
227 cpfsgt sm_timer2 ; 10 minutes over? | |
228 bra onemin_sleep1 ; NO - continue with air pressure compensation | |
229 clrf sm_timer2 ; reset counter | |
230 SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; copy pressure to deco routine | |
231 call deco_calc_dive_interval_10min ; calculate 10 minutes under surface conditions | |
0 | 232 banksel common |
233 | |
582 | 234 onemin_sleep1: |
235 ;---- adjust air pressure compensation any 15 minutes | |
236 incf sm_timer3,F ; count-up... | |
237 movlw d'14' ; ...to 14 | |
238 cpfsgt sm_timer3 ; 15 minutes over? | |
239 bra onemin_sleep2 ; NO - continue with every-minute-tasks | |
0 | 240 |
582 | 241 ; Tasks every 15 minutes in sleep |
242 bsf deep_sleep ; enter deep-sleep mode | |
243 clrf sm_timer3 ; reset counter | |
244 | |
245 SAFE_2BYTE_COPY last_surfpressure_15min, last_surfpressure_30min ; save older air pressure | |
246 SAFE_2BYTE_COPY amb_pressure, last_surfpressure_15min ; save new air pressure | |
247 | |
248 movlw LOW max_surfpressure | |
249 movff WREG,sub_a+0 ; max. "allowed" air pressure in mbar | |
250 movlw HIGH max_surfpressure | |
251 movff WREG,sub_a+1 ; max. "allowed" air pressure in mbar | |
0 | 252 movff last_surfpressure_15min+0,sub_b+0 |
253 movff last_surfpressure_15min+1,sub_b+1 | |
582 | 254 call subU16 ; sub_c = sub_a - sub_b |
255 btfss neg_flag ; Is 1080mbar < amb_pressure ? | |
256 bra onemin_sleep2 ; NO: current air pressure is lower then "allowed" air pressure, ok! | |
0 | 257 |
582 | 258 ; not ok! Overwrite with max. "allowed" air pressure |
259 movlw LOW max_surfpressure | |
260 movff WREG,last_surfpressure_15min+0 ; max. "allowed" air pressure in mbar | |
261 movlw HIGH max_surfpressure | |
262 movff WREG,last_surfpressure_15min+1 ; max. "allowed" air pressure in mbar | |
0 | 263 |
264 onemin_sleep2: | |
582 | 265 ; Tasks every minute in sleep |
266 | |
267 ;---- update tissues and CNS every minute when gradient factor is >0 (supersaturation in at least one tissue) | |
268 movff int_O_gradient_factor+0,WREG ; get gradient factor, only the lower byte is used for the value | |
269 tstfsz WREG ; gradient factor = 0? | |
270 bra onemin_sleep3 ; NO - do tissue update on 1 minute schedule | |
271 bra onemin_sleep4 ; YES - tissue update is done on 10 minutes schedule | |
0 | 272 |
582 | 273 onemin_sleep3: |
274 SAFE_2BYTE_COPY amb_pressure, int_I_pres_respiration ; copy pressure to deco routine | |
275 call deco_calc_dive_interval_1min ; calculate 1 minute under surface conditions | |
276 banksel common | |
277 | |
278 onemin_sleep4: | |
279 bcf oneminupdate ; all done | |
0 | 280 return |
281 | |
282 onesec_sleep: | |
582 | 283 btfsc oneminupdate ; one minute in sleep? |
604 | 284 rcall onemin_sleep ; YES - do one-minute tasks, e.g. calculate desaturation |
198
c511dc403d7e
(Slightly) reduce current consumption in Eco and sleep mode
heinrichsweikamp
parents:
134
diff
changeset
|
285 |
582 | 286 btfsc battery_gauge_available |
604 | 287 call get_battery_voltage ; check for charger |
120 | 288 |
582 | 289 incf sm_timer1,F ; counts to #test_pressure_in_sleep (10) |
490
8dfb93e80338
NEW: Deep Sleep mode for OSTC Plus and OSTC 2 (2017) (Entered automatically)
heinrichsweikamp
parents:
448
diff
changeset
|
290 movlw d'10' |
582 | 291 cpfsgt sm_timer1 ; here: temp variable |
292 bra onesec_sleep1 ; #test_pressure_in_sleep not done yet | |
0 | 293 |
582 | 294 clrf sm_timer1 ; clear counter |
295 rcall pressuretest_sleep_fast ; Gets pressure without averaging (faster!) | |
296 ; compare current ambient pressure with wake_up_from_sleep | |
297 movlw LOW wake_up_from_sleep | |
298 movwf sub_a+0 ; power on if ambient pressure is greater threshold | |
299 movlw HIGH wake_up_from_sleep | |
300 movwf sub_a+1 ; power on if ambient pressure is greater threshold | |
0 | 301 SAFE_2BYTE_COPY amb_pressure, sub_b |
604 | 302 call subU16 ; is (1160mbar - averaged(amb_pressure)) < 0 ? |
303 btfsc neg_flag ; wake up from sleep? | |
304 bra onesec_sleep1a ; YES - skip button checks, wake up! | |
0 | 305 |
582 | 306 btfsc battery_gauge_available |
604 | 307 bra onesec_sleep1 ; no wake-up with cR hardware |
582 | 308 btfsc vusb_in ; USB plugged in? |
604 | 309 bra onesec_sleep1a ; YES - skip button checks, wake up |
0 | 310 |
311 onesec_sleep1: | |
604 | 312 bcf onesecupdate ; clear flag |
313 btfsc switch_left ; left switch pressed? | |
314 bra onesec_sleep1a ; YES | |
315 btfsc switch_right ; right switch pressed? | |
316 bra onesec_sleep1a ; YES | |
317 return ; NO to both - done | |
582 | 318 |
604 | 319 onesec_sleep1a: ; at least one button pressed or amb_pressure -> wake_up_from_sleep |
320 bcf sleepmode ; wake up | |
0 | 321 SAFE_2BYTE_COPY last_surfpressure_30min, amb_pressure ; copy for compatibility |
322 movlw .0 | |
604 | 323 movff WREG,sensor_state_counter ; reset sensor state counter |
582 | 324 bcf no_sensor_int ; normal sensor interrupt mode |
0 | 325 return |
582 | 326 |
604 | 327 pressuretest_sleep_fast: ; get pressure without averaging (faster to save some power in sleep mode) |
328 banksel isr_backup ; back to Bank0 ISR data | |
329 clrf amb_pressure_avg+0 ; clear pressure average registers | |
582 | 330 clrf amb_pressure_avg+1 |
604 | 331 clrf temperature_avg+0 ; clear temperature average registers |
582 | 332 clrf temperature_avg+1 |
604 | 333 call get_temperature_start ; start temperature integration (73.5 us) |
582 | 334 banksel common |
604 | 335 rcall sleepmode_sleep ; wait at least 35 ms (every 62.5 ms timer7 wakeup) |
336 rcall sleepmode_sleep ; wait at least 35 ms (every 62.5 ms timer7 wakeup) | |
337 banksel isr_backup ; back to Bank0 ISR data | |
338 call get_temperature_value ; state 1: get temperature | |
339 call get_pressure_start ; start pressure integration | |
582 | 340 banksel common |
604 | 341 rcall sleepmode_sleep ; wait at least 35 ms (every 62.5 ms timer7 wakeup) |
342 rcall sleepmode_sleep ; wait at least 35 ms (every 62.5 ms timer7 wakeup) | |
343 banksel isr_backup ; back to bank0 ISR data | |
344 call get_pressure_value ; state2: get pressure (51 us) | |
345 call calculate_compensation ; calculate temperature compensated pressure (27 us) | |
582 | 346 banksel common |
347 SAFE_2BYTE_COPY amb_pressure_avg, amb_pressure ; copy for compatibility | |
0 | 348 return |
349 | |
350 sleepmode_sleep: | |
604 | 351 banksel 0xF16 ; addresses F16h through F5Fh are also used by SFRs, but are not part of the access RAM |
352 clrf T7GCON ; reset timer7 gate control register | |
353 movlw b'10001101' ; 1:1 prescaler -> 2 seconds @ 32768 Hz, not synced | |
582 | 354 movwf T7CON |
0 | 355 sleep |
198
c511dc403d7e
(Slightly) reduce current consumption in Eco and sleep mode
heinrichsweikamp
parents:
134
diff
changeset
|
356 sleep |
604 | 357 clrf T7GCON ; reset timer7 gate control register |
358 movlw b'10001001' ; 1:1 prescaler -> 2 seconds @ 32768Hz, synced | |
582 | 359 movwf T7CON |
604 | 360 banksel common ; back to bank1 |
0 | 361 return |
362 | |
363 END |