changeset 0:96a35aeda5f2

Initial setup
author heinrichsweikamp
date Tue, 12 Jan 2010 15:05:59 +0100
parents
children 210410f7c1b4
files code_part1/OSTC_code_asm_part1/18f4685_ostc_mkII.lkr code_part1/OSTC_code_asm_part1/MAIN.ASM code_part1/OSTC_code_asm_part1/MAIN.COD code_part1/OSTC_code_asm_part1/MAIN.HEX code_part1/OSTC_code_asm_part1/MAIN.err code_part1/OSTC_code_asm_part1/adc_rtc.asm code_part1/OSTC_code_asm_part1/alt_wait.asm code_part1/OSTC_code_asm_part1/changelog.txt code_part1/OSTC_code_asm_part1/dd_font2display.asm code_part1/OSTC_code_asm_part1/debugcodes.txt code_part1/OSTC_code_asm_part1/definitions.asm code_part1/OSTC_code_asm_part1/displaytext.asm code_part1/OSTC_code_asm_part1/divemode.asm code_part1/OSTC_code_asm_part1/divemode_menu.asm code_part1/OSTC_code_asm_part1/docu/COPYING__GNU_GPLv3_deutsch.txt code_part1/OSTC_code_asm_part1/docu/COPYING__GNU_GPLv3_english.txt code_part1/OSTC_code_asm_part1/docu/README_howtocompile.pdf code_part1/OSTC_code_asm_part1/eeprom_rs232.asm code_part1/OSTC_code_asm_part1/fisch_128x64.inc code_part1/OSTC_code_asm_part1/i2c_eeprom.asm code_part1/OSTC_code_asm_part1/icdpictypes.inc code_part1/OSTC_code_asm_part1/interface.asm code_part1/OSTC_code_asm_part1/io.asm code_part1/OSTC_code_asm_part1/isr.asm code_part1/OSTC_code_asm_part1/math.asm code_part1/OSTC_code_asm_part1/menu.asm code_part1/OSTC_code_asm_part1/menu_battery.asm code_part1/OSTC_code_asm_part1/menu_custom.asm code_part1/OSTC_code_asm_part1/menu_gassetup.asm code_part1/OSTC_code_asm_part1/menu_logbook.asm code_part1/OSTC_code_asm_part1/menu_ppO2.asm code_part1/OSTC_code_asm_part1/menu_reset.asm code_part1/OSTC_code_asm_part1/menu_settime.asm code_part1/OSTC_code_asm_part1/ms5535.asm code_part1/OSTC_code_asm_part1/oled_samsung.asm code_part1/OSTC_code_asm_part1/ostc_part2_compiled_start_0C000.MCH code_part1/OSTC_code_asm_part1/ostc_part3_wordprocessor_NEW_CURSOR_9A00_to_B960_jump_in_B410.MCH code_part1/OSTC_code_asm_part1/pled_outputs.asm code_part1/OSTC_code_asm_part1/simulator.asm code_part1/OSTC_code_asm_part1/sleepmode.asm code_part1/OSTC_code_asm_part1/spbrgselect.inc code_part1/OSTC_code_asm_part1/start.asm code_part1/OSTC_code_asm_part1/surfmode.asm code_part1/OSTC_code_asm_part1/sync_clock.asm code_part1/OSTC_code_asm_part1/temp_extrema.asm code_part1/OSTC_code_asm_part1/tempcomp.asm code_part1/OSTC_code_asm_part1/text_table.asm code_part1/OSTC_code_asm_part1/valconv.asm code_part1/OSTC_code_asm_part1/wait.asm code_part1/OSTC_code_c_part2/18f4685_ostc.lkr code_part1/OSTC_code_c_part2/changes_log.txt code_part1/OSTC_code_c_part2/old/changes_log.txt code_part1/OSTC_code_c_part2/old/p2_deco_main - bigscreen.c code_part1/OSTC_code_c_part2/old/p2_deco_main_old_v107.c code_part1/OSTC_code_c_part2/old/p2_deco_main_old_v108_pre OSTC2.c code_part1/OSTC_code_c_part2/ostc28.drx.txt code_part1/OSTC_code_c_part2/ostc28.tbl.txt code_part1/OSTC_code_c_part2/ostc48.drx.txt code_part1/OSTC_code_c_part2/ostc48.tbl.txt code_part1/OSTC_code_c_part2/ostc90.drx.txt code_part1/OSTC_code_c_part2/ostc90.tbl.txt code_part1/OSTC_code_c_part2/ostc_bigscreen.cof code_part1/OSTC_code_c_part2/ostc_bigscreen.hex code_part1/OSTC_code_c_part2/ostc_bigscreen.map code_part1/OSTC_code_c_part2/ostc_bigscreen.mcp code_part1/OSTC_code_c_part2/ostc_bigscreen.mcs code_part1/OSTC_code_c_part2/ostc_bigscreen.mcw code_part1/OSTC_code_c_part2/p2_deco_main - 090915a.c code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.c code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.err code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.i code_part1/OSTC_code_c_part2/p2_deco_main.c code_part1/OSTC_code_c_part2/p2_deco_main_old_v107.c code_part1/OSTC_code_c_part2/p2_tables.romdata code_part1/OSTC_code_c_part2/p3_wordprocessor.o
diffstat 75 files changed, 89950 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/18f4685_ostc_mkII.lkr	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,32 @@
+// File: 18f4685.lkr
+// Sample linker script for the PIC18F4685 processor
+
+// Not intended for use with MPLAB C18.  For C18 projects,
+// use the linker scripts provided with that product.
+
+LIBPATH .
+
+CODEPAGE   NAME=page       START=0x0               END=0x17EFF
+CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
+CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
+CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
+CODEPAGE   NAME=eedata     START=0xF00000          END=0xF003FF       PROTECTED
+
+ACCESSBANK NAME=accessram  START=0x0            END=0x5F
+DATABANK   NAME=gpr0       START=0x60           END=0xFF
+DATABANK   NAME=gpr1       START=0x100          END=0x1FF
+DATABANK   NAME=gpr2       START=0x200          END=0x2FF
+DATABANK   NAME=gpr3       START=0x300          END=0x3FF
+DATABANK   NAME=gpr4       START=0x400          END=0x4FF
+DATABANK   NAME=gpr5       START=0x500          END=0x5FF
+DATABANK   NAME=gpr6       START=0x600          END=0x6FF
+DATABANK   NAME=gpr7       START=0x700          END=0x7FF
+DATABANK   NAME=gpr8       START=0x800          END=0x8FF
+DATABANK   NAME=gpr9       START=0x900          END=0x9FF
+DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
+DATABANK   NAME=gpr11      START=0xB00          END=0xBFF
+DATABANK   NAME=gpr12      START=0xC00          END=0xCFF
+DATABANK   NAME=sfr13      START=0xD00          END=0xDFF          PROTECTED
+DATABANK   NAME=sfr14      START=0xE00          END=0xEFF          PROTECTED
+DATABANK   NAME=sfr15      START=0xF00          END=0xF5F          PROTECTED
+ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/MAIN.ASM	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,144 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either versio
+; includes and isr
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 041013
+; last updated: 081219
+; known bugs:
+; ToDo: 
+
+	
+	LIST P=18F4685							;directive to define processor
+	#include <P18F4685.INC>					;processor specific variable definitions
+
+	#include	definitions.asm				; Defines, I/O Ports and variables
+
+		ORG     0x0000
+		goto	start						; Start!
+
+		ORG		0x0008
+		bra		HighInt						;High Priority Interrups
+
+		ORG	0x0018							;Low Priority Interrups
+;	*** low priority interrupts not used
+		bra		HighInt						;High Priority Interrups
+
+HighInt:
+		movff	BSR,0x102					;save BSR register
+		movlb	b'00000001'					;select Bank1
+		
+		movff	STATUS,status_temp			;save STATUS register
+		movff	WREG,wreg_temp				;save working register
+
+		movf	PORTB,W						;move portb into latch register
+
+		btfsc	PIR1,TMR1IF					;Timer1 INT (external 32.768kHz Clock)
+		call	timer1int
+
+		btfsc	INTCON,TMR0IF				;Timer0 INT (Debounce Timer)
+		call	timer0int
+
+		btfsc	PIR2,TMR3IF					;Timer3 INT (Delay for PWM Buzzer)
+		call	timer3int
+
+		btfsc	PIR1,RCIF					; UART
+		call	uartint
+
+		btfsc	INTCON,INT0IF				; Switch left
+		call	schalter_links
+
+		btfsc	INTCON3,INT1IF				; switch right
+		call	schalter_rechts
+
+		movff	wreg_temp,WREG				;restore working register
+		movff	status_temp,STATUS			;restore STATUS register
+		movff	0x102,BSR					;restore BSR register
+		retfie
+
+		ORG	0x00100				; 
+#include	text_table.asm		; includes textmacros
+#include	displaytext.asm		; sends texts to wordprocessor
+#include	math.asm			; mathematical functions
+#include 	wait.asm			; waitroutines
+#include	valconv.asm			; outputs to POSTINC2
+#include	eeprom_rs232.asm	; Internal EEPROM and RS232 Interface
+#include	oled_samsung.asm	; Attached in 80-System 8-Bit Mode
+#include	menu_custom.asm		; Menu "Custom FunctionsI" and "Custom FunctionsII"
+#include	menu.asm			; Main Menu and Setup Menu
+#include	menu_reset.asm		; Submenu "Reset"
+#include	menu_settime.asm	; Submenu "Set Time"
+#include	ms5535.asm			; Interface to MS5535A,B or C pressure sensor
+#include	pled_outputs.asm	; div. PLED outputs and background debugger
+#include	i2c_eeprom.asm		; for external I2C EEPROM and general I2C Routines
+#include	menu_logbook.asm	; Submenu "Logbook"
+#include	interface.asm		; Interface routines 
+#include	menu_ppO2.asm		; Constant ppO2 setup menu
+#include 	menu_battery.asm	; Submenu "Battery Info"
+#include	menu_gassetup.asm	; Menu "Gas Setup"
+#include	isr.asm				; Interrupt service routine (RTC&Sensor)
+#include	surfmode.asm		; Mainroutines for Surfacemode
+#include	divemode.asm		; Mainroutines for Divemode
+#include	divemode_menu.asm	; Underwater menu
+#include	sleepmode.asm		; Mainroutines for Sleepmode
+#include	adc_rtc.asm			; A/D converter (battery control) and RTC init
+#include	temp_extrema.asm	; Takes care of the temperature extrema logger
+#include	sync_clock.asm		; syncs RTC with PC
+#include	tempcomp.asm		; extra temperature compensation
+#include	start.asm			; Startup and init, checks background debugger
+#include	simulator.asm		; Stand-alone simulator routines
+#include 	io.asm				; Low-Level I/O access
+
+	ORG	0x0A000		; keep free for new c_code
+	nop
+
+	ORG deco_main_calc_hauptroutine
+	return			;Dummy
+	ORG deco_main_calc_without_deco
+	return			;Dummy
+	ORG deco_main_clear_tissue
+	return			;Dummy
+	ORG deco_main_calc_desaturation_time
+	return			;Dummy
+	ORG deco_main_calc_wo_deco_step_1_m
+	return			;Dummy
+	ORG deco_main_hash
+	return			;Dummy
+	ORG main_clear_CNS_fraction
+	return			;Dummy
+	ORG	main_calc_CNS_fraction
+	return			;Dummy
+	ORG	main_calc_CNS_decrease_15min
+	return			;Dummy	
+	ORG	main_push_tissues_to_vault
+	return			;Dummy
+	ORG	main_pull_tissues_from_vault
+	return			;Dummy
+	
+	
+    MESSG "OSTC - diving computer code,  Copyright (C) 2009 HeinrichsWeikamp GbR"
+    MESSG "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the"
+    MESSG "Free Software Foundation, either version 3 of the License, or (at your option) any later version."
+    MESSG "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY"
+    MESSG "or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details."
+    MESSG "You should have received a copy of the GNU General Public License along with this program.If not, see http://www.gnu.org/licenses/."
+
+	END				; end of program
+
Binary file code_part1/OSTC_code_asm_part1/MAIN.COD has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/MAIN.HEX	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,2364 @@
+:020000040000FA
+:0400000082EF47F054
+:0200080008D01E
+:0800180000D0E0CF02F101016C
+:10002000D8CF01F1E8CF00F181509EB0A1EC38F0BB
+:10003000F2B488EC38F0A1B29DEC38F09EBA47ECEF
+:1000400038F0F2B276EC38F0F0B07CEC38F000C169
+:0C005000E8FF01C1D8FF02C1E0FF100072
+:10010000001210180606080A0A0C0606080A060A53
+:1001100006060808060E06060A0A08140C0A060A4D
+:1001200008060606101010101010101010101010F5
+:1001300010101010101010101010101010101010BF
+:10014000101010101014161416120C140E1414148F
+:100150000E180A0608080A060C0A08080808060607
+:10016000040A0C120A0A0A060A0E140808061214D7
+:10017000040E140806100E0C0606080606060606EF
+:10018000080804040A16161614080A080806060ABF
+:100190000808040A0E140A0C0A141010101010108B
+:1001A000101010101010101010101010101010104F
+:1001B000101010101010101010101410120E08084B
+:1001C00006141414141414141414141414141414FD
+:1001D00014141414141414141414141414141414DF
+:1001E0001414141414141414141414140A0A0A08F9
+:1001F0000808080E0614100A100C06060606060863
+:10020000020E0E080808060606060A0A0408040E6E
+:100210001412140E0A0E0C100E0A0A0A0E0C10000C
+:100300000000010F0019010F0002010F4102010F4F
+:100310004102010F1423010F1441010F1423010F97
+:10032000145F010F147D010F14B9010F7302010F47
+:100330000018010F0000010F3202010F0A1E010F09
+:100340000A37010F0A50010F0A69010F0A82010FD3
+:100350001423010F2041010F205F010F209B010F8B
+:100360000600010F3702010F0E02010F2802010FD4
+:100370003202010F1423010F6400010F6419010FF1
+:10038000644B010F6464010F0000010F2823010F6B
+:100390002823010F2823010F2823010F2823010FF1
+:1003A0002823010F2823010F2823010F2823010FE1
+:1003B0002823010F2823010F2823010F2823010FD1
+:1003C0002823010F2823010F2823010F2823010FC1
+:1003D0002823010F2823010F2823010F2823010FB1
+:1003E0002823010F2823010F2823010F2823010FA1
+:1003F0002823010F2823010F2823010F2823010F91
+:100400002823010F2823010F2823010F0023010FA8
+:100410000041010F005F010F007D010F009B010FE4
+:1004200000B9010F00D7010F0023010F0041010F98
+:10043000005F010F007D010F009B010F00B9010F4C
+:1004400000D7010F6696010F0000010F6CD8010F55
+:100450006CD8010F6400010F0000010F0000010FB4
+:100460000000010F0000010F0000010F0000010F4C
+:100470000000010F0000010F0000010F0000010F3C
+:100480000000010F2802010F1423010F147D010F3A
+:10049000557D010F557D010F557D020F557D010FD3
+:1004A0000000010F0A02010F0000010F0000010F00
+:1004B0001423010F1441010F0E02010F0000010F60
+:1004C000145F010F0A02010F0009010F557D020F91
+:1004D0000012010F001B010F0024010F002D010F5E
+:1004E0000036010F6432010F6419010F6432010FED
+:1004F000644B010F6464010F6400010F6419010F64
+:100500001441010F4141010F4141010F6432010FBC
+:100510000A00010F0A19010F0A32010F0A4B010FDD
+:100520006432010F557D010F6978010F693C010F9D
+:100530004102010F149B010F2A48010F3C02010FD9
+:100540003460010F3478010F644B010F0000010F7C
+:100550000008010F0227010F0230010F557D010F26
+:100560001441010F2823010F2823010F2823010F15
+:100570002823010F2823010F2823010F2823010F0F
+:100580002823010F2823010F2823010F2823010FFF
+:100590002823010F2823010F2823010F2823010FEF
+:1005A0002823010F2823010F2823010F2823010FDF
+:1005B0002823010F2823010F2823010F2823010FCF
+:1005C0002823010F2823010F2823010F2823010FBF
+:1005D0002823010F2823010F2823010F2823010FAF
+:1005E0002823010F0D02010F000000000201010F7E
+:1005F0000230010F0000010F0000010F0000010F89
+:100600000023010F0041010F005F010F007D010F6A
+:10061000009B010F00B9010F00D7010F0023010F4C
+:100620000041010F005F010F007D010F009B010FD2
+:1006300000B9010F00D7010F0023010F0041010F86
+:10064000005F010F007D010F009B010F00B9010F3A
+:1006500000D7010F0023010F0041010F005F010FC0
+:10066000007D010F009B010F00B9010F00D7010FA2
+:100670000023010F0041010F005F010F007D010FFA
+:10068000009B010F00B9010F00D7010F0023010FDC
+:100690000041010F005F010F007D010F009B010F62
+:1006A00000B9010F00D7010F0A02010F557D010F9C
+:1006B000020C010F6419010F6400010F6400010FA7
+:1006C0006419010F6400010F020C010F6464010F33
+:1006D0001441010F021E010F147D010F1E02010FB4
+:1006E0001423010F6419010F6432010F644B010FD1
+:1006F0006464010F6400010F6432010F0000000FF9
+:100700001423010F2802010F6923010F6923010F30
+:100710006923010F0101010F41A8010F0730010BEF
+:100720007887010F0227010F00D8010F0A08010F77
+:100730000A10010F0000010F1802010F0023010F22
+:100740000041010F007D010F009B010F145F010F9D
+:100750001441010F145F010F147D010F149B010F51
+:100760006432010F6400010F5A36010F145F010F4C
+:08077000147D010F149B010F21
+:1007B0004275696C64696E67204D443220486173EC
+:1007C000687D506C6561736520576169742E2E2EAB
+:1007D0007D7D4865696E72696368735765696B6191
+:1007E0006D70204F535443327D7D4D656E753F7D56
+:1007F0004D656E753A7D4C6F67626F6F6B7D4761BB
+:10080000732053657475707D5365742054696D65EC
+:100810007D7D5265736574204D656E757D7D536574
+:100820007475707D457869747D7D576169742E2E6D
+:100830007D7D4D443220486173683A7D4465736123
+:10084000747D496E746572666163657D537461720F
+:10085000747D446174617D7D4865616465727D7DF0
+:1008600050726F66696C657D446F6E652E7D436165
+:100870006E63656C2052657365747D7D54696D652A
+:100880003A7D446174653A7D53657420486F757292
+:10089000737D52657365742E2E2E7D7D4C6F67625D
+:1008A0006F6F6B7D437573746F6D2046756E6374E7
+:1008B000696F6E7320497D7D5265736574204D6547
+:1008C0006E757D7D5365742054696D653A7D4D6FFD
+:1008D00072657D7D4465636F706C616E7D7D47617F
+:1008E000736C6973747D4D6F72657D7D4578697435
+:1008F0007D7D4E6F466C797D5374617274204469BE
+:100900007665205B636D5D7D456E64204469766528
+:100910002020205B636D5D7D456E642044656C61C5
+:10092000792020205B735D7D506F776572204F6664
+:10093000662020205B735D7D5072652D6D656E7540
+:10094000202020205B735D7D76656C6F6369747910
+:100950005B6D2F6D696E5D7D57616B652D757020C8
+:10096000205B6D4261725D7D6D61782E537572669C
+:100970002E5B6D4261725D7D474620646973706CC9
+:10098000617920205B255D7D6D696E2E204F3220C0
+:100990004469732E5B255D7D44697665206D656EC7
+:1009A000757320205B735D7D53617475726174652E
+:1009B000207820205B255D7D4465736174757261CC
+:1009C000746520785B255D7D4E6F466C79205261A1
+:1009D00074696F205B255D7D474620616C61726D97
+:1009E000203120205B255D7D474620616C61726D62
+:1009F000203220205B255D7D4465636F204F666655
+:100A00007365745B646D5D7D70704F32206C6F77C1
+:100A1000205B634261725D7D70704F322068696750
+:100A2000685B634261725D7D73686F772070704FA1
+:100A3000325B634261725D7D73616D706C696E677C
+:100A4000207261746520207D44697669736F72201D
+:100A500054656D702020207D44697669736F722023
+:100A60004465636F6461747D44697669736F722055
+:100A70004E6F74557365307D44697669736F72206B
+:100A800070704F322020207D44697669736F722028
+:100A9000446562756720207D44697669736F7220B2
+:100AA0004E6F74557365327D73686F7720434E5374
+:100AB000202020205B255D7D4C6F67626F6F6B206F
+:100AC0006F6666736574207D4C6173742044656342
+:100AD0006F2061745B6D5D7D456E642041706E6F4B
+:100AE00065205B6D696E5D7D53686F77205662612E
+:100AF0007474205B3D315D7D546869732070726F42
+:100B00006772616D2069737D64697374726962755F
+:100B100074656420696E207468657D7D686F70659A
+:100B200020746861742069742077696C6C20626538
+:100B30007D7D75736566756C2C20627574205749D0
+:100B400054484F55547D414E592057415252414EC1
+:100B500054593B20776974686F75747D6576656E4E
+:100B60002074686520696D706C6965647D7D77614E
+:100B70007272616E7479206F667D4D4552434841B3
+:100B80004E544142494C495459206F727D7D46492B
+:100B9000544E45535320464F5220417D50415254AC
+:100BA0004943554C415220505552504F53452E7D8C
+:100BB0005365652074686520474E552047656E650E
+:100BC00072616C7D5075626C6963204C6963656EFF
+:100BD000736520666F727D7D6D6F726520646574CC
+:100BE00061696C733A7D7777772E6865696E726993
+:100BF0006368737765696B616D702E64657D4465AC
+:100C0000636F73746F707D7D6D2F6D696E7D4E6F38
+:100C10002053746F707D4465636F73756D7D446997
+:100C2000766574696D657D7D44657074687D46691F
+:100C3000727374204761733F7D7D44656661756C96
+:100C4000743A7D7D4D696E757465737D4D6F6E74FC
+:100C50006820207D446179202020207D59656172C3
+:100C60002020207D536574207D7D47617323207D86
+:100C70005965737D43757272656E743A7D7D5365F7
+:100C8000747570204D656E753A7D437573746F6D24
+:100C90002046756E6374696F6E73497D4465636F3A
+:100CA000747970653A7D5A482D4C3136204F437D1A
+:100CB0004761756765202020207D47617567657DE8
+:100CC0005A482D4C31362043437D41637469766523
+:100CD000204761733F207D7D4761732053657475A4
+:100CE00070202D204761736C6973747D4465707446
+:100CF00068202B7D4465707468202D7D4261636B94
+:100D00007D7D436F6E73742E2070704F322053655B
+:100D10007475707D436F6E7374616E742070704F64
+:100D2000322053657475707D5350237D4261747415
+:100D300065727920496E666F7D7D4261747465725B
+:100D40007920496E666F726D6174696F6E7D43794B
+:100D5000636C65733A7D41706E6F657D4C61737431
+:100D600020436F6D706C6574653A7D7D4C6F77655F
+:100D700073742056626174743A7D4C6F7765737436
+:100D80002061743A7D7D546D696E3A7D546D617851
+:100D90003A7D536574204761737D4F32202B7D7DF2
+:100DA0004F32202D7D7D4865202B7D7D4865202D8F
+:100DB0007D7D457869747D7D44656C6574657D7D58
+:100DC00044656275673A7D7D4F4E207D4F46467D76
+:100DD00044656C2E20616C6C7D7D556E6578706508
+:100DE000637465642072657365742066726F6D7DCF
+:100DF000446976656D6F64652120506C656173652B
+:100E00002068656C707D616E64207265706F7274AD
+:100E100020746865204465627567207D496E666F41
+:100E2000726D6174696F6E2062656C6F77217D7D74
+:100E30004261696C6F75747D41706E6F6520202012
+:100E4000207D44657363656E747D5375726661635E
+:100E5000657D517569743F7D4D6F72657D7D436F12
+:100E60006E6669726D3A7D7D4D656E7520323A7D94
+:100E700043616E63656C7D7D4F4B217D53746F7054
+:100E80007761742E7D7D4E4F54205553454421216A
+:100E90002121217D4E4F54205553454421212121AC
+:100EA000212121212121217D4E6F742075736564DC
+:100EB000217D4E6F7420757365642121217D4C3135
+:100EC000362D4746204F437D437573746F6D204622
+:100ED000756E6374696F6E7349497D7D4746204C1A
+:100EE0006F772020202020205B255D7D474620480D
+:100EF00069676820202020205B255D7D6E6F74204F
+:100F000075736564202020202020207D6E6F742062
+:100F100075736564202020202020207D6E6F742052
+:100F200075736564202020202020207D6E6F742042
+:100F300075736564202020202020207D53686F7702
+:100F400020736563732E205B3D315D7D6E6F742071
+:100F500075736564202020202020207D6E6F742012
+:100F600075736564202020202020207D4176722E1C
+:100F7000204465707468205B3D315D7D6E6F742028
+:100F800075736564202020202020207D6E6F7420E2
+:100F900075736564202020202020207D6E6F7420D2
+:100FA00075736564202020202020207D6E6F7420C2
+:100FB00075736564202020202020207D6E6F7420B2
+:100FC00075736564202020202020207D6E6F7420A2
+:100FD00075736564202020202020207D6E6F742092
+:100FE00075736564202020202020207D6E6F742082
+:100FF00075736564202020202020207D6E6F742072
+:1010000075736564202020202020207D6E6F742061
+:1010100075736564202020202020207D6E6F742051
+:1010200075736564202020202020207D6E6F742041
+:1010300075736564202020202020207D6E6F742031
+:1010400075736564202020202020207D6E6F742021
+:1010500075736564202020202020207D6E6F742011
+:1010600075736564202020202020207D6E6F742001
+:1010700075736564202020202020207D6E6F7420F1
+:1010800075736564202020202020207D6E6F7420E1
+:1010900075736564202020202020207D6E6F7420D1
+:1010A00075736564202020202020207D6E6F7420C1
+:1010B00075736564202020202020207D6E6F7420B1
+:1010C00075736564202020202020207D6E6F7420A1
+:1010D00075736564202020202020207D4375737463
+:1010E0006F6D2046756E6374696F6E732049497D1C
+:1010F0004E6F742055736564212121212121217DAA
+:101100004E6F7420557365642121212121212121F5
+:10111000217D4E4F54205553454421212121217DCD
+:1011200070704F32202B7D7D70704F32202D7D7D71
+:1011300044696C2E7D7D4465636F747970653A20D7
+:101140005A482D4C3136204F437D466F72204F70E8
+:10115000656E20436972637569742020207D44693F
+:10116000766572732E20537570706F7274732035AC
+:10117000207D5472696D69782047617365732E20F4
+:1011800020202020207D436F6E6669677572652080
+:10119000796F757220676173207D696E2047617376
+:1011A0007365747570206D656E752E20207D4368A3
+:1011B00065636B204346313120262043463132207F
+:1011C000217D4465636F747970653A204761756766
+:1011D00065202020207D4469766574696D652077DF
+:1011E000696C6C20626520696E7D4D696E757465F1
+:1011F000733A5365636F6E64732E2020207D4F53C6
+:101200005443322077696C6C206E6F74202020204C
+:10121000207D636F6D70757465204465636F2C204D
+:101220004E6F466C797D74696D6520616E642044F3
+:10123000657361742E2D2020207D74696D65206199
+:101240007420616C6C21202020202020207D4465AA
+:10125000636F747970653A5A482D4C313620434398
+:10126000207D466F72202853656D692D29436C6F70
+:1012700073656420207D43697263756974207265AB
+:101280006272656174686572737D436F6E666967CB
+:10129000757265207468652033202020207D536599
+:1012A00074506F696E747320696E2070704F322DA8
+:1012B000207D5365747570206D656E752E20352008
+:1012C0006261696C2D7D6F75742061726520617635
+:1012D00061696C61626C652E207D4465636F747911
+:1012E00070653A2041706E6F65202020207D4F533D
+:1012F0005443322077696C6C20646973706C617937
+:10130000207D656163682064657363656E74207316
+:10131000657061722D7D6174656C7920696E204DF8
+:10132000696E3A5365632E20207D57696C6C20747A
+:10133000656D706F72616C6C79207365747D73611B
+:101340006D706C657261746520746F2031207365F7
+:10135000637D4E6F204465636F2063616C63756CC1
+:101360006174696F6E7D4465636F747970653A204E
+:101370004C31362D4746204F437D4465636F6D7079
+:1013800072657373696F6E2063616C2D207D637568
+:101390006C6174696F6E7320776974682074686516
+:1013A000207D47462D4D6574686F64202847465F51
+:1013B0006C6F2F47467D5F6869292E2043686563FF
+:1013C0006B20434633322026207D43463333212091
+:1013D0004F70656E2043697263756974207D77690B
+:1013E000746820446565702053746F70732E2020DC
+:1013F000207D4465636F747970653A204C31362DD9
+:1014000047462043437D4465636F6D707265737317
+:10141000696F6E2063616C2D207D63756C617469EA
+:101420006F6E73207769746820746865207D474605
+:101430002D4D6574686F64202847465F6C6F2F4799
+:10144000467D5F6869292E20436865636B204346AB
+:1014500033322026207D4346333321436C6F73653E
+:101460006420436972637569747D77697468204488
+:101470006565702053746F70732E2020207D446545
+:10148000636F6D6F6465206368616E6765642120BA
+:10149000207D4C31362D47462043437D4E6F7420CE
+:1014A000666F756E647D536574506F696E747D7D73
+:1014B0004E6F204465636F7D4772617068737D7DF8
+:1014C000446973706C61797D4E6F206465636F7DD4
+:1014D000536561726368206D6F64756C657D4578D6
+:1014E00069747D7D52657365742043462C47617332
+:1014F0002026204465636F7D44697361626C6520BA
+:101500006D6F64756C657D7D53696D756C61746F0D
+:10151000727D4F5354432053696D756C61746F72C3
+:101520007D7D537461727420446976657D7D2B20C6
+:10153000316D7D7D2D20316D7D7D2B31306D7D7D3B
+:101540002D31306D7D7D457869747D7D6E6F7420A1
+:101550007573657D787D4461746520666F726D6119
+:10156000743A7D7D5365747570204D656E752032BB
+:101570003A7D4D4D444459597D7D44444D4D595912
+:101580007D7D59594D4D44447D7D4F535443207DBD
+:101590004261696C7D7D41697220207D41697220C4
+:1015A000207D43616C6962726174657D4D61782054
+:1015B00044657074687D6E6F747D666F756E6421AE
+:1015C0007D7D6D563A7D4E6577204346206164648B
+:1015D0006564217D4E657720437573746F6D467524
+:1015E0006E6374696F6E737D776572652061646484
+:1015F00065642120436865636B7D43462049206113
+:101600006E64204346204949204D656E757D666FA6
+:10161000722044657461696C73217D7D53616C69CE
+:101620006E6974793A7D426F74746F6D2054696D80
+:10163000653A7D7D4D61782E2044657074683A7DF1
+:1016400043616C63756C617465204465636F7D7D77
+:1016500053686F77204465636F706C616E7D4C6575
+:101660006164205469737D7D4C65616420546973A5
+:101670007D7D53746F7077617463687D52657365A7
+:1016800074204C6F67626F6F6B7D5265626F6F7411
+:10169000204F5354437D5265736574204465636FD6
+:1016A000646174617D7D2C8B01D81200278D05D873
+:1016B000279D12002C8B01D812000B6F800EA66E96
+:1016C000F86A020EF76EFC0EF66E0BC14CF1000EBE
+:1016D0002CBB010E4D6F040E4E6F4F6BF0EC0BF0F8
+:1016E0004851F6264951F7220900F55027BD02D08E
+:1016F000E8CF7DF00900F55027BD02D0E8CF7CF09F
+:101700000900F5500108E8CF7EF00900F5CF1BF184
+:101710000D6B0E6BF66AF86A010EF76E01D02C9B0A
+:101720000900F5500D27000E0E230B2FF9D72CBB07
+:10173000F6D7F86AB00E0D25F66E070E0E21F76E7D
+:1017400027AD20EE60F009007D0EF56201D00AD0D1
+:10175000F550DE6E09007D0EF56201D003D0F55024
+:10176000DE6EF1D727AD26EC0EF0120032C14CF13F
+:1017700033C14DF13C0E4E6F4F6B4FD848C133F122
+:101780004CC132F11200D89046334533472FFBD776
+:101790001200D8904B334A3349334833472FF9D797
+:1017A00012004951FF08496F4851D890FF08486F0F
+:1017B00012001F975451525D506F55515359516F3C
+:1017C000D8A812001F8750C154F151C155F1526978
+:1017D00053695451525D506F55515359516F120016
+:1017E0004A6B4B6B4C514E03F350486FF450496FAA
+:1017F0004C514F03F3504927F4504A234D514E03A7
+:10180000F3504927F4504A23D8B04B2B4D514F0386
+:10181000F3504A27F4504B231200486B496B4E514A
+:101820004F11D8B4FF0C010E476F4FBF05D0472BA7
+:10183000D8904E374F37F9D7D890483749374E515F
+:101840004C5F4F51D8A04F294D5FD8B005D04E51B5
+:101850004C274F514D2301D048814707D8B412007F
+:10186000D8904F334E33E8D7200E476F4B514D6F12
+:101870004A514C6F4951536F4851526F4B6B4A6BF1
+:10188000496B486B556B546BD890523753374C3774
+:101890004D37543755374F51555DD8A452EF0CF0A2
+:1018A0004E51545DD8A05CEF0CF04E51545FD8A05F
+:1018B00055074F51555FD880483749374A374B371E
+:1018C000472F44EF0CF01200D89075337433762F05
+:1018D000FBD71200D8907A33793378337733762F69
+:1018E000F9D712007851FF08786F7751D890FF0828
+:1018F000776F12002A978351815D7F6F84518259DF
+:10190000806FD8A812002A877FC183F180C184F13B
+:10191000816982698351815D7F6F84518259806FB3
+:101920001200796B7A6B7B517D03F350776FF45023
+:10193000786F7B517E03F3507827F45079237C51E4
+:101940007D03F3507827F4507923D8B07A2B7C515B
+:101950007E03F3507927F4507A2312000A6FBAEF0E
+:101960000CF000000000000000000000000000007B
+:101970000000000000000000000000000000000067
+:101980000000000000000000000000000000000057
+:101990000000000000000000000000000000000047
+:1019A0000000000000000000000000000A2FB1EF5E
+:1019B0000CF01200096FE6EF0CF0000000000000D0
+:1019C0000000000000000000000000000000000017
+:1019D0000000000000000000000000000000000007
+:1019E00000000000000000000000000000000000F7
+:1019F00000000000000000000000000000000000E7
+:101A0000000000000000630EAEEC0CF0092FDDEFCB
+:101A10000CF01200630E3261326F32C134F1356B5B
+:101A20001F950A0E3A6F366B67D8010E3A6F366B08
+:101A30001F8562D8120032C134F1356B1F85F1D792
+:101A400032C134F1356B1F95640E3A6F366B54D842
+:101A5000E8D7259F376F1F8B372B372F1F9B238B83
+:101A6000372B372F239B32C134F133C135F11F950A
+:101A7000100E3A6F270E366F1FAD3ED8E80E3A6F44
+:101A8000030E366F23BB07D025BF03D01F85372D2C
+:101A90001F9523B91F851FAD2FD81F9D640E3A6F68
+:101AA000366B27B924D023BB09D025BF03D01F85AF
+:101AB000372D1F9523B91F8523BB1F851DD80A0EFF
+:101AC0003A6F366B23BB09D025BF03D01F85372D56
+:101AD0001F9523B91F8523BB1F8529B708D00CD8B4
+:101AE000010E3A6F366B1F8524A506D824952799D9
+:101AF000386B382B23991200396B3651355DD8A0DD
+:101B00000ED004E13A51345DD8A009D03651355F8A
+:101B10003A51345FD8A03507392B1F85EED7382FBF
+:101B20001200382B300E39251FB504D01FBF04D04A
+:101B3000200E01D0258FDE6E372F12002E0EDE6EA6
+:101B400023891200A96E31D0A96E2BD02B91010EE2
+:101B5000AA6E690E03D02691AA6A640EAD6E238F19
+:101B6000040EA96E9D9A9E9A09EC4AF049D8AECF10
+:101B7000A8FFFBEC49F026BF11D017D8FDEC49F0C7
+:101B8000A8CFADFF37D8A93EF1D70BEC4AF09E9A0B
+:101B90009D8AAA6A269F239FEAEF47F0FF0EAD6E4B
+:101BA000F4D7A69EA69CA6801200A69EA69CA684FC
+:101BB000F29E550EA76EAA0EA76EA682F28EA6B250
+:101BC000FED7A6941200948C948E240EAC6E900EC8
+:101BD000AB6E080EB86EB06A220EAF6EAE6A9E6A29
+:101BE0009D8A1200AC6AAB6A9D9A949C949E829CDA
+:101BF000829E1200ABAE12000000ACA2FBD7120016
+:101C00009E9A269F436B446B9EBA12000000000010
+:101C1000000000009EBA120000000000000000005A
+:101C20009EBA120000000000000000009EBA1200E0
+:101C300000000000000000009EBA1200442FE4D70C
+:101C4000432FE1D7AB98AB88268F1200DE6A7BC0AA
+:101C5000FAF17AC0F9F134EC5AF00101FAC17BF0E3
+:101C6000F9C17AF01200106F10C17DF0210E2FD94A
+:101C7000D8901035000ED8B0010E2ED9D89010355E
+:101C80002BD912000F6F0FC17CF0200E20D9000E4F
+:101C900023D90F5121D91200220E19D984807AC07C
+:101CA00083FF809480847BC083FF80948084210E96
+:101CB0000ED9D8901035000ED8B0010E0DD9D8909D
+:101CC0001037102909D9200E02D9000E05D90F515D
+:101CD00003D9220EFCD884807AC083FF809480844C
+:101CE0007BC083FF809480841200220EF0D8848011
+:101CF0007AC083FF809480847BC083FF809480843B
+:101D00001200836A80968194809A8494809484924D
+:101D10001200F4512BEC10F0F5C11CF11C51B2DF94
+:101D2000F75133EC0EF0E1DF1C2B1C51F663F6D7B4
+:101D30001C51A8DFF75133EC0EF0D7DFF5C11CF1D1
+:101D40001C51A0DFF85133EC0EF0CFDF1C2B1C51DF
+:101D5000F663F6D71C5196DFF85133EC0EF0C5DF71
+:101D6000F7C11CF11C517FDFF5518CDF95DF1C2B77
+:101D70001C51F863F7D7F7C11CF11C5174DFF65101
+:101D800081DF8ADF1C2B1C51F863F7D7FF0E2BEC89
+:101D900010F01200F4512BEC10F0350E98D8F7C16A
+:101DA0001CF1D8901C35000ED8B0010E95D8D890F3
+:101DB0001C3592D8360E8BD8F8C11CF1D8901C3542
+:101DC000000ED8B0010E88D8D8901C3585D8370EB3
+:101DD0007ED8F5C11CF11C517FD8F6C11CF11C51F5
+:101DE0007BD8200E74D8000E77D8F5C11CF11C5199
+:101DF00073D8210E6CD8F7C11CF1D8901C35000E99
+:101E0000D8B0010E69D8D8901C3566D8220E5FD89C
+:101E1000F5C11CF1F6C11DF11C511D5F1D2BF7C151
+:101E20001CF1F8C11EF11C511E5F1E2B84801EC1C7
+:101E30001CF17AC083FF809480847BC083FF8094F0
+:101E400080847AC083FF809480847BC083FF8094E9
+:101E500080841C2FEED71D2FEAD7000E38D8FF0E36
+:101E60002BEC10F01200350E32D8000E35D8000ED3
+:101E700033D8360E2CD8010E2FD83F0E2DD8370E62
+:101E800026D8000E29D8EF0E27D8200E20D8000E15
+:101E900023D8000E21D8210E1AD8000E1DD8000E0E
+:101EA0001BD8220E14D88480836A0A0E1E6F1E0E61
+:101EB0001D6F1C6B80948084809480841C2FFAD7C3
+:101EC0001D2FF7D71E2FF3D7000E01D812008490D4
+:101ED000836E8094808412008480836E80948084DA
+:101EE00012008096200EDAEC0CF081840000809ABB
+:101EF00000008482FA0EDAEC0CF0FA0EDAEC0CF048
+:101F0000848400008492020EAEEC0CF084820A0EEF
+:101F1000DAEC0CF0240EDBDF020ED9DF000EDCDF82
+:101F2000000EDADF030ED3DF000ED6DF300ED4DF73
+:101F3000180ECDDF000ED0DF280ECEDFF80EC7DF83
+:101F4000000ECADF0F0EC8DFF90EC1DF000EC4DFBE
+:101F50000F0EC2DF100EBBDF000EBEDF000EBCDFB7
+:101F60000CD881DF8086200EDAEC0CF0050EAFDF96
+:101F7000000EB2DF010EB0DF1200700EA8DF1F0EE0
+:101F8000ABDF000EA9DF710EA2DF230EA5DF800EEE
+:101F9000A3DF720E9CDF2A0E9FDF800E9DDF730E83
+:101FA00096DF150E99DF110E97DF740E90DF1C0E71
+:101FB00093DF110E91DF750E8ADF1B0E8DDF150E7C
+:101FC0008BDF760E84DF1A0E87DF150E85DF770E26
+:101FD0007EDF1C0E81DF180E7FDF780E78DF210E8A
+:101FE0007BDF150E79DF1200700E71DF140E74DFC7
+:101FF000000E72DF710E6BDF170E6EDF000E6CDFEE
+:10200000720E65DF150E68DF800E66DF730E5FDF10
+:10201000150E62DF110E60DF740E59DF140E5CDFE7
+:102020000B0E5ADF750E53DF1B0E56DF150E54DFF5
+:10203000760E4DDF130E50DF0E0E4EDF770E47DFAC
+:102040001C0E4ADF180E48DF780E41DF150E44DF04
+:102050000E0E42DF12002E6F2EC12FF1030E2F172E
+:10206000000E2F4F500E2F4FA00E2F4FF80E306F37
+:102070002EC12FF11C0E2F172F432F43000E2F4F71
+:10208000040E2F4F080E2F4F0C0E2F4F100E2F4FF8
+:10209000140E2F4F200E2F4F3F0E316F3133303340
+:1020A00031333033313330332EC12FF12E6B313396
+:1020B0002E3331332E3331332E33E00E2F172F438F
+:1020C0002F432F432F432F43000E2F4F040E2F4F2C
+:1020D000080E2F4F0C0E2F4F100E2F4F140E2F4F98
+:1020E000200E2F4F3F0E316F31332E3331332E33CD
+:1020F00031332E3331332E3331332E332EC17AF038
+:1021000030C17BF01200E46F1F0EE46505D0010EB4
+:10211000AA6E200EE45F01D0AA6AE451040DF350C8
+:10212000820FA96ED1EC0DF0A850AA6A1200E46FDC
+:102130001F0EE46505D0010EAA6E200EE45F01D0EB
+:10214000AA6AE451040DF350820FA96ED1EC0DF090
+:10215000A8CF32F1A92AD1EC0DF0A8CF33F1AA6AA9
+:1021600012009A0EE36F2A8D010EAA6E04D0240E7F
+:10217000E36F2A9DAA6A1F8F33EC0FF0010EBA6F2E
+:10218000219921972099AA6BA56B229D229F27EC6C
+:102190002AF0010EE8CF7FF02AAD04D0BA0E5DEC34
+:1021A0000BF003D01B0E5DEC0BF0000EE8CF7FF0C0
+:1021B000B86B21912193140EE8CF7DF0230EE8CF68
+:1021C0007CF020EE60F0AAC132F1000E2ABD200E94
+:1021D000322732C1DCF1386B382B376B1BEC0DF03A
+:1021E0003A0EDE6E200EDE6E26EC0EF0E351AA25CE
+:1021F0005DEC0BF01F0EDC5DD8B411D0260EDC5D5B
+:10220000D8B40DD0270EDC5DD8B409D0280EDC5D23
+:10221000D8B405D0290EDC5DD8B401D003D0010EAE
+:10222000DC6F01D0DC6B140EE8CF7DF0410EE8CFFF
+:102230007CF020EE60F02B0EDE6E2F0EDE6E2D0E8B
+:10224000DE6E3A0EDE6E200EDE6E2B0E22BD2D0EE1
+:10225000DE6E26EC0EF0140EE8CF7DF05F0EE8CFB8
+:102260007CF020EE60F0310EDE6E2F0EDE6E310E51
+:10227000DE6E300EDE6E3A0EDE6E200EDE6E310E3B
+:10228000DE6E300E22BFDE6E200EDE6E26EC0EF00D
+:10229000140EE8CF7DF07D0EE8CF7CF020EE60F0EC
+:1022A000590E56EC0BF0A551800FA96ED1EC0DF034
+:1022B000A8CF32F1A551810FA96ED1EC0DF0A8CFB6
+:1022C00033F1339F386B382B376B375129EC0DF0D6
+:1022D000280EDE6E310EA8AE380EDC67310EDE6ED3
+:1022E000350EA8BEDE6E420EDE6E290EDE6E200EAC
+:1022F000DE6E200EDE6E200EDE6E26EC0EF0140E6C
+:10230000E8CF7DF09B0EE8CF7CF020EE60F0610E10
+:1023100056EC0BF0A551820FA96ED1EC0DF0A8CFB1
+:1023200032F1A551830FA96ED1EC0DF0A8CF33F196
+:10233000386B382B376B375129EC0DF0200EDE6EE1
+:10234000200EDE6E200EDE6E26EC0EF00B0E5DEC27
+:102350000BF0FCEC12F02FEC1DF034EC2FF021B35D
+:102360000FD021B11AD020B3EAEF47F020B151ECE1
+:102370003BF020B1CCEC40F0209120B91CD0EDD73F
+:10238000BA2B070EBA6302D0010EBA6FB86B2FECEE
+:102390001DF0FCEC12F02193E0D7AA6A010E2ABDD1
+:1023A000AA6EBA4F0FD0BA4F17D0BA4F19D0BA4F42
+:1023B0001BD0BA4F39D0020E2AAD010EBA6FAA6AED
+:1023C000ADEF13F0AA2BAABBAA6BAA51040DF3CF51
+:1023D000A5F1010EBA6FECD6227D020EBA6FE8D6D7
+:1023E000227F030EBA6FE4D6A551800FA96ED1ECFF
+:1023F0000DF0A8CF32F1A551810FA96ED1EC0DF0EF
+:10240000A8CF33F1339FA551820FA96E32C1A8FF27
+:10241000D5EC0DF0A551830FA96E33C1A8FFD5EC03
+:102420000DF0040EBA6FC4D6A551820FA96ED1EC7F
+:102430000DF0A8CF32F1A551830FA96ED1EC0DF0AC
+:10244000A8CF33F1A551810FA96ED1EC0DF0A8CF23
+:10245000A6F1010EDC6305D032673269322B336B93
+:1024600016D022AD0BD0010E22BF0A0E325F000E35
+:10247000A6BF335B7F0E33BF336F09D0010E22BF7F
+:102480000A0E3227000EA6BF332333BF336BA5518C
+:10249000820FA96E32C1A8FFD5EC0DF0A551830FB4
+:1024A000A96E33C1A8FFD5EC0DF0050EBA6F80D62A
+:1024B000E46F1F0EE46505D0010EAA6E200EE45FE6
+:1024C00001D0AA6AE451040DF350800FA96ED1EC3B
+:1024D0000DF0A8CF32F1A92AD1EC0DF0A8CF33F13D
+:1024E000AA6A1200CF4F14D0CF4F19D01200CF4F8D
+:1024F0000FD0CF4F14D0CF4F19D0CF4F1ED0CF4FCA
+:1025000023D0CF4F28D0CF4F2FD0CF4F34D0120071
+:102510000B0E3DD8C2EC12F0020ECF6F12000C0E63
+:1025200049D8C2EC12F0030ECF6F1200110E2FD853
+:10253000C2EC12F0040ECF6F1200120E3BD8C2ECA8
+:1025400012F0050ECF6F1200130E34D8C2EC12F049
+:10255000060ECF6F1200060ECF6F1D0E3ED8C2ECD6
+:1025600012F0070ECF6F1200200E24D8C2EC12F02A
+:10257000080ECF6F1200210E1DD8C2EC12F0010E12
+:10258000CF6F1200326F3267120079EF28F0396F87
+:1025900097EC10F032C152F133C153F1395158EC7C
+:1025A00012F032C154F133C155F1D9EC0BF01FA731
+:1025B000FF0C000C396F97EC10F032C154F133C1AD
+:1025C00055F1395158EC12F032C152F133C153F187
+:1025D000D9EC0BF01FA7FF0C000C396F97EC10F033
+:1025E00032C154F133C155F1CFC152F1536BD9EC23
+:1025F0000BF01FA7FF0C000C280E2BA3C80EE56FD5
+:10260000050EDAEC0CF081B008D0E52FF9D781B0D7
+:1026100006D02B8324872499120081A2F1D7249716
+:1026200024992B9307EC4AF012002B97010EBA6FF6
+:102630001F9F33EC0FF0B86B209921912193208FCD
+:102640002187D0EC1DF02FEC1DF02497249942EC4B
+:1026500013F021B124D020AFEAEF47F020B151ECC4
+:102660003BF020B1CCEC40F020B18FEC3AF020B13F
+:1026700070EC45F0209120B9EAEF47F020B3EAEF83
+:1026800047F0E5D724A908D02183BA2B060EBA65F6
+:1026900018D0010EBA6F15D024B721811200BA4F9D
+:1026A000ECEF2BF0BA4FA8EF33F0BA4F0CEF15F068
+:1026B000BA4FAAEF13F0BA4F67EF13F0BA4FEAEF31
+:1026C00047F0B86B21B72FEC1DF024991200010ED2
+:1026D000BA6F1F9F33EC0FF0B86B209921912193B3
+:1026E000208F218721EC1EF02FEC1DF024972499D8
+:1026F00042EC13F0050EBA6304D0060EBA6F2FEC4D
+:102700001DF021B115D020AF90D720B151EC3BF096
+:1027100020B1CCEC40F020B18FEC3AF020B170EC5D
+:1027200045F0209120B981D720B3EAEF47F0E0D7F8
+:10273000BA4FAFEF16F0BA4F68EF31F0BA4F8AEFE9
+:1027400032F0BA4FEEEF48F0BA4FEEEF48F0050E18
+:10275000BA6F6ED72B97010EBA6F1F9F33EC0FF035
+:10276000EEEC1DF0B86B209921912193208F2187E9
+:10277000F7EC13F09BEC14F02FEC1DF02497249948
+:1027800042EC13F021B117D020AFEAEF47F020B1AF
+:1027900051EC3BF020B1CCEC40F020B18FEC3AF0A2
+:1027A00020B170EC45F0209120B9EAEF47F020B35A
+:1027B000EAEF47F0E5D7BA4FB7EF10F0BA4FB1EFF5
+:1027C00010F0BA4FA4D0BA4F03D0BA4F5CD036D075
+:1027D0002B87220EA4EC0DF0A82A060EA86201D0C9
+:1027E000A86AD5EC0DF0040EBA6F2499BBD7220E5F
+:1027F000A4EC0DF0A86604D0650E5DEC0BF01200A1
+:10280000A82E04D0660E5DEC0BF01200A82E04D0AA
+:10281000680E5DEC0BF01200A82E04D08A0E5DEC61
+:102820000BF01200A82E04D0980E5DEC0BF01200F5
+:10283000A82E1200EC0E5DEC0BF012002BA7EAEFB5
+:1028400047F033EC0FF027EC2AF0010EE8CF7FF0D1
+:10285000EB0E5DEC0BF0000EE8CF7FF0220EA4EC47
+:102860000DF0070EA802F350C10FBA6F070E396FB3
+:10287000BA515DEC0BF0BA2B392FFAD71E0E97EC3C
+:1028800048F0EAEF47F0010EBA6F1F9F33EC0FF0EC
+:102890000CEC1EF0B86B209921912193208F218799
+:1028A000FDEC14F0D7EC14F02FEC1DF024972499D4
+:1028B00042EC13F0030EBA6304D0060EBA6F2FEC8D
+:1028C0001DF021B117D020AFEAEF47F020B151EC55
+:1028D0003BF020B1CCEC40F020B18FEC3AF020B1CD
+:1028E00070EC45F0209120B9AAEF13F020B3EAEF85
+:1028F00047F0DED7BA4F4CD0BA4F6CD0BA4F2AD778
+:10290000BA4F28D7BA4F26D7050EBA6F26D71A0E58
+:10291000A4EC0DF0A82A630EA8640AD0690EA86082
+:1029200007D01A0EA2EC0DF0030EBA6F24991AD735
+:10293000640EA86EF6D71A0EA4EC0DF0630EA86410
+:1029400021D8690EA8601ED85F0EE8CF7CF0530E28
+:10295000E8CF7DF0000EE8CF7EF020EE60F0A8CF4B
+:1029600032F1336B1F8F030E29EC0DF01F9F6B0E9E
+:10297000DE6E670EDE6E2F0EDE6E6C0EDE6E26ECE9
+:102980000EF01200640EA86E1A0EA2EC0DF01200EA
+:102990005B0EA4EC0DF0A82A020EA86401D0A86A70
+:1029A0005B0EA2EC0DF0010EBA6F249973D75B0E8B
+:1029B000A4EC0DF0A86604D0030E5AEC0BF0120044
+:1029C000A82E04D0040E5AEC0BF01200050E5AEC9F
+:1029D0000BF01200270EA4EC0DF0A82A010EA8643B
+:1029E00001D0A86A270EA2EC0DF02A85010EA8627C
+:1029F0002A95020EBA6F24994DD7270EA4EC0DF03C
+:102A0000A86603D0830E5DEC0BF0A806A866FED680
+:102A1000820E5DEC0BF01200010EBA6F33EC0FF07A
+:102A20003CEC1EF0B86B209921912193208F2187D7
+:102A30003CEC1EF02FEC1DF02497249942EC13F08F
+:102A400021B116D020AFF1D520B151EC3BF020B12F
+:102A5000CCEC40F020B18FEC3AF020B170EC45F0B6
+:102A6000209120B915EF13F020B3EAEF47F0E6D735
+:102A7000BA4F08D0BA4F3AD0BA4F16D0BA4F05D095
+:102A8000BA4F20D0030EBA6FD3D5BAEC20F0BA6F8C
+:102A9000BA6701D0F7D781EC0EF0000E9B6E7E0E68
+:102AA000D36EFF0000EF00F0BAEC20F0BA6FBA6707
+:102AB00001D0E8D733EC0FF0190E5DEC0BF088EC89
+:102AC00016F0E0D7BAEC20F0BA6FBA6701D0DAD7C7
+:102AD00033EC0FF0190E5DEC0BF08DC100F58EC1DB
+:102AE00001F520EC80F00101EAEF47F0BAEC20F0AC
+:102AF000BA6FBA6701D0C6D733EC0FF0190E5DEC90
+:102B00000BF08DC100F58EC101F520EC80F00101C4
+:102B1000AA6A030EA96E336B150EE2D8150EE0D823
+:102B2000150EDED8150EDCD8150EDAD8150ED8D84D
+:102B3000010EA86E210EA2EC0DF0A86A220EA2ECE6
+:102B40000DF0A86A230EA2EC0DF0000EA86A270E65
+:102B5000A2EC0DF0A86A5A0EA2EC0DF0A86A5B0E6A
+:102B6000A2EC0DF0640E1A0EA2EC0DF01F0EA86E72
+:102B70001B0EA2EC0DF0A86A1C0EA2EC0DF0A86AC8
+:102B80001D0EA2EC0DF0A86A1E0EA2EC0DF0A86AB4
+:102B90001F0EA2EC0DF0A86A200EA2EC0DF0640E40
+:102BA000A86E240EA2EC0DF0250EA2EC0DF0260E60
+:102BB000A2EC0DF0010ECC6FCD6B7F0EA96E336BC6
+:102BC000640E8ED81E0E8CD8F00E8AD8780E88D857
+:102BD000050E86D8070E84D8040E336F338F880E07
+:102BE0007FD8040E336F338F4C0E7AD8140E78D8FA
+:102BF000140E76D81E0E74D86E0E72D85A0E70D877
+:102C00003C0E6ED8640E6CD8780E6AD80A0E68D85E
+:102C1000130E66D8A00E64D8960E62D80A0E60D83D
+:102C2000060E5ED8060E5CD8000E5AD8000E58D894
+:102C30000C0E56D8000E54D8140E52D8336B338F66
+:102C4000000E4ED8030E4CD80A0E4AD8000E48D8B3
+:102C5000010EAA6E7F0EA96E336B1E0E41D85A0E5E
+:102C60003FD8460E3DD88C0E3BD8780E39D8000E92
+:102C700037D8000E35D8000E33D8000E31D8000EEC
+:102C80002FD8000E2DD8000E2BD8000E29D8000EFC
+:102C900027D8000E25D8000E23D8000E21D8000E0C
+:102CA0001FD8000E1DD8000E1BD8000E19D8000E1C
+:102CB00017D8000E15D8000E13D8000E11D8000E2C
+:102CC0000FD8000E0DD8000E0BD8000E09D8000E3C
+:102CD00007D8000E05D8000E03D8AA6AEAEF47F01D
+:102CE000326FA92A32C1A8FFD5EC0DF0A92A33C151
+:102CF000A8FFD5EC0DF0A92A32C1A8FFD5EC0DF044
+:102D0000A92A339F33C1A8FFD5EC0DF0336B120015
+:102D1000BD6BBE6B020E366F376B400E3A6F23935E
+:102D20003B693B51EAEC2AF03A2FFAD7C584A0EC74
+:102D30002BF0070EDAEC0CF0372FEFD7362FECD74D
+:102D40002393BD6BBE6BFD0EDEEC2AF0FD0EDEECB8
+:102D50002AF0FE0EDEEC2AF0BD6BBE6B120033ECE7
+:102D60000FF0219521992197B86B219121932099FA
+:102D7000229122932295BB6B27EC2AF0010EE8CF1B
+:102D80007FF01D0E5DEC0BF0000EE8CF7FF0160E0D
+:102D90005DEC0BF0170E5DEC0BF0E9EC16F0180E85
+:102DA0005DEC0BF02497249924B7AEEC17F024B90E
+:102DB0007AEC17F021B942D020B151EC3BF020B1B0
+:102DC000CCEC40F0209120B991D020B3EAEF47F04D
+:102DD000EBD7460EE8CF7DF0410EE8CF7CF020EE39
+:102DE00060F005C132F1386B382B376B1BEC0DF0FE
+:102DF0003A0EDE6E04C132F1386B382B376B1BECA8
+:102E00000DF0200EDE6E200EDE6E26EC0EF0460E6D
+:102E1000E8CF7DF05F0EE8CF7CF020EE60F007C1D8
+:102E2000F1F106C1F2F108C1F3F132EC23F0200E0A
+:102E3000DE6E200EDE6E26EC0EF0120007C132F1BF
+:102E4000324F1F0E324F1C0E324F1F0E324F1E0ECE
+:102E5000324F1F0E324F1E0E324F1F0E324F1F0EBB
+:102E6000324F1E0E324F1F0E324F1E0E324F1F0EAC
+:102E7000066502D0010E066F200EE8CF7DF09B0E96
+:102E8000E8CF7CF0080E396FA8EC1CF0050E0A6F35
+:102E9000036B209120A1FED7209107EC17F0460E7E
+:102EA000E8CF7DF0410EE8CF7CF020EE60F005C168
+:102EB00032F1386B382B376B1BEC0DF03A0EDE6EAF
+:102EC00004C132F1386B382B376B1BEC0DF03A0E26
+:102ED000DE6E03C132F1386B382B376B1BEC0DF013
+:102EE000200EDE6E26EC0EF00A2FD4D7010EBA6F3C
+:102EF00069EF13F022B12189BB2BBBC1BCF1BC4FE0
+:102F00002185BC4F2285BC4F2283BC4F2281200EDD
+:102F1000E8CF7DF09B0EE8CF7CF020EE60F05E0EF7
+:102F200056EC0BF0BBC1BCF1BC2F04D05A0E56ECD2
+:102F30000BF00FD0BC2F04D05B0E56EC0BF009D079
+:102F4000BC2F04D05C0E56EC0BF003D05D0E56EC9B
+:102F50000BF026EC0EF0FCEC12F012002499036B3F
+:102F600022B120D022B310D022B515D021B506D081
+:102F7000052B170E05651CD0056B1AD0042B3B0ED4
+:102F8000046516D0046B14D0062B1F0E066510D0F6
+:102F9000010E066F0DD0072B0C0E076509D0010E30
+:102FA000076F06D0082B140E086502D0080E086FB4
+:102FB000E9EC16F0FCEC12F012007C6B080E7B6F53
+:102FC0006CC17DF16DC17EF191EC0CF0100E772794
+:102FD000270E782372C181F173C182F177C183F129
+:102FE00078C184F17AEC0CF07FC185F180C186F163
+:102FF0002AB71ED0239585C17BF186C17CF185C19E
+:103000007DF186C17EF191EC0CF0110E766F6AECC9
+:103010000CF085C181F186C182F177C183F178C15D
+:1030200084F17AEC0CF07FC187F180C188F117D070
+:10303000238585C17BF186C17CF185C17DF186C187
+:103040007EF191EC0CF00F0E766F6AEC0CF085516E
+:1030500077278651782377C187F178C188F16AC1D3
+:1030600081F16BC182F1FA0E836F846B7AEC0CF004
+:103070007FC17BF180C17CF185C17DF186C17EF18C
+:1030800091EC0CF077C174F178C175F10C0E766F8C
+:1030900064EC0CF074C177F175C178F12AA70DD0FA
+:1030A0006451772765517823100E7727270E7823F0
+:1030B00077C189F178C18AF10FD064C181F165C10E
+:1030C00082F177C183F178C184F17AEC0CF07FC191
+:1030D00077F180C178F1E8D766C168F167C169F11D
+:1030E000C80E6827000E692368C17BF169C17CF1B5
+:1030F00085C17DF186C17EF191EC0CF077C174F150
+:1031000078C175F10D0E766F64EC0CF074C18BF123
+:1031100075C18CF162C174F163C175F1010E766FF6
+:1031200064EC0CF074518B2775518C23B80E8B27EF
+:103130000B0E8C2370C181F171C182F189C183F1C1
+:103140008AC184F17AEC0CF07FC17BF180C17CF103
+:103150008BC17DF18CC17EF191EC0CF00C0E766F81
+:103160006AEC0CF02AB772EC0CF0E80E7727030E2D
+:10317000782377C18DF178C18EF125AD04D0C6C119
+:103180008DF1C7C18EF16EC168F16FC169F1640E36
+:103190006827000E692368C17BF169C17CF187C192
+:1031A0007DF188C17EF191EC0CF00B0E766F6AEC2C
+:1031B0000CF0249D23B509D0C80E7727000E782384
+:1031C00077C197F178C198F11200C80E816F826BB8
+:1031D00077C183F178C184F17AEC0CF02AB7248DA1
+:1031E0007FC197F180C198F11200D4D8A00E3D6F35
+:1031F0000C0E586F08D91200E3D857C171F156C1AF
+:1032000070F11200C7D8900EF2D7DAD857C173F117
+:1032100056C172F11200238F596B000EA96E010E78
+:10322000AA6ED1EC0DF0AA6AC80EA864A8CF59F115
+:10323000B1D80D0E586F540E3D6FE5D8C1D857C1A7
+:103240005BF156C15AF10D0E586F580E3D6FDBD829
+:10325000B7D857C15DF156C15CF10D0E586F640EC1
+:103260003D6FD1D8ADD857C15FF156C15EF10D0E9B
+:10327000586F680E3D6FC7D8A3D857C161F156C1CA
+:1032800060F15BC163F1D8906333D8906333D89019
+:1032900063335AC162F1D8805BA1D8906233D88081
+:1032A0005BA3D8906233D8805BA5D89062335CC1B1
+:1032B00064F1D8805DA1D8906433D8805DA3D890A4
+:1032C0006433D8805DA5D8906433D8805DA7D8904A
+:1032D0006433D8805DA9D8906433D8805DABD89032
+:1032E00064335DC165F1D8805AA1D8906533D88028
+:1032F0005AA3D8906533D8805AA5D8906533D89012
+:103300006533D8906533D89065335FC166F1D88056
+:103310005EAFD8906637D8805EADD8906637676B61
+:103320005FBF67835FBD678161C16AF1D88060AFAD
+:10333000D8906A376B6B61BF6B815EC16CF16C9D1D
+:103340005CB16C8D6C9F5CB36C8F6D6B5CB56D818B
+:103350005CB76D835CB96D855CBB6D876F6B60C15D
+:103360006EF16E9F239F120080820000808E00000D
+:1033700000000000000000000000809E120080920B
+:103380000000808E0000000000000000000000002F
+:10339000809E1200E9DFF3DFE7DFF1DFE5DFEFDF3B
+:1033A000E3DFEDDFE1DFEBDFDFDFE9DFDDDFE7DFFD
+:1033B000DBDFE5DFE4DFE3DFE2DFE1DFE0DF1200B8
+:1033C000080E586F10D83DC157F1080E586F0BD832
+:1033D0003DC156F1808E000000000000000000009A
+:1033E0000000809E1200808E00000000000000009F
+:1033F00000000000809E80A8D89080B8D8803D371B
+:10340000582FF1D71200809E8082030E585F808E65
+:10341000000000000000000000000000809E00008E
+:1034200000000000000000000000808E000000008E
+:103430000000000000000000809E0000000000006E
+:10344000000000000000808E00000000000000006E
+:1034500000000000809E3DAF80923DBF8082D890EA
+:103460003D37808E000000000000000000000000DA
+:10347000809E582FF0D71200DB6FD9C1DAF1D8C186
+:10348000D9F1D7C1D8F1D6C1D7F1D5C1D6F1DBC1B9
+:10349000D5F12AA51200C80EE8CF7CF0640EE8CF63
+:1034A0007DF0000EE8CF7EF0000EE8CF7FF0FF0E3B
+:1034B0002BEC10F020EE60F0D551DE6ED651DE6EB2
+:1034C000D751DE6ED851DE6ED951DE6EDA51DE6E26
+:1034D000200EDE6E26EC0EF01200FFEC49F00FEC31
+:1034E0004AF071EC0FF033EC0FF0FF0E2BEC10F004
+:1034F000850E5DEC0BF0860E5DEC0BF0870E5DEC3F
+:103500000BF0880E5DEC0BF0640EE8CF7CF00A0E39
+:10351000E8CF7DF0000EE8CF7EF0000EE8CF7FF020
+:10352000FF0E2BEC10F020EE60F0D551DE6ED65180
+:10353000DE6ED751DE6ED851DE6ED951DE6EDA51B5
+:10354000DE6E2E0EDE6E200EDE6E1FC132F1386B87
+:10355000382B376B20EC0DF0200EDE6E20C132F1DF
+:10356000386B382B376B20EC0DF026EC0EF07D0E0F
+:10357000E8CF7CF00A0EE8CF7DF0000EE8CF7EF0B9
+:10358000000EE8CF7FF0FF0E2BEC10F020EE60F085
+:1035900021C132F1386B382B376B20EC0DF0200E47
+:1035A000DE6E22C132F1386B382B376B20EC0DF018
+:1035B000200EDE6E23C132F1386B382B376B20ECD6
+:1035C0000DF0200EDE6E24C132F1386B382B376BD4
+:1035D00020EC0DF0200EDE6E25C132F1386B382B59
+:1035E000376B20EC0DF026EC0EF0960EE8CF7CF059
+:1035F0000A0EE8CF7DF0000EE8CF7EF0000EE8CF97
+:103600007FF0FF0E2BEC10F020EE60F026C132F1BF
+:10361000386B382B376B20EC0DF0200EDE6E27C197
+:1036200032F1386B382B376B20EC0DF0200EDE6E4C
+:1036300028C132F1386B382B376B20EC0DF0200E9F
+:10364000DE6E29C132F1386B382B376B20EC0DF070
+:10365000200EDE6E2AC132F1386B382B376B20EC2E
+:103660000DF026EC0EF024A7FED7FDEC49F0120079
+:10367000E00E2BEC10F00B0E5AEC0BF0560E5DEC3E
+:103680000BF0570E5DEC0BF0FF0E2BEC10F0120060
+:10369000000EE8CFF4F13C0EE8CFF5F1EF0EE8CFE5
+:1036A000F6F15A0EE8CFF7F19F0EE8CFF8F1CAEC29
+:1036B0000EF0A7EC1EF013EC1FF01200E9DFE00E95
+:1036C0002BEC10F0540E5DEC0BF0FF0E2BEC10F019
+:1036D000080E396F910EE8CF7CF0000EE8CF7DF038
+:1036E000A8EC1CF012002BB512007A0E3CEC1AF07C
+:1036F000B90EE8CF7CF0770EE8CF7DF0010EE8CF71
+:103700007EF0000EE8CF7FF0FF0E2BEC10F020EEE5
+:1037100060F022C532F1386B382B376B20EC0DF09E
+:10372000270EDE6E26EC0EF0000EE8CF7EF01200C3
+:10373000AFDFE00E2BEC10F0550E5DEC0BF0FF0E42
+:103740002BEC10F012002BB5120020BF34D0790EF4
+:103750003CEC1AF0E00E2BEC10F0520E5DEC0BF08E
+:10376000FF0E2BEC10F0760EE8CF7CF05E0EE8CF6B
+:103770007DF0010EE8CF7EF0000EE8CF7FF0FF0E67
+:103780002BEC10F020EE60F02BC532F1386B382BAB
+:10379000376B0AEC0DF06D0EDE6E24C532F1386B1E
+:1037A000382B376B0AEC0DF0270EDE6E26EC0EF090
+:1037B000000EE8CF7EF02BB51200780E3CEC1AF02C
+:1037C000B90EE8CF7CF0770EE8CF7DF0010EE8CFA0
+:1037D0007EF0000EE8CF7FF0FF0E2BEC10F020EE15
+:1037E00060F031C532F1C70E3261326F1F9F386B06
+:1037F000382B376B20EC0DF0270EDE6E26EC0EF02A
+:1038000032C532F1080E83EC10F0326101D060D77E
+:10381000770E3CEC1AF0910EE8CF7CF0000EE8CF6A
+:103820007DF0000EE8CF7EF0FF0E2BEC10F020EEC6
+:1038300060F0470EDE6E460EDE6E3A0EDE6E32C56C
+:1038400032F1386B382B376B20EC0DF0250EDE6E25
+:10385000200EDE6E26EC0EF01200410EE8CF7CF05A
+:10386000690EE8CF7DF0000EE8CF7EF0FF0E2BEC66
+:1038700010F020EE60F0EBC132F11F8F386B382B67
+:10388000376B20EC0DF01F9F6D0EDE6E690EDE6E45
+:103890006E0EDE6E200EDE6E26EC0EF05F0EE8CFB2
+:1038A0007CF0640EE8CF7DF0000EE8CF7EF0FF0ED6
+:1038B0002BEC10F020EE60F0ECC132F11F8F386B72
+:1038C000382B376B20EC0DF01F9F6D0EDE6E200E37
+:1038D000DE6E26EC0EF012002BB51200760E3CECDC
+:1038E0001AF05A0EE8CF7CF0000EE8CF7DF0000E03
+:1038F000E8CF7EF0FF0E2BEC10F020EE60F02D0EE6
+:103900001FB72B0EDE6E45C132F1386B382B376B8B
+:103910000AEC0DF0530E56EC0BF026EC0EF02B8952
+:103920001200080E396F5A0EE8CF7CF0000EE8CF77
+:103930007DF02B990DD0060E396F020EE8CF7CF08A
+:10394000730EE8CF7DF004D0010EE8CF7EF003D0F7
+:10395000000EE8CF7EF020EE60F0200EDE6E392FF4
+:10396000FCD726EC0EF0000EE8CF7EF01200630EBE
+:103970003CEC1AF0320EE8CF7CF0000EE8CF7DF080
+:10398000000EE8CF7EF0000EE8CF7FF0FF0E2BECAC
+:1039900010F020EE60F019C132F1326705D01AC183
+:1039A00032F1326701D039D02DAF34D0B72F01D0EA
+:1039B00034D02D8F060EB76125D819C132F11AC146
+:1039C00033F1B6EC0BF0335132C133F1326F490EA3
+:1039D000DE6E6E0EDE6E740EDE6E3A0EDE6E386BCE
+:1039E000382B376B1BEC0DF03A0EDE6E33C132F123
+:1039F000386B382B376B1BEC0DF0200EDE6E26EC8F
+:103A00000EF012002D9F050EB76F12002D8F050EC0
+:103A1000B76F1200B72F01D0CCD72D9F060EB7611C
+:103A2000F5DF05C132F1386B382B376B1BEC0DF02D
+:103A30003A0EDE6E04C132F1386B382B376B1BEC5B
+:103A40000DF03A0EDE6E03C132F1386B382B376B56
+:103A50001BEC0DF0200EDE6E26EC0EF01200230E95
+:103A6000E8CF7CF0000EE8CF7DF0000EE8CF7EF0CE
+:103A7000000EE8CF7FF0FF0E2BEC10F020EE60F090
+:103A8000B80EDE6E26EC0EF0410EE8CF7CF0000E94
+:103A9000E8CF7DF0000EE8CF7EF0000EE8CF7FF09B
+:103AA000FF0E2BEC10F020EE60F0B80EDE6E26EC70
+:103AB0000EF05F0EE8CF7CF0000EE8CF7DF0000E38
+:103AC000E8CF7EF0000EE8CF7FF0FF0E2BEC10F079
+:103AD00020EE60F0B80EDE6E26EC0EF07D0EE8CF24
+:103AE0007CF0000EE8CF7DF0000EE8CF7EF0000EF7
+:103AF000E8CF7FF0FF0E2BEC10F020EE60F0B80E58
+:103B0000DE6E26EC0EF09B0EE8CF7CF0000EE8CFC8
+:103B10007DF0000EE8CF7EF0000EE8CF7FF0FF0EC4
+:103B20002BEC10F020EE60F0B80EDE6E26EC0EF0FE
+:103B3000B90EE8CF7CF0000EE8CF7DF0000EE8CFA4
+:103B40007EF0000EE8CF7FF0FF0E2BEC10F020EEA1
+:103B500060F0B80EDE6E26EC0EF0BAC139F1394FC6
+:103B6000230E394F410E394F5F0E394F7D0E394FBD
+:103B70009B0E394FB90EE8CF7CF0000EE8CF7DF0F8
+:103B8000000EE8CF7EF0000EE8CF7FF0FF0E2BECAA
+:103B900010F020EE60F0B70EDE6E26EC0EF0120094
+:103BA00027EC2AF0010EE8CF7FF0050E5DEC0BF05C
+:103BB000000EE8CF7FF0060E5DEC0BF0070E5DEC1B
+:103BC0000BF0090E5DEC0BF00A0E5DEC0BF08E0EA7
+:103BD0005DEC0BF00B0E5DEC0BF0120027EC2AF005
+:103BE000010EE8CF7FF0620E5DEC0BF0000EE8CF27
+:103BF0007FF0630E5DEC0BF0990E5DEC0BF0140E94
+:103C00005AEC0BF0640E5DEC0BF08E0E5DEC0BF0DD
+:103C10000B0E5DEC0BF0120027EC2AF0010EE8CF42
+:103C20007FF0020E5AEC0BF0000EE8CF7FF0010E91
+:103C30005AEC0BF0810E5DEC0BF00B0E5DEC0BF013
+:103C4000120027EC2AF0010EE8CF7FF0900E5DEC19
+:103C50000BF0000EE8CF7FF0080E5DEC0BF06E0E5F
+:103C60005DEC0BF0710E5DEC0BF0F70E5DEC0BF004
+:103C70000B0E5DEC0BF0120027EC2AF0010EE8CFE2
+:103C80007FF01C0E5DEC0BF0000EE8CF7FF0150E00
+:103C90005DEC0BF0F50E5DEC0BF01C0E5AEC0BF02E
+:103CA0001D0E5AEC0BF01E0E5AEC0BF00B0E5DECD9
+:103CB0000BF0120027EC2AF0010EE8CF7FF0F80E8F
+:103CC0005DEC0BF0000EE8CF7FF0F90E5DEC0BF031
+:103CD000150E5AEC0BF0160E5AEC0BF0170E5AECB0
+:103CE0000BF0180E5AEC0BF00B0E5DEC0BF0120003
+:103CF000650E3CEC1AF097C199F198C19AF1640EE7
+:103D0000E8CF7CF0000EE8CF7DF0000EE8CF7EF02B
+:103D1000000EE8CF7FF0FF0E2BEC10F020EE60F0ED
+:103D20002D0E24BDDE6E97C132F198C133F1030E22
+:103D3000386F1F8F020E29EC0DF01F9FB00EDE6E44
+:103D4000430EDE6E200EDE6E26EC0EF012002BB55A
+:103D50001200750E3CEC1AF097C199F198C19AF1D6
+:103D6000D80EE8CF7CF0410EE8CF7DF0000EE8CF12
+:103D70007EF0000EE8CF7FF0FF0E2BEC10F020EE6F
+:103D800060F02D0E24BDDE6E97C132F198C133F183
+:103D9000030E386F1F8F020E29EC0DF01F9FB00E1F
+:103DA000DE6E200EDE6E26EC0EF01200740E3CEC81
+:103DB0001AF0780EE8CF7CF0000EE8CF7DF0000E10
+:103DC000E8CF7EF0FF0E2BEC10F020EE60F0700ECE
+:103DD000DE6E700EDE6E4F0EDE6E320EDE6E3A0E50
+:103DE000DE6E48C132F149C133F12987010E29EC59
+:103DF0000DF02997200EDE6E26EC0EF012000A0E52
+:103E0000396F780EE8CF7CF0000EE8CF7DF0A8EC9B
+:103E10001CF01200C00EE8CF7CF0410EE8CF7DF020
+:103E2000050E396F95D52ABB12002BB51200730E03
+:103E30003CEC1AF0C00EE8CF7CF0410EE8CF7DF0EC
+:103E4000000EE8CF7EF0000EE8CF7FF0FF0E2BECE7
+:103E500010F0640E10C532F1D880325511C532F120
+:103E6000D8803257090E83EC10F011C533F132655A
+:103E700001D005D0336703D0050E396F69D5150E13
+:103E800032630AD0336708D020EE60F0080E53EC9E
+:103E90000BF026EC0EF0120020EE60F01F8F386B56
+:103EA000382B376B20EC0DF02F0EDE6E11C532F182
+:103EB000386B382B376B20EC0DF0200EDE6E1F9F19
+:103EC00026EC0EF01200550EE8CF7DF0000EE8CF84
+:103ED0007EF0000EE8CF7FF0AA6A220EA4EC0DF06F
+:103EE000A86622D07D0EE8CF7CF0FF0E2BEC10F000
+:103EF00020EE60F04F0EDE6E26EC0EF0550EE8CF91
+:103F00007DF0000EE8CF7EF0000EE8CF7FF0960E39
+:103F1000E8CF7CF0FF0E2BEC10F020EE60F0430EAB
+:103F2000DE6E26EC0EF01200A806A86601D0120084
+:103F3000A806A8662BD07D0EE8CF7CF0FF0E2BECF8
+:103F400010F020EE60F0430EDE6E550EE8CF7DF0EF
+:103F5000000EE8CF7EF0000EE8CF7FF026EC0EF0EA
+:103F6000960EE8CF7CF0FF0E2BEC10F020EE60F008
+:103F7000430EDE6E550EE8CF7DF0000EE8CF7EF0EA
+:103F8000000EE8CF7FF026EC0EF01200A806A8661F
+:103F900001D01200A806A8662BD07D0EE8CF7CF0D9
+:103FA00020EE60F0470EDE6E550EE8CF7DF0000E7D
+:103FB000E8CF7EF0000EE8CF7FF0FF0E2BEC10F084
+:103FC00026EC0EF0960EE8CF7CF020EE60F0460E68
+:103FD000DE6E550EE8CF7DF0000EE8CF7EF0000ECD
+:103FE000E8CF7FF0FF0E2BEC10F026EC0EF0120065
+:103FF0007D0EE8CF7CF020EE60F0470EDE6E550EB1
+:10400000E8CF7DF0000EE8CF7EF0000EE8CF7FF025
+:10401000FF0E2BEC10F026EC0EF0960EE8CF7CF0A5
+:1040200020EE60F0460EDE6E550EE8CF7DF0000EFD
+:10403000E8CF7EF0000EE8CF7FF0FF0E2BEC10F003
+:1040400026EC0EF01200710E3CEC1AF02ABB1200A6
+:1040500028BF120029A124D0870EE8CF7CF05A0E89
+:10406000E8CF7DF0000EE8CF7EF0000EE8CF7FF0C5
+:10407000FF0E2BEC10F020EE60F0240EA4EC0DF0FF
+:10408000A8CF32F1336B030E29EC0DF0420EDE6E39
+:10409000610EDE6E720EDE6E1F9F26EC0EF058D0A3
+:1040A000820EE8CF7CF0640EE8CF7DF0010EE8CF01
+:1040B0007EF0000EE8CF7FF0FF0E2BEC10F0210E0B
+:1040C000A4EC0DF0A8CFD1F1D105040DF350070FEA
+:1040D000A96ED1EC0DF0A8CF11F5D105040DF35068
+:1040E000060FA96ED1EC0DF0A8CFD0F111C50AF1E1
+:1040F000D880640E0A55D880A856A8CF10F5640E53
+:1041000010C532F1D880325511C532F1D8803257FE
+:1041100011C533F1150E326306D0336704D0090E92
+:104120005AEC0BF015D020EE60F01F8F386B382B57
+:10413000376B20EC0DF02F0EDE6E11C532F1386BAF
+:10414000382B376B20EC0DF01F9F26EC0EF000D0C3
+:10415000000EE8CFF4F17A0EE8CFF5F1AF0EE8CF1C
+:10416000F6F1520EE8CFF7F19F0EE8CFF8F189ECA7
+:104170000EF01200000EE8CFF4F1440EE8CFF5F196
+:10418000920EE8CFF6F1220EE8CFF7F1650EE8CFF8
+:10419000F8F1CAEC0EF0FF0EE8CFF4F1460EE8CFCE
+:1041A000F5F1900EE8CFF6F1230EE8CFF7F1640EAB
+:1041B000E8CFF8F189EC0EF08F0E5DEC0BF0910E6C
+:1041C0005DEC0BF0920E5DEC0BF0010EBA6F000E81
+:1041D000E8CFF4F1600EE8CFF5F18F0EE8CFF6F1FD
+:1041E000270EE8CFF7F1330EE8CFF8F1CAEC0EF066
+:1041F000BAC139F1600E394F600E394F780EE8CFF1
+:104200007CF0270EE8CF7DF0000EE8CF7EF0000EA8
+:10421000E8CF7FF0FF0E2BEC10F020EE60F0B70E31
+:10422000DE6E26EC0EF0209921912193249924979B
+:10423000B86B640EDAEC0CF034EC2FF021B315D02F
+:1042400021B10ED020B151EC3BF020B1CCEC40F0CC
+:10425000209120B903D020B301D0EED7000C010C7F
+:10426000BA4FFCD7BA4FFBD7F9D7BA2B030EBA63B4
+:1042700002D0010EBA6FABD7720E3CEC1AF090C1AF
+:1042800033F18FC132F1A6EC2AF0270E336171D0E1
+:104290002BBBE0EC21F02B9B20EE60F0030E536F64
+:1042A000E80E526F33C155F132C154F1542B000E58
+:1042B0005523D9EC0BF01FA780D8180EE8CF7CF05F
+:1042C000000EE8CF7DF0020EE8CF7EF0000EE8CFC2
+:1042D0007FF0FF0E2BEC10F0000E536F630E526F49
+:1042E00033C155F132C154F1D9EC0BF01FA70AD0FC
+:1042F0001F8F2987386B382B376B375129EC0DF01E
+:104300001F9F02D0300EDE6E26EC0EF02997010EB4
+:10431000E8CF7EF0320EE8CF7CF0280EE8CF7DF0BB
+:10432000FF0E2BEC10F090C133F18FC132F1A6ECEF
+:104330002AF020EE60F02E0EDE6E000E536F090E96
+:10434000526F33C155F132C154F1D9EC0BF01FA7B4
+:1043500007D0040E386F2485000E29EC0DF002D032
+:10436000300EDE6E26EC0EF02495000EE8CF7EF0C7
+:1043700012002BABE0EC21F020EE60F0180EE8CF3D
+:104380007CF0000EE8CF7DF0020EE8CF7EF0000E4C
+:10439000E8CF7FF0FF0E2BEC10F029871F8F386BD2
+:1043A000382B376B375129EC0DF01F9F26EC0EF0A0
+:1043B0002997000EE8CF7EF01200200EDE6E12006C
+:1043C000000EE8CFF4F1180EE8CFF5F15A0EE8CF61
+:1043D000F6F1000EE8CFF7F15A0EE8CFF8F1CAEC8B
+:1043E0000EF02B8B1200680E3CEC1AF0960EE8CF04
+:1043F0007CF0000EE8CF7DF0000EE8CF7EF0000EDE
+:10440000E8CF7FF0FF0E2BEC10F020EE60F00E0EE8
+:1044100056EC0BF0200EDE6E20C532F121C533F1D3
+:10442000B6EC0BF01F8F325133C132F1336F386B62
+:10443000382B376B20EC0DF03A0EDE6E33C132F1C3
+:10444000386B382B376B1BEC0DF01F9F26EC0EF0F2
+:104450001200670E3CEC1AF07D0EE8CF7CF0000EE7
+:10446000E8CF7DF0000EE8CF7EF0000EE8CF7FF0C1
+:10447000FF0E2BEC10F020EE60F0230E56EC0BF04C
+:10448000200EDE6ECCC132F1CDC133F1B6EC0BF0B3
+:104490001F8F325133C132F1336F386B382B376B8A
+:1044A00020EC0DF03A0EDE6E33C132F1320732BF2E
+:1044B000326B386B382B376B1BEC0DF01F9F26ECE3
+:1044C0000EF0120020BD1200620E3CEC1AF0190E24
+:1044D000E8CF7CF0000EE8CF7DF0000EE8CF7EF054
+:1044E000000EE8CF7FF0FF0E2BEC10F020EE60F016
+:1044F0008DC132F18EC133F11F8F386B382B376B82
+:10450000375129EC0DF01F9F6D0EDE6E620EDE6ED0
+:10451000610EDE6E720EDE6E200EDE6E26EC0EF08A
+:104520001200660E3CEC1AF01F0E83EC10F0326F96
+:10453000010E326324D0AF0EE8CF7CF0000EE8CF3E
+:104540007DF0000EE8CF7EF0000EE8CF7FF0FF0E8A
+:104550002BEC10F020EE60F0C2C132F1C3C133F198
+:10456000010E386F24851F8F020E29EC0DF01F9F5E
+:10457000560EDE6E200EDE6E26EC0EF01200FF0EE2
+:10458000E8CFF4F1AE0EE8CFF5F1C20EE8CFF6F1C8
+:10459000000EE8CFF7F11F0EE8CFF8F189EC0EF02E
+:1045A000100E526F0E0E536FC2C154F1C3C155F1BC
+:1045B000D9EC0BF01FB742D0B80E546F0B0E556FED
+:1045C000C2C152F1C3C153F1D9EC0BF01FB733D0C4
+:1045D00050C14CF151C14DF1140E4E6F4F6B0DECAB
+:1045E0000CF048C10AF1020E0A650A6FFF0EE8CF0F
+:1045F000F4F1B50EE8CFF5F1BB0EE8CFF6F11F0EE2
+:10460000E8CFF7F1210EE8CFF8F189EC0EF0DF0EDC
+:10461000E8CFF4F1AF0EE8CFF5F1C10EE8CFF6F137
+:10462000010EE8CFF7F10AC1F8F1CAEC0EF0FF0E67
+:104630002BEC10F01200010E0A6FD8D71E0E0A6F75
+:10464000FF0EE8CFF4F1B50EE8CFF5F1BB0EE8CFE1
+:10465000F6F11F0EE8CFF7F1210EE8CFF8F1CAEC22
+:104660000EF0D5D75B0EA4EC0DF0A8660ED0F1C10C
+:1046700032F11F8F386B382B376B1BEC0DF01F9FFF
+:104680002F0EDE6EF2C132F112D05B0EA4EC0DF0F3
+:10469000A82E1FD0F2C132F11F8F386B382B376B29
+:1046A0001BEC0DF01F9F2F0EDE6EF1C132F11F8F3C
+:1046B000386B382B376B1BEC0DF01F9F2F0EDE6E07
+:1046C000F3C132F11F8F386B382B376B1BEC0DF0B9
+:1046D0001200F3C132F11F8F386B382B376B1BEC94
+:1046E0000DF01F9F2F0EDE6EF1C132F11F8F386B60
+:1046F000382B376B1BEC0DF01F9F2F0EDE6EF2C1B7
+:1047000032F11F8F386B382B376B1BEC0DF012001A
+:104710005B0EA4EC0DF0A86615D0F1C132F11F8F2D
+:10472000386B382B376B1BEC0DF01F9F2F0EDE6E96
+:10473000F2C132F11F8F386B382B376B1BEC0DF049
+:104740001F9F12005B0EA4EC0DF0A82EE6D7F2C15D
+:1047500032F11F8F386B382B376B1BEC0DF01F9F1E
+:104760002F0EDE6EF1C132F11F8F386B382B376B95
+:104770001BEC0DF01F9F1200640E3CEC1AF04B0E68
+:10478000E8CF7CF0000EE8CF7DF0000EE8CF7EF0A1
+:10479000000EE8CF7FF0FF0E2BEC10F020EE60F063
+:1047A00007C1F1F106C1F2F108C1F3F132EC23F0D7
+:1047B00026EC0EF01200000EE8CFF4F1000EE8CF68
+:1047C000F5F11A0EE8CFF6F1410EE8CFF7F1640EDD
+:1047D000E8CFF8F1CAEC0EF012002BB51200700E03
+:1047E0003CEC1AF0B80EE8CF7CF0000EE8CF7DF07C
+:1047F000010EE8CF7EF0000EE8CF7FF0FF0E2BEC2D
+:1048000010F020EE60F091C132F192C133F1A6ECCC
+:104810002AF01F8F2485030E29EC0DF01F9F1F9D8A
+:1048200026EC0EF0000EE8CF7EF0120020BF120042
+:10483000410E3CEC1AF028BF99D02ABB97D0260E27
+:1048400083EC10F0326F010E326301D08FD0A5C11E
+:1048500032F1A6C133F11F9F20EE60F0386B382B88
+:10486000376B1F8D375129EC0DF0140EE8CF7CF01B
+:10487000780EE8CF7DF0010EE8CF7EF0FF0E2BEC36
+:1048800010F026EC0EF0000EE8CF7EF0120020BFF4
+:104890001200E00E2BEC10F08C0E5DEC0BF0FF0E16
+:1048A0002BEC10F0550EE8CF7CF05A0EE8CF7DF0DF
+:1048B000010EE8CF7EF0FF0E2BEC10F0E1C132F1DB
+:1048C0001F9F20EE60F0386B382B376B20EC0DF01B
+:1048D0003A0EDE6EE2C132F1386B382B376B1BECCF
+:1048E0000DF026EC0EF0000EE8CF7EF01200000E68
+:1048F000E8CFF4F13C0EE8CFF5F1770EE8CFF6F112
+:104900005A0EE8CFF7F19F0EE8CFF8F1CAEC0EF09F
+:104910001200E00E2BEC10F08B0E5DEC0BF0FF0E96
+:104920002BEC10F0910EE8CF7CF05A0EE8CF7DF022
+:10493000010EE8CF7EF0FF0E2BEC10F0DCC132F15F
+:1049400020EE60F0386B382B376B20EC0DF03A0E10
+:10495000DE6EDDC132F1386B382B376B1BEC0DF09E
+:1049600026EC0EF0000EE8CF7EF01200A5C132F169
+:10497000A6C133F11F9F1F8D20EE60F0386B382BDE
+:10498000376B1F8D375129EC0DF03A0EDE6EA7C143
+:1049900032F1386B382B376B1BEC0DF0140EE8CF6F
+:1049A0007CF05A0EE8CF7DF0010EE8CF7EF0FF0ECE
+:1049B0002BEC10F026EC0EF01F9D000EE8CF7EF0E1
+:1049C0001200000EE8CFF4F1360EE8CFF5F1660ED6
+:1049D000E8CFF6F13E0EE8CFF7F19F0EE8CFF8F101
+:1049E000CAEC0EF0120020BF1200560E3CEC1AF07A
+:1049F000E00E2BEC10F01B0E5AEC0BF0FF0E2BEC24
+:104A000010F0500EE8CF7CF06E0EE8CF7DF0000E77
+:104A1000E8CF7EF0FF0E2BEC10F020EE60F017C117
+:104A200032F118C133F1020E325F000E335BB6EC87
+:104A30000BF032C10AF133C132F1336B000E1F9F0C
+:104A40001F8D386B382B376B1F8D375129EC0DF0CC
+:104A50003A0EDE6E0AC132F1386B382B376B1BEC25
+:104A60000DF01F9F26EC0EF0550E3CEC1AF0500E88
+:104A7000E8CF7CF03E0EE8CF7DF0000EE8CF7EF070
+:104A8000FF0E2BEC10F020EE60F093C132F194C1D8
+:104A900033F1A6EC2AF01F8F2485030E29EC0DF0CC
+:104AA0001F9F6D0EDE6E200EDE6E26EC0EF01200E5
+:104AB000610E3CEC1AF0000EE8CF7CF0000EE8CF5F
+:104AC0007DF0000EE8CF7EF0000EE8CF7FF0FF0E05
+:104AD0002BEC10F020EE60F0060E53EC0BF0AA6AFF
+:104AE000A96AD1EC0DF0A8CF32F1A92AD1EC0DF0D2
+:104AF000A8CF33F11F8F386B382B376B375129EC28
+:104B00000DF0200EDE6E560EDE6E010E326F1F8F20
+:104B1000386B382B376B20EC0DF02E0EDE6E320E1C
+:104B2000326F1F8F386B382B376B1BEC0DF01F9FCC
+:104B300026EC0EF012006F0E3CEC1AF0DBEC23F0CA
+:104B40001F0E5DEC0BF029B107D0200E5DEC0BF0D1
+:104B50007A0E5DEC0BF006D0EE0E5DEC0BF0890EDC
+:104B60005DEC0BF0210E5DEC0BF0220E5DEC0BF01A
+:104B700012006F0E3CEC1AF0F00E5DEC0BF0F10E33
+:104B80005DEC0BF0190E5AEC0BF0930E5DEC0BF094
+:104B9000F40E5DEC0BF01200640EE8CF7DF0000E19
+:104BA000E8CF7CF0000EE8CF7EF0FF0E2BEC10F08B
+:104BB00020EE60F0530EDE6E650EDE6E6C0EDE6E65
+:104BC000180EA4EC0DF0A8CF32F11F8F386B382BE4
+:104BD000376B20EC0DF02F0EDE6E190EA4EC0DF0ED
+:104BE000A8CF32F11F8F386B382B376B20EC0DF0CC
+:104BF00026EC0EF07B0E5DEC0BF07C0E5DEC0BF00A
+:104C00007D0E5DEC0BF07E0E5DEC0BF01200FE0EE7
+:104C10005DEC0BF0FA0E5DEC0BF0FB0E5DEC0BF0B7
+:104C2000FC0E5DEC0BF0FD0E5DEC0BF01200FF0EC8
+:104C3000E8CFF4F17CC0F5F17CC0F6F1140EF62754
+:104C40007A0EE8CFF7F1322732078A0E3261326FDF
+:104C500032C1F8F1CAEC0EF0000EE8CFF4F17CC0DE
+:104C6000F5F17CC0F6F1140EF62732C1F7F1F72BFF
+:104C70008B0EE8CFF8F1CAEC0EF01200000EE8CF70
+:104C8000F4F133C1F5F17D0EE8CFF6F1640EE8CF13
+:104C9000F7F19F0EE8CFF8F1CAEC0EF012006E0E9D
+:104CA0003CEC1AF02BC532F1326706D0CFEC27F07E
+:104CB000EF0E5DEC0BF012001F8F640EE8CF7DF05D
+:104CC000000EE8CF7CF0336F42EC0EF020EE60F087
+:104CD0002BC532F13251D8B43EEF26F0386B382B69
+:104CE000376B20EC0DF06D0EDE6E26EC0EF08C0EA8
+:104CF000E8CF7DF0000EE8CF7CF020EE60F024C518
+:104D000032F1386B382B376B1BEC0DF0270EDE6E53
+:104D100026EC0EF017EC26F0640EE8CF7DF0190EAD
+:104D2000E8CF7CF0336F42EC0EF020EE60F02CC543
+:104D300032F13251D8B43EEF26F0386B382B376B56
+:104D400020EC0DF06D0EDE6E26EC0EF08C0EE8CF32
+:104D50007DF0190EE8CF7CF020EE60F025C532F131
+:104D6000386B382B376B1BEC0DF0270EDE6E26EC04
+:104D70000EF017EC26F0640EE8CF7DF0320EE8CF8F
+:104D80007CF0336F42EC0EF020EE60F02DC532F176
+:104D90003251D8B43EEF26F0386B382B376B20EC0D
+:104DA0000DF06D0EDE6E26EC0EF08C0EE8CF7DF071
+:104DB000320EE8CF7CF020EE60F026C532F1386B81
+:104DC000382B376B1BEC0DF0270EDE6E26EC0EF049
+:104DD00017EC26F0640EE8CF7DF04B0EE8CF7CF0A8
+:104DE000336F42EC0EF020EE60F02EC532F13251FE
+:104DF000D8B43EEF26F0386B382B376B20EC0DF033
+:104E00006D0EDE6E26EC0EF08C0EE8CF7DF04B0EB4
+:104E1000E8CF7CF020EE60F027C532F1386B382BFC
+:104E2000376B1BEC0DF0270EDE6E26EC0EF017EC48
+:104E300026F0640EE8CF7DF0640EE8CF7CF0336F8F
+:104E400042EC0EF020EE60F02FC532F13251D8B4B2
+:104E50003EEF26F0386B382B376B20EC0DF06D0EE3
+:104E6000DE6E26EC0EF08C0EE8CF7DF0640EE8CFFF
+:104E70007CF020EE60F028C532F1386B382B376BB0
+:104E80001BEC0DF0270EDE6E26EC0EF017EC26F074
+:104E900012006D0E3CEC1AF0640EE8CF7DF0000EAF
+:104EA000E8CF7EF01F8F020E0A6FE70E096F336B9B
+:104EB000332B040E0A27190E0927640EE8CF7DF064
+:104EC00009C17CF020EE60F0470EDE6E33C132F196
+:104ED000386B382B376B20EC0DF03A0EDE6E0AC1C2
+:104EE000A9FFD1EC0DF0A8CF32F1386B382B376B1E
+:104EF00020EC0DF02F0EDE6EA92AD1EC0DF0A8CF1C
+:104F000032F1386B382B376B20EC0DF01B0EA4EC14
+:104F10000DF033C132F1A832322FFDD70F0ED8A0D9
+:104F20000A0E1B6F26EC0EF00F0E1B6F050E33637F
+:104F3000BFD71200640EE8CF7DF0000EE8CF7EF000
+:104F40001F8F230E0A6FE70E096FE66B0A2BE62B05
+:104F5000190E092709C17CF0640EE8CF7DF020EE20
+:104F600060F0530EDE6E500EDE6EE6C132F1386B2D
+:104F7000382B376B20EC0DF03A0EDE6E0AC1A9FF1C
+:104F8000D1EC0DF0A8CF32F1336B030E29EC0DF00C
+:104F900026EC0EF0030EE663D9D71F9F1200000E19
+:104FA000E8CFF4F1000EE8CFF5F17D0EE8CFF6F191
+:104FB000520EE8CFF7F19F0EE8CFF8F1CAEC0EF0F1
+:104FC00012006C0E3CEC1AF0000EE8CF7CF0550E8F
+:104FD000E8CF7DF0000EE8CF7EF0000EE8CF7FF046
+:104FE000FF0E2BEC10F020EE60F0B80EDE6E26EC1B
+:104FF0000EF0190EE8CF7CF0550EE8CF7DF0000ED4
+:10500000E8CF7EF0000EE8CF7FF0FF0E2BEC10F023
+:1050100020EE60F0B80EDE6E26EC0EF0320EE8CF19
+:105020007CF0550EE8CF7DF0000EE8CF7EF0000E4C
+:10503000E8CF7FF0FF0E2BEC10F020EE60F0B80E02
+:10504000DE6E26EC0EF04B0EE8CF7CF0550EE8CF6E
+:105050007DF0000EE8CF7EF0000EE8CF7FF0FF0E6F
+:105060002BEC10F020EE60F0B80EDE6E26EC0EF0A9
+:10507000640EE8CF7CF0550EE8CF7DF0000EE8CF4F
+:105080007EF0000EE8CF7FF0FF0E2BEC10F020EE4C
+:1050900060F0B80EDE6E26EC0EF0BAC139F1000EEB
+:1050A000394F000E394F190E394F320E394F4B0E12
+:1050B000394F640EE8CF7CF0550EE8CF7DF0000E3E
+:1050C000E8CF7EF0000EE8CF7FF0FF0E2BEC10F063
+:1050D00020EE60F0B70EDE6E26EC0EF012007F0EB2
+:1050E0005DEC0BF0800E5DEC0BF0840E5DEC0BF0D4
+:1050F0001200000EE8CFF4F1380EE8CFF5F1580EAB
+:10510000E8CFF6F1450EE8CFF7F1730EE8CFF8F1EE
+:10511000CAEC0EF0FF0EE8CFF4F13A0EE8CFF5F14D
+:10512000560EE8CFF6F1460EE8CFF7F1720EE8CF53
+:10513000F8F189EC0EF03C0EE8CF7CF0470EE8CF9A
+:105140007DF0000EE8CF7EF0010EE8CF7FF0E00E9C
+:105150002BEC10F020EE60F0430EDE6E460EDE6E9D
+:1051600039C132F1386B382B376B20EC0DF0210E42
+:10517000DE6E26EC0EF0000EE8CF7FF0FF0E2BEC7B
+:1051800010F01200680E3CEC1AF0690E3CEC1AF0BC
+:10519000FF0EE8CFF4F1190EE8CFF5F1780EE8CF65
+:1051A000F6F1520EE8CFF7F19F0EE8CFF8F189EC57
+:1051B0000EF025EE33F0100E0A6F096BFF0EE8CFEC
+:1051C000F4F11C0E0925E8CFF5F11C0E0925E8CFF6
+:1051D000F6F1092B092B640EE8CFF7F1DECFF8F1D9
+:1051E000D890F833D890F833640EF8279D0EF86104
+:1051F000F86FCAEC0EF00A2FE1D725EE43F0100E3F
+:105200000A6F096BFF0EE8CFF4F1560E0925E8CFBF
+:10521000F5F1560E0925E8CFF6F1092B092B640E9E
+:10522000E8CFF7F1DECFF8F1D890F833D890F83323
+:10523000640EF8279D0EF861F86FCAEC0EF00A2F85
+:10524000E1D7540EE8CF7DF0200EE8CF7CF0FF0EC2
+:105250002BEC10F020EE60F04E0EDE6E320EDE6EA5
+:1052600026EC0EF0540EE8CF7DF05A0EE8CF7CF01D
+:10527000FF0E2BEC10F020EE60F0480EDE6E650E97
+:10528000DE6E26EC0EF0120027EC2AF0010EE8CFBD
+:105290007FF0030E5DEC0BF0000EE8CF7FF0440EC4
+:1052A0005DEC0BF0450E5DEC0BF0460E5DEC0BF08B
+:1052B000470E5DEC0BF0480E5DEC0BF0490E5DEC1B
+:1052C0000BF04A0E5DEC0BF0120027EC2AF0010EF9
+:1052D000E8CF7FF0030E5DEC0BF0000EE8CF7FF01F
+:1052E0004B0E5DEC0BF04C0E5DEC0BF04D0E5DECDF
+:1052F0000BF04E0E5DEC0BF04F0E5DEC0BF0500E14
+:105300005DEC0BF0510E5DEC0BF0120027EC2AF077
+:10531000010EE8CF7FF00F0E5AEC0BF0000EE8CF35
+:105320007FF0100E5AEC0BF0110E5AEC0BF0120E2F
+:105330005AEC0BF0130E5AEC0BF012002BB51200C6
+:1053400020BF120020BD12006A0E3CEC1AF0A80E1D
+:10535000E8CF7CF0410EE8CF7DF0000EE8CF7EF084
+:10536000000EE8CF7FF0FF0E2BEC10F020EE60F087
+:1053700018C532F1326706D0070E53EC0BF026EC5D
+:105380000EF012002DBB1200336B1F8F030E29ECA1
+:105390000DF01F9F26EC0EF0120030EC80F00101A2
+:1053A0001A0E5AEC0BF020EE60F0230EDE6E63C591
+:1053B00032F163C50AF11F8F386B382B376B20EC45
+:1053C0000DF0200EDE6E280EDE6E100E0A6105D086
+:1053D0004E0EDE6E320EDE6E04D0480EDE6E650EB0
+:1053E000DE6E290EDE6E200EDE6E640EE8CF7DF0DE
+:1053F000190EE8CF7CF0000EE8CF7EF0FF0E2BEC0C
+:1054000010F026EC0EF020EE60F015EE33F00A2BD3
+:10541000E6CF32F10A2FFCD7386B382B376B20ECF4
+:105420000DF0250EDE6E200EDE6E640EE8CF7DF0F0
+:10543000320EE8CF7CF0000EE8CF7EF0FF0E2BECB2
+:1054400010F026EC0EF01F9F1200000E01D0FF0E90
+:10545000E8CFF4F1000EE8CFF5F11A0EE8CFF6F13F
+:10546000000EE8CFF7F19F0EE8CFF8F1CAEC0EF08E
+:1054700012002BB5120028BF12002ABB12002BB954
+:1054800012006B0E3CEC1AF05A0EE8CF7CF0000EC6
+:10549000E8CF7DF0000EE8CF7EF0FF0E2BEC10F091
+:1054A00020EE60F0430EDE6E4E0EDE6E530EDE6EAC
+:1054B0003A0EDE6E65C532F11F8F386B382B376BB5
+:1054C00020EC0DF01F9F250EDE6E26EC0EF0120074
+:1054D000400EA4EC0DF0010EA8622BD0C80EE8CF50
+:1054E0007CF0000EE8CF7DF0000EE8CF7EF0000EDD
+:1054F000E8CF7FF0E00E2BEC10F020EE60F0400ED5
+:10550000326F180E336F322B94EC2AF07D0EA862A6
+:1055100001D004D0A8CFDEFF332FF5D726EC0EF054
+:10552000FF0E2BEC10F0120032C1A9FFD1EC0DF0F0
+:105530001200180E396FC80EE8CF7CF0000EE8CFCD
+:105540007DF0A8EC1CF012001200120025BD120024
+:105550001A0EA4EC0DF0A8CF0AF1690E0A61120030
+:10556000630E0A65120032C14CF133C14DF1640E75
+:105570004E6F4F6BF0EC0BF00AC14EF14F6B34ECF9
+:105580000CF048C132F149C133F112003B6F010EFA
+:10559000BD27000EBE23BEAF02D0BD6BBE6B3B2F3E
+:1055A000F6D712003B6F010EBD5F000EBE5BBEAFB3
+:1055B00002D07F0EBE6F3B2FF6D712009CD8010E93
+:1055C000BD27000EBE232391BEAF1200BD6BBE6B84
+:1055D0002381120023B31CD823A30BD82383000EEE
+:1055E000BD2BBE232391BEAF1200BD6BBE6B2381CA
+:1055F00012003B6FC580A4D8A60EC96EA1D894D85E
+:10560000BEC1C9FF9DD890D8BDC1C9FF99D88CD85B
+:105610003BC1C9FF95D888D812003B6B3C6B229FD9
+:10562000229DC5848DD8C5808BD8A60EC96E88D81A
+:10563000C5BCF7D73CC1C9FF83D876D83BC1C9FFE9
+:105640007FD872D8C5827CD8A70EC96E79D86CD89D
+:10565000C58676D822BD05D0228DFD0EC962229D59
+:1056600011D022BF05D0228FFD0EC96209D00AD009
+:10567000FE0EC96205D03BC1BDF13CC1BEF10DD0EB
+:10568000229F229D010E3B27000E3C233CBF03D0EE
+:10569000C58856D8DDD7BD6BBE6BC58451D8229F57
+:1056A000229D1200C5844CD8C5804AD8A60EC96E6A
+:1056B00047D8C5BCF7D7BEC1C9FF42D835D8BDC190
+:1056C000C9FF3ED831D8C5823BD8A70EC96E38D89D
+:1056D0002BD8C58635D8C950C58432D81200E2DF30
+:1056E000010EBD27000EBE232391BEAF1200BD6B7D
+:1056F000BE6B238112003B6FC58022D8A60EC96EF7
+:105700001FD812D8BEC1C9FF1BD80ED8BDC1C9FF52
+:1057100017D80AD83BC1C9FF13D806D8C58410D8FA
+:10572000060EDAEC0CF01200C5BC01D812004D0ECA
+:105730003CEC1AF0FBEC49F00BD89E96C46B1200BF
+:10574000C42F01D0F4D79EA6FBD7C46B9E9612003F
+:10575000C66A4E0E3CEC1AF0C56AC76A94969488E5
+:105760008296090EC46F8286000082B804D08296A9
+:105770008296C42FF8D79486C66A0A0EDAEC0CF02B
+:10578000000EC76E280EC66E000EC56E080EC86EDF
+:10579000FDEC49F04F0E3CEC1AF01200C56FC580CD
+:1057A000CFDF900EC96ECCDFBFDFC5C1C9FFC8DF38
+:1057B000BBDFC584C5DF12009E96C580C1DF910E98
+:1057C000C96EBEDFB1DFC586BBDFC9CFC5F1C588F5
+:1057D000B7DFC584B5DF12002595299533EC0FF0AE
+:1057E000259325972599BC6BBB6BC16B010EE8CF48
+:1057F0007FF00C0E5DEC0BF0000EE8CF7FF0A56B98
+:10580000A66BA8EC2BF00DEC2BF0396B3A6B050E68
+:10581000BA6F010EE8CF7FF00C0E5DEC0BF0000EBE
+:10582000E8CF7FF0229D229F010EA527000EA62320
+:10583000A6BF27D0010ED2EC2AF052EC2BF022BDED
+:1058400005D0228DFA0EC962229D10D022BF05D04C
+:10585000228FFA0EC96207D809D0BDC1BFF1BEC1FF
+:10586000C0F1C12B13D0229F229D1200010E3927B7
+:10587000000E3A233ABF01D0D7D725A915EF13F070
+:105880002CD0C151D8B4F9D7258327D0030EC6EC4C
+:105890002AF025A704D0A751C163E0D264D025B374
+:1058A0001CD0F7DA050EBA6316D0C1C1ACF1BFC186
+:1058B000AAF1C0C1ABF1A5C191F1A6C192F139C164
+:1058C000F0F13AC1A8F1030EAA27000EAB23030E94
+:1058D000915F000E925BBA2FC1D225A97DD727EC2C
+:1058E0002AF0010EE8CF7FF01A0E5DEC0BF0000EEF
+:1058F000E8CF7FF00B0E5DEC0BF020992191219306
+:10590000219724992497B86B010E25B5AD51BA6F34
+:10591000259525992FEC1DF034EC2FF021B3A9D259
+:1059200021B10ED020B151EC3BF020B1CCEC40F0D5
+:10593000209120B915EF13F020B3EAEF47F0ECD730
+:105940002191060EBA6302D015EF13F0BAC1ADF182
+:105950002585BB51050DF350BA25A76F33EC0FF029
+:105960002587C16B43D725979BEC1CF0000EE8CF31
+:105970007CF0000EE8CF7DF020EE60F0230EDE6EAE
+:105980001C0E97EC10F0326703D0336701D016D0AD
+:10599000010E3227000E332332C152F133C153F1CD
+:1059A000A7C154F1556BD9EC0BF050C132F151C184
+:1059B00033F11F8F0A0E29EC0DF007D0A7C132F189
+:1059C000386B382B376B1BEC0DF0200EDE6E6FEC56
+:1059D0002BF0C9CF32F1289D0A0EA96F0D0E32654A
+:1059E00014D06FEC2BF0C9CF32F1288DBDC1AFF1CF
+:1059F000BEC1AEF1200EC6EC2AF052EC2BF0C9CF9E
+:105A0000A9F1AFC1BDF1AEC1BEF132C1F1F16FEC90
+:105A10002BF0C9CFF2F16FEC2BF0C9CFF3F132ECE0
+:105A200023F0200EDE6E6FEC2BF0C9CF32F1386B15
+:105A3000382B376B1BEC0DF03A0EDE6E6FEC2BF053
+:105A4000C9CF32F1386B382B376B1BEC0DF026ECDD
+:105A50000EF0190EE8CF7CF0050EE8CF7DF020EEB9
+:105A600060F06FEC2BF0C9CF32F16FEC2BF0C9CFA7
+:105A700033F132C14CF133C14DF1A40E4E6F4F6B77
+:105A80000DEC0CF048C1C6F149C1C7F1C62B000EA0
+:105A9000C7231F8F030E29EC0DF06D0EDE6E200E56
+:105AA000DE6E6FEC2BF0C9CF32F16FEC2BF0C9CF6B
+:105AB00033F132C14CF133C14DF13C0E4E6F4F6B9F
+:105AC000F0EC0BF01F8F386B382B376B375129EC0C
+:105AD0000DF0270EDE6E6FEC2BF0C9CF32F1325194
+:105AE0004827000E492348C14CF149C14DF19F0E92
+:105AF0004E6F4F6B0DEC0CF048C14CF149C14DF1AC
+:105B0000A9514E6F4F6B0DEC0CF048C1C8F149C163
+:105B1000C9F1C82B000EC9231F8F386B382B376B88
+:105B20001BEC0DF0220EDE6E200EDE6E6FEC2BF005
+:105B3000C9CF32F16FEC2BF0C9CF33F1030E386FC0
+:105B40001F8F020E29EC0DF0B00EDE6E430EDE6EDE
+:105B500026EC0EF0320EE8CF7CF0050EE8CF7DF09B
+:105B600020EE60F06FEC2BF0C9CF32F16FEC2BF030
+:105B7000C9CF33F11F8F386B382B376B375129EC76
+:105B80000DF06D0EDE6E620EDE6E610EDE6E720E5A
+:105B9000DE6E200EDE6E010EDE6E6FEC2BF0C9CFD6
+:105BA00032F16FEC2BF0C9CF33F1B6EC0BF01F8F55
+:105BB000325133C132F1336F386B382B376B20ECF5
+:105BC0000DF03A0EDE6E33C132F1386B382B376B85
+:105BD0001BEC0DF01F9F26EC0EF028AD4DD06FECA6
+:105BE0002BF06FEC2BF06FEC2BF06FEC2BF06FECDD
+:105BF0002BF06FEC2BF06FEC2BF06FEC2BF06FECCD
+:105C00002BF06FEC2BF06FEC2BF06FEC2BF06FECBC
+:105C10002BF06FEC2BF06FEC2BF06FEC2BF06FECAC
+:105C20002BF06FEC2BF06FEC2BF0C9CFB1F1B199E9
+:105C3000B19BB19DB19FB12BB1C1EBF16FEC2BF0DA
+:105C4000C9CFB2F1B299B29BB29DB29FB2C1ECF191
+:105C50006FEC2BF0C9CFB3F16FEC2BF0C9CFB4F1DF
+:105C60006FEC2BF0C9CFB5F16FEC2BF0C9CFB6F1CB
+:105C70006FEC2BF06FEC2BF0010EE8CFF4F14B0E34
+:105C8000E8CFF5F1EF0EE8CFF6F1000EE8CFF7F12F
+:105C90009F0EE8CFF8F1CAEC0EF06FEC2BF0B86B6A
+:105CA0006FEC2BF09E0E386F229F050EB96F4B0ED6
+:105CB000DC6FB92933EC0EF0C8C1CAF1C9C1CBF110
+:105CC000CB2B64D822BF24D0C6C14EF1C7C14FF13F
+:105CD00032C14CF133C14DF10DEC0CF04B0E4827A5
+:105CE000A1EC2EF048C1DCF1485142EC0EF0B92B8A
+:105CF000B95133EC0EF0FF0E2BEC10F04CEC0EF023
+:105D0000CA4F02D043D8FCD7CB2FFAD7382FD4D7DD
+:105D100020992191219324992497B86B34EC2FF08A
+:105D200021B179D021B31ED120B151EC3BF020B18B
+:105D3000CCEC40F0209120B96ED020B3EAEF47F0D0
+:105D4000EDD74851DC6301D012004851DC650FD01B
+:105D5000DCC149F14907495142EC0EF0FF0E2BEC32
+:105D600010F075EC0EF048514963F4D7120048C1A9
+:105D700049F14907495142EC0EF0FF0E2BEC10F0AF
+:105D800075EC0EF0DC514963F4D712006FEC2BF088
+:105D9000C9CF32F16FEC2BF0C9CF33F16FEC2BF0A0
+:105DA000C9CFB8F1289BB8BF288BB89FFD0E3263CE
+:105DB00005D0FD0E336302D0228F1200B22F23D004
+:105DC000ECC1B2F128AB11D06FEC2BF0B807000E8C
+:105DD000C9B8020FC9BA010FEF6FEF6701D005D044
+:105DE0006FEC2BF0B807EF2FFBD7040EB86306D08B
+:105DF0006FEC2BF0B8076FEC2BF0B8076FEC2BF0C3
+:105E0000B82FFCD71200B86701D012006FEC2BF04E
+:105E1000B82FFCD712002099B86BAAC1BDF1ABC155
+:105E2000BEF191C1A5F192C1A6F1ACC1C1F1F0C121
+:105E300039F1A8C13AF1C1072593BB07BC6B050E28
+:105E4000BA6FBB2B33EC0FF0E4D425B3EDEF2BF09E
+:105E5000BC6B050EBA6FBB2B33EC0FF0BFC1BDF1AD
+:105E6000C0C1BEF109EF2CF024B9218324B72181F0
+:105E70001200BA2B070EBA6301D0E7D7BC29BA6368
+:105E800002D0060EBA6FB86B2FEC1DF02499219347
+:105E900043D52589BC2B29B50CD027EC2AF0010E5F
+:105EA000E8CF7FF01A0E5DEC0BF0000EE8CF7FF02C
+:105EB0002985140EE8CF7DF0BB51050DF350C15D6F
+:105EC0001E0DF350050FE8CF7CF020EE60F0C1C14D
+:105ED00032F1386B382B376B1BEC0DF0200EDE6E79
+:105EE0006FEC2BF0C9CF32F10D0E326504D06FECA0
+:105EF0002BF0C9CF32F132C1F1F16FEC2BF0C9CFE9
+:105F0000F2F16FEC2BF0C9CFF3F188EC23F06FECDA
+:105F10002BF06FEC2BF0200EDE6E6FEC2BF0C9CF68
+:105F200032F16FEC2BF0C9CF33F11F8F2485030EB4
+:105F300029EC0DF06D0EDE6E200EDE6E6FEC2BF098
+:105F4000C9CF32F16FEC2BF0C9CF33F11F8F386B13
+:105F5000382B376B375129EC0DF0270EDE6E26EC0F
+:105F60000EF01200010EBA6FCFEC27F06FEC28F0A4
+:105F7000E1EC27F020992191219324992497B86B83
+:105F800034EC2FF021B315D021B10DD020B151EC5C
+:105F90003BF020B1CCEC40F0209120B93CD720B3AD
+:105FA000EAEF47F0EDD7BA4F36D7BA4F18D0BA4F0D
+:105FB00007D0BA2B040EBA6302D0010EBA6FD8D73D
+:105FC000BAEC20F0BA6FBA6701D025D733EC0FF0E6
+:105FD0000C0E5DEC0BF088EC16F015EF13F0BAEC3C
+:105FE00020F0BA6FBA6701D016D733EC0FF00C0E61
+:105FF0005DEC0BF0010ED2EC2AF0BDC1A5F1BEC1E3
+:10600000A6F1010EBF27000EC023C0BFBF6BC0BFEB
+:10601000C06BA5C1BDF1A6C1BEF152EC2BF0C86F9B
+:10602000FE0EC86331D0BFC1BDF1C0C1BEF1C851C1
+:106030007BEC2BF0010EBF27000EC023C0BFBF6B4F
+:10604000C0BFC06B010EA527000EA623A6AF06D0C9
+:10605000A56BA66BBFC1BDF1C0C1BEF1FF0E7BEC4D
+:106060002BF0010EC6EC2AF0A5C152F1A6C153F1E6
+:10607000BDC154F1BEC155F1D9EC0BF05067EED75C
+:106080005167ECD7ECEF2BF00DEC2BF0020EC6ECC9
+:106090002AF0BDC1C8F1BEC1C9F1020ED2EC2AF08E
+:1060A000A5C1BDF1A6C1BEF152EC2BF0BFC1BDF13F
+:1060B000C0C1BEF17BEC2BF0A5C1BDF1A6C1BEF104
+:1060C000FF0E7BEC2BF0010EA527000EA623A6AF3A
+:1060D00002D0A56BA66B010EBF27000EC023C0BF68
+:1060E000BF6BC0BFC06BA5C152F1A6C153F1C8C1FF
+:1060F00054F1C9C155F1D9EC0BF05067D1D75167B4
+:10610000CFD7ECEF2BF02D939D9A09EC4AF05EEC83
+:1061100049F06B0EAD6EFAEC0DF00BEC4AF09D8A77
+:10612000D7EF39F028959D9A09EC4AF020EC80F0E1
+:10613000010130EC80F0010118EC80F00101010E4A
+:10614000CC6FCD6B680EAD6EFAEC0DF020850BECCC
+:106150004AF09D8AD7EF39F028939D9A09EC4AF0CE
+:10616000AA6AAAD80BEC4AF09D8AD7EF39F02A9F89
+:106170009D9A09EC4AF0010EAA6E9ED8AA6A0BEC11
+:106180004AF09D8AD7EF39F0279F9D9A09EC4AF093
+:10619000FAEC0DF0010EAD6EFAEC0DF0320EAD6EB4
+:1061A00029EE4AF0100E396FFAEC0DF0DECFADFF9C
+:1061B000392FFAD70BEC4AF09D8AD7EF39F0259B9F
+:1061C0009D9A09EC4AF033EC0FF027EC2AF0010E0F
+:1061D000E8CF7FF00F0E5DEC0BF0000EE8CF7FF004
+:1061E000050E436FAA0EAD6EFAEC0DF0432FFAD7F1
+:1061F000550EAD6E100E5DEC0BF00DEC2BF0010E9C
+:10620000BD27000EBE23110E5DEC0BF055D8FAEC45
+:106210000DF0C2C1ADFFFAEC0DF0C3C1ADFFFAEC59
+:106220000DF0010EAD6EFAEC0DF0320EAD6E120EE9
+:106230005DEC0BF0436B446BC580A0EC2BF0A60E1D
+:10624000C96EA0EC2BF0C5BCF7D7BEC1C9FFA0EC4E
+:106250002BF094EC2BF0BDC1C9FFA0EC2BF094EC1B
+:106260002BF0C582A0EC2BF0A70EC96EA0EC2BF092
+:1062700094EC2BF0130E5DEC0BF0FAEC0DF0C586F0
+:10628000A0EC2BF0C9CFADFF010E4327000E442335
+:1062900044BF04D0C588A0EC2BF0EFD7C584A0EC98
+:1062A0002BF0140E5DEC0BF0FA0EDAEC0CF00BECAC
+:1062B0004AF09D8A67EF39F0436BA96AD1EC0DF083
+:1062C000A8CFADFFA92AFAEC0DF0432FF7D71200A3
+:1062D000010EBA6F219921972099AA6B229D229FC6
+:1062E00033EC0FF027EC2AF0010EE8CF7FF06F0EB1
+:1062F0005DEC0BF0000EE8CF7FF0B86B219121939D
+:10630000140EE8CF7DF0230EE8CF7CF020EE60F095
+:10631000700E56EC0BF0AAC132F1322B1F8F386B86
+:10632000382B376B0AEC0DF0200EDE6E280EDE6E79
+:10633000C00E56EC0BF0200EDE6E210EA4EC0DF01C
+:10634000A8CFD1F1D105040DF350060FA96ED1EC01
+:106350000DF0A8CF32F11F8F386B382B376B0AEC5A
+:106360000DF02F0EDE6ED105040DF350070FA96E50
+:10637000D1EC0DF0A8CF32F11F8F386B382B376B73
+:106380000AEC0DF0290EDE6E26EC0EF0140EE8CFAE
+:106390007DF0410EE8CF7CF020EE60F0610E56EC0F
+:1063A0000BF0AA51240FA96ED1EC0DF0A8CF32F159
+:1063B000336B1F8F030E29EC0DF01F9F420EDE6E14
+:1063C000610EDE6E720EDE6E200EDE6E26EC0EF0BC
+:1063D000140EE8CF7DF05F0EE8CF7CF020EE60F089
+:1063E000BE0E56EC0BF026EC0EF0140EE8CF7DF04E
+:1063F0007D0EE8CF7CF020EE60F0BF0E56EC0BF087
+:1064000026EC0EF0140EE8CF7DF09B0EE8CF7CF06A
+:1064100020EE60F0590E56EC0BF0310EDE6E2E0EB3
+:10642000DE6E300EDE6E300EDE6E26EC0EF00B0EE3
+:106430005DEC0BF0FCEC12F02FEC1DF034EC2FF0C7
+:1064400021B30FD021B11ED020B3EAEF47F020B125
+:1064500051EC3BF020B1CCEC40F0209120B91CD0A5
+:10646000EDD7BA2B020EBA6301D0BA2B070EBA636E
+:1064700002D0010EBA6FB86B2FEC1DF0FCEC12F0DD
+:106480002193DCD7BA4F3ED0BA4F0AD0BA4F08D0CA
+:10649000BA4F1AD0BA4F2CD0020EBA6F69EF13F070
+:1064A000AA51240FA96ED1EC0DF0A8CF32F1322BF6
+:1064B000FB0E326302D0FA0E326F32C1A8FFD5EC68
+:1064C0000DF0030EBA6F19D7AA51240FA96ED1ECA3
+:1064D0000DF0A8CF32F13207FF0E326302D0000E6A
+:1064E000326F32C1A8FFD5EC0DF0040EBA6F05D79C
+:1064F000AA51240FA96E640EA86ED5EC0DF0050EFE
+:10650000BA6FFBD6AA2B030EAA6301D0AA6B010EA9
+:10651000BA6FF3D633EC0FF027EC2AF0010EE8CF78
+:106520007FF0720E5DEC0BF0000EE8CF7FF0230ED3
+:10653000E8CF7CF0000EE8CF7DF0000EE8CF7EF0D3
+:1065400020EE60F0730E56EC0BF0320EA4EC0DF062
+:10655000A8CF32F1330EA4EC0DF0A8CF33F11F8F8A
+:10656000386B382B376B375129EC0DF0200EDE6E6F
+:10657000280EDE6E340EA4EC0DF0A8CF32F1350EED
+:10658000A4EC0DF0A8CF33F11F8F386B382B376B8D
+:10659000375129EC0DF0290EDE6E26EC0EF0410E7F
+:1065A000E8CF7CF020EE60F0750E56EC0BF02F0E6D
+:1065B000A4EC0DF0A8CFF1F1300EA4EC0DF0A8CFB3
+:1065C000F2F1310EA4EC0DF0A8CFF3F132EC23F090
+:1065D00026EC0EF05F0EE8CF7CF020EE60F0760E39
+:1065E00056EC0BF0280EA4EC0DF0A8CF32F1290EDA
+:1065F000A4EC0DF0A8CF33F1010E386F1F8F020EFF
+:1066000029EC0DF01F9F560EDE6E26EC0EF07D0E6F
+:10661000E8CF7CF020EE60F0770E56EC0BF02A0EFF
+:10662000A4EC0DF0A8CFF1F12B0EA4EC0DF0A8CF47
+:10663000F2F12C0EA4EC0DF0A8CFF3F132EC23F024
+:1066400026EC0EF09B0EE8CF7CF020EE60F0780E8A
+:1066500056EC0BF0360EA4EC0DF0A8CF32F1370E4D
+:10666000A4EC0DF0A8CF33F1030E386F1F8F020E8C
+:1066700029EC0DF01F9FB00EDE6E200EDE6E280E90
+:10668000DE6E380EA4EC0DF0A8CFF1F1390EA4ECBB
+:106690000DF0A8CFF2F13A0EA4EC0DF0A8CFF3F173
+:1066A00032EC23F0290EDE6E200EDE6E26EC0EF0AC
+:1066B000B90EE8CF7CF020EE60F0790E56EC0BF0CE
+:1066C0003B0EA4EC0DF0A8CF32F13C0EA4EC0DF083
+:1066D000A8CF33F1030E386F1F8F020E29EC0DF097
+:1066E0001F9FB00EDE6E200EDE6E280EDE6E3D0E9B
+:1066F000A4EC0DF0A8CFF1F13E0EA4EC0DF0A8CF64
+:10670000F2F13F0EA4EC0DF0A8CFF3F132EC23F040
+:10671000290EDE6E200EDE6E26EC0EF081A0FED776
+:1067200024972499219134EC2FF021B10DD020B37E
+:10673000EAEF47F020B151EC3BF020B1CCEC40F057
+:10674000209120B901D0EFD7030EBA6F69EF13F093
+:10675000010EBA6F33EC0FF0B86B209921912193A1
+:1067600027EC2AF0010EE8CF7FF06A0E5DEC0BF00B
+:10677000000EE8CF7FF0AA6BA56B050E096F020E25
+:106780000A6F140EE8CF7DF0040E0A271E0E0927AB
+:106790000951E8CF7CF020EE60F0470EDE6EAAC112
+:1067A00032F1322B1F8F386B382B376B0AEC0DF020
+:1067B0003A0EDE6EF5EC37F026EC0EF0280EE8CF40
+:1067C0007DF00951E8CF7CF020EE60F0210EA96E3B
+:1067D000D1EC0DF0A804AA6302D02A0EDE6EF5EC0F
+:1067E00037F026EC0EF0300EE8CF7DF00951E8CFFF
+:1067F0007CF020EE60F00AC1A9FFA92AD1EC0DF0CF
+:10680000A8CF32F13253000E32651AD0EEEC37F0D9
+:106810000AC1A9FFD1EC0DF0A8CF32F1386B382BAB
+:10682000376B20EC0DF02F0EDE6EA92AD1EC0DF0A7
+:10683000A8CF32F1386B382B376B20EC0DF03FD0FE
+:106840000AC1A9FFD1EC0DF0A8CF32F13253150ED9
+:10685000326517D0640E326108D0E7EC37F0386B40
+:10686000382B376B20EC0DF02AD04F0EDE6E320E37
+:10687000DE6E200EDE6E386B382B376B20EC0DF0A1
+:106880001ED0326352EC34F0410EDE6E490EDE6EE5
+:10689000520EDE6E200EDE6E386B382B376B20EC1E
+:1068A0000DF00DD0450EDE6E520EDE6E520EDE6E17
+:1068B000200EDE6E386B382B376B20EC0DF0F5ECCC
+:1068C00037F026EC0EF0690EE8CF7DF00951E8CFE5
+:1068D0007CF020EE60F0200EDE6E690EDE6E6E0E35
+:1068E000DE6E200EDE6EAA511C0FA96ED1EC0DF0EB
+:1068F000A8CF32F1386B382B376B20EC0DF06D0ED2
+:10690000DE6EF5EC37F026EC0EF0FF0E2BEC10F0FF
+:10691000AA2B050EAA63C1EF33F00B0E5DEC0BF052
+:10692000FCEC12F02FEC1DF034EC2FF021B30FD063
+:1069300021B11ED020B3EAEF47F020B151EC3BF07B
+:1069400020B1CCEC40F0209120B90ED0EDD7BA2B7D
+:10695000070EBA6302D0010EBA6FB86B2FEC1DF0B0
+:10696000FCEC12F02193E0D7020EBA6F18EF13F08F
+:10697000BA4F09D0BA4F0CD0BA4F0FD0BA4F12D07D
+:10698000BA4F15D0F1D7000EAA6F000EA56F14D024
+:10699000010EAA6F040EA56F0FD0020EAA6F080E8B
+:1069A000A56F0AD0030EAA6F0C0EA56F05D0040EBA
+:1069B000AA6F100EA56F00D0010EBA6F299321990E
+:1069C00021972099229D33EC0FF01E0E5DEC0BF009
+:1069D0000B0E5DEC0BF0B86B219121934ADA410E5E
+:1069E000E8CF7CF0140EE8CF7DF020EE60F04F0E83
+:1069F000DE6E320EDE6E3A0EDE6E200EDE6EA551BB
+:106A0000060FA96ED1EC0DF0A8CF32F1386B382B00
+:106A1000376B20EC0DF0250EDE6E200EDE6E280E9C
+:106A2000DE6E4D0EDE6E4F0EDE6E440EDE6E3A0EE4
+:106A3000DE6E120E83EC10F00A0DF3CF4CF1F4CFA2
+:106A40004DF1A551060FA96ED1EC0DF0A8CF4EF176
+:106A50004F6B0DEC0CF00A0E485F48C132F1000E8E
+:106A6000495B49C133F1386B382B376B375129EC0F
+:106A70000DF06D0EDE6E290EDE6E200EDE6E200E27
+:106A8000DE6E26EC0EF05F0EE8CF7CF020EE60F0BC
+:106A9000480EDE6E650EDE6E3A0EDE6E200EDE6E87
+:106AA000A551070FA96ED1EC0DF0A8CF32F1386BCC
+:106AB000382B376B20EC0DF0250EDE6E200EDE6ECF
+:106AC000200EDE6E26EC0EF07D0EE8CF7CF020EE80
+:106AD00060F02B0EDE6E2F0EDE6E2D0EDE6E3A0E89
+:106AE000DE6E200EDE6E2B0E22BD2D0EDE6E26EC2F
+:106AF0000EF09B0EE8CF7CF020EE60F0590E56ECC5
+:106B00000BF0A551040FA96ED1EC0DF0A8CF32F116
+:106B1000386B382B376B20EC0DF02F0EDE6EA55145
+:106B2000050FA96ED1EC0DF0A8CF32F1386B382BE0
+:106B3000376B20EC0DF0200EDE6E200EDE6E26ECA4
+:106B40000EF0FCEC12F02FEC1DF034EC2FF021B322
+:106B50000FD021B11AD020B3EAEF47F020B151ECA9
+:106B60003BF020B1CCEC40F0209120B918D0EDD70B
+:106B7000BA2B070EBA6302D0010EBA6FB86B2FECB6
+:106B80001DF0FCEC12F02193E0D7BA4F90D0BA4F31
+:106B900011D0BA4F43D0BA4F06D0BA4F69D0AAC16C
+:106BA000BAF1BA2BD7D5227D040EBA6F14D7010ED5
+:106BB000BA6F09D7A551060FA96ED1EC0DF0A8CF79
+:106BC00032F122BD07D0322B650E326310D0040E95
+:106BD000326F0DD03207030E326309D0A551070F73
+:106BE000A96ED1EC0DF0640E326FA850325FA55142
+:106BF000070FA96ED1EC0DF0A8503225336F650E4A
+:106C0000336302D0040E326FA551060FA96E32C154
+:106C1000A8FFD5EC0DF0020EBA6FDDD6A551070F17
+:106C2000A96ED1EC0DF0A8CF32F122BD06D0322BE7
+:106C30005C0E326307D0326B05D03207FF0E326331
+:106C400001D0326BA551060FA96ED1EC0DF0A85002
+:106C50003225336F650E336301D03207A551070F1C
+:106C6000A96E32C1A8FFD5EC0DF0030EBA6FB3D6F2
+:106C7000A551040FA96ED1EC0DF0A8CF32F1A551AA
+:106C8000050FA96ED1EC0DF0A8CF33F1A551060F79
+:106C9000A96E32C1A8FFD5EC0DF0A551070FA96E62
+:106CA00033C1A8FFD5EC0DF0050EBA6F94D633ECC6
+:106CB0000FF0010EBA6F6D0E5DEC0BF00B0E5DEC7C
+:106CC0000BF0B86B21912193D4D89ED9410EE8CF17
+:106CD0007CF0140EE8CF7DF020EE60F0690E56ECEB
+:106CE0000BF01B0EA4EC0DF0AAC132F1322BA8322E
+:106CF000322FFDD7D8A004D0600E56EC0BF006D092
+:106D0000200EDE6E200EDE6E200EDE6E26EC0EF005
+:106D10005F0EE8CF7CF0140EE8CF7DF020EE60F03F
+:106D2000580E56EC0BF0200EDE6E210EA96ED1EC43
+:106D30000DF0A804AA6304D0600E56EC0BF006D048
+:106D4000200EDE6E200EDE6E200EDE6E26EC0EF0C5
+:106D50007D0EE8CF7CF0140EE8CF7DF020EE60F0E1
+:106D60006B0E56EC0BF026EC0EF09B0EE8CF7CF091
+:106D7000140EE8CF7DF020EE60F06C0E56EC0BF0B8
+:106D800026EC0EF0FCEC12F02FEC1DF034EC2FF0A2
+:106D900021B30FD021B11AD020B3EAEF47F020B1D0
+:106DA00051EC3BF020B1CCEC40F0209120B9F7D66B
+:106DB000EDD7BA2B070EBA6302D0010EBA6FB86BCB
+:106DC0002FEC1DF0FCEC12F02193E0D7BA4FEFD678
+:106DD000BA4F11D0BA4F05D0BA4F23D0BA4F35D0E1
+:106DE000DED6AAC1A8FFA82A210EA96ED5EC0DF007
+:106DF000030EBA6F66D71B0EA4EC0DF0AAC132F1D8
+:106E0000322B324FA870324FA872324FA874324FD3
+:106E1000A876324FA8781B0EA2EC0DF0020EBA6FC6
+:106E200050D7AA511C0FA96ED1EC0DF0A8CF32F1AA
+:106E3000322B640E326302D0630E326F32C1A8FF70
+:106E4000D5EC0DF0040EBA6F3CD7AA511C0FA96EF9
+:106E5000D1EC0DF0A8CF32F13207FF0E326302D031
+:106E6000000E326F32C1A8FFD5EC0DF0050EBA6FDF
+:106E700028D727EC2AF0010EE8CF7FF0020EE8CFEA
+:106E80007CF0000EE8CF7DF020EE60F05F0E56EC57
+:106E90000BF0AAC132F1322B1F8F386B382B376BB6
+:106EA0000AEC0DF03A0EDE6E200EDE6E26EC0EF0D1
+:106EB000020EE8CF7CF0320EE8CF7DF020EE60F0DD
+:106EC000A551070FA96ED1EC0DF0A8CF32F13253C6
+:106ED000000E32651DD0EEEC37F0A551060FA96EFD
+:106EE000D1EC0DF0A8CF32F1386B382B376B20EC9A
+:106EF0000DF02F0EDE6EA551070FA96ED1EC0DF02F
+:106F0000A8CF32F1386B382B376B20EC0DF041D025
+:106F1000A551060FA96ED1EC0DF0A8CF32F1325376
+:106F2000150E3263326517D0640E326108D0E7EC7B
+:106F300037F0386B382B376B20EC0DF02AD04F0E22
+:106F4000DE6E320EDE6E200EDE6E386B382B376B47
+:106F500020EC0DF01ED032630ED0410EDE6E490ED5
+:106F6000DE6E520EDE6E200EDE6E386B382B376B07
+:106F700020EC0DF00ED0450EDE6E520EDE6E520E7F
+:106F8000DE6E200EDE6E386B382B376B20EC0DF08A
+:106F900000D0200EDE6E690EDE6E6E0EDE6E200EEE
+:106FA000DE6EAA511C0FA96ED1EC0DF0A8CF32F104
+:106FB000386B382B376B20EC0DF06D0EDE6E200E2B
+:106FC000DE6E26EC0EF0000EE8CF7FF012004E0EC3
+:106FD000DE6E580EDE6E200EDE6E1200540EDE6E79
+:106FE000580EDE6E200EDE6E12001B0EA4EC0DF0AD
+:106FF000AAC132F1322BA832322FFDD7FF0ED8A012
+:10700000490E2BEC10F01200A551060FA96ED1EC21
+:107010000DF0A8CF33F1AA511C0FA96ED1EC0DF0E1
+:10702000A8CF32F10A0E322733513203F3CF4CF19D
+:10703000F4CF4DF10A0E4E6F4F6B0DEC0CF048C1C2
+:1070400032F149C133F1370EE8CF7DF0230EE8CF9E
+:107050007CF020EE60F0280EDE6E700EDE6E700E9C
+:10706000DE6E4F0EDE6E320EDE6E3A0EDE6E030EFA
+:1070700029EC0DF0420EDE6E610EDE6E720EDE6EDB
+:10708000290EDE6E200EDE6E26EC0EF0120025BDFF
+:107090001FD0AECF43F1600E435F434F258B434F6C
+:1070A000248B434F258D434F2681434F278F434FDA
+:1070B0002881434F2883434F2885434F2B81434FDB
+:1070C0002A8F434F2D83AE509E9AAB98AB88120007
+:1070D0002CB7F9D709EC4AF0AE6601D0AE2AAE5013
+:1070E000640DF3CFC6F1F4CFC7F1EDD7F292D5BE60
+:1070F00009D02487D58E1200F090D5BE03D0248904
+:10710000D58E1200F294D56AD76AD66AD58E12004F
+:10711000F294D59ED76AD66A1200F19C2A91000E8D
+:10712000D56ED58E1200F18C1200F19A2A93000EC2
+:10713000D56ED58E1200F18A1200A192B19ECA942A
+:1071400012009E9001EC4AF0080ECF60412B080E11
+:10715000CF5E412B0F0E416502D00FEC39F020A914
+:1071600001D0120023BF1200422B010E42630AD04D
+:10717000239D3F6B406B9B6B9C6B05EC19F0F5EC12
+:1071800018F01200020E42630FD0FCEC18F002EC73
+:1071900019F0DDEC17F08D513F278E5140239751A8
+:1071A0009B2798519C231200030E426301D0E5D720
+:1071B000040E426301D0E9D7050E426301D0DDD74A
+:1071C000060E426301D0E1D7070E426301D0D5D746
+:1071D000DCDF426B020E3E6FD89040333F33D890D5
+:1071E0009C339B333E2FF8D740C18EF13FC18DF1C8
+:1071F0009CC198F19BC197F1238D25AD04D0E80E79
+:107200009F6F030EA06F1F979F518D5D8F6FA051D1
+:107210008E59906FD8A812008F6B906B1200416B43
+:107220002081D89420A31CD0A82BA905A86502D042
+:10723000A86B2287172BD8B4182B22A911D0A72B03
+:107240003B0EA76505D0A76B2087A52BD8B4A62B2E
+:107250002AAB06D0DD2B3B0EDD6502D0DD6BDC2BCF
+:10726000032B3B0E03651200036B2085042B3B0EA2
+:1072700004651200046B052B170E05651200056BE3
+:10728000062B07C176F1764F1F0E764F1C0E764FF8
+:107290001F0E764F1E0E764F1F0E764F1E0E764F28
+:1072A0001F0E764F1F0E764F1E0E764F1F0E764F17
+:1072B0001E0E764F1F0E06651200010E066F072B7D
+:1072C0000C0E07651200010E076F082B120044EC2C
+:1072D00048F0326B32C118F5BDEC0FF0A8EC2BF082
+:1072E000E3EC0DF071EC0FF058EC25F0B7EC1CF06E
+:1072F000BCEC23F0A3C100F5A4C101F5A3C102F5C4
+:10730000A4C103F528BF0CD02ABB0AD0F3EC21F0AE
+:1073100029EC22F0C5EC28F023EC20F063EC1FF000
+:1073200028AF03D0670E5DEC0BF02AAB03D0740ED0
+:107330005DEC0BF0B86BB96B209D209F239D956B86
+:10734000966B996B9A6B050EB76F0BEC4AF0FDECE0
+:1073500049F0259D2C97000EE8CF7CF0000EE8CF79
+:107360007DF0000EE8CF7EF0000EE8CF7FF0FF0E3C
+:107370002BEC10F02497249968EC2AF0010ECF6FC3
+:10738000470E3CEC1AF00C0E83EC10F00A6F0AC1A9
+:1073900013F50B0E83EC10F00A6F0AC112F530ECF6
+:1073A00080F00101480E3CEC1AF0FCEC12F020A138
+:1073B0001BD029A101D000D0B7EC1CF08FEC3AF023
+:1073C00051EC3BF070EC45F091EC22F019EC3BF005
+:1073D00062EC3AF077EC12F023EC20F063EC1FF053
+:1073E0002CB142EF45F0209132EC3BF023BD62EC32
+:1073F00022F023BD78EC1EF023BDCCEC40F0239DA1
+:1074000020B52BEC3AF020BF15EF13F020B35DEF61
+:107410003BF020B985EF44F025BBDFEF30F024BB13
+:10742000ECEF46F026B1ABEF0DF02BB1A6EF0DF06F
+:1074300027BFC4EF30F028B142EF47F028B3ACEFDC
+:1074400030F028B592EF30F02ABFB7EF30F02DB30F
+:1074500083EF30F0ACD7BCEC23F066EC3AF095EC5F
+:1074600046F068EC2AF052EC3AF028BF09D02ABB6B
+:1074700007D029EC22F0F3EC21F020ADC5EC28F088
+:1074800044EC3AF0209512002781010ECC5F000EEB
+:10749000CD5BCC671200CD67120027910FEC4AF04C
+:1074A000CC2B120020C532F121C533F1326705D053
+:1074B000336703D0196B1A6B1200010E1927000EE7
+:1074C0001A23120027B111EC4AF0120005EC4AF021
+:1074D000490E3CEC1AF09FC102F5A0C103F50A6BFE
+:1074E0000AC111F54F0E0A6F0AC110F58DC100F5E2
+:1074F0008EC101F50B0E83EC10F00A6F0AC112F574
+:107500000C0E83EC10F00A6F0AC113F540EC80F00A
+:1075100001014A0E3CEC1AF007EC4AF0120094927A
+:107520008282249182A42481829294820A0EAEECFB
+:107530000CF0249382A424839492829224B174D078
+:1075400024B364D0948229A944D0299F2999320E6A
+:10755000A4EC0DF0A8CF39F1330EA4EC0DF0A8CFB8
+:107560003AF1D890010E3927000E3A2339C1A8FF0D
+:10757000320EA2EC0DF03AC1A8FF330EA2EC0DF0D2
+:10758000340EA4EC0DF0A8CF39F1350EA4EC0DF0BB
+:10759000A8CF3AF1D890010E3927000E3A2339C10D
+:1075A000A8FF340EA2EC0DF03AC1A8FF350EA2ECF4
+:1075B0000DF007C1A8FF2F0EA2EC0DF006C1A8FF29
+:1075C000300EA2EC0DF008C1A8FF310EA2EC0DF0B8
+:1075D000120029AF1200299F320EA4EC0DF0A8CFA3
+:1075E00039F1330EA4EC0DF0A8CF3AF1D890010E8A
+:1075F0003927000E3A2339C1A8FF320EA2EC0DF054
+:107600003AC1A8FF330EA2EC0DF01200FFEC49F0D6
+:10761000640EDAEC0CF001EC4AF0640EDAEC0CF0DB
+:10762000FFEC49F029891200FFEC49F0298F2999D4
+:10763000120020AD1200B92B040E83EC10F0B965D6
+:107640001200209D25EC2AF028BF04D02ABB02D0CE
+:10765000C5EC28F062EC22F058EC25F0B96B2497C9
+:107660002499120024B718D024B907D0D59EF294DB
+:10767000D76AD66AF292F0901200249927EC2AF089
+:10768000010EE8CF7FF0040E5DEC0BF0000EE8CFAA
+:107690007FF0208DB86B1200249720AD1200208F50
+:1076A0001200B82B030E83EC10F0050FD8B0FF0EBC
+:1076B000E806B86512002089120017EC41F0520E5E
+:1076C0003CEC1AF033EC0FF038EC1BF013EC1FF02D
+:1076D000A7EC1EF02ABB208728BF04D02ABB02D00B
+:1076E0005EEC1BF020A145D028BF09D02ABB17D0E3
+:1076F00029B118D06EEC3EF038EC3CF01ED020AD35
+:1077000016EC24F062EC40F02CB3F3EC24F024BF30
+:1077100004D0248FF2EC40F010D0249F0ED0E5EC82
+:107720003BF00BD0230EA4EC0DF0010EA86200D0AC
+:107730009EEC29F038EC3CF000D062EC40F023B72E
+:1077400091EC22F020BDDBEC3BF020BF39EC44F0A3
+:1077500015EC3CF02CB142EF45F02CB3F3EC24F0E7
+:107760002091260E83EC10F0326F010E326301D0AF
+:10777000268326A30BD020BD08D016EC24F029B117
+:107780009EEC29F027B56EEC3EF0269320AFD0ECAE
+:1077900041F020BF15EC42F020A32ED323BD7FEC97
+:1077A00040F0239D20B59EEC40F022B753EC3DF015
+:1077B0000300000097D7B92B040E83EC10F0B965D5
+:1077C0001200209DDBEC23F0120089EC24F022B99A
+:1077D0000DD047EC24F0E22B3C0EE26302D0E26BCA
+:1077E000E12B269722B912002687120026A7120045
+:1077F0000BD877EC24F0E06BE26BE16BDD6BDC6BBC
+:10780000916B926B26971200DEC152F1DFC153F1EA
+:1078100091C154F192C155F1D9EC0BF01FA71200A0
+:1078200091C1DEF192C1DFF11200FDEC49F032C5E9
+:1078300032F10E0E83EC10F0326132EC3CF027BBDB
+:10784000FBEC49F01FC532F1322D120066C532F152
+:107850000E0E83EC10F0326132EC3CF027BBFBECF7
+:1078600049F01200FBEC49F0020EB06F288B1200B9
+:1078700024BFCDD0248FF2EC40F039EC3EF08DC126
+:107880004CF18EC14DF10A0E4E6F000E4F6B0DEC98
+:107890000CF048C14CF149C14DF1D0C14EF14F6BD4
+:1078A000F0EC0BF048C14CF149C14DF1640E4E6F44
+:1078B000000E4F6B0DEC0CF048C107F529B118C54F
+:1078C00007F528EC80F0010165C532F11B0E83EC51
+:1078D00010F0325DD8B039EC2AF025A18DD08FC1DF
+:1078E0004CF190C14DF1640E4E6F4F6B0DEC0CF0EE
+:1078F000326B1B0EA4EC0DF0A8A00AD01C0EA4EC59
+:107900000DF04851A86004D0A8CF32F1010E336FBA
+:107910001B0EA4EC0DF0A8A210D01D0EA4EC0DF0CF
+:107920004851A8600AD01D0EA4EC0DF03251A86495
+:1079300004D0A8CF32F1020E336F1B0EA4EC0DF071
+:10794000A8A410D01E0EA4EC0DF04851A8600AD0D7
+:107950001E0EA4EC0DF03251A86404D0A8CF32F171
+:10796000030E336F1B0EA4EC0DF0A8A610D01F0E53
+:10797000A4EC0DF04851A8600AD01F0EA4EC0DF045
+:107980003251A86404D0A8CF32F1040E336F1B0E1D
+:10799000A4EC0DF0A8A810D0200EA4EC0DF04851D6
+:1079A000A8600AD0200EA4EC0DF03251A86404D0D7
+:1079B000A8CF32F1050E336F450E3CEC1AF03307B9
+:1079C00032C11BF53351040DF350070FA96ED1ECF2
+:1079D0000DF0A8CF1DF53351040DF350060FA96E1D
+:1079E000D1EC0DF01DC50AF1D880640E0A55D8807F
+:1079F000A856A8CF1CF50AD0460E3CEC1AF0326B04
+:107A000032C11BF532C11CF532C11DF51200249F95
+:107A100028BF12002ABB1200420E3CEC1AF029ECDF
+:107A20003DF000EC80F00101430E3CEC1AF023C560
+:107A3000CEF1CE6712002BC50AF10A6729D025B115
+:107A40005EEC1BF02591AA6B22C5ABF173EC1BF029
+:107A500012008DC100F58EC101F50B0E83EC10F004
+:107A60000A6F0AC112F50C0E83EC10F00A6F0AC1FE
+:107A700013F5100E83EC10F00A6F0AC117F51D0EF6
+:107A800083EC10F00A6F0AC11EF544EC48F01200B6
+:107A900025A198EC1BF025812BC5AAF124C5ABF1DB
+:107AA000A3EC1BF012002297268307EC4AF022BBBE
+:107AB00008D0228BBDC1BFF1BEC1C0F12F0EC6ECF4
+:107AC0002AF08F51DEEC2AF09051DEEC2AF0AE6BFA
+:107AD000B12D02D0020EAE27B22D02D0020EAE277B
+:107AE000B32D02D0020EAE27B42D02D0030EAE2766
+:107AF000B52D02D0090EAE27B62D02D0000EAE274E
+:107B000028AB11D0010EAE27AF6BB051AF27B06BD1
+:107B100028A703D0020EAE27AF8928A903D0010EF3
+:107B2000AE27AF8BAE8FAE51DEEC2AF028AB16D06D
+:107B3000AF51DEEC2AF028A70CD0180EA4EC0DF003
+:107B4000A850DEEC2AF0190EA4EC0DF0A850DEECE3
+:107B50002AF028A903D0D151DEEC2AF0289B2897DF
+:107B60002899B12F01D07AD8B22F01D06CD8B32F79
+:107B700001D05ED8B42F01D04DD8B52F01D018D880
+:107B8000B62F01D010D8B1BFB16BB2BFB26BB3BFCB
+:107B9000B36BB4BFB46BB5BFB56BB6BFB66B440EB9
+:107BA0003CEC1AF012001A0E83EC10F0B66F1200C3
+:107BB00031C9B5F1B551DEEC2AF030C9B5F1B55196
+:107BC000DEEC2AF033C9B5F1B551DEEC2AF032C94A
+:107BD000B5F1B551DEEC2AF035C9B5F1B551DEECA1
+:107BE0002AF034C9B5F1B551DEEC2AF037C9B5F148
+:107BF000B551DEEC2AF036C9B5F1B551DEEC2AF00C
+:107C000038C9B5F1B551DEEC2AF0190E83EC10F04D
+:107C1000B56F1200000EDEEC2AF0000EDEEC2AF04A
+:107C2000000EDEEC2AF0180E83EC10F0B46F120098
+:107C3000000EDEEC2AF0000EDEEC2AF0170E83ECCC
+:107C400010F0B36F1200AA51DEEC2AF0AB51DEEC5B
+:107C50002AF0160E83EC10F0B26F12009751DEEC92
+:107C60002AF09851DEEC2AF0150E83EC10F0B16F7B
+:107C7000120020A32DD08DC152F18EC153F195C1B8
+:107C800054F196C155F18DC195F18EC196F1D9ECA3
+:107C90000BF050C14CF151C14DF1270E4E6F4F6B9F
+:107CA000F0EC0BF048C145F149C146F1070E476FB2
+:107CB000C3EC0BF0630E456501D0456F050E83ECF8
+:107CC00010F0455DD8A004D0218B6CEC1CF01200A4
+:107CD00021AB1200219B91EC1CF0120029B1120083
+:107CE0008DC14CF18EC14DF10A0E4E6F4F6B0DECF4
+:107CF0000CF048C14CF149C14DF1D0C14EF14F6B70
+:107D0000F0EC0BF048C154F149C155F1130E83EC6E
+:107D100010F0640DF3CF52F1F4CF53F1D9EC0BF026
+:107D200027951FB72785279B48C154F149C155F1B5
+:107D3000120E83EC10F0640DF3CF52F1F4CF53F137
+:107D4000D9EC0BF01FA704D0278B050EB06F288B42
+:107D500048C154F149C155F1110E83EC10F0640D86
+:107D6000F3CF52F1F4CF53F1D9EC0BF01FB705D09C
+:107D7000278B2785040EB06F288B27B506D027A345
+:107D800007D0FFEC1EF0279303D0D6EC1EF027831C
+:107D9000120020C54CF121C54DF14C6707D04D674D
+:107DA00005D0010ECC6FCD6B279112004CC104F5AC
+:107DB0004DC105F50D0E83EC10F04E6F4EC106F56A
+:107DC0004B0E3CEC1AF01CEC80F001014C0E3CEC2C
+:107DD0001AF004C54CF105C54DF14C6707D04D674D
+:107DE00005D0010ECC6FCD6B279112004CC1CCF1A8
+:107DF0004DC1CDF12781120020A758EF40F02ABBDA
+:107E000003DDA3C100F5A4C101F50C0E83EC10F055
+:107E10000A6F0AC113F5470E3CEC1AF030EC80F003
+:107E20000101B7DF480E3CEC1AF0FD0EDEEC2AF043
+:107E3000FD0EDEEC2AF0FE0EDEEC2AF0BFC1BDF135
+:107E4000C0C1BEF1FA0EDEEC2AF0FA0EDEEC2AF02A
+:107E5000200EDEEC2AF00751DEEC2AF00651DEECB3
+:107E60002AF00851DEEC2AF00551DEEC2AF004512C
+:107E7000DEEC2AF02AAB11D0DEC132F1DFC133F1E2
+:107E8000A6EC2AF032C1DEF133C1DFF1DE51DEECC7
+:107E90002AF0DF51DEEC2AF010D091C132F192C10C
+:107EA00033F1A6EC2AF032C191F133C192F1915134
+:107EB000DEEC2AF09251DEEC2AF0A551DEEC2AF03D
+:107EC000A651DEEC2AF0A751DEEC2AF0AC51DEEC34
+:107ED0002AF0AD51DEEC2AF0A351DEEC2AF0A451D9
+:107EE000DEEC2AF020C532F121C533F13251DEEC4F
+:107EF0002AF03351DEEC2AF0060EA4EC0DF0A85067
+:107F0000DEEC2AF0070EA4EC0DF0A850DEEC2AF00F
+:107F10000A0EA4EC0DF0A850DEEC2AF00B0EA4EC37
+:107F20000DF0A850DEEC2AF00E0EA4EC0DF0A850D7
+:107F3000DEEC2AF00F0EA4EC0DF0A850DEEC2AF0D7
+:107F4000120EA4EC0DF0A850DEEC2AF0130EA4ECF7
+:107F50000DF0A850DEEC2AF0160EA4EC0DF0A8509F
+:107F6000DEEC2AF0170EA4EC0DF0A850DEEC2AF09F
+:107F7000180EA4EC0DF0A850DEEC2AF0190EA4ECBB
+:107F80000DF0A850DEEC2AF0210EA4EC0DF0A85064
+:107F9000DEEC2AF0010EDEEC2AF0320EDEEC2AF0E6
+:107FA000C251DEEC2AF0C351DEEC2AF0140E83EC51
+:107FB00010F02ABB010EDEEC2AF0020E396F393BBD
+:107FC000150E83EC10F03925DEEC2AF0020E396F25
+:107FD000393B160E83EC10F03925DEEC2AF0020E48
+:107FE000396F393B170E83EC10F03925DEEC2AF09F
+:107FF000030E396F393B180E83EC10F03925DEEC97
+:108000002AF0090E396F393B190E83EC10F039252F
+:10801000DEEC2AF0000E396F393B1A0E83EC10F0BB
+:108020003925DEEC2AF01A0EA4EC0DF0A850DEEC97
+:108030002AF0000EDEEC2AF0FB0EDEEC2AF0FB0E3E
+:10804000DEEC2AF0020EA4EC0DF0A8CF39F1030EFD
+:10805000A4EC0DF0A8CF3AF1D890010E3927000E0C
+:108060003A2339C1A8FF020EA2EC0DF03AC1A8FFD5
+:10807000030EA2EC0DF01C0E97EC10F0326703D04B
+:10808000336701D012D0010E3227000E3323700E59
+:10809000820FA96E32C1A8FFD5EC0DF0700E830FD0
+:1080A000A96E33C1A8FFD5EC0DF0259D0BEC4AF06D
+:1080B0002DB169EC49F060EC80F00101196B1A6B8D
+:1080C00067EF39F020A712002ABB0CD02093B72B02
+:1080D000020E83EC10F0020FD8B0FF0EE806B76571
+:1080E00020831200B72B3C0EB7631200B76B2093AE
+:1080F000E02B1E0E83EC10F0E06320831200CCEC2A
+:1081000040F020B3A8EC40F020B3BBEC40F0219D40
+:1081100097519963218D98519A63218D21BDA7ECC8
+:108120001EF0219F8D519563218F8E519663218F73
+:1081300025BD218F21BF3CEC21F0120070EC45F0F1
+:10814000E2EC40F0EDEC23F095EC46F020951200C7
+:1081500091C152F192C153F18FC154F190C155F1C7
+:10816000D9EC0BF01FA712008FC191F190C192F1D1
+:10817000EDEC23F01200ACC152F1ADC153F197C147
+:1081800054F198C155F1D9EC0BF01FB7120097C10B
+:10819000ACF198C1ADF112002299000E83EC10F001
+:1081A000526F536B8FC154F190C155F1D9EC0BF064
+:1081B0001FA705D020B7B76B20832289120020A704
+:1081C0002093120023B709D00C0EC36501D0120012
+:1081D000070EB06F288B238712000D0EC365F8D7EA
+:1081E000239712008FC115F190C116F11551112777
+:1081F00016511223000E1323142315511127165163
+:108200001223000E1323142317C14EF118C14FF18E
+:1082100011C148F112C149F113C14AF114C14BF126
+:1082200034EC0CF048C193F149C194F11200510EA5
+:108230003CEC1AF0916B926B936B946BF4EC0FF037
+:108240005A0EA4EC0DF0000EA864BDEC0FF0116BFB
+:10825000126B136B146B010E176F186B010EDE6F30
+:10826000DF6BE16BE26BDC6BDD6BA56BA66BA76B69
+:10827000A86BE06BB76BB86BB06B289B2B9BD2697C
+:10828000E86B25910DEC2BF0A4C103F5A3C102F519
+:1082900097C1ACF198C1ADF10A6B0AC14EF20AC1A7
+:1082A0004FF202EE50F0200E0A6FEE6A0A2FFDD751
+:1082B00002EE70F0200E0A6F010EEE6E0A2FFCD750
+:1082C00002EE90F0EE6AEE6A200E83EC10F0A8CF7A
+:1082D00015F5210E83EC10F0A8CF14F52D9B2C83FF
+:1082E000290E83EC10F0326F010E32632C93140EC2
+:1082F00083EC10F0A96F150E83EC10F0B16F160E21
+:1083000083EC10F0B26F170E83EC10F0B36F180E01
+:1083100083EC10F0B46F190E83EC10F0B56F1A0EE9
+:1083200083EC10F0B66F2AAB02D0010EA96F240EB9
+:10833000A4EC0DF029B1A8CF18F50FEC4AF0239763
+:10834000229B209D2097268325ADF2EC0DF0210E77
+:10835000A4EC0DF0A8CFD1F1D105040DF350070F17
+:10836000A96ED1EC0DF0A8CF11F5D105040DF35095
+:10837000060FA96ED1EC0DF0A8CFD0F111C50AF10E
+:10838000D880640E0A55D880A856A8CF10F5326B55
+:1083900032C11BF532C11CF532C11DF52B951200FF
+:1083A00024B718D024A91200249724992A99208D43
+:1083B000209FB96B2ABB0AD0010EE8CF7FF0040ED4
+:1083C0005DEC0BF0000EE8CF7FF012008D0E5DEC3F
+:1083D0000BF012002497249920AD14D02AAB03D0BF
+:1083E0002093209D1200208F209DCFEC27F09BEC46
+:1083F00025F02C992B9F010EBA6FE1EC27F0249900
+:10840000249712002CB7ABD005EC4AF0060EB06FE3
+:10841000288B2CA31200116B126B136B146B020EC2
+:10842000176F186BF2EC40F0120024B715D024A996
+:1084300012002DB9FFD026B91CD126BDF3D0249946
+:10844000B96BBA2B060E2BBD040EBA6302D0010E17
+:10845000BA6FE1EC27F0120024972499208F209D19
+:10846000B96B2DB9E7D026BBB0D126B902D126BD54
+:10847000D9D026B500D12CB9BEEF42F02BBF0BD01E
+:10848000BA4FDAD0BA4F8AD1BA4F53D0BA4F45D08B
+:10849000BA4F05D21200BA4FBCD0BA4F17D0BA4F5C
+:1084A000C3D0BA4F03D0BA4FFAD112002C732CA309
+:1084B0000AD0116B126B136B146B020E176F186BD3
+:1084C000F2EC40F0ECD1E1EC24F0E9D15A0EA4EC4E
+:1084D0000DF0A86608D0F4EC0FF0010EA86E5A0E4D
+:1084E000A2EC0DF007D0BDEC0FF0000EA86E5A0EF6
+:1084F000A2EC0DF013EC1FF0A7EC1EF03CEC21F009
+:10850000EDEC23F02ABBCBD128BFC9D125B198EC23
+:108510001BF025A15EEC1BF0C2D1CFEC27F0B9EC2B
+:1085200025F0010EBA6F2B8FE1EC27F024992497E8
+:10853000120029B126D12685CFEC27F0D0C1A8FFA3
+:10854000180EA2EC0DF011C5A8FF190EA2EC0DF04B
+:10855000CCEC25F0010EBA6FE1EC27F01200208F71
+:10856000209D249924972C89CFEC27F007EC26F046
+:108570002B9F010EBA6FE1EC27F01200BA4F8FD19A
+:10858000BA4F39D0BA4F3ED0BA4F2ED0BA4F25D0BD
+:1085900086D107EC26F0980E526F3A0E536FC6C183
+:1085A00054F1C7C155F1D9EC0BF01FA705D0980EB7
+:1085B000C66F3A0EC76F1200E80E526F030E536F6C
+:1085C000C6C154F1C7C155F1D9EC0BF01FB7120069
+:1085D000E80EC66F030EC76F1200E80EC65F030EEB
+:1085E000C75B050EBA6FD5D7E80EC627030EC723A3
+:1085F000040EBA6FCED7640EC627000EC723020E34
+:10860000BA6FC7D7640EC65F000EC75B030EBA6FA2
+:10861000C0D7268DCFEC27F030EC80F00101C2EC02
+:1086200028F01200269D3BD12D89CFEC27F0CDEC10
+:1086300029F012002D9933D12689220EA4EC0DF0D9
+:10864000030EA8640DD00CD02B8533EC0FF0A4ECF6
+:108650002AF023C5CEF1CE671200A5EC2AF0120055
+:10866000CFEC27F023C5CEF1CE6712004FEC26F0F9
+:108670001200269914D1BA4F6FD0BA4F4ED0BA4FCC
+:1086800038D0BA4F17D0BA4F01D01200190EA4EC4F
+:108690000DF0A8CF32F13207FF0E326301D0322B3A
+:1086A00032C1A8FF190EA2EC0DF0CCEC25F0050E9E
+:1086B000BA6F1200190EA4EC0DF0A8CF32F1322BD4
+:1086C000650E326302D0040E326F180EA4EC0DF06A
+:1086D000A8503225336F650E336301D0320732C1A3
+:1086E000A8FF190EA2EC0DF0CCEC25F0040EBA6F29
+:1086F0001200180EA4EC0DF0A8CF32F13207030ED1
+:10870000326301D0322B32C1A8FF180EA2EC0DF05B
+:10871000CCEC25F0030EBA6F1200180EA4EC0DF08D
+:10872000A8CF32F1322B650E326302D0050E326FC4
+:10873000190EA4EC0DF0A8503225336F650E33638B
+:1087400001D0320732C1A8FF180EA2EC0DF0CCEC1C
+:1087500025F0020EBA6F1200190EA4EC0DF0A8CF8E
+:1087600011F5180EA4EC0DF0A8CFD0F111C50AF147
+:10877000D880640E0A55A856A8CF10F52887288BF4
+:108780008ED0268BCFEC27F029912A8949EC27F04F
+:108790002981010EBA6FE1EC27F0120029B10AD04D
+:1087A000268BCFEC27F049EC27F0010EBA6FE1ECF5
+:1087B00027F012002B8D268BCFEC27F09AEC27F0B8
+:1087C000010EBA6FE1EC27F012002AB92FD029A1CF
+:1087D0002DD0230EBA25A96ED1EC0DF0A8CF18F537
+:1087E0002B9D210EA4EC0DF0A8CFD1F1D105040DE5
+:1087F000F350070FA96ED1EC0DF0A8CF11F5D105FC
+:10880000040DF350060FA96ED1EC0DF0A8CFD0F1F6
+:1088100011C50AF1D880640E0A55D880A856A8CF91
+:1088200010F50AEC1FF02889288B39D0326B32C141
+:1088300018F5269BBAC1D1F1BA05040DF350070F04
+:10884000A96ED1EC0DF0A8CF11F5BA05040DF350C7
+:10885000060FA96ED1EC0DF0A8CFD0F111C50AF129
+:10886000D880640E0A55A856A8CF10F52889288B01
+:1088700016D020AF12002DB945D02CB93ED026A974
+:1088800008D02BB531D023C5CEF1CE6702D04FEC46
+:1088900026F0B92B0A0E83EC10F0B96512002BA557
+:1088A0000DD02B9533EC0FF0A7EC1EF0EDEC23F080
+:1088B00025B198EC1BF025A15EEC1BF02B95209FB9
+:1088C000209D13EC1FF0CFEC27F038EC1BF016ECDA
+:1088D00024F0B96B26992D99269B269D26952B9DD4
+:1088E0002C99249724991200A4EC2AF023C5CEF1E8
+:1088F000CE67CFD7A5EC2AF0CCD707EC26F0E1EC79
+:1089000027F0C7D7CDEC29F0C4D729EE4AF0100ED6
+:10891000396FDE660DD0392FFCD733EC0FF0010E26
+:108920005DEC0BF0020E5DEC0BF070EC80F00101E1
+:1089300081EC0EF0F2EC0DF0A56BA66B939C939E70
+:10894000819C819E20B509D820B14FD820A9EAEF9B
+:1089500047F0000003000000F5D770EC45F02CB1A3
+:1089600042EF45F052EC3AF044EC3AF0A62B0E0EF2
+:10897000A66526D072D895EC46F01AEC80F001017D
+:10898000A1C1A3F1A2C1A4F18DC1A1F18EC1A2F137
+:10899000A66B070E97EC10F032C152F133C153F1C0
+:1089A000A1C154F1A2C155F1D9EC0BF01FB701D010
+:1089B00007D0070E97EC10F032C1A1F133C1A2F13C
+:1089C0008DC100F58EC101F50B0E83EC10F00A6F1E
+:1089D0000AC112F50C0E83EC10F00A6F0AC113F5F0
+:1089E00040EC80F00101209512008FEC3AF027A1B5
+:1089F00005D00DEC4AF00000030000000FEC4AF037
+:108A0000A52B050EA56512D028D8060E97EC10F000
+:108A100032C152F133C153F18DC154F18EC155F1C0
+:108A2000D9EC0BF020891FB72099A56B209124B7B2
+:108A30000AD024B908D0F292F0902A932A9124996E
+:108A40002497D59E1200F292F0902A932A912499AD
+:108A50002497D59E20992787120002EC19F0030075
+:108A6000000003000000030005EC19F0F5EC18F01D
+:108A700003000000030000000300FCEC18F0DDEC34
+:108A800017F01200F26AF16AF06AC290F2EC0DF08F
+:108A9000100E926E806A936A816A1D0E946E826ACD
+:108AA000956A836A966A846AD56ACD6ACA6A9B6A3D
+:108AB000020ED36ED180EAC137F10F0E396F030079
+:108AC0000000392FFCD7FBEC49F00400050EAEEC9A
+:108AD0000CF0FDEC49F003000000372FF4D7EBD782
+:108AE000C2800000C282C2B2FED7C4CF4DF1C3CF54
+:108AF0004CF1C60E4E6F030E4F6FF0EC0BF0640E90
+:108B00004E6F4F6B34EC0CF048C1C2F149C1C3F158
+:108B1000C290C2C154F1C3C155F1280E526F0A0E62
+:108B2000536FD9EC0BF02C911FB703D0020EEA6FF4
+:108B30002C818DC154F18EC155F1990E526F3A0EB0
+:108B4000536FD9EC0BF02C911FA703D0030EEA6FE3
+:108B50002C81299B299D280EA4EC0DF0A8CF54F15F
+:108B6000290EA4EC0DF0A8CF55F1D00E526F070ED0
+:108B7000536FD9EC0BF01FA7298B940E526F110E77
+:108B8000536FD9EC0BF01FA7298D29AB73D029ADFA
+:108B900071D0680EA86E280EA2EC0DF0100EA86E13
+:108BA000290EA2EC0DF007C1A8FF2A0EA2EC0DF0D1
+:108BB00006C1A8FF2B0EA2EC0DF008C1A8FF2C0ED9
+:108BC000A2EC0DF097C1A8FF2D0EA2EC0DF098C1FC
+:108BD000A8FF2E0EA2EC0DF0A86A2F0EA2EC0DF04D
+:108BE000A86A300EA2EC0DF0A86A310EA2EC0DF0CE
+:108BF000A86A320EA2EC0DF0A86A330EA2EC0DF0BA
+:108C0000A86A340EA2EC0DF0A86A350EA2EC0DF0A5
+:108C100097C1A8FF360EA2EC0DF098C1A8FF370E41
+:108C2000A2EC0DF007C1A8FF380EA2EC0DF006C1B2
+:108C3000A8FF390EA2EC0DF008C1A8FF3A0EA2EC75
+:108C40000DF097C1A8FF3B0EA2EC0DF098C1A8FF54
+:108C50003C0EA2EC0DF007C1A8FF3D0EA2EC0DF0FA
+:108C600006C1A8FF3E0EA2EC0DF008C1A8FF3F0E02
+:108C7000A2EC0DF0280EA4EC0DF0A8CF54F1290EB3
+:108C8000A4EC0DF0A8CF55F1C2C152F1C3C153F10C
+:108C9000D9EC0BF01FA71200C2C1A8FF280EA2EC4E
+:108CA0000DF0C3C1A8FF290EA2EC0DF007C1A8FF6B
+:108CB0002A0EA2EC0DF006C1A8FF2B0EA2EC0DF0BF
+:108CC00008C1A8FF2C0EA2EC0DF097C1A8FF2D0E35
+:108CD000A2EC0DF098C1A8FF2E0EA2EC0DF0120030
+:108CE000800ECF6ECE6A3C0E036111D03C0E046143
+:108CF0000ED0180E05610BD0200E066108D00C0EA8
+:108D0000076105D0640E086102D09D801200000E3C
+:108D1000036F000E046F0C0E056F020E066F080E37
+:108D2000076F090E086F9D801200360EA4EC0DF03F
+:108D3000A8CF54F1370EA4EC0DF0A8CF55F197C190
+:108D400052F198C153F1D9EC0BF01FA719D097C17C
+:108D5000A8FF360EA2EC0DF098C1A8FF370EA2ECCA
+:108D60000DF007C1A8FF380EA2EC0DF006C1A8FF58
+:108D7000390EA2EC0DF008C1A8FF3A0EA2EC0DF0DE
+:108D80003B0EA4EC0DF0A8CF54F13C0EA4EC0DF07A
+:108D9000A8CF55F197C152F198C153F1D9EC0BF01E
+:108DA0001FB7120097C1A8FF3B0EA2EC0DF098C1AF
+:108DB000A8FF3C0EA2EC0DF007C1A8FF3D0EA2ECEF
+:108DC0000DF006C1A8FF3E0EA2EC0DF008C1A8FFF1
+:108DD0003F0EA2EC0DF01200249B9D9A09EC4AF084
+:108DE0009E9A620EAD6EFAEC0DF000EC0EF0AECF76
+:108DF00005F1180E0561056B00EC0EF0AECF04F125
+:108E00003C0E0461046B00EC0EF0AECF03F13C0E9F
+:108E10000361036B00EC0EF0AECF07F10C0E07659B
+:108E200001D0076F00EC0EF0AECF06F107C132F1B2
+:108E3000324F1F0E324F1C0E324F1F0E324F1E0E7E
+:108E4000324F1F0E324F1E0E324F1F0E324F1F0E6B
+:108E5000324F1E0E324F1F0E324F1E0E324F1F0E5C
+:108E6000066502D0010E066F00EC0EF0AECF08F1E1
+:108E7000640E0861086B0BEC4AF09E9A20859D8A6F
+:108E8000D7EF39F028919D9A09EC4AF09E9A660E28
+:108E9000AD6EFAEC0DF000EC0EF0AECF32F100EC5E
+:108EA0000EF0AECF33F1596BFA0EDAEC0CF0FA0E8D
+:108EB000DAEC0CF0FA0EDAEC0CF0FA0EDAEC0CF05C
+:108EC00032C152F133C153F197C154F198C155F1F8
+:108ED000D9EC0BF050511FB7000E506F50C1ADFFD1
+:108EE00050C1A8FF50C159F1010EAA6E000EA96E23
+:108EF000D5EC0DF0000EAA6E0BEC4AF09E9A9D8AFE
+:108F0000D7EF39F00101ABEC48F020B36DEC1AF06B
+:108F1000FC6A01EE09F0EE6A0A0EEA62FCD7F2EC96
+:108F20000DF070EC46F00BEC19F0239D23ADFED74D
+:108F30008F6B906B196B1A6B20892DEC45F0209983
+:108F40008DC19FF18EC1A0F18DC1A1F18EC1A2F1A1
+:108F50008DC1A3F18EC1A4F1CC2B0A6B0AC111F50E
+:108F60004F0E0A6F0AC110F58DC100F58EC101F5D3
+:108F700020EC80F0010130EC80F0010118EC80F071
+:108F8000010166EC3AF0010140EC80F00101010EB4
+:108F9000A96E010EAA6ED1EC0DF0A8CF39F1A92A65
+:108FA000D1EC0DF0A8CF3AF1AA6A010E396304D0D2
+:108FB000320E3A6301D00ED0010EA96E010EAA6ED8
+:108FC000010EA86ED5EC0DF0A92A320EA86ED5ECD4
+:108FD0000DF0AA6A01EC4AF00FEC4AF071EC0FF0C8
+:108FE000000EE8CF7CF0000EE8CF7DF0000EE8CF59
+:108FF0007EF0000EE8CF7FF0FF0E2E6F2EC17AF0CC
+:10900000FF0E2E6F2EC17BF0A8EC2BF0A3C19FF1B9
+:10901000A4C1A0F1AA6A5C0EA4EC0DF0290EA8620E
+:1090200001D006D02DD8290EA86E5C0EA2EC0DF052
+:109030001F0E97EC10F09A0E326304D0020E3363C9
+:1090400001D006D027B777EC48F027B792EC48F06C
+:109050001F6B206B216B226B236B246B256B266BA4
+:10906000276B286B296B2A6B2B6B2C6B2D6B270EB8
+:10907000A4EC0DF02A85010EA8622A9567EF39F05D
+:1090800086EC29F0140E53D0289F29912A9BAA6AB6
+:10909000220EA4EC0DF0010EA86206D0288F000E5F
+:1090A0000A6F0AC11FF51200020EA86206D02981BC
+:1090B000000E0A6F0AC11FF51200030EA86206D047
+:1090C0002A8B000E0A6F0AC11FF51200040EA86257
+:1090D00005D0010E0A6F0AC11FF51200050EA86225
+:1090E00012002981010E0A6F0AC11FF5120033EC2C
+:1090F0000FF044EC29F00A0E396FC80EDAEC0CF0D0
+:109100002497249920B1CCEC40F020B1390720916C
+:10911000396701D0120020B3120024B7120024B91D
+:109120001200F0D733EC0FF065EC29F0E4D7396F7B
+:10913000C80EDAEC0CF02497249920B1CCEC40F066
+:1091400020B139072091396701D0120024B71200ED
+:1091500024B91200F2D76C0ED36E110E926E806A93
+:10916000030E936E816ADD0E946E826A000E966E17
+:10917000846A000E956E836A400E9B6E1F0ED56E3C
+:10918000070ECD6ED00EF26E050EF16E080EF06E6B
+:10919000210E9D6E000EA06ED06A000EC26E0E0EE5
+:1091A000C16E8A0EC06EC66A000EC76E280EC66EED
+:1091B000000EC56E080EC86EBD6ABA6A070EB46EA0
+:1091C000200E6F6E240EAC6E900EAB6E080EB86E55
+:1091D000B06A220EAF6EAE6A9E6A1200010EEB6F8D
+:1091E0000F0EEC6F010EBA6FB86B208F218733EC36
+:1091F0000FF05AEC1EF024972499219121932DEC25
+:109200001CF02FEC1DF042EC13F020A109D051EC22
+:109210003BF0CCEC40F08FEC3AF070EC45F0209154
+:1092200021B11DEF49F020AF15EF13F020B967EF22
+:1092300013F020B3EAEF47F0E6D7BA4F1CD0BA4F8D
+:109240000AD0BA4F10D0BA4F79D0BA4F58D0040EC6
+:10925000BA6F69EF13F0020EEB27C70EEB61EB6FED
+:10926000020EBA6FC8D7030EEC27630EEC61EC6FE9
+:10927000030EBA6FC0D7258D2C87ECC14CF14D6B16
+:10928000640E4E6F4F6BF0EC0BF0E80E4827030EA8
+:10929000492348C1C6F149C1C7F1C6C18DF1C7C153
+:1092A0008EF121912193209F249724995EEC49F01F
+:1092B0002083500E3CEC1AF05DEF3BF02D81530EF5
+:1092C0003CEC1AF062EC80F00101540E3CEC1AF018
+:1092D00012002D91530E3CEC1AF064EC80F0010169
+:1092E000540E3CEC1AF0470E3CEC1AF030EC80F0D7
+:1092F0000101C9EC3EF0480E3CEC1AF0120033ECD0
+:109300000FF01CEC43F02497249920A109D051ECD4
+:109310003BF0CCEC40F08FEC3AF070EC45F0209153
+:1093200024B709D024B907D020B967EF13F020B3D0
+:10933000EAEF47F0EAD7050EBA6F56D717EC41F0BF
+:10934000258D2C87ECC14CF14D6B640E4E6F4F6B2D
+:10935000F0EC0BF0E80E4827030E492348C1C6F194
+:1093600049C1C7F1C6C18DF1C7C18EF15EEC49F0AC
+:10937000010EE8CF7FF00C0E5DEC0BF0000EE8CF95
+:109380007FF01E0EED6F2DEC1CF003EC4AF06DEC3F
+:109390003CF029EC3DF000EC80F00101430E3CEC88
+:1093A0001AF0ED2FF2D7EB2FECD723C5CEF1CE6715
+:1093B00016D0FFEC49F069EC49F0259D2C97FA0E88
+:1093C000DAEC0CF0FA0EDAEC0CF0FA0EDAEC0CF047
+:1093D00001EC4AF0010EEB6F050EBA6F05D76DEC8C
+:1093E0003CF029EC3DF000EC80F0010123C5CEF10A
+:1093F000CE67F5D7DED78188120081981200818868
+:1094000012008198120081781200818812008198E0
+:1094100012008186120081961200818612008196C8
+:069420001200817612002B
+:02A0000000005E
+:020000040001F9
+:020000001200EC
+:020020001200CC
+:020030001200BC
+:020034001200B8
+:020040001200AC
+:0200500012009C
+:0200600012008C
+:0200800012006C
+:0200C400120028
+:0200C800120024
+:0200E00012000C
+:020000040030CA
+:0300010008180ECE
+:020005008080F9
+:060008003FC03FE03F4055
+:00000001FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/MAIN.err	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,11 @@
+Warning[203] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\PLED_OUTPUTS.ASM 2855 : Found opcode in column 1. (return)
+Warning[203] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\PLED_OUTPUTS.ASM 2858 : Found opcode in column 1. (return)
+Warning[203] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\DIVEMODE.ASM 164 : Found opcode in column 1. (sleep)
+Warning[203] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\DIVEMODE.ASM 165 : Found opcode in column 1. (nop)
+Warning[203] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\DIVEMODE_MENU.ASM 411 : Found opcode in column 1. (bra)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 137 : MESSAGE: (OSTC - diving computer code,  Copyright (C) 2009 HeinrichsWeikamp GbR)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 138 : MESSAGE: (This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 139 : MESSAGE: (Free Software Foundation, either version 3 of the License, or (at your option) any later version.)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 140 : MESSAGE: (This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 141 : MESSAGE: (or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.)
+Message[301] Q:\DATA\OSTC2\CODE_PART1\OSTC_CODE_ASM_PART1\MAIN.ASM 142 : MESSAGE: (You should have received a copy of the GNU General Public License along with this program.If not, see http://www.gnu.org/licenses/.)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/adc_rtc.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,242 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; routines for AD converter, Realtime clock initialisation
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 05/15/08
+; known bugs:
+; ToDo: 
+
+get_battery_voltage:			; starts ADC and waits until fnished
+	bsf		ADCON0,0			; power on ADC
+	nop
+	bsf		ADCON0,1			; start ADC
+get_battery_voltage2:
+	btfsc	ADCON0,1			; Wait...
+	bra		get_battery_voltage2
+
+; 3.3V/1024=3,2227mV Input/Bit=9,6680mV Battery/Bit. 
+; Example: 434*9,6680mV=4195,9mV Battery. 
+
+	movff	ADRESH,xA+1
+	movff	ADRESL,xA+0
+	movlw	LOW		d'966'				
+	movwf	xB+0
+	movlw	HIGH	d'966'				
+	movwf	xB+1
+	call	mult16x16			; AD_Result*966
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	div32x16		  ;xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+0,batt_voltage+0	; store value
+	movff	xC+1,batt_voltage+1
+	bcf		ADCON0,0			; power off ADC
+
+	; Check if we should enter deep-sleep mode
+	
+	movff	batt_voltage+0,sub_b+0	
+	movff	batt_voltage+1,sub_b+1
+	movlw	LOW		d'2600'			; must be greater then 2600mV...
+	movwf	sub_a+0
+	movlw	HIGH	d'2600'
+	movwf	sub_a+1
+	call	sub16					;  sub_c = sub_a - sub_b
+	bcf		enter_error_sleep		; Clear flag
+	btfsc	neg_flag				; neg_flag=1 if eeprom40:41 < 2000
+	bra		get_battery_voltage3	; Battery in OK range
+	
+	movlw	d'2'
+	movwf	fatal_error_code		; Battery very low!
+	bsf		enter_error_sleep		; enter error routine
+
+get_battery_voltage3:	
+	movff	amb_pressure+0,sub_b+0	
+	movff	amb_pressure+1,sub_b+1
+	movlw	LOW		d'15001'			; must be lower then 15001mBar
+	movwf	sub_a+0
+	movlw	HIGH	d'15001'
+	movwf	sub_a+1
+	call	sub16					;  sub_c = sub_a - sub_b
+	bcf		enter_error_sleep		; Clear flag
+	btfss	neg_flag				; 
+	bra		get_battery_voltage4	; Pressure in OK range
+	
+	movlw	d'3'
+	movwf	fatal_error_code		; too deep
+	bsf		enter_error_sleep		; enter error routine
+	; Continue with rest of routine
+
+get_battery_voltage4:
+	; check if the battery control memory needs to be initialised!
+	bcf		initialize_battery1		; clear check-flags
+	bcf		initialize_battery2
+
+	read_int_eeprom d'40'			; get lowest battery voltage seen in mV
+	movff	EEDATA,sub_b+0
+	read_int_eeprom d'41'
+	movff	EEDATA,sub_b+1
+	
+	movlw	LOW		d'2000'			; must be greater then 2000mV...
+	movwf	sub_a+0
+	movlw	HIGH	d'2000'
+	movwf	sub_a+1
+	call	sub16					;  sub_c = sub_a - sub_b
+	btfss	neg_flag				; neg_flag=1 if eeprom40:41 < 2000
+	bsf		initialize_battery1		; battery need to be initialised
+
+	movlw	LOW		d'4500'			; must be lower then 4500mV...
+	movwf	sub_a+0
+	movlw	HIGH	d'4500'
+	movwf	sub_a+1
+	call	sub16					;  sub_c = sub_a - sub_b
+	btfss	neg_flag				; neg_flag=1 if eeprom40:41 < 4500
+	bsf		initialize_battery2		; battery need to be initialised
+	
+	btfss	initialize_battery1		; battery need to be initialised?
+	bra		get_battery_no_init		; No, we have already valid values, just check for new extremas
+
+	btfss	initialize_battery2		; battery need to be initialised?
+	bra		get_battery_no_init		; No, we have already valid values, just check for new extremas
+	
+	; Init EEPROM for battery control
+	; Reset lowest battery seen
+	movlw	LOW			d'4200'		; reset to 4.2V
+	movwf	EEDATA
+	write_int_eeprom	d'40'
+	movlw	HIGH		d'4200'		; reset to 4.2V
+	movwf	EEDATA
+	write_int_eeprom	d'41'
+	movff	month,EEDATA
+	write_int_eeprom	d'42'
+	movff	day,EEDATA
+	write_int_eeprom	d'43'
+	movff	year,EEDATA
+	write_int_eeprom	d'44'
+	movff	temperature+0,EEDATA
+	write_int_eeprom	d'45'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'46'
+	; Reset charge statistics
+	clrf	EEDATA					; last complete charge
+	write_int_eeprom	d'47'		
+	clrf	EEDATA					; last complete charge
+	write_int_eeprom	d'48'		
+	clrf	EEDATA					; last complete charge
+	write_int_eeprom	d'49'		
+	clrf	EEDATA					; total cycles
+	write_int_eeprom	d'50'		
+	clrf	EEDATA					; total cycles
+	write_int_eeprom	d'51'		
+	clrf	EEDATA					; total complete cycles
+	write_int_eeprom	d'52'		
+	clrf	EEDATA					; total complete cycles
+	write_int_eeprom	d'53'		
+	; Reset temperature extremas
+	movff	temperature+0,EEDATA	; Reset mimimum extrema
+	write_int_eeprom	d'54'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'55'
+	movff	month,EEDATA
+	write_int_eeprom	d'56'
+	movff	day,EEDATA
+	write_int_eeprom	d'57'
+	movff	year,EEDATA
+	write_int_eeprom	d'58'
+	movff	temperature+0,EEDATA	; Reset maximum extrema
+	write_int_eeprom	d'59'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'60'
+	movff	month,EEDATA
+	write_int_eeprom	d'61'
+	movff	day,EEDATA
+	write_int_eeprom	d'62'
+	movff	year,EEDATA
+	write_int_eeprom	d'63'
+	
+get_battery_no_init:	
+	read_int_eeprom d'40'			; get lowest battery voltage seen in mV
+	movff	EEDATA,sub_b+0
+	read_int_eeprom d'41'
+	movff	EEDATA,sub_b+1
+	movff	batt_voltage+0,sub_a+0
+	movff	batt_voltage+1,sub_a+1
+	call	sub16					; sub_c = sub_a - sub_b
+	btfss	neg_flag				; new lowest battery voltage?
+	return							; no, quit routine
+	; Yes, store new value together with the date and temperature values
+	movff	batt_voltage+0,EEDATA
+	write_int_eeprom	d'40'
+	movff	batt_voltage+1,EEDATA
+	write_int_eeprom	d'41'
+	movff	month,EEDATA
+	write_int_eeprom	d'42'
+	movff	day,EEDATA
+	write_int_eeprom	d'43'
+	movff	year,EEDATA
+	write_int_eeprom	d'44'
+	movff	temperature+0,EEDATA
+	write_int_eeprom	d'45'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'46'
+	return
+
+RTCinit:						; resets RTC 
+	movlw	0x80
+	movwf	TMR1H
+	clrf	TMR1L
+
+; Reset RTC if any part of the time/date is out of range
+	movlw	d'60'				; Limit
+	cpfslt	secs				; Check part
+	bra		RTCinit2			; Reset time...
+	movlw	d'60'				; Limit
+	cpfslt	mins				; Check part
+	bra		RTCinit2			; Reset time...
+	movlw	d'24'				; Limit
+	cpfslt	hours				; Check part
+	bra		RTCinit2			; Reset time...
+	movlw	d'32'				; Limit
+	cpfslt	day					; Check part
+	bra		RTCinit2			; Reset time...
+	movlw	d'12'				; Limit
+	cpfslt	month				; Check part
+	bra		RTCinit2			; Reset time...
+	movlw	d'100'				; Limit
+	cpfslt	year				; Check part
+	bra		RTCinit2			; Reset time...
+
+	bsf		PIE1, TMR1IE
+	return
+
+RTCinit2:
+	movlw	.00
+	movwf	secs
+	movlw	.00
+	movwf	mins
+	movlw	.12
+	movwf	hours
+	movlw	.2
+	movwf	day
+	movlw	.8
+	movwf	month
+	movlw	.09
+	movwf	year
+	bsf		PIE1, TMR1IE
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/alt_wait.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,399 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+; Wait routines
+; written by: chsw, info@heinrichsweikamp.com
+; written: 01/31/04
+; last updated: 11/05/07
+; known bugs:
+; ToDo: 
+	IFDEF	Clk_4_MHZ
+  MESSG "wait_v2i: switched to 4 MHZ operation"
+ ELSE 
+  IFDEF Clk_8_MHZ
+    MESSG "wait_v2i: switched to 8 MHZ operation"
+  ELSE
+  IFDEF Clk_16_MHZ
+    MESSG "wait_v2i: switched to 16 MHZ operation"
+  ELSE
+   IFDEF Clk_20_MHZ
+    MESSG "wait_v2i: switched to 20 MHZ operation"
+    ELSE
+     ERROR "wait_v2i: Operating Frequency has to be specified by #DEFINE Clk_4_MHZ or Clk_8_MHZ"
+    ENDIF
+  ENDIF
+ ENDIF
+ IFDEF	Clk_16_MHZ
+; ==========================================================
+; 	WAIT 10 MICROSECONDS  -  16 MHZ
+; ==========================================================
+WAIT10US 	macro	wait_temp
+			movlw	wait_temp
+	IFNDEF DEBUG
+			call	WAIT10USX
+	ENDIF
+			endm
+
+WAIT10USX	movwf	wait_temp
+			goto	JumpIn10us
+WAIT10USX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpIn10us:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			decfsz	wait_temp,1
+			goto	WAIT10USX2
+			return
+; ==========================================================
+; 	WAIT 1 MILLISECOND  -  16 MHZ
+; ==========================================================
+WAITMS		macro	waitms_temp
+			movlw	waitms_temp
+	IFNDEF	DEBUG
+			call WAITMSX
+	ENDIF
+			endm
+WAITMSX		movwf	waitms_temp
+			goto	JumpInMSX
+WAITMSX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpInMSX:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			WAIT10US d'99'
+			decfsz	waitms_temp,1
+			goto	WAITMSX2
+			return
+ ELSE
+ IFDEF	Clk_8_MHZ
+; ==========================================================
+; 	WAIT 10 MICROSECONDS  -  8 MHZ
+; ==========================================================
+WAIT10US 	macro	wait_temp
+			movlw	wait_temp
+	IFNDEF DEBUG
+			call	WAIT10USX
+	ENDIF
+			endm
+WAIT10USX	movwf	wait_temp
+			goto	JumpIn10us
+WAIT10USX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpIn10us:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			decfsz	wait_temp,1
+			goto	WAIT10USX2
+			return
+; ==========================================================
+; 	WAIT 1 MILLISECOND  -  8 MHZ
+; ==========================================================
+WAITMS		macro	waitms_temp
+			movlw	waitms_temp
+	IFNDEF	DEBUG
+			call WAITMSX
+	ENDIF
+			endm
+WAITMSX		movwf	waitms_temp
+			goto	JumpInMSX
+	
+WAITMSX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpInMSX:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			WAIT10US d'99'
+			decfsz	waitms_temp,1
+			goto	WAITMSX2
+			return
+ ELSE
+ IFDEF	Clk_4_MHZ
+; ==========================================================
+; 	WAIT 10 MICROSECONDS  -  4 MHZ
+; ==========================================================
+WAIT10US 	macro	wait_temp
+			movlw	wait_temp
+	IFNDEF DEBUG
+			call	WAIT10USX
+	ENDIF
+			endm
+WAIT10USX	movwf	wait_temp
+			goto	JumpIn10us
+WAIT10USX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpIn10us:
+			decfsz	wait_temp,1
+			goto	WAIT10USX2
+			return
+; ==========================================================
+; 	WAIT 1 MILLISECOND  -  4 MHZ
+; ==========================================================
+WAITMS		macro	waitms_temp
+			movlw	waitms_temp
+	IFNDEF	DEBUG
+			call WAITMSX
+	ENDIF
+			endm
+WAITMSX		movwf	waitms_temp
+			goto	JumpInMSX
+	
+WAITMSX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpInMSX:
+			WAIT10US d'99'
+			decfsz	waitms_temp,1
+			goto	WAITMSX2
+			return
+ ELSE
+ IFDEF	Clk_20_MHZ
+ ==========================================================
+; 	WAIT 10 MICROSECONDS  -  20 MHZ
+; ==========================================================
+WAIT10US 	macro	wait_temp
+			movlw	wait_temp
+	IFNDEF DEBUG
+			call	WAIT10USX
+	ENDIF
+			endm
+WAIT10USX	movwf	wait_temp
+			goto	JumpIn10us
+WAIT10USX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpIn10us:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			decfsz	wait_temp,1
+			goto	WAIT10USX2
+			return
+; ==========================================================
+; 	WAIT 1 MILLISECOND  -  20 MHZ
+; ==========================================================
+WAITMS		macro	waitms_temp
+			movlw	waitms_temp
+	IFNDEF	DEBUG
+			call WAITMSX
+	ENDIF
+			endm
+WAITMSX		movwf	waitms_temp
+			goto	JumpInMSX
+	
+WAITMSX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpInMSX:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			WAIT10US d'99'
+			decfsz	waitms_temp,1
+			goto	WAITMSX2
+			return
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+
+
+wait_one_second:
+	WAITMS	d'250'
+	WAITMS	d'250'
+	WAITMS	d'250'
+	WAITMS	d'250'
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/changelog.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,2 @@
+New in 1.50 Stable:
+- Initial release for OSTC Mk.2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/dd_font2display.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,55 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; DIGIT DRAW (dd)
+; routines for nice digit OLED output
+; written by: Christian Weikamp, info@heinrichsweikamp.com
+; written: 08/11/07
+; last updated: 12/17/07
+; known bugs:
+; ToDo:
+
+; -----------------------------
+; Routines, accessible
+; -----------------------------
+; DD_Main
+; DD_Graph_tissue
+; dd_print_mini_font
+
+; -----------------------------
+; DD_Main: (alpha)
+; -----------------------------
+; INPUT (for main only):
+; is different in mini_font and print graph 
+; temp_font_select = width:0 (for digits before decpoint)
+; temp2_pointer_row = width:1
+; temp_pointer_column = width:2
+; temp2_pointer_column = width:3
+; temp_pointer_decpoint = width:4
+; temp_font_select = width:5 (for decpoint and following digits)
+; letter
+
+DD_Main:
+return
+dd_print_mini_font:
+return
+DD_Graph_tissue:
+return
+DD_graf_Main:
+return
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/debugcodes.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,52 @@
+Byte38 im EEPROM=1:
+
+a - PLED Serial and Firmware version updated
+b - PLED Ambient pressure updated
+c - PLED Clock updated
+e - PLED Temperature updated
+d - PLED Date updated
+f - PLED Battery voltage updated
+g - PLED NoFly time updated
+h - PLED Desaturation time updated
+h - PLED Tissue saturation graph divemode updated
+i - PLED Tissue saturation graph surfacemode updated
+j - PLED const. ppO2 value surfacemode updated
+k - PLED cns value updated
+l - PLED Divemenu cursor updated
+m - PLED Divemode gaslist updated
+n - PLED Decoplan updated
+o - PLED Divemode menu updated
+p - PLED max Depth updated
+q - PLED Surfacemode startgas updated
+r - PLED Depth updated
+s - PLED Divemode active gas updated
+t - PLED ppO2 value divemode updated
+u - PLED Temperature divemode updated
+v - PLED Velocity updated
+w - PLED Gradient Factor updated
+x - PLED complete ascend time updated
+y - PLED decompression updated
+z - PLED NDL updated
+A - PLED Divetime updated
+B - Decompression algorithm started
+C - Decompression algorithm finished
+D - Profile Sample stored
+E - Decompression gas set
+F - Decompression gas reset
+G - Desaturation time calculation started
+H - Desaturation time calculation finished
+I - Surfmode/sleepmode desaturation calculation started
+J - Surfmode/sleepmode desaturation calculation finished
+K - calculate noflytime percentage started
+L - calculate noflytime percentage finished
+M - I2C Bus Timeout
+N - I2C Bus Failed
+O - I2C Bus Restored
+P - Stand-alone Simulator started
+Q - Divemode init started
+R - Divemode init finished
+S - Tissues copy start
+T - Tissue copy done.
+U - Average Depth Display updated
+V - Gauge mode Stopwatch updated
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/definitions.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,622 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modifyn 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Defines, I/O Ports and variables
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 01/23/08
+; known bugs:
+; ToDo:
+
+;#DEFINE		NO_SENSOR_MODE			; uses Dummy values
+
+#DEFINE	softwareversion_x		d'1'		; Software version  XX.YY
+#DEFINE	softwareversion_y		d'50'		; Software version  XX.YY
+
+#DEFINE	max_custom_number		d'41'		; Number of last used custom function
+
+#DEFINE	logbook_profile_version	0x20		; Do not touch!
+
+#DEFINE	T0CON_debounce	b'00000000'					; Timer0 Switch Debounce
+
+#DEFINE		FT_SMALL		.0
+#DEFINE		FT_MEDIUM		.1
+#DEFINE		FT_LARGE		.2
+
+; Define max. 5 Binary Custom Functions here (add more in menu_custom.asm)
+#DEFINE	binary_cf1				d'31'
+#DEFINE	binary_cf2				d'38'
+#DEFINE	binary_cf3				d'39'
+#DEFINE	binary_cf4				d'40'
+#DEFINE	binary_cf5				d'41'
+
+#DEFINE wp_fontwidth  .14
+#DEFINE wp_fontheight .24
+
+; Color Definitions: 8Bit RGB b'RRRGGGBB'
+#DEFINE	color_red	b'11100000'
+#DEFINE	color_blue	b'00000011'
+#DEFINE	color_green	b'00011100'
+#DEFINE	color_white b'11111111'
+#DEFINE	color_black b'00000000'
+#DEFINE	color_deepblue b'00000001'
+#DEFINE	color_grey	d'73'
+
+
+;Configuration bits
+	CONFIG	OSC = IRCIO67        ;Internal oscillator block, port function on RA6 and RA7
+	CONFIG	FCMEN = OFF          ;Fail-Safe Clock Monitor disabled
+	CONFIG	IESO = OFF           ;Oscillator Switchover mode disabled
+
+	CONFIG	PWRT = ON            ;PWRT enabled
+	CONFIG	BOREN = OFF          ;Brown-out Reset disabled in hardware and software
+
+	CONFIG	WDT = OFF            ;WDT disabled
+	CONFIG	WDTPS = 128          ;1:128
+
+	CONFIG	MCLRE = ON           ;MCLR pin enabled; RE3 input pin disabled
+	CONFIG	LPT1OSC = OFF        ;Timer1 configured for higher power operation
+	CONFIG	PBADEN = OFF         ;PORTB<4> and PORTB<1:0> Configured as Digital I/O Pins on Reset
+
+	CONFIG	DEBUG = OFF          ;Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
+	CONFIG	XINST = OFF          ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
+	CONFIG	LVP = OFF            ;Single-Supply ICSP disabled
+	CONFIG	STVREN = OFF         ;Stack full/underflow will not cause Reset
+
+
+;Variable definitions
+; arrays are in hex size!! 20 = .032
+
+	CBLOCK	0x060				;Bank 0
+	letter:.026					;letter buffer
+	win_color1
+	win_color2
+	win_top
+	win_leftx2
+	win_font
+	win_invert
+	wp_temp
+	ENDC
+; the following is used by the C-code up to 0x0E0!!
+	CBLOCK	0x0E0				;Bank 0
+	ENDC
+
+	CBLOCK	0x100				;Bank 1
+	wreg_temp					;variables used for context saving during ISR 
+	status_temp					
+	bsr_temp					
+
+	secs						;realtime clock
+	mins
+	hours
+	day
+	month
+	year
+
+	waitms_temp					;variables required for wait routines
+	wait_temp				 	; " + used to copy data to c code + used for temp/testing
+								; never use wait_temp in interrupt routines (isr) and never call any wait routine in interrupts
+
+	textnumber					;for textdisplay and textlookup
+	textlength					
+	textaddress:2				
+
+	LastSetRow 
+	LastSetColumn
+	average_depth_hold:4		; Holds Sum of depths
+	b0_lo						; Temp (calculate_average)
+	b0_hi						; Temp (calculate_average)
+	average_divesecs:2			; Used for resetable average depth display
+	surface_interval:2			; Surface Interval [mins]
+	grayvalue					; 4 Bit Greyvalue
+
+	draw_box_temp1
+	draw_box_temp2
+	draw_box_temp3
+	
+	flag1 						;Flag register 
+	flag2 
+	flag3 
+	flag4 
+	flag5 ; has to be exacly here, is modified by c-code (no sensor int) 
+	flag6 
+	flag7 
+	flag8
+	flag9
+	flag10
+	flag11
+	flag12
+	flag13
+	flag14
+	flag15
+
+	oled1_temp					;Temp variables for display output
+	oled2_temp		
+	oled3_temp	
+	oled4_temp					; Used in "Displaytext"
+
+	lo							;bin to dec conversion routine
+	hi
+	lo_temp
+	hi_temp
+	temp3						;								used in valconv math
+	temp4						;								used in valconv math
+	ignore_digits
+
+	temp1						;Multipurpose Temp variables 	used in valconv math
+	temp2						;								used in valconv math
+
+	ext_ee_temp1				; External EEPROM Temp 1		used in I2C EEPROM
+	ext_ee_temp2				; External EEPROM Temp 2		used in I2C EEPROM
+
+	isr1_temp					;ISR temp variables
+	isr2_temp	
+  	isr3_temp:2
+
+	timer1int_counter1			;Timer 1 counter
+	timer1int_counter2 			;Timer 1 counter
+
+	uart1_temp					;RS232 temp variables
+	uart2_temp
+
+  	divA:2						;math routines
+  	divB
+	xC:4
+	xA:2
+	xB:2
+  	sub_c:2
+  	sub_a:2
+  	sub_b:2
+
+	dLSB						;Pressure sensor interface 
+	dMSB
+	clock_count
+	temperature_correction		; additional temperature correction value
+	W1:2
+	W2:2
+	W3:2
+	W4:2
+	C1:2
+	C2:2
+	C3:2
+	C3_temp:2
+	C4:2
+	C5:2
+	C6:2
+	D1:2
+	D2:2
+
+  	isr_divA:2
+ 	isr_divB
+	isr_xC:4
+	isr_xA:2
+	isr_xB:2
+  	isr_sub_c:2
+  	isr_sub_a:2
+  	isr_sub_b:2
+
+  	xdT:2
+  	xdT2:2
+  	OFF:2
+  	SENS:2
+   	amb_pressure:2					; ambient pressure [mBar]
+   	rel_pressure:2					; amb_pressure - surface pressure [mBar]
+   	max_pressure:2					; Max. pressure for the dive [mBar]
+	avr_rel_pressure:2				; Average rel. pressure (Average depth) for the dive [mBar]
+   	last_pressure:2
+  	temperature:2
+  	last_temperature:2
+  	temperature_temp:2
+  	Dx:2
+
+	last_surfpressure:2			;Divemode
+	last_surfpressure_15min:2
+	last_surfpressure_30min:2
+	divemins:2					;Minutes
+	divesecs					;seconds
+	samplesecs					; counts the seconds until the next sample is stored in divemode
+	samplesecs_value			; holds the CF20 value
+	decodata:2					;Deco data
+	mintemp:2					;min temperature
+	ProfileFlagByte				; stores number of addional bytes per sample
+	EventByte					; Stores the Event type plus flags	
+	AlarmType					; 0= No Alarm
+								; 1= SLOW
+								; 2= DecoStop missed
+								; 3= DeepStop missed
+								; 4= ppO2 Low Warning
+								; 5= ppO2 High Warning
+								; 6= manual marker
+
+	divisor_temperature			; divisors for profile storage
+	divisor_deco
+	divisor_tank
+	divisor_ppo2
+	divisor_deco_debug
+	divisor_nuy2
+
+	timeout_counter				;Timeout counter variables
+	timeout_counter2
+	timeout_counter3			;pre-menu timeout counter
+
+	menupos						;cursor position
+	menupos2
+	menupos3
+
+	eeprom_address:2			;external EEPROM
+	eeprom_header_address:2
+
+	divenumber					;Logbook
+
+	batt_voltage:2				;Battery voltage in mV
+
+	i2c_temp					;IēC timeout counter
+	i2c_temp2
+
+	sim_pressure:2				; hold simulated pressure in mBar if in Simulator mode
+
+	profile_temp:2				; temp variable for profile view
+	profile_temp2:2				; temp variable for profile view
+	
+	nofly_time:2				; No Fly time in Minutes (Calculated after Dive)
+	
+	deco_status					; =0 if decompression calculation done
+
+	cf_checker_counter			; counts custom functions to check for warning symbol
+	
+	char_I_O2_ratio				; 02 ratio
+
+	active_gas					; Holds number of active gas
+		
+	last_diluent				; backup of diluent percentage in const ppO2 mode
+	last_cns					; backup of last cns value
+	last_ppO2_value				; last calculated ppO2 value
+
+;	ontime_since_last_charge:2	; Ontime in minutes since last complete charge cycle
+;	sleeptime_since_last_charge:2; Sleeptime in hours since last complete charge
+
+	debug_char:6				; For debugmode
+	debug_temp					; For debugmode
+	
+	apnoe_mins					; single descent minutes for Apnoe mode
+	apnoe_secs					; single descent seconds for Apnoe mode
+	apnoe_max_pressure:2		; Max. Pressure in Apnoe mode
+	apnoe_timeout_counter		; counts minutes for apnoe timeout
+	apnoe_surface_mins			; Surface interval mins for Apnoe mode
+	apnoe_surface_secs			; Surface interval secs for Apnoe mode
+	customfunction_temp1		; start of custom function descriptors 
+	customfunction_temp2		; used in GETCUSTOM8 and GETCUSTOM15
+	
+	switch_timeout				; used for hold-down count function
+	
+	temp5						; used in PLED_MultiGF,...
+	temp6						; used in PLED_MultiGF,...
+	char_last_pointer			; for MultiGF
+	MultiGF_seconds				; Counter for seconds in Multi-GF mode
+
+	fatal_error_code			; holds error code value 
+
+	logbook_temp1				; Temp used in logbook display&Divemode
+	logbook_temp2				; Temp used in logbook display&Divemode
+	logbook_temp3				; Temp used in logbook display&Divemode
+	logbook_temp4				; Temp used in logbook display&Divemode
+	logbook_temp5				; Temp used in logbook display&Divemode
+	logbook_temp6				; Temp used in logbook display&Divemode
+	
+	convert_value_temp:3		; used in menu_battery_state_convert_date
+	box_temp:5
+	win_color1_temp
+	win_color2_temp				; Backup color registers
+	
+	ENDC
+
+	CBLOCK	0x200				;Bank 2
+ int_O_tissue_for_debug:.32		; deco_main_debug copies pressure of tissue to this variable
+ int_O_GF_spare____:2;					// 0x240
+ int_O_GF_step:2;							// 0x242
+ int_O_gtissue_limit:2;					// 0x244
+ int_O_gtissue_press:2;					// 0x246
+ int_O_limit_GF_low:2;					// 0x248
+ int_O_gtissue_press_at_GF_low:2;			// 0x24A
+	ENDC
+	CBLOCK	0x24E				;Bank 2
+ char_O_GF_low_pointer;					// 0x24E
+ char_O_actual_pointer;					// 0x24F
+	ENDC
+	CBLOCK	0x250				;Bank 2
+ char_IO_deco_table:.32;				// 0x250
+	ENDC
+	CBLOCK	0x270				;Bank 2
+ char_I_table_deco_done:.32;			// 0x270
+	ENDC
+	CBLOCK	0x290				;Bank 2
+ int_O_calc_tissue_call_counter:2
+	ENDC
+	CBLOCK	0x380				;Bank 3
+	; some used in C code!
+	ENDC
+								
+	CBLOCK	0x500
+; used by deco_main c-code for data transfer with the asm code
+; input of c-code
+ int_I_pres_respiration:2;			; 0x500
+ int_I_pres_surface:2;				; 0x502
+ int_I_temp:2;						; 0x504
+ char_I_temp;						; 0x506
+ char_I_actual_ppO2;				; 0x507
+ int_I_spare_3:2;
+ int_I_spare_4:2;
+ int_I_spare_5:2;
+ int_I_spare_6:2;
+ char_I_N2_ratio;					; 0x510
+ char_I_He_ratio;					; 0x511
+ char_I_saturation_multiplier;		; for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ char_I_GF_Hi_percentage;			; 0x514
+ char_I_GF_Lo_percentage;			; 0x515
+ char_I_GF_Spare;				; 0x516
+ char_I_deco_distance;				; 0x517
+ char_I_const_ppO2;					; 0x518	new in v.101 (C-Code), new in v109 (asm)
+ char_I_deco_ppO2_change;			; 0x519	new in v.101
+ char_I_deco_ppO2;					; 0x51A	new in v.101
+ char_I_deco_gas_change;			; 0x51B	new in v.101
+ char_I_deco_N2_ratio;				; 0x51C	new in v.101
+ char_I_deco_He_ratio;				; 0x51D	new in v.101
+ char_I_depth_last_deco;			; 0x51E	new in v.101
+ char_I_deco_model;					; 0x51F	new in v.102
+; output of c-code:
+ int_O_desaturation_time:2;			; 0x520
+ char_O_nullzeit;					; 0x522
+ char_O_deco_status;				; 0x523
+ char_O_array_decotime:7;			; 0x524
+ char_O_array_decodepth:6;			; 0x52B
+ char_O_ascenttime;					; 0x531
+ char_O_gradient_factor;			; 0x532
+ char_O_tissue_saturation:.32;		; 0x533, He starts at 0x543
+ char_O_array_gradient_weighted:.16 ; 0x553
+ char_O_gtissue_no;					; 0x563
+ char_O_diluent;					; 0x564 new in v.101 (C-Code), new in v109 (asm)
+ char_O_CNS_fraction;				; 0x565	new in v.101
+ char_O_relative_gradient_GF;		; 0x566	new in v.102
+
+	ENDC
+
+	CBLOCK	0x700				;Bank 7
+; variables used exclusively in dd:
+	dd_temp_BSR ; has to be first in bank7
+	temp_pointer_row
+	temp_pointer_column
+	temp2_pointer_row
+	temp2_pointer_column
+	temp_selected_char
+	temp_font_HIGH
+	temp_font_LOW
+	temp_font_height
+	temp2_font_height
+	temp_font_width
+	temp2_font_width
+	temp_diff_font_width
+	temp2_diff_font_width
+	temp_font_offset_left
+	temp_font_offset_right
+	temp_pos
+	DDflag
+	dd_oled_brightness_offset		; value will be subtracted from "dd_grayvalue" in dd_font2display_vxxx.asm
+	dd_grayvalue
+	dd2_temp
+	dd3_temp
+	dd_pos_decpoint
+	dd_grayvalue_temp
+	dd_grayvalue_temp2
+	ENDC
+
+	CBLOCK	0x94A				;Bank 9
+	char_O_hash:.16			; MD2 hash values = d'16'
+	ENDC
+
+
+; C-code Routines
+; PART 3
+;#DEFINE main_wordprocessor					0x0B410
+#DEFINE main_wordprocessor					0x0B468
+
+; C-code Routines
+; PART 2
+#DEFINE deco_main_calc_hauptroutine			0x10000
+#DEFINE deco_main_calc_without_deco			0x10020
+#DEFINE main_clear_CNS_fraction 			0x10030
+#DEFINE main_calc_CNS_decrease_15min		0x10034
+#DEFINE main_calc_percentage				0x10038
+#DEFINE deco_main_clear_tissue				0x10040
+#DEFINE main_calc_CNS_fraction				0x10050
+#DEFINE deco_main_calc_desaturation_time	0x10060
+#DEFINE deco_main_calc_wo_deco_step_1_m		0x10080
+#DEFINE deco_main_debug						0x100A0
+#DEFINE main_DD2_write_incon42				0x100B0
+#DEFINE main_DD2_write_incon24				0x100B4
+
+#DEFINE deco_main_gradient_array			0x100C0
+#DEFINE deco_main_hash						0x100E0
+#DEFINE main_push_tissues_to_vault			0x100C4
+#DEFINE main_pull_tissues_from_vault		0x100C8	
+
+;I/O Ports (I=Input, O=Output)
+#DEFINE	sensor_SDO			PORTA,1 ;O
+#DEFINE	oled_rw				PORTA,2 ;0
+#DEFINE	oled_hv				PORTA,3 ;O
+#DEFINE	sensor_SDI			PORTA,4 ;I
+#DEFINE	oled_cs				PORTA,5 ;O
+#DEFINE	sensor_CLK			PORTA,7 ;O
+
+#DEFINE	SWITCH2				PORTB,0 ;I  (Right)
+#DEFINE	SWITCH1				PORTB,1 ;I  (Left)
+#DEFINE	oled_vdd			PORTB,2 ;O
+#DEFINE	LED_blue			PORTB,3 ;0
+#DEFINE	LED_red				PORTB,4 ;O
+
+#DEFINE	CHRG_OUT			PORTC,1 ;O
+#DEFINE	CHRG_IN				PORTC,2 ;I
+
+#DEFINE	oled_d1				PORTD,0 ;O
+#DEFINE	oled_d2				PORTD,1 ;O
+#DEFINE	oled_d3				PORTD,2 ;O
+#DEFINE	oled_d4				PORTD,3 ;O
+#DEFINE	oled_d5				PORTD,4 ;O
+#DEFINE	oled_d6				PORTD,5 ;O
+#DEFINE	oled_d7				PORTD,6 ;O
+#DEFINE	oled_d8				PORTD,7 ;O
+
+#DEFINE	oled_rs				PORTE,0 ;0
+#DEFINE	oled_nreset			PORTE,1 ;0
+#DEFINE	oled_e_nwr			PORTE,2 ;0
+
+; Flags
+#DEFINE	FLAG_scale			flag1,0	; Wordprocessor
+#DEFINE	FLAG_truncated		flag1,1	; Wordprocessor
+#DEFINE	pre_zero_flag		flag1,2	; leading zeros
+#DEFINE neg_flag			flag1,3	; e.g. Sub_16 (sub_c = sub_a - sub_b)
+#DEFINE	FLAG_row_prime		flag1,4	; Wordproceesor
+#DEFINE leading_zeros		flag1,5	; display leading zeros?
+#DEFINE	show_last3			flag1,6	; show only three figures
+#DEFINE	leftbind			flag1,7	; leftbinded output
+
+#DEFINE	onesecupdate		flag2,0	;=1 after any second
+#DEFINE	divemode			flag2,1	;=1 if in divemode
+#DEFINE	oneminupdate		flag2,2	;=1 after any minute
+#DEFINE	realdive			flag2,3 	; dive was longer then one minute?
+#DEFINE	sleepmode			flag2,4	;=1 if in sleepmode
+#DEFINE	same_row			flag2,5	;=1 if pixel pair is in same row (display_profile)
+#DEFINE premenu				flag2,6	; Premenu/Divemenu selected
+#DEFINE	menubit				flag2,7	; menu
+
+#DEFINE	menubit2			flag3,0	; menu
+#DEFINE	menubit3			flag3,1	; menu
+#DEFINE	set_minutes			flag3,2	; set minutes (not hours)
+#DEFINE cursor				flag3,3	; display cursor
+#DEFINE	menubit4			flag3,4	; quit set time 
+#DEFINE	display_velocity	flag3,5	; velocity is displayed
+#DEFINE	temp_changed		flag3,6	; temperature changed
+#DEFINE	pres_changed		flag3,7	; pressure changed
+
+#DEFINE	set_year			flag4,0	; Menu Settime
+#DEFINE	set_day				flag4,1	; Menu Settime
+#DEFINE	set_month			flag4,2	; Menu Settime
+#DEFINE	store_sample		flag4,3	;=1 after any CF20 seconds in divemode
+#DEFINE	divemode2			flag4,4	; displayed divetime stopped?
+#DEFINE	header_stored		flag4,5	; header already stored
+#DEFINE	first_FD			flag4,6	; 1st 0xFD in EEPROM found
+#DEFINE	first_FA			flag4,6	; 1st 0xFA in EEPROM found
+#DEFINE	second_FD			flag4,7	; 2nd 0xFD in EEPROM found
+#DEFINE	second_FA			flag4,7	; 2nd 0xFA in EEPROM found
+
+#DEfINE	eeprom_overflow		flag5,0	; EEPROM overflowed (>32KB)
+#DEFINE	eeprom_blockwrite	flag5,1	; EEPROM blockwrite active
+#DEFINE neg_flag_xdT		flag5,2	; xdT negative (2nd order temperature calculation)
+#DEFINE	low_battery_state	flag5,3	;=1 if battery low
+#DEFINE	DP_done				flag5,4	; valconv
+#DEFINE	DP_done2			flag5,5	; valconv
+#DEFINE	pressure_refresh	flag5,6	; Pressure and temperature refreshed
+#DEFINE	no_sensor_int		flag5,7	; block any further access to pressure sensor
+
+#DEFINE	cc_active			flag6,0	;=1: Constant Current mode aktive (Charger)
+#DEFINE	cv_active			flag6,1	;=1: Constant Voltage mode aktive (Charger)
+#DEFINE	ignore_digit5		flag6,2	;=1: ignores digit 5 in valconv
+#DEFINE	switch_left			flag6,3	;=1: left switch pressed
+#DEFINE	switch_right		flag6,4	;=1: right switch pressed
+#DEFINE	uart_settime		flag6,5	;=1: enter time sync routine
+#DEFINE	neg_temp			flag6,6	;=1: temperature below zero
+#DEFINE	twosecupdate		flag6,7	;=1: after any two seconds
+
+#DEFINE	dekostop_active			flag7,0	;=1: in deocompression mode
+#DEFINE	all_dives_shown			flag7,1	;=1: all dives in loogbook shown, abort further scanning
+#DEFINE	return_from_profileview flag7,2	;=1: set cursor to same position again
+#DEFINE	logbook_profile_view 	flag7,3	;=1: Show details/profile in logbook
+#DEFINE	logbook_page_not_empty 	flag7,4	;=1: actual logbook page is not empty
+#DEFINE	dump_external_eeprom 	flag7,5	;=1: enter download-routine
+#DEFINE	simulatormode_active	flag7,6	;=1: Simulator mode active, override pressure sensor readings
+#DEFINE	all_zeros_flag			flag7,7	;=1: display all zeros from here (valconv_v2.asm)
+
+#DEFINE	internal_eeprom_write	flag8,0	;=1: start routine to access internal EEPROM BANK 0 via the UART
+#DEFINE	update_divetime			flag8,1	;=1: update divetime display
+#DEFINE	display_set_xgas		flag8,2	;=1: Display Set Gas menu in Divemode
+#DEFINE	FLAG_active_descent		flag8,3	;=1: A Descent in Apnoe mode is active
+#DEFINE	display_see_deco		flag8,4	;=1: Display decoplan in Divemode
+#DEFINE	display_set_gas			flag8,5	;=1: Display Gaslist menu in Divemode
+#DEFINE	display_set_graphs		flag8,6	;=1: Display "Display Menu" in Divemode
+#DEFINE	rs232_recieve_overflow	flag8,7	;=1: An RS232 timeout overflow occoured
+
+#DEFINE	nofly_active			flag9,0	;=1: Do not fly!
+#DEFINE	ppO2_display_active		flag9,1	;=1: ppO2 value is displayed
+#DEFINE	ppO2_show_value			flag9,2	;=1: show ppO2 value!
+#DEFINE	show_startup_screen		flag9,3	;=1: Show startup screen with MD2 hash
+#DEFINE	ignore_digit3			flag9,4	;=1: ignores digits 3-5 in valconv
+#DEFINE	ppO2_warn_value			flag9,5	;=1: warn about ppO2!
+#DEFINE	output_to_postinc_only	flag9,6	;=1: Do not call wordprocessor in output
+#DEFINE	uart_send_hash			flag9,7	;=1: Send the MD2 hash via UART
+
+#DEFINE	uart_compensate_temp	flag10,0	;=1: Enter Temperature compensation routine
+#DEFINE	uart_send_int_eeprom	flag10,1	;=1: Send internal EEPROM BANK 0
+#DEFINE	uart_reset_decodata		flag10,2	;=1: Reset deco data 
+#DEFINE	manual_gas_changed		flag10,3	;=1: Manual Gas changed during dive
+#DEFINE	stored_gas_changed		flag10,4	;=1: Stored Gas changed during dive
+#DEFINE	event_occured			flag10,5	;=1: An Event has occured during the current sample interval
+#DEFINE	new_profile_format		flag10,6	;=1: Current Dive in Logbook uses new ProfileFormat
+#DEFINE	gauge_mode				flag10,7	;=1: Gauge mode active
+
+#DEFINE FLAG_const_ppO2_mode	flag11,0	;=1: const ppO2 mode active
+#DEFINE	gas_setup_page2			flag11,1	;=1: page two of gassetup active
+#DEFINE logbook_header_drawn	flag11,2	;=1: The "Logbook" Header in the List view is already drawn
+#DEFINE	ignore_digit4			flag11,3	;=1: Ignores digits 4-5 in valconv
+#DEFINE	charge_done				flag11,4	;=1: Complete charge cycle done
+#DEFINE	initialize_battery1		flag11,5	;=1: Battery memory need to be initialised
+#DEFINE	initialize_battery2		flag11,6	;=1: Battery memory need to be initialised
+#DEFINE	charge_started			flag11,7	;=1: Charger started in CC mode
+
+#DEFINE	switch_left_isr			flag12,0	;=1: left switch pressed (Only modified in ISR!)
+#DEFINE	switch_right_isr		flag12,1	;=1: right switch pressed (Only modified in ISR!)
+#DEFINE	debug_mode				flag12,2	;=1: Debugmode active
+#DEFINE	neg_flag_isr			flag12,3	;=1: ISR Negative flag (Math)
+#DEFINE	select_bailoutgas		flag12,4	;=1: Select Bailout instead of Setpoint in Gaslist
+#DEFINE	FLAG_apnoe_mode			flag12,5	;=1: Apnoe mode selected
+#DEFINE	customfunction_page		flag12,6	;=1: Use 2nd Page of Custom Functions
+#DEFINE	uart_send_int_eeprom2	flag12,7	;=1: Send internal EEPROM BANK 1
+
+#DEFINE	internal_eeprom_write2	flag13,0	;=1: start routine to access internal EEPROM BANK 1 via the UART
+#DEFINE	button_delay_done		flag13,1	;=1: Button was pressed for more then 500ms, start counting
+#DEFINE	multi_gf_display		flag13,2	;=1: Display the Multi-GF screen instead of normal divemode screen
+#DEFINE	deco_mode_changed		flag13,3	;=1: The Decomode was changes, show decomode description!
+#DEFINE	pled_velocity_display	flag13,4	;=1: Velocity is displayed 
+#DEFINE depth_greater_100m		flag13,5	;=1: Depth is greater then 100m
+#DEFINE	display_set_setpoint	flag13,6	;=1: SetPoint list active
+#DEFINE	divemode_menu_page		flag13,7	;=1: Use 2nd Page of Divemode Menu
+
+#DEFINE	enter_error_sleep		flag14,0	;=1: Sleep immediately displaying the error using LED codes
+#DEFINE	stopwatch_active		flag14,1	;=1: Show Stopwatch in Divemode
+;free
+#DEFINE	standalone_simulator	flag14,3	;=1: Standalone Simulator active
+#DEFINE	display_set_simulator	flag14,4	;=1: Show Divemode simulator menu
+#DEFINE	displaytext_high		flag14,5	;=1: Show/Use Texts 255-511 in Texttable
+;free
+#DEFINE	displaytext_invert		flag14,7	;=1: inverts word prozessor output
+
+#DEFINE	restore_deco_data		flag15,0	;=1: Restore Decodata after the dive from 0x380 buffer
+#DEFINE	uart_store_tissue_data	flag15,1	;=1: Store tissue data for next simualted dive!
+;free
+#DEFINE	flip_display			flag15,3	;=1: Flip Display
+#DEFINE	display_see_l_tissue	flag15,4	;=1: Leading Tissue details are now displayed
+;free
+;free
+#DEFINE	show_interval			flag15,7	;=1: Show Interval, =0: Show Clock in Surfacemode
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/displaytext.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,173 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Displays from text_table_vx.asm
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 081215
+; known bugs:
+; ToDo:
+
+
+; These macros output to POSTINC only
+OUTPUTTEXT	macro	textnumber 		; For Texts 1-254
+	movlw	textnumber
+	call	displaytext0
+	endm
+
+OUTPUTTEXTH	macro	textnumber		; For Texts 255-511
+	movlw	LOW	textnumber			; Use only Lower 8 Bit
+	call	displaytext0_h
+	endm
+
+displaytext0_h:
+	bsf		displaytext_high		; Highbit set
+	rcall	displaytext0
+	return
+	
+displaytext0:
+	bsf		output_to_postinc_only
+	rcall	displaytext1
+	bcf		output_to_postinc_only
+	return
+
+; These macros output to POSTINC and call the wordprocessor
+DISPLAYTEXT	macro	textnumber
+	movlw	textnumber
+	call	displaytext1
+	endm
+
+DISPLAYTEXTH	macro	textnumber
+	movlw	LOW	textnumber			; Use only Lower 8 Bit
+	call	displaytext1h
+	endm
+
+displaytext1h:
+	bsf		displaytext_high		; Highbit set
+	rcall	displaytext1
+	return
+
+displaytext1:
+	movwf	textnumber
+	movlw	b'10000000'
+	movwf	EECON1
+
+	clrf	TBLPTRU
+	movlw	textpos_pointer_high
+	movwf	TBLPTRH
+	movlw	textpos_pointer_low			; base address -4 for position table
+	movwf	TBLPTRL
+
+	movff	textnumber,xA+0
+	movlw	d'0'
+	btfsc	displaytext_high		; Highbit set?
+	movlw	d'1'					; Yes!
+	movwf	xA+1					; Set High Bit
+	movlw	d'4'					; times 4 for adress
+	movwf	xB+0
+	clrf	xB+1
+	call	mult16x16				;xA*xB=xC
+	movf	xC+0,W
+	addwf	TBLPTRL,F				; set adress, data can be read
+	movf	xC+1,W
+	addwfc	TBLPTRH,F				; High byte, if required
+
+	TBLRD*+
+	movf	TABLAT,W
+	btfsc	output_to_postinc_only		; output to postinc only?
+	bra		displaytext1_1				; Yes
+	movff	WREG,win_leftx2
+
+displaytext1_1:
+	TBLRD*+
+	movf	TABLAT,W
+	btfsc	output_to_postinc_only	; output to postinc only?
+	bra		displaytext1_2			; Yes
+	movff	WREG,win_top
+
+displaytext1_2:
+	TBLRD*+
+	movf	TABLAT,W				; ScaleY
+	sublw	d'1'					; -1
+	movff	WREG,win_font			
+
+	TBLRD*+
+	movff	TABLAT,grayvalue		; grayvalue
+
+	clrf	textaddress+0
+	clrf	textaddress+1
+	clrf	TBLPTRL					; Set Pointer for textlength table 0x0100
+	clrf	TBLPTRU
+	movlw	0x01
+	movwf	TBLPTRH
+	bra		displaytext1b
+
+displaytext1a:	
+	bcf		displaytext_high		; Clear flag
+									; Get textadress from textlength table
+displaytext1b:	
+	TBLRD*+
+	movf	TABLAT,W
+	addwf	textaddress+0,F
+	movlw	d'0'
+	addwfc	textaddress+1,F
+	decfsz	textnumber,F
+	bra		displaytext1b
+	
+	btfsc	displaytext_high		; Highbit set?
+	bra		displaytext1a			; Yes, add 256 loops
+
+displaytext2:						; copies text to wordprocessor
+	clrf	TBLPTRU
+
+	movlw	text_pointer_low
+	addwf	textaddress+0,W
+	movwf	TBLPTRL
+	movlw	text_pointer_high		; Base address Texts
+	addwfc	textaddress+1,W
+	movwf	TBLPTRH
+
+	btfss	output_to_postinc_only		; output to postinc only?
+	lfsr	FSR2,letter					; no!
+
+displaytext2a:
+	TBLRD*+
+	movlw	'}'						; Text finished?
+	cpfseq	TABLAT
+	bra		displaytext3
+	bra		display_text_exit
+
+displaytext3:
+	movf	TABLAT,W
+	movwf	POSTINC2
+	
+	TBLRD*+
+	movlw	'}'						; Text finished?
+	cpfseq	TABLAT
+	bra		displaytext4
+	bra		display_text_exit
+displaytext4:
+	movf	TABLAT,W
+	movwf	POSTINC2
+
+	bra		displaytext2a
+
+display_text_exit:
+	btfss	output_to_postinc_only		; output to postinc only?
+	call	word_processor
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/divemode.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,1544 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Mainroutines for divemode
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/01/05
+; last updated: 15/05/08
+; known bugs:
+; ToDo: 
+
+diveloop:
+	call	diveloop_boot			; Boot tasks for all modes
+
+; Startup Tasks for all modes
+	ostc_debug	'R'		; Sends debug-information to screen if debugmode active
+	call	PLED_ClearScreen			; clean up OLED
+	call	PLED_divemode_mask					; Display mask
+	call	PLED_active_gas_divemode	; Display gas, if required
+	call	PLED_temp_divemode			; Displays temperature
+
+	btfsc	FLAG_apnoe_mode
+	bsf		realdive					; Set Realdive flag in Apnoe mode
+
+	btfsc	gauge_mode
+	bra		diveloop_loop				; Skip in gauge mode
+	btfsc	FLAG_apnoe_mode
+	bra		diveloop_loop				; Skip in apnoe mode
+
+; Startup Tasks for deco modes
+	call	PLED_display_ndl_mask		; display "no stop" if not in gauge or apnoe mode
+
+diveloop_loop:		; The diveloop starts here
+	btfss	onesecupdate					; tasks any new second
+	bra		diveloop_loop2
+
+	btfsc	gauge_mode						; Only in gauge mode
+	bra		diveloop_loop1a					; One Second Tasks in Gauge mode
+	btfsc	FLAG_apnoe_mode					; Only in apnoe mode
+	bra		diveloop_loop1b					; One Second Tasks in Apnoe mode
+	btfsc	FLAG_const_ppO2_mode			; only in const_ppO2_mode
+	bra		diveloop_loop1c					; One Second Tasks in const_ppO2 mode
+
+; Tasks only for OC modes
+	call	check_ppO2						; check ppO2 and displays warning if required
+	call	calc_deko_divemode				; calculate decompression and display result (any two seconds)
+	bra		diveloop_loop1x					; Common Tasks
+
+; Tasks only for Gauge mode
+diveloop_loop1a:
+	btfss	premenu						; Is the divemode menu active?
+	call	PLED_divemins					; display (new) divetime!
+	call	timeout_divemode				; dive finished? This routine sets the required flags
+
+	btfsc	stopwatch_active				;  =1: Show Average Depth instead of Temperature
+	call	PLED_stopwatch_show			; Show stopwatch only in Average mode
+
+	btfsc	twosecupdate					; two seconds after the last call
+	bra		diveloop_loop1a2					; Common Tasks
+
+	bsf		twosecupdate				; Routines used in the "other second"
+	call	calc_average_depth			; calculate average depth
+	
+	bra		diveloop_loop1x					; Common Tasks
+
+diveloop_loop1a2:
+	bcf		twosecupdate		
+	bra		diveloop_loop1x					; Common Tasks
+
+; Tasks only for Apnoe mode
+diveloop_loop1b:
+	call	divemode_apnoe_tasks			; 1 sec. Apnoe tasks
+	bra		diveloop_loop1x					; Common Tasks
+
+; Tasks only for ppO2 mode
+diveloop_loop1c:
+	call	PLED_const_ppO2_value			; display const ppO2 setting in [Bar]
+	call	calc_deko_divemode				; calculate decompression and display result (any two seconds)
+	bra		diveloop_loop1x					; Common Tasks
+	
+; Common Tasks for all modes
+diveloop_loop1x:
+	call	timeout_divemode				; dive finished? This routine sets the required flags
+	btfsc	low_battery_state				; If battery is low, then...
+	call	update_batt_voltage_divemode	; Display Battery Symbol/Voltage!
+	btfsc	premenu							; is Menu? displayed?
+	call	timeout_premenu_divemode		; No, so check for timeout premenu
+	btfsc	menubit							; is the Dive mode menu displayed?
+	call	timeout_divemenu				; Yes, so check for timeout divemenu
+	call	set_leds_divemode				; Sets warnings, if required. Also Sets buzzer
+	btfsc	enter_error_sleep				; Enter Fatal Error Routine?
+	goto	fatal_error_sleep				; Yes (In Sleepmode_vxx.asm!)
+
+	btfsc	stopwatch_active				;  =1: Show Average Depth instead of Temperature
+	call	PLED_stopwatch_show				; Show stopwatch only in Average mode
+
+	bcf		onesecupdate					; one seconds update done
+
+	GETCUSTOM8	d'38'		; Show seconds (=1?)
+	movwf	lo
+	movlw	d'1'
+	cpfseq	lo					; =1?
+	bra		diveloop_loop2		; No, minutes only
+	bsf		update_divetime		; Set Update flag
+
+
+diveloop_loop2:	
+	btfss	update_divetime				; display new divetime?
+	bra		diveloop_loop3				; No
+	btfsc	premenu						; Is the divemode menu active?
+	bra		diveloop_loop2a				; Yes
+	call	PLED_divemins				; Display (new) divetime!
+	btfsc	FLAG_const_ppO2_mode		; only in const_ppO2_mode
+	call	PLED_const_ppO2_value		; display const ppO2 setting in [Bar]
+	btfsc	ppO2_show_value				; show ppO2?
+	call	check_ppO2					; check ppO2 and displays warning if required
+
+diveloop_loop2a:
+	bcf		update_divetime				; clear flag
+
+
+diveloop_loop3:
+	btfss	menubit							; Divemode menu active?
+	call	test_switches_divemode			; No, Check switches normal
+
+	btfsc	menubit							; Divemode menu active?
+	call	test_switches_divemode_menu		; Yes, check switches divemode menu
+
+	btfss	divemode						; Dive finished?
+	bra		end_dive						; Dive finished!
+
+	btfsc	pressure_refresh				; new pressure available?
+	call	update_divemode1				; Yes, display new depth
+	bcf		pressure_refresh				; until new pressure is available
+
+	btfsc	oneminupdate					; one minute tasks
+	call	update_divemode60				; Update clock, etc.
+
+	btfsc	store_sample					; store new sample?
+	call	store_dive_data					; Store profile data
+
+	btfss	menubit							; Sleep only with inactive menu...
+	sleep
+	
+	nop
+	bra		diveloop_loop					; Loop the divemode
+
+timeout_premenu_divemode:
+	incf	timeout_counter3,F		; Yes...
+
+	GETCUSTOM8	d'4'				; loads premenu_timeout into WREG
+	cpfsgt	timeout_counter3		; ... longer then premenu_timeout
+	return							; No!
+
+	bcf		premenu					; Yes, so clear "Menu?" and clear pre_menu bit
+	call	PLED_menu_clear			; Remove "Menu?"
+	return
+
+divemode_apnoe_tasks:						; 1 sec. Apnoe tasks
+	call	PLED_display_apnoe_descent		; Show descent timer
+
+	btfsc	divemode2						; Time running?
+	bra		divemode_apnoe_tasks2			; New descent, reset data if flag is set
+
+	call	PLED_display_apnoe_surface
+	incf	apnoe_surface_secs,F
+	movlw	d'60'
+	cpfseq	apnoe_surface_secs
+	bra		divemode_apnoe_tasks1
+	clrf	apnoe_surface_secs
+	incf	apnoe_surface_mins,F
+
+divemode_apnoe_tasks1:	
+	bcf		FLAG_active_descent				; Clear flag
+	btfsc	divemode2						; Time running?
+	return									; Yes, return
+	
+	bsf		FLAG_active_descent				; Set Flag
+	return
+
+divemode_apnoe_tasks2:
+	btfss	FLAG_active_descent				; Are descending?			
+	return									; No, We are at the surface
+	rcall	apnoe_calc_maxdepth				; Yes!
+	
+divemode_apnoe_tasks3:
+	call	PLED_apnoe_clear_surface		; Clear Surface timer
+	
+	clrf	apnoe_timeout_counter			; Delete timeout
+	clrf	apnoe_surface_secs
+	clrf	apnoe_surface_mins
+	clrf	apnoe_secs
+	clrf	apnoe_mins						; Reset Descent time
+	clrf	max_pressure+0
+	clrf	max_pressure+1					; Reset Max. Depth
+	bcf		FLAG_active_descent				; Clear flag
+	return
+
+apnoe_calc_maxdepth:
+	movff	apnoe_max_pressure+0,sub_a+0
+	movff	apnoe_max_pressure+1,sub_a+1
+	movff	max_pressure+0,sub_b+0
+	movff	max_pressure+1,sub_b+1
+	call	sub16				; sub_c = sub_a - sub_b
+								; apnoe_max_pressure<max_pressure -> neg_flag=1
+								; max_pressure<=apnoe_max_pressure -> neg_flag=0
+	btfss	neg_flag	
+	return
+								;apnoe_max_pressure<max_pressure
+	movff	max_pressure+0,apnoe_max_pressure+0
+	movff	max_pressure+1,apnoe_max_pressure+1
+	return
+
+set_leds_divemode:
+	call	clear_LEDy					; LEDy OFF
+	movff	char_O_gradient_factor,lo		; gradient factor absolute
+
+	GETCUSTOM8	d'14'		; threshold for LED warning
+	cpfslt	lo				; 
+	call	warn_gf1		; show warning, set flags
+
+	btfsc	ppO2_warn_value	; warn because of too high ppO2?
+	call	set_LEDy		; Yes
+
+	movff	char_I_deco_model,lo
+		decfsz	lo,W		; jump over return if char_I_deco_model == 1
+	return
+
+	movff	char_O_relative_gradient_GF,lo		; gradient factor relative (GF model)
+
+	GETCUSTOM8	d'14'		; threshold for LED warning
+	cpfslt	lo				; 
+	call	warn_gf1		; show warning, set flags
+
+	btfsc	ppO2_warn_value	; warn because of too high ppO2?
+	call	set_LEDy		; Yes
+
+	return
+
+warn_gf1:
+	call		set_LEDy		; LED Yellow on
+	movlw		d'2'			; Type of Alarm
+	movwf		AlarmType		; Copy to Alarm Register
+	bsf			event_occured	; Set Event Flag
+	return
+
+calc_deko_divemode:
+	btfsc	twosecupdate		; two seconds after the last call
+	bra		calc_deko_divemode2		; Yes, calculate and display deco data ("first second")
+
+	; Routines used in the "other second"
+
+	bsf		twosecupdate		; No, but next second!
+	call	calc_average_depth	; calculate average depth
+	call	calc_velocity		; calculate vertical velocity and display if > threshold (every two seconds)
+	
+	; calculate ppO2 in 0.1Bar (e.g. 150 = 1.50Bar ppO2)
+	movff		amb_pressure+0,xA+0
+	movff		amb_pressure+1,xA+1
+	movlw		LOW		d'10'
+	movwf		xB+0
+	movlw		HIGH 	d'10'
+	clrf		xB+1
+	call		div16x16				; xC=p_amb/10
+	movff		xC+0,xA+0
+	movff		xC+1,xA+1
+	movff		char_I_O2_ratio,xB+0
+	clrf		xB+1
+	call		mult16x16				; char_I_O2_ratio * p_amb/10
+	movff		xC+0,xA+0
+	movff		xC+1,xA+1
+	movlw		LOW		d'100'
+	movwf		xB+0
+	movlw		HIGH 	d'100'
+	clrf		xB+1
+	call		div16x16				; xC=(char_I_O2_ratio * p_amb/10)/100
+
+; Copy ppO2 for CNS calculation
+	movff		xC+0, char_I_actual_ppO2	; copy last ppO2 to buffer register
+	btfsc		FLAG_const_ppO2_mode		; do in const_ppO2_mode
+	movff		char_I_const_ppO2, char_I_actual_ppO2	; copy last ppO2 to buffer register
+
+; Calculate CNS	
+	call	main_calc_CNS_fraction		; calculate CNS
+	movlb	b'00000001'					; rambank 1 selected
+
+; Check if CNS should be displayed
+	movff	char_O_CNS_fraction,lo		; copy into bank1
+	GETCUSTOM8	d'27'					; cns_display_high
+	subwf	lo,W
+	btfsc	STATUS,C
+	call	PLED_display_cns			; Show CNS
+
+; Check for decompression gases if in decomode
+divemode_check_decogases:					; CALLed from Simulator
+	btfss	dekostop_active
+	bra		reset_decompression_gases	; While in NDL, do not set deompression gas
+; 1. Find active gas with deepest change depth < current depth
+; 2. Set Decogas
+
+	movff	rel_pressure+0,xA+0			
+	movff	rel_pressure+1,xA+1
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16				; compute depth in full m -> result in xC+0
+	clrf	lo						; clear depth for comparison
+
+; check gas1 
+	read_int_eeprom		d'27'		; read flag register
+	btfss	EEDATA,0				; check active flag
+	bra		check_decogas2			; skip inactive gases!
+	read_int_eeprom		d'28'		; read gas_change_depth
+	movf	xC+0,W					; load depth in m into WREG
+	cpfslt	EEDATA					; gas_change_depth > current depth?
+	bra		check_decogas2			; W < EEDATA -> current depth lower then gas_change_depth
+	
+	movff	EEDATA,lo				; deepest gas_change_depth in lo
+	movlw	d'1'
+	movwf	hi						; Decogas # in hi (1-5)
+
+check_decogas2:
+	read_int_eeprom		d'27'		; read flag register
+	btfss	EEDATA,1				; check active flag
+	bra		check_decogas3			; skip inactive gases!
+	read_int_eeprom		d'29'		; read gas_change_depth
+	movf	xC+0,W					; load depth in m into WREG
+	cpfslt	EEDATA					; gas_change_depth > current depth?
+	bra		check_decogas3			; W < EEDATA -> current depth lower then gas_change_depth
+
+	read_int_eeprom		d'29'		; read gas_change_depth
+	movf	lo,W					; load current gas_change_depth into WREG
+	cpfsgt	EEDATA					; last gas_change_depth > current gas_change_depth ?
+	bra		check_decogas3			; W < lo -> last gas_change_depth > current gas_change_depth
+	movff	EEDATA,lo				; deepest gas_change_depth in lo
+	movlw	d'2'
+	movwf	hi						; Decogas # in hi (1-5)
+
+check_decogas3:
+	read_int_eeprom		d'27'		; read flag register
+	btfss	EEDATA,2				; check active flag
+	bra		check_decogas4			; skip inactive gases!
+	read_int_eeprom		d'30'		; read gas_change_depth
+	movf	xC+0,W					; load depth in m into WREG
+	cpfslt	EEDATA					; gas_change_depth > current depth?
+	bra		check_decogas4			; W < EEDATA -> current depth lower then gas_change_depth
+
+	read_int_eeprom		d'30'		; read gas_change_depth
+	movf	lo,W					; load current gas_change_depth into WREG
+	cpfsgt	EEDATA					; last gas_change_depth > current gas_change_depth ?
+	bra		check_decogas4			; W < lo -> last gas_change_depth > current gas_change_depth
+	movff	EEDATA,lo				; deepest gas_change_depth in lo
+	movlw	d'3'
+	movwf	hi						; Decogas # in hi (1-5)
+
+check_decogas4:
+	read_int_eeprom		d'27'		; read flag register
+	btfss	EEDATA,3				; check active flag
+	bra		check_decogas5			; skip inactive gases!
+	read_int_eeprom		d'31'		; read gas_change_depth
+	movf	xC+0,W					; load depth in m into WREG
+	cpfslt	EEDATA					; gas_change_depth > current depth?
+	bra		check_decogas5			; W < EEDATA -> current depth lower then gas_change_depth
+
+	read_int_eeprom		d'31'		; read gas_change_depth
+	movf	lo,W					; load current gas_change_depth into WREG
+	cpfsgt	EEDATA					; last gas_change_depth > current gas_change_depth ?
+	bra		check_decogas5			; W < lo -> last gas_change_depth > current gas_change_depth
+	movff	EEDATA,lo				; deepest gas_change_depth in lo
+	movlw	d'4'
+	movwf	hi						; Decogas # in hi (1-5)
+
+check_decogas5:
+	read_int_eeprom		d'27'		; read flag register
+	btfss	EEDATA,4				; check active flag
+	bra		check_decogas_done		; skip inactive gases!
+	read_int_eeprom		d'32'		; read gas_change_depth
+	movf	xC+0,W					; load depth in m into WREG
+	cpfslt	EEDATA					; gas_change_depth > current depth?
+	bra		check_decogas_done		; W < EEDATA -> current depth lower then gas_change_depth
+
+	read_int_eeprom		d'32'		; read gas_change_depth
+	movf	lo,W					; load current gas_change_depth into WREG
+	cpfsgt	EEDATA					; last gas_change_depth > current gas_change_depth ?
+	bra		check_decogas_done		; W < lo -> last gas_change_depth > current gas_change_depth
+	movff	EEDATA,lo				; deepest gas_change_depth in lo
+	movlw	d'5'
+	movwf	hi						; Decogas # in hi (1-5)
+
+check_decogas_done:
+	ostc_debug	'E'		; Sends debug-information to screen if debugmode active
+
+	decf	hi,F						; Gas 0-4
+	movff	lo, char_I_deco_gas_change	; copy change_depth
+
+	movf	hi,W						; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'7'						; = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,char_I_deco_He_ratio	; And copy into hold register
+
+
+	movf	hi,W						; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'6'						; = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	
+	movff	char_I_deco_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; Borrow bit
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	bsf		STATUS,C					; Borrow bit
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_deco_N2_ratio	; = N2!
+	bra		skip_decompression_gases
+
+reset_decompression_gases:				; reset the deco gas while in NDL
+	ostc_debug	'F'		; Sends debug-information to screen if debugmode active
+  	clrf	lo
+ 	movff	lo, char_I_deco_gas_change	; clear 
+ 	movff	lo, char_I_deco_N2_ratio	; clear
+ 	movff	lo, char_I_deco_He_ratio	; clear
+skip_decompression_gases:
+;call	PLED_gaschange_DEBUG
+	return
+
+calc_deko_divemode2:
+	bcf		twosecupdate		
+
+	btfsc	gauge_mode				; ignore decompression calculation in gauge mode
+	return
+	btfsc	FLAG_apnoe_mode			; ignore decompression calculation in apnoe mode
+	return
+
+ 	ostc_debug	'B'		; Sends debug-information to screen if debugmode active
+	call	divemode_prepare_flags_for_deco
+	call	deco_main_calc_hauptroutine		; calc_tissue
+	movlb	b'00000001'						; rambank 1 selected
+	ostc_debug	'C'		; Sends debug-information to screen if debugmode active
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	return										; calculation not yet finished!
+	
+	movff	char_O_array_decodepth+0,wait_temp	; copy ceiling to temp register
+	tstfsz	wait_temp							; Ceiling<0m?
+	bra		calc_deko_divemode3					; Yes!
+
+	btfsc	dekostop_active
+	call	PLED_display_ndl_mask			; Clear deco data, display nostop time
+	bcf		dekostop_active					; clear flag
+
+	clrf	decodata+0						; for profile memory
+	movff	char_O_nullzeit,decodata+1		; nostop time
+	
+	call	PLED_display_ndl				; display no deco limit
+	return
+
+divemode_prepare_flags_for_deco:	
+	movff	amb_pressure+0,int_I_pres_respiration+0		; lo  and copy result to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		; hi
+	GETCUSTOM8	d'11'				; Saturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_saturation_multiplier
+	GETCUSTOM8	d'12'				; Desaturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_desaturation_multiplier
+	GETCUSTOM8	d'16'				; Deco distance to decostop in 1/10 meter for simulation
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_distance
+	GETCUSTOM8	d'29'				; Depth Last Deco in meter for simulation
+	movwf	wait_temp
+	movff	wait_temp,char_I_depth_last_deco
+	call	restart_set_modes_and_flags			; Sets decomode (char_I_deco_model) and flags (again)
+	return
+
+calc_deko_divemode3:
+	btfss	dekostop_active
+	call	PLED_display_deko_mask				; clear nostop time, display decodata
+	bsf		dekostop_active						; Set flag
+
+	movff	char_O_array_decodepth+0,decodata+0	; ceiling
+	movff	char_O_array_decotime,decodata+1	; length of first stop in minues
+
+	call	PLED_display_deko					; display decodata
+	return						
+
+store_dive_data:						; CF20 seconds gone
+	bcf		store_sample				; update only any CF20 seconds
+	bsf		update_divetime				; update divemins every CF20 seconds
+
+	call	clear_LEDg					; LEDg off
+
+	btfsc	header_stored				; Header already stored?
+	bra	store_dive_data2				; Yes, store only profile data
+	bsf		header_stored				; Store header
+	
+	movff	eeprom_address+0, eeprom_header_address+0	; store startposition
+	movff	eeprom_address+1, eeprom_header_address+1	; store startposition
+
+; shift address for header
+; the header will be stored after the dive
+	incf_eeprom_address	d'47'				; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000
+
+store_dive_data2:
+	movf	rel_pressure+0,W				; store depth with every sample
+	call	write_external_eeprom
+	movf	rel_pressure+1,W
+	call	write_external_eeprom
+
+;First, find out how many bytes will append to this sample....
+	clrf	ProfileFlagByte					; clear number of bytes to append
+
+; Check Extented informations
+	decfsz	divisor_temperature,W	; Check divisor
+	bra		check_extended1		
+	movlw	d'2'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended1:
+	decfsz	divisor_deco,W		; Check divisor
+	bra		check_extended2		
+	movlw	d'2'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended2:
+	decfsz	divisor_tank,W		; Check divisor
+	bra		check_extended3		
+	movlw	d'2'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended3:
+	decfsz	divisor_ppo2,W		; Check divisor
+	bra		check_extended4		
+	movlw	d'3'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended4:
+	decfsz	divisor_deco_debug,W; Check divisor
+	bra		check_extended5		
+	movlw	d'9'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended5:
+	decfsz	divisor_nuy2,W		; Check divisor
+	bra		check_extended6		
+	movlw	d'0'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+check_extended6:
+
+; Second, check global event flag
+	btfss	event_occured		; Check global event flag
+	bra		store_dive_data3	; No Event
+	movlw	d'1'
+	addwf	ProfileFlagByte,F	; add one byte (The EventByte)
+
+	clrf	EventByte			; reset EventByte
+
+	movf	AlarmType,W			; Type of Alarm Bit 0-3
+	addwf	EventByte,F			; Copy to EventByte Bit 0-3
+	clrf	AlarmType			; Reset AlarmType
+	
+; Third, check events and add aditional bytes
+	btfss	manual_gas_changed	; Check flag	
+	bra		check_event1
+	movlw	d'2'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	bsf		EventByte,4			; Also set Flag in EventByte!
+check_event1:
+	btfss	stored_gas_changed	; Check flag	
+	bra		check_event2
+	movlw	d'1'				; Information length	
+	addwf	ProfileFlagByte,F	; add to ProfileFlagByte
+	bsf		EventByte,5			; Also set Flag in EventByte!
+check_event2:
+	bsf		ProfileFlagByte,7	; Set EventByte Flag in ProfileFlagByte
+
+store_dive_data3:
+	movf	ProfileFlagByte,W	; finally, write ProfileFlagByte!
+	call	write_external_eeprom
+
+	btfss	event_occured		; Check global event flag (again)
+	bra		store_dive_data4	; No Event
+
+; Store the EventByte + additional bytes now
+	movf	EventByte,W		
+	call	write_external_eeprom
+
+	btfss	manual_gas_changed	; Check flag	
+	bra		store_dive_data3a
+	read_int_eeprom	d'24'			; % O2 Gas6
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom	d'25'			; % He Gas6
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+store_dive_data3a:
+	btfss	stored_gas_changed	; Check flag	
+	bra		store_dive_data3b			
+	movf	active_gas,W		; Store active gas
+	call	write_external_eeprom
+
+store_dive_data3b:
+
+store_dive_data4:
+	bcf		event_occured		; Clear the global event flag
+	bcf		manual_gas_changed	; Clear all events
+	bcf		stored_gas_changed	; Clear all events
+
+; Store extended informations
+	decfsz	divisor_temperature,F	; Check divisor
+	bra		store_extended1	
+	rcall	store_dive_temperature
+store_extended1:
+	decfsz	divisor_deco,F		; Check divisor
+	bra		store_extended2	
+	rcall	store_dive_decodata
+store_extended2:
+	decfsz	divisor_tank,F		; Check divisor
+	bra		store_extended3	
+	rcall	store_dive_tankdata
+store_extended3:
+	decfsz	divisor_ppo2,F		; Check divisor
+	bra		store_extended4	
+	rcall	store_dive_ppo2
+store_extended4:
+	decfsz	divisor_deco_debug,F; Check divisor
+	bra		store_extended5	
+	rcall	store_dive_decodebug
+store_extended5:
+	decfsz	divisor_nuy2,F		; Check divisor
+	bra		store_extended6	
+	rcall	store_dive_nuy2
+store_extended6:
+
+; The next block is required to take care of "store never"
+	btfsc	divisor_temperature,7	; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_temperature		; And clear register again, so it will never reach zero...
+	btfsc	divisor_deco,7			; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_deco			; And clear register again, so it will never reach zero...
+	btfsc	divisor_tank,7			; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_tank			; And clear register again, so it will never reach zero...
+	btfsc	divisor_ppo2,7			; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_ppo2			; And clear register again, so it will never reach zero...
+	btfsc	divisor_deco_debug,7	; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_deco_debug		; And clear register again, so it will never reach zero...
+	btfsc	divisor_nuy2,7			; Test highest Bit (Register must have been zero before the "decfsz" command!)
+	clrf	divisor_nuy2			; And clear register again, so it will never reach zero...
+
+	ostc_debug	'D'		; Sends debug-information to screen if debugmode active
+	return				; Done.
+	
+store_dive_nuy2:
+	GETCUSTOM8	d'26'
+	movwf	divisor_nuy2			; Reload divisor from CF
+	return
+
+store_dive_decodebug:
+	movff	0x931,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x930,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x933,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x932,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x935,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x934,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x937,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x936,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	movff	0x938,divisor_deco_debug	; Used as temp
+	movf	divisor_deco_debug,W		; copy to WREG
+	call	write_external_eeprom		; Store in EEPROM
+	GETCUSTOM8	d'25'
+	movwf	divisor_deco_debug			; Reload divisor from CF
+	return
+
+store_dive_ppo2:
+	movlw	0x00			; Dummy
+	call	write_external_eeprom
+	movlw	0x00			; Dummy
+	call	write_external_eeprom
+	movlw	0x00			; Dummy
+	call	write_external_eeprom
+	GETCUSTOM8	d'24'
+	movwf	divisor_ppo2			; Reload divisor from CF
+	return
+
+store_dive_tankdata:
+	movlw	d'0'				; Dummy Tank1
+	call	write_external_eeprom
+	movlw	d'0'				; Dummy Tank2
+	call	write_external_eeprom
+	GETCUSTOM8	d'23'
+	movwf	divisor_tank			; Reload divisor from CF
+	return
+
+store_dive_decodata:
+	movf	decodata+0,W				; =0:no stop dive, if in deco mode: ceiling in m
+	call	write_external_eeprom
+	movf	decodata+1,W				; no stop time of length of first stop
+	call	write_external_eeprom
+	GETCUSTOM8	d'22'
+	movwf	divisor_deco			; Reload divisor from CF
+	return
+
+store_dive_temperature:
+	movf	temperature+0,W				; append temperature to current sample!
+	call	write_external_eeprom
+	movf	temperature+1,W
+	call	write_external_eeprom
+	GETCUSTOM8	d'21'
+	movwf	divisor_temperature			; Reload divisor from CF
+	return
+
+calc_velocity:								; called every two seconds
+	btfss	divemode						
+	bra		do_not_display_velocity			; display velocity only in divemode
+
+calc_velocity2:
+	movff	amb_pressure+0,sub_a+0
+	movff	amb_pressure+1,sub_a+1
+	movff	last_pressure+0,sub_b+0
+	movff	last_pressure+1,sub_b+1
+	movff	amb_pressure+0,last_pressure+0	; store old value for velocity
+	movff	amb_pressure+1,last_pressure+1
+
+	call	sub16						; sub_c = amb_pressure - last_pressure
+
+	movff	sub_c+0,xA+0
+	movff	sub_c+1,xA+1
+	movlw	d'39'			;77 when called every second....
+	movwf	xB+0
+	clrf	xB+1
+	call	mult16x16					; differential pressure in mBar*77...
+	movff	xC+0,divA+0
+	movff	xC+1,divA+1
+	movlw	d'7'
+	movwf	divB
+	call	div16						; devided by 2^7 equals velocity in m/min
+
+	movlw	d'99'
+	cpfsgt	divA
+	bra		calc_velocity3
+	movwf	divA						; divA=99
+
+calc_velocity3:
+
+	GETCUSTOM8	d'5'					; threshold for display vertical velocity
+	subwf	divA+0,W					; 
+
+	btfss	STATUS,C
+	bra		do_not_display_velocity
+
+update_velocity:
+	bsf		display_velocity
+	call	PLED_display_velocity
+	return
+
+do_not_display_velocity:
+	btfss	display_velocity			; Velocity was not displayed, do not delete
+	return
+		
+	bcf		display_velocity			; Velocity was displayed, delete velocity now
+	call	PLED_display_velocity_clear
+	return
+
+check_ppO2:								; check current ppO2 and display warning if required
+	btfsc		FLAG_const_ppO2_mode		; ignore in ppO2 mode....
+	return
+
+	movff		amb_pressure+0,xA+0
+	movff		amb_pressure+1,xA+1
+	movlw		d'10'
+	movwf		xB+0
+	clrf		xB+1
+	call		div16x16				; xC=p_amb/10
+	movff		xC+0,xA+0
+	movff		xC+1,xA+1
+	movff		char_I_O2_ratio,xB+0
+	clrf		xB+1
+	call		mult16x16				; char_I_O2_ratio * p_amb/10
+
+; Check if ppO2 should be displayed
+	movff		xC+0,sub_b+0
+	movff		xC+1,sub_b+1
+	GETCUSTOM8	d'19'					; ppo2_display_high
+	mullw		d'100'					; ppo2_display_high*100
+	movff		PRODL,sub_a+0
+	movff		PRODH,sub_a+1
+	call		sub16					
+	bcf			ppO2_show_value		; clear flag
+	btfsc		neg_flag
+	bsf			ppO2_show_value		; set flag if required
+
+;check if we are within our warning thresholds!
+	bcf			ppO2_warn_value		; clear flag
+	movff		xC+0,sub_b+0
+	movff		xC+1,sub_b+1
+	GETCUSTOM8	d'18'					; ppo2_warning_high
+	mullw		d'100'					; ppo2_warning_high*100
+	movff		PRODL,sub_a+0
+	movff		PRODH,sub_a+1
+	call		sub16					
+	btfss		neg_flag
+	bra			check_ppO2_0		; Not too high
+
+	bsf			ppO2_warn_value		; set flag 
+	movlw		d'5'				; Type of Alarm
+	movwf		AlarmType			; Copy to Alarm Register
+	bsf			event_occured		; Set Event Flag
+
+check_ppO2_0:
+	movff		xC+0,sub_b+0
+	movff		xC+1,sub_b+1
+	GETCUSTOM8	d'17'					; ppo2_warning_low
+	mullw		d'100'					; ppo2_warning_low*100
+	movff		PRODL,sub_a+0
+	movff		PRODH,sub_a+1
+	call		sub16					
+	btfsc		neg_flag
+	bra			check_ppO2_1		; Not too low
+
+	bsf			ppO2_warn_value		; set flag 
+	bsf			ppO2_show_value		; show ppO2 if below threshold!
+	movlw		d'4'				; Type of Alarm
+	movwf		AlarmType			; Copy to Alarm Register
+	bsf			event_occured		; Set Event Flag
+
+check_ppO2_1:
+	btfsc		ppO2_show_value		; show value?
+	bra			check_ppO2_2		; yes!
+
+	btfss		ppO2_display_active	; is the value displayed?
+	bra			check_ppO2_3		; No, so clear not required
+	
+	call		PLED_show_ppO2_clear; Clear ppO2 value
+	bcf			ppO2_display_active	; clear flag
+	bra			check_ppO2_3		; done
+
+check_ppO2_2:
+	call		PLED_show_ppO2		; Display ppO2 (stored in xC)
+	bsf			ppO2_display_active	; Set flag		
+
+check_ppO2_3:
+	return		; done
+
+
+calculate_noflytime:
+	; calculate nofly time
+	movff	int_O_desaturation_time+0,xA+0
+	movff	int_O_desaturation_time+1,xA+1
+	tstfsz	xA+0			; Desat=0?
+	bra		calculate_noflytime2
+	tstfsz	xA+1			; Desat=0?
+	bra		calculate_noflytime2
+	; Desaturation time = zero
+	movlw	d'1'
+	movwf	nofly_time+0			; Clear nofly time
+	clrf	nofly_time+1			; Clear nofly time
+	bcf		nofly_active			; Clear flag
+	return
+	
+calculate_noflytime2:	
+	movff	xA+0,int_I_temp+0
+	movff	xA+1,int_I_temp+1
+	GETCUSTOM8 	.13					; nofly_time_ratio
+	movwf	xB+0
+	movff	xB,char_I_temp
+	ostc_debug	'K'		; Sends debug-information to screen if debugmode active
+	call	main_calc_percentage
+	movlb	b'00000001'				; select ram bank 1
+	ostc_debug	'L'		; Sends debug-information to screen if debugmode active
+	movff	int_I_temp+0,xA+0
+	movff	int_I_temp+1,xA+1
+	tstfsz	xA+0			; Desat=0?
+	bra		calculate_noflytime_2_final
+	tstfsz	xA+1			; Desat=0?
+	bra		calculate_noflytime_2_final
+	; noflytime = zero
+	movlw	d'1'
+	movwf	nofly_time+0			; Clear nofly time
+	clrf	nofly_time+1			; Clear nofly time
+	bcf		nofly_active			; Clear flag
+	return
+calculate_noflytime_2_final:
+	movff	xA+0,nofly_time+0
+	movff	xA+1,nofly_time+1
+	bsf		nofly_active			; Set flag
+	return
+
+end_dive:
+	btfss	realdive					; dive longer then one minute
+	goto	end_dive_common				; No, discard everything
+
+	; Dive finished (and longer then one minute or Apnoe timeout occured)
+
+	btfsc	FLAG_apnoe_mode			; Calc max. depth (again) for very short apnoe dives
+	rcall	apnoe_calc_maxdepth
+
+	; calculate desaturation time
+	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values 
+
+	GETCUSTOM8	d'12'				; Desaturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_desaturation_multiplier
+
+	ostc_debug	'G'		; Sends debug-information to screen if debugmode active
+	call	deco_main_calc_desaturation_time	; calculate desaturation time
+	movlb	b'00000001'						; select ram bank 1
+	rcall	calculate_noflytime				; Calc NoFly time
+	ostc_debug	'H'		; Sends debug-information to screen if debugmode active
+										; store header and ...
+	movlw	0xFD						; .... End-of-Profile Bytes
+	call	write_external_eeprom
+	movlw	0xFD
+	call	write_external_eeprom
+	movlw	0xFE						; This positon will be overwritten for the next profile
+	call	write_external_eeprom			; and is required to find the newest dive after a firmware reset
+
+	movff	eeprom_header_address+0, eeprom_address+0	; set header adress
+	movff	eeprom_header_address+1, eeprom_address+1	; write header
+
+	movlw	0xFA						; Header start
+	call	write_external_eeprom
+	movlw	0xFA
+	call	write_external_eeprom
+	movlw	logbook_profile_version			; Defined in definitions_vxyy.asm
+	call	write_external_eeprom
+	movf	month,W					; Date
+	call	write_external_eeprom
+	movf	day,W
+	call	write_external_eeprom
+	movf	year,W
+	call	write_external_eeprom
+	movf	hours,W					; End of dive time
+	call	write_external_eeprom
+	movf	mins,W
+	call	write_external_eeprom
+
+	btfss	FLAG_apnoe_mode				; Store apnoe max or normal max (Which is only max from the last descent)
+	bra		end_dive1					; Store normal depth
+
+	movff	apnoe_max_pressure+0,lo
+	movff	apnoe_max_pressure+1,hi
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+	movff	lo,apnoe_max_pressure+0
+	movff	hi,apnoe_max_pressure+1
+	
+	movf	apnoe_max_pressure+0,W		; Max. depth
+	call	write_external_eeprom
+	movf	apnoe_max_pressure+1,W
+	call	write_external_eeprom
+	bra		end_dive2					; skip
+		
+end_dive1:
+	movff	max_pressure+0,lo
+	movff	max_pressure+1,hi
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+	movff	lo,max_pressure+0
+	movff	hi,max_pressure+1
+	
+	movf	max_pressure+0,W			; Max. depth
+	call	write_external_eeprom
+	movf	max_pressure+1,W
+	call	write_external_eeprom
+
+end_dive2:
+	movf	divemins+0,W				; divetime minutes
+	call	write_external_eeprom
+	movf	divemins+1,W
+	call	write_external_eeprom
+	movf	divesecs,W					; divetime seconds
+	call	write_external_eeprom
+	movf	mintemp+0,W					; minimum temperature
+	call	write_external_eeprom
+	movf	mintemp+1,W		
+	call	write_external_eeprom
+	movf	last_surfpressure_30min+0,W		; airpressure before dive
+	call	write_external_eeprom
+	movf	last_surfpressure_30min+1,W		
+	call	write_external_eeprom
+	movff	int_O_desaturation_time+0,lo			; 
+	movff	int_O_desaturation_time+1,hi
+	movf	lo,W						; desaturation time in minutes
+	call	write_external_eeprom
+	movf	hi,W						; 
+	call	write_external_eeprom
+
+	; Gases....
+	read_int_eeprom 	d'6'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom 	d'7'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	read_int_eeprom 	d'10'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom 	d'11'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	read_int_eeprom 	d'14'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom 	d'15'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	read_int_eeprom 	d'18'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom 	d'19'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	read_int_eeprom 	d'22'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom 	d'23'		; Read byte (stored in EEDATA)
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	read_int_eeprom	d'24'			; % O2 Gas6
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom	d'25'			; % He Gas6
+	movf	EEDATA,W
+	call	write_external_eeprom
+	read_int_eeprom	d'33'			; start gas
+	movf	EEDATA,W
+	call	write_external_eeprom
+
+	movlw	softwareversion_x			; Firmware version
+	call	write_external_eeprom
+	movlw	softwareversion_y
+	call	write_external_eeprom
+	movf	batt_voltage+0,W			; Battery voltage 
+	call	write_external_eeprom
+	movf	batt_voltage+1,W
+	call	write_external_eeprom
+
+	GETCUSTOM8	d'20'					; sampling rate in WREG
+	btfsc	FLAG_apnoe_mode				; Apnoe mode?
+	movlw	d'1'						; Apnoe sampling rate
+	call	write_external_eeprom
+
+	movlw	d'2'		; information size temperature
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'21'	; Divisor temperature
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	movlw	d'2'		; information size deco
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'22'	; Divisor deco
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	movlw	d'2'		; information size tank
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'23'					; Divisor Tank
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	movlw	d'3'		; information size pp02
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'24'	; Divisor pp02
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	movlw	d'9'		; information size Decodebug
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'25'	; Divisor Decodebug
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	movlw	d'0'		; information size nuy2
+	movwf	temp1		; copy to bits 0-3
+	swapf	temp1,F		; swap nibbels 0-3 with 4-7
+	GETCUSTOM8	d'26'	; Divisor nuy2
+	addwf	temp1,W		; copy to bits 0-3, result in WREG
+	call	write_external_eeprom
+
+	read_int_eeprom	d'26'			; Read Salinity from EEPROM
+	movf	EEDATA,W
+	call	write_external_eeprom	; Store Salinity to Dive
+	
+	movlw	d'0'		; Spare
+	call	write_external_eeprom
+
+	movlw	0xFB						; Header stop
+	call	write_external_eeprom
+	movlw	0xFB
+	call	write_external_eeprom
+	
+	; Increase total dive counter
+	read_int_eeprom 	d'2'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp1			; Low byte
+	read_int_eeprom 	d'3'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp2			; high byte
+	bcf		STATUS,C
+	movlw	d'1'
+	addwf	temp1
+	movlw	d'0'
+	addwfc	temp2				
+	movff	temp1,EEDATA
+	write_int_eeprom	d'2'			; write byte stored in EEDATA
+	movff	temp2,EEDATA
+	write_int_eeprom	d'3'			; write byte stored in EEDATA
+
+	GETCUSTOM15	.28							; Logbook Offset -> lo, hi
+	tstfsz		lo							; lo=0?
+	bra		change_logbook_offset1		; No, adjust offset	
+	tstfsz		hi						; hi=0?
+	bra		change_logbook_offset1		; No, adjust offset
+	bra		change_logbook_offset2		; lo=0 and hi=0 -> skip Offset routine
+change_logbook_offset1:
+	movlw	d'1'
+	addwf	lo
+	movlw	d'0'
+	addwfc	hi
+	movlw	d'112'					; CF28 *4 Bytes...
+	addlw	0x82
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom			; Lowbyte
+	movlw	d'112'					; CF28 *4 Bytes...
+	addlw	0x83
+	movwf	EEADR
+	movff	hi,EEDATA
+	call	write_eeprom			; Highbyte 
+
+change_logbook_offset2:
+	bcf		simulatormode_active		; if we were in simulator mode
+	call	clear_LEDusb
+
+end_dive_common:
+	btfsc	restore_deco_data			; Restore decodata?
+	call	simulator_restore_tissue_data		; Yes!
+
+	call	deco_main_gradient_array
+	movlb	b'00000001'					; select ram bank 1
+
+	clrf	surface_interval+0
+	clrf	surface_interval+1		; Clear surface interval timer
+
+	goto	surfloop					; and return to surfaceloop
+
+timeout_divemode:
+	btfss	realdive					; Dive longer then one minute
+	return
+	
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	bra		timeout_divemode2			; Yes, use CF30 [min] for timeout
+
+	btfsc	simulatormode_active		; In Simulator mode?
+	bra		timeout_divemode3			; Yes, use fixed 5 seconds timeout			
+	
+	bcf		divemode
+	incf	timeout_counter,F
+	GETCUSTOM8	d'2'					; diveloop_timeout
+	addlw	d'2'						; adds two seconds in case timout=zero!
+	btfsc	STATUS,C					; > 255?
+	movlw	d'255'						; Set to 255...
+	decf	WREG,F						; Limit to 254
+	cpfsgt	timeout_counter
+	bsf		divemode
+	return
+
+timeout_divemode2:
+	incf	timeout_counter,F			; seconds...
+	movlw	d'60'
+	cpfseq	timeout_counter				; timeout_counter=60?
+	return								; No.
+
+	clrf	timeout_counter
+	bcf		divemode
+	incf	apnoe_timeout_counter,F
+	GETCUSTOM8	d'30'					; apnoe timeout [min]
+	cpfseq	apnoe_timeout_counter
+	bsf		divemode
+	return
+
+timeout_divemode3:
+	bcf		divemode
+	incf	timeout_counter,F
+	movlw	d'5'						; Fixed timeout of 5 seconds
+	cpfsgt	timeout_counter
+	bsf		divemode
+	return
+
+update_divemode1:						; update any second
+	call	set_dive_modes				; tests if depth>threshold
+	
+	btfsc	divemode
+	call	set_max_depth				; update max. depth if required
+
+	btfsc	divemode
+	call	set_min_temp				; store min. temp if required
+
+	bcf		temp_changed			; Display temperature?
+	movf	temperature+0,W
+	cpfseq	last_temperature+0
+	bsf		temp_changed			; Yes
+	movf	temperature+1,W
+	cpfseq	last_temperature+1
+	bsf		temp_changed			; Yes
+	btfsc	temp_changed	
+	call	PLED_temp_divemode		; Displays temperature
+
+	bcf		pres_changed			; Display new depth?
+	movf	amb_pressure+0,W
+	cpfseq	last_pressure+0
+	bsf		pres_changed			; Yes
+	movf	amb_pressure+1,W
+	cpfseq	last_pressure+1
+	bsf		pres_changed			; Yes
+
+	btfsc	simulatormode_active	; always update depth when in simulator mode
+	bsf		pres_changed				
+
+	btfsc	pres_changed	
+	call	PLED_depth					; Displays new depth
+	return
+
+update_divemode60:					; update any minute
+	call	get_battery_voltage			; gets battery voltage
+	call	set_powersafe				; red LED blinking if battery is low
+	call	PLED_max_pressure			; No, use normal max. depth
+	call	check_temp_extrema			; check for new temperature extremas
+	bcf		oneminupdate
+	return
+
+set_max_depth:
+	movff	max_pressure+0,sub_a+0
+	movff	max_pressure+1,sub_a+1
+	movff	rel_pressure+0,sub_b+0
+	movff	rel_pressure+1,sub_b+1
+	call	sub16						; sub_c = sub_a - sub_b
+								; max_pressure<rel_pressure -> neg_flag=1
+								; rel_pressure<=max_pressure -> neg_flag=0
+	btfss	neg_flag	
+	return
+								;max_pressure<rel_pressure
+	movff	rel_pressure+0,max_pressure+0
+	movff	rel_pressure+1,max_pressure+1
+	call	PLED_max_pressure			; No, use normal max. depth
+	return
+
+set_min_temp:
+	movff	mintemp+0,sub_a+0
+	movff	mintemp+1,sub_a+1
+	movff	temperature+0,sub_b+0
+	movff	temperature+1,sub_b+1
+	call	sub16						; sub_c = sub_a - sub_b
+								; mintemp<T -> neg_flag=1
+								; T<=mintemp -> neg_flag=0
+	btfsc	neg_flag	
+	return
+								;mintemp>=T
+	movff	temperature+0,mintemp+0
+	movff	temperature+1,mintemp+1
+	return
+
+set_dive_modes:
+	bcf		divemode2				; Stop time
+
+	GETCUSTOM8	.0					; loads dive_threshold in WREG
+	movwf	sub_a+0					; dive_treshold is in cm
+	clrf	sub_a+1
+
+	movff	rel_pressure+0,sub_b+0
+	movff	rel_pressure+1,sub_b+1
+		
+	call	sub16						; sub_c = sub_a - sub_b
+	
+	btfss	neg_flag	
+	bra		set_dive_modes2				; too shallow (rel_pressure<dive_threshold)
+
+	btfsc	realdive					; Dive longer than one minute?
+	clrf 	timeout_counter
+
+	bsf		divemode
+	bsf		divemode2				; displayed divetime is running
+	return
+
+set_dive_modes2:
+	btfss	realdive					; dive longer then one minute?
+	bcf		divemode					; no -> this was no real dive
+	return
+
+set_powersafe:
+	btfsc	low_battery_state		; battery warning alread active?
+	bra		set_powersafe2			; Yes, but is it still required?
+									; battery voltage in mV (value*256+Lowbyte=actual treshold)
+	movlw	d'12'					; 3,328V
+	cpfsgt	batt_voltage+1
+	bra		set_powersafe1
+	return
+
+set_powersafe1:
+	movlw	d'7'					; Type of Alarm (Battery Low)
+	movwf	AlarmType				; Copy to Alarm Register
+	bsf		event_occured			; Set Event Flag
+	bsf		low_battery_state		; set flag for battery warning
+	return							; return
+
+set_powersafe2:
+	movlw	d'13'					; 3,584V
+	cpfsgt	batt_voltage+1
+	bra		set_powersafe1			; Still to low
+	bcf		low_battery_state		; clear flag for battery warning mode
+	return
+
+calc_average_depth:
+	; 1. Add new 2xdepth to the Sum of depths registers
+	movff	rel_pressure+0,b0_lo
+	movff	rel_pressure+1,b0_hi
+
+	movf	b0_lo,w
+	addwf	average_depth_hold+0,F
+	movf	b0_hi,w
+	addwfc	average_depth_hold+1,F
+	movlw	d'0'
+	addwfc	average_depth_hold+2,F
+	addwfc	average_depth_hold+3,F ; Will work up to 9999mBar*60*60*24=863913600mBar
+
+	movf	b0_lo,w
+	addwf	average_depth_hold+0,F
+	movf	b0_hi,w
+	addwfc	average_depth_hold+1,F
+	movlw	d'0'
+	addwfc	average_depth_hold+2,F
+	addwfc	average_depth_hold+3,F ; Will work up to 9999mBar*60*60*24=863913600mBar
+
+	; 2. Compute Average Depth on base of average_divesecs:2
+	
+	movff	average_divesecs+0,xB+0
+	movff	average_divesecs+1,xB+1		; Copy
+	movff	average_depth_hold+0,xC+0
+	movff	average_depth_hold+1,xC+1
+	movff	average_depth_hold+2,xC+2
+	movff	average_depth_hold+3,xC+3
+
+	call	div32x16 	; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	movff	xC+0,avr_rel_pressure+0
+	movff	xC+1,avr_rel_pressure+1
+	return
+	
+
+diveloop_boot:	
+		ostc_debug	'Q'		; Sends debug-information to screen if debugmode active
+	clrf	max_pressure+0				; clear some variables
+	clrf	max_pressure+1
+
+	clrf	avr_rel_pressure+0
+	clrf	avr_rel_pressure+1
+
+	call	PLED_brightness_low
+	read_int_eeprom	d'90'				; Brightness offset? (Dim>0, Normal = 0)
+	movlw	d'0'
+	cpfsgt	EEDATA
+	call	PLED_brightness_full
+
+	clrf	average_depth_hold+0
+	clrf	average_depth_hold+1
+	clrf	average_depth_hold+2
+	clrf	average_depth_hold+3		; Clear average depth register
+	movlw	d'1'
+	movwf	average_divesecs+0
+	clrf	average_divesecs+1
+
+	movlw	d'1'
+	movwf	apnoe_max_pressure+0
+	clrf	apnoe_max_pressure+1
+	clrf	apnoe_surface_mins			
+	clrf	apnoe_surface_secs		
+	clrf	apnoe_mins
+	clrf	apnoe_secs
+	clrf	divemins+0
+	clrf	divemins+1
+	clrf	divesecs
+	clrf	samplesecs
+	clrf	apnoe_timeout_counter		; timeout in minutes
+	clrf 	timeout_counter				; takes care of the timeout
+	clrf 	timeout_counter2			; Here: counts to six, then store deco data and temperature
+	clrf	AlarmType					; Clear all alarms
+	bcf		event_occured				; clear flag
+	bcf		depth_greater_100m			; clear flag
+	setf	last_diluent				; to be displayed after first calculation (range: 0 to 100 [%])
+	clrf	char_last_pointer
+	bcf		dekostop_active			
+	call	get_free_EEPROM_location	; get last position in external EEPROM, may be up to 2 secs!
+
+	movff	last_surfpressure_30min+1,int_I_pres_surface+1	; HIGH copy surfacepressure to deco routine
+	movff	last_surfpressure_30min+0,int_I_pres_surface+0	; LOW copy surfacepressure to deco routine
+	movff	temperature+0,mintemp+0						; Reset Min-Temp registers
+	movff	temperature+1,mintemp+1						; Reset Min-Temp registers
+
+	clrf	wait_temp					; Used to clear Bankx registers
+	movff	wait_temp,char_O_GF_low_pointer
+	movff	wait_temp,char_O_actual_pointer
+	lfsr	FSR0,0x250
+	movlw	0x20
+	movwf	wait_temp
+clear_deco_lists:						; Clear Deco list
+	clrf	POSTINC0
+	decfsz	wait_temp,F
+		bra		clear_deco_lists
+	lfsr	FSR0,0x270
+	movlw	0x20
+	movwf	wait_temp
+set_no_forced_stops:					; Init Deco list
+	movlw	0x01
+	movwf	POSTINC0
+	decfsz	wait_temp,F
+		bra		set_no_forced_stops
+	lfsr	FSR0,0x290					; clear int_O_calc_tissue_call_counter (DEBUG)
+	clrf	POSTINC0
+	clrf	POSTINC0
+
+; Load GF values into RAM
+	GETCUSTOM8	d'32'			; GF low
+	movff		EEDATA,char_I_GF_Lo_percentage
+	GETCUSTOM8	d'33'			; GF high
+	movff		EEDATA,char_I_GF_Hi_percentage
+
+; Start with active Stopwatch?
+	bsf			stopwatch_active
+	GETCUSTOM8	d'41'			; =1: Start with active Stopwatch
+	movwf		lo
+	movlw		d'1'
+	cpfseq		lo						; CF41=1?
+	bcf			stopwatch_active		; No!
+
+; Init profile recording parameters	
+	GETCUSTOM8	d'20'			; sample rate
+	movwf	samplesecs_value	; to avoid EEPROM access in the ISR
+	GETCUSTOM8	d'21'
+	movwf	divisor_temperature			; load divisors for profile storage
+	GETCUSTOM8	d'22'
+	movwf	divisor_deco				
+	GETCUSTOM8	d'23'
+	movwf	divisor_tank
+	GETCUSTOM8	d'24'
+	movwf	divisor_ppo2
+	GETCUSTOM8	d'25'
+	movwf	divisor_deco_debug
+	GETCUSTOM8	d'26'
+	movwf	divisor_nuy2
+
+	btfss	FLAG_apnoe_mode		; In Apnoe mode?
+	bra		divemode1
+; Overwrite some parameters in Apnoe mode....
+	movlw	d'1'
+	movwf	samplesecs_value	; to avoid EEPROM access in the ISR
+
+divemode1:
+	read_int_eeprom	d'36'				; Read mix 1 ppO2
+	btfsc	FLAG_const_ppO2_mode
+	movff	EEDATA,char_I_const_ppO2	; Set ppO2 setpoint if in ppO2 mode
+
+	call	clear_LEDnofly				; Clear flags
+	bcf		low_battery_state			; clear flag for battery warning mode
+	bcf		header_stored				
+	bcf		premenu
+	bcf		realdive
+	bsf		update_divetime				; set flag
+	btfss	simulatormode_active		; do not disable in simulator mode!					
+	call	disable_rs232				; Disable RS232 unless in external O2 Sensor mode
+
+	read_int_eeprom 	d'33'			; Read byte (stored in EEDATA)
+	movff	EEDATA,active_gas			; Read start gas (1-5)
+
+; Read Start Gas and configure char_I_He_ratio, char_I_O2_ratio and char_I_N2_ratio
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'7'						; = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,char_I_He_ratio		; And copy into hold register
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'6'						; = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	movff	EEDATA, char_I_O2_ratio		; O2 ratio
+	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; Borrow bit
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	bsf		STATUS,C					; Borrow bit
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_N2_ratio		; = N2!
+
+; New in 1.09 - DecoGas can be configured to achieve exact decompression proposal
+ ; required variables
+ ; These values are set when the OSTC is in decompression mode - will be done in routine "check_decogas"
+ ; char_I_deco_gas_change;				; next gas change in meter
+ ; char_I_deco_N2_ratio;				; next gas N2
+ ; char_I_deco_He_ratio;				; next gas He
+  	clrf	lo
+ 	movff	lo, char_I_deco_gas_change	; clear 
+ 	movff	lo, char_I_deco_N2_ratio	; clear
+ 	movff	lo, char_I_deco_He_ratio	; clear
+	bcf		multi_gf_display			; Do not display the multi-gf table screen
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/divemode_menu.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,755 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Underwater Menu (Set Gas, Decoplan, etc.)
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 11/11/05
+; last updated: 090305
+; known bugs:
+; ToDo:
+
+
+test_switches_divemode:
+									; checks switches in divemode
+	btfsc	switch_left
+	bra		test_switches_divemode2
+
+	btfss	switch_right
+	return
+	
+	bcf		switch_left				; Left button pressed!
+	bcf		switch_right
+	
+	bcf		select_bailoutgas		; Clear Flag for Bailout list
+	bsf		premenu					; Set Flag for premenu
+	bcf		menubit
+	clrf	timeout_counter3		; timeout_divemenu
+		
+	btfsc	FLAG_apnoe_mode			; In Apnoe mode?
+	bra		test_switches_divemode1	; Yes!
+
+test_switches_divemode0:	
+	WIN_INVERT		.1
+	DISPLAYTEXT	.4			;Menu?
+	WIN_INVERT		.0
+	return
+
+test_switches_divemode1:
+	DISPLAYTEXT	.141			;Quit?
+	return
+
+test_switches_divemode2:
+	bcf		switch_left			; Also reactivate left button if there was a right press without prior left press
+	bcf		switch_right		; enable right button again
+
+	btfss	premenu
+	bra		set_marker			; No Pre-Menu displayed -> Set Markerflag!
+
+	btfss	FLAG_apnoe_mode		; In Apnoe mode?
+	bra		test_switches_divemode2a; No!
+	
+	; Yes, so quit Apnoe mode at once...
+	bcf		divemode			; Clear Divemode flag...
+	bcf		premenu				; clear premenu flag
+	return
+
+test_switches_divemode2a:
+	bsf		menubit					; Enter Divemode-Menu!
+	bcf		premenu					; clear premenu flag
+	call	PLED_clear_divemode_menu		; Clear dive mode menu area
+	call	PLED_divemode_menu_mask_first	; Write Divemode menu1 mask
+	bcf		display_set_simulator			; Clear Simulator-Menu flag
+	bcf		divemode_menu_page				; Start in Menu Page one
+	movlw	d'1'
+	movwf	menupos					; reset cursor in divemode menu
+	call	PLED_divemenu_cursor	; show cursor
+	bcf		switch_right
+	bcf		switch_left				; Left button pressed!
+	return
+
+set_marker:
+	btfsc		standalone_simulator	; Standalone Simualtor active?
+	bra			divemode_menu_simulator	; Yes, Show simulator menu!
+
+	call		set_LEDg			; LEDg on
+	movlw		d'6'				; Type of Alarm  (Manual Marker)
+	movwf		AlarmType			; Copy to Alarm Register
+	bsf			event_occured		; Set Event Flag
+
+	btfss	stopwatch_active			;  =1: Reset Average registers
+	return
+; Maker Set, also reset average Depth....
+	clrf	average_depth_hold+0
+	clrf	average_depth_hold+1
+	clrf	average_depth_hold+2
+	clrf	average_depth_hold+3		; Clear average depth register
+	movlw	d'2'
+	movwf	average_divesecs+0
+	clrf	average_divesecs+1
+	call	calc_average_depth
+	return
+
+test_switches_divemode_menu:
+	btfsc	switch_left
+	bra		test_switches_divemode_menu3
+	btfss	switch_right
+	return
+
+	btfsc	display_see_l_tissue		; Is the leading tissue info screen active
+	bra		divemenu_see_leading_tissue2; Yes, quit menu
+
+	btfsc 	display_see_deco			; Is the Decoplan displayed?
+	bra		divemenu_see_decoplan2		; Yes, exit menu on left button press
+
+	btfsc 	display_set_graphs			; Is the Graph displayed?
+	bra		divemode_set_graphs2		; Yes, exit menu on right button press
+	
+	bcf		switch_right				; Left button pressed
+	clrf	timeout_counter3			; timout_divemenu!
+	incf	menupos,F
+
+; Following routine configures the number of menu entries for the different modes
+	movlw	d'6'						; number of available gases+1, ; number of menu options+1
+	btfsc	display_set_setpoint		; In SetPoint Menu?
+	movlw	d'4'						; Number of entries for this menu+1
+
+	cpfseq	menupos						; =limit?
+	bra		test_switches_divemode_menu1; No!
+	movlw	d'1'						; Yes, reset to position 1!
+	movwf	menupos
+test_switches_divemode_menu1:
+	call	PLED_divemenu_cursor		; update cursor
+	return
+
+test_switches_divemode_menu3:
+	bcf		switch_left
+	bcf		switch_right
+	bsf		menubit					; Enter Divemode-Menu!
+	bcf		premenu					; clear premenu flag
+	clrf	timeout_counter3
+
+	btfsc	display_see_l_tissue		; Is the leading tissue info screen active
+	bra		divemenu_see_leading_tissue2; Yes, quit menu
+
+	btfsc	display_set_gas				; Are we in the "Gaslist" or "SetPoint" menu?
+	bra		divemenu_set_gas2			; Yes, so set gas and exit menu
+
+	btfsc 	display_see_deco			; Is the Decoplan displayed?
+	bra		divemenu_see_decoplan2		; Yes, exit menu on right button press
+
+	btfsc 	display_set_graphs			; Is the Graph displayed?
+	bra		divemode_set_graphs2		; Yes, exit menu on right button press
+
+	btfsc	display_set_xgas			; Are we in the "Set Gas" menu?
+	bra		divemenu_set_xgas2			; Yes, so configure gas or set menu and exit menu
+
+	btfsc	display_set_simulator		; Are we in the Divemode Simulator menu?
+	goto	divemode_menu_simulator2	; Yes, so adjust depth or set and exit
+
+	btfsc	divemode_menu_page			; Are we in the second menu page?
+	bra		test_switches_divemode_menu4; Yes, use second page items
+; Options for Menu 1
+	dcfsnz	menupos,F
+	bra		divemenu_see_decoplan		; display the full decoplan
+	dcfsnz	menupos,F
+	bra		divemenu_set_gas			; Set gas sub-menu
+	dcfsnz	menupos,F
+	bra		divemode_set_xgas			; Configure the extra gas / Select Bailout
+	dcfsnz	menupos,F
+	bra		divemenu_enter_second		; Enter second Menu page
+	dcfsnz	menupos,F
+	bra		timeout_divemenu2			; Quit divemode menu
+	return
+
+test_switches_divemode_menu4:
+; Options for Menu 2
+	dcfsnz	menupos,F
+	bra		divemode_set_graphs			; Show saturation graphs
+	dcfsnz	menupos,F
+	bra		divemode_toggle_brightness	; Toggle OLED-Brightness
+	dcfsnz	menupos,F
+	bra		divemenu_see_leading_tissue	; Display details about leading tissue
+	dcfsnz	menupos,F
+	bra		toggle_stopwatch			; Toggle Stopwatch
+	dcfsnz	menupos,F
+	bra		timeout_divemenu2			; Quit divemode menu
+	return
+
+toggle_stopwatch:
+	btg		stopwatch_active			; Toggle Flag
+	
+	btfss	stopwatch_active			; Show Stopwatch?
+	bra		toggle_stopwatch2			; No, remove outputs
+
+	clrf	average_depth_hold+0
+	clrf	average_depth_hold+1
+	clrf	average_depth_hold+2
+	clrf	average_depth_hold+3		; Clear average depth register
+	movlw	d'2'
+	movwf	average_divesecs+0
+	clrf	average_divesecs+1
+	call	calc_average_depth
+	
+	bra		timeout_divemenu2			; quit menu!
+
+toggle_stopwatch2:
+	call	PLED_stopwatch_remove		; Remove Stopwatch Outputs
+	bra		timeout_divemenu2			; quit menu!
+
+divemode_toggle_brightness:
+	read_int_eeprom	d'90'				; Brightness offset? (Dim>0, Normal = 0)
+	tstfsz	EEDATA						; Was dimmed?
+	bra		divemode_toggle_brightness1	; Yes...
+
+	call	PLED_brightness_low
+	movlw	d'1'
+	movwf	EEDATA						; Copy to EEDATA
+	write_int_eeprom	d'90'			; Brightness offset? (Dim=1, Normal = 0)
+	bra		divemode_toggle_brightness3
+
+divemode_toggle_brightness1:
+	call	PLED_brightness_full
+	movlw	d'0'
+	movwf	EEDATA						; Copy to EEDATA
+	write_int_eeprom	d'90'			; Brightness offset? (Dim=1, Normal = 0)
+
+divemode_toggle_brightness3:
+; Now, redraw all outputs (All modes)
+	call	PLED_active_gas_divemode	; Display gas, if required
+	call	PLED_temp_divemode			; Displays temperature
+	call	PLED_depth					; Displays new depth...
+	call	PLED_max_pressure			; ...and max. depth
+
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	bra		timeout_divemenu2			; quit menu!
+	btfsc	gauge_mode					; Ignore in Gauge mode
+	bra		timeout_divemenu2			; quit menu!
+
+; Redraw Outputs in Deco modes
+	btfsc	dekostop_active
+	call	PLED_display_deko_mask		; clear nostop time, display decodata
+	btfss	dekostop_active
+	call	PLED_display_ndl_mask		;  Clear deco data, display nostop time
+	bra		timeout_divemenu2			; quit menu!
+
+divemenu_enter_second:
+	call	PLED_clear_divemode_menu		; Clear dive mode menu area
+	call	PLED_divemode_menu_mask_second	; Write Divemode menu1 mask
+	movlw	d'1'
+	movwf	menupos					; reset cursor to first item in divemode menu page two
+	bsf		divemode_menu_page		; Enter Menu Page two
+	call	PLED_divemenu_cursor	; show cursor
+	bcf		switch_right
+	bcf		switch_left				; Left button pressed!
+	return
+
+divemode_set_xgas:						; Set the extra gas...
+	btfsc	FLAG_const_ppO2_mode		; are we in ppO2 mode?
+	bra		divemenu_set_bailout		; Yes, so display Bailot list...
+
+	bsf		display_set_xgas			; Set Flag
+	call	PLED_clear_divemode_menu	; Clear Menu
+
+	movff	char_I_O2_ratio, EEDATA		; Reset Gas6 to current gas
+	write_int_eeprom	d'24'
+	movff	char_I_He_ratio, EEDATA
+	write_int_eeprom	d'25'
+
+	call	PLED_divemode_set_xgas		; Show mask
+
+	movlw	d'1'
+	movwf	menupos						; reset cursor
+	call	PLED_divemenu_cursor		; update cursor
+
+	return
+
+divemode_menu_simulator:
+	bsf		menubit					; Enter Divemode-Menu!
+	bcf		premenu					; clear premenu flag
+	bcf		switch_right
+	bcf		switch_left				; Left button pressed!
+	bsf		display_set_simulator		; Set Flag
+	call	PLED_clear_divemode_menu	; Clear Menu
+	call	PLED_divemode_simulator_mask; Show mask
+	bcf		divemode_menu_page			; Start in Menu Page one
+	movlw	d'1'
+	movwf	menupos						; reset cursor
+	call	PLED_divemenu_cursor		; update cursor
+	return
+
+divemode_menu_simulator2:
+	dcfsnz	menupos,F
+	bra		timeout_divemenu2			; quit underwater menu!
+	dcfsnz	menupos,F
+	bra		divemode_menu_simulator_p1	; Adjust +1m
+	dcfsnz	menupos,F
+	bra		divemode_menu_simulator_m1	; Adjust -1m
+	dcfsnz	menupos,F
+	bra		divemode_menu_simulator_p10	; Adjust +10m
+	dcfsnz	menupos,F
+	bra		divemode_menu_simulator_m10	; Adjust -10m
+	bra		timeout_divemenu2			; quit underwater menu!
+
+divemode_menu_simulator_common:
+	call	PLED_divemode_simulator_mask		; Redraw Simualtor mask
+
+	; Check limits (140m and 0m)
+	movlw	LOW		d'15000'
+	movwf	sub_a+0
+	movlw	HIGH	d'15000'
+	movwf	sub_a+1
+	movff	sim_pressure+0,sub_b+0
+	movff	sim_pressure+1,sub_b+1
+	call	sub16				; sub_c = sub_a - sub_b
+	btfss	neg_flag	
+	bra		divemode_menu_simulator_common2
+	; Too deep, limit to 140m
+	movlw	LOW		d'15000'
+	movwf	sim_pressure+0
+	movlw	HIGH	d'15000'
+	movwf	sim_pressure+1
+	return
+
+divemode_menu_simulator_common2:
+	movlw	LOW		d'1000'
+	movwf	sub_a+0
+	movlw	HIGH	d'1000'
+	movwf	sub_a+1
+	movff	sim_pressure+0,sub_b+0
+	movff	sim_pressure+1,sub_b+1
+	call	sub16				; sub_c = sub_a - sub_b
+	btfsc	neg_flag	
+	return
+	; Too shallow, limit to 1m
+	movlw	LOW		d'1000'
+	movwf	sim_pressure+0
+	movlw	HIGH	d'1000'
+	movwf	sim_pressure+1
+	return
+
+divemode_menu_simulator_m10:
+	movlw	LOW		d'1000'
+	subwf	sim_pressure+0,F
+	movlw	HIGH	d'1000'
+	subwfb	sim_pressure+1,F
+	movlw	d'5'
+	movwf	menupos						; reset cursor
+	bra		divemode_menu_simulator_common
+
+divemode_menu_simulator_p10:
+	movlw	LOW		d'1000'
+	addwf	sim_pressure+0,F
+	movlw	HIGH	d'1000'
+	addwfc	sim_pressure+1,F
+	movlw	d'4'
+	movwf	menupos						; reset cursor
+	bra		divemode_menu_simulator_common
+
+divemode_menu_simulator_p1:
+	movlw	d'100'
+	addwf	sim_pressure+0,F
+	movlw	d'0'
+	addwfc	sim_pressure+1,F
+	movlw	d'2'
+	movwf	menupos						; reset cursor
+	bra		divemode_menu_simulator_common
+
+divemode_menu_simulator_m1:
+	movlw	d'100'
+	subwf	sim_pressure+0,F
+	movlw	d'0'
+	subwfb	sim_pressure+1,F
+	movlw	d'3'
+	movwf	menupos						; reset cursor
+	bra		divemode_menu_simulator_common
+
+divemode_set_graphs:
+	bsf		display_set_graphs			; set flag
+	call	PLED_clear_divemode_menu	; Clear Menu
+	call	deco_main_calc_desaturation_time	; calculate desaturation time
+	movlb	b'00000001'						; select ram bank 1
+	call	PLED_saturation_graph_divemode	; Display saturation graph
+	return
+
+divemode_set_graphs2:
+	bcf		display_set_graphs			; clear flag
+	bra		timeout_divemenu2			; quit menu!
+
+divemenu_see_leading_tissue:
+	bsf		display_see_l_tissue		; Set Flag
+	call	PLED_clear_divemode_menu	; Clear Menu
+	call	PLED_show_leading_tissue	; Show infos about leading tissue
+	return
+
+divemenu_see_leading_tissue2:
+	bcf		display_see_l_tissue		; Clear Flag
+	bra		timeout_divemenu2			; quit menu!
+	
+divemenu_see_decoplan:
+	bsf		display_see_deco			; set flag
+	
+	read_int_eeprom	d'34'
+	movlw	d'3'
+	cpfsgt	EEDATA						; in multi-gf mode? Z16 GF OC=4 and Z16 GF CC=5
+	bra		divemenu_see_decoplan1		; No!
+
+bra		divemenu_see_decoplan1		; Show normal plan! ToDo: MultiGF Plan....
+
+	bsf		multi_gf_display			; Yes, display the multi-gf table screen
+	call	PLED_ClearScreen			; clean up OLED
+	call	PLED_MultiGF_deco_mask
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	return										; calculation not yet finished!
+
+	call	PLED_MultiGF_deco_all		; Display the new screen
+	return
+	
+divemenu_see_decoplan1:	
+	call	PLED_clear_divemode_menu	; Clear Menu
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	return										; calculation not yet finished!
+	
+	call	PLED_decoplan				; display the Decoplan
+	return
+
+divemenu_see_decoplan2:
+	bcf		display_see_deco			; clear flag
+	bra		timeout_divemenu2			; quit menu!
+
+divemenu_set_xgas2:
+	dcfsnz	menupos,F
+	bra		divemenu_set_xgas2_exit		; Use the gas6 configured and exit
+	dcfsnz	menupos,F
+	bra		divemenu_set_xgas2_o2plus	; Adjust O2+
+	dcfsnz	menupos,F
+	bra		divemenu_set_xgas2_o2minus	; Adjust O2-
+	dcfsnz	menupos,F
+	bra		divemenu_set_xgas2_heplus	; Adjust He+
+	dcfsnz	menupos,F
+	bra		divemenu_set_xgas2_heminus	; Adjust He-
+	return
+
+divemenu_set_xgas2_heminus:
+	read_int_eeprom		d'25'			; He value
+	movff	EEDATA,lo
+	decf	lo,F						; decrease He
+	movlw	d'255'
+	cpfseq	lo
+	bra		divemenu_set_xgas2_heminus2
+	incf	lo,F						; limit to min=0
+divemenu_set_xgas2_heminus2:
+	movff	lo, EEDATA
+	write_int_eeprom	d'25'			; He Value
+
+	call	PLED_divemode_set_xgas		; Redraw menu
+	movlw	d'5'
+	movwf	menupos						; reset cursor
+	return
+
+divemenu_set_xgas2_heplus:
+	read_int_eeprom		d'25'			; He value
+	movff	EEDATA,lo
+	incf	lo,F						; increase He
+	movlw	d'101'
+	cpfseq	lo
+	bra		divemenu_set_xgas2_heplus2
+	movlw	d'4'						; O2 Limit
+	movwf	lo
+divemenu_set_xgas2_heplus2:				; test if O2+He>100...
+	read_int_eeprom		d'24'			; O2 value
+	movf	EEDATA,W
+	addwf	lo,W						; add He value
+	movwf	hi							; store in temp
+	movlw	d'101'
+	cpfseq	hi							; O2 and He > 100?
+	bra		divemenu_set_xgas2_heplus3	; No!
+	decf	lo,F						; reduce He again = unchanged after operation
+divemenu_set_xgas2_heplus3:				; save current value
+	movff	lo, EEDATA
+	write_int_eeprom	d'25'			; He Value
+
+	call	PLED_divemode_set_xgas		; Redraw menu
+	movlw	d'4'
+	movwf	menupos						; reset cursor
+	return
+
+divemenu_set_xgas2_o2minus:
+	read_int_eeprom		d'24'			; O2 value
+	movff	EEDATA,lo
+	decf	lo,F						; decrease O2
+	movlw	d'3'						; Limit-1
+	cpfseq	lo
+	bra		divemenu_set_xgas2_o2minus2
+	incf	lo,F						; limit to min=9
+divemenu_set_xgas2_o2minus2:
+	movff	lo, EEDATA
+	write_int_eeprom	d'24'			; O2 Value
+
+	call	PLED_divemode_set_xgas		; Redraw menu
+	movlw	d'3'
+	movwf	menupos						; reset cursor
+	return
+
+divemenu_set_xgas2_o2plus:
+	read_int_eeprom		d'24'			; O2 value
+	movff	EEDATA,lo
+	incf	lo,F						; increase O2
+	movlw	d'101'
+	cpfseq	lo
+	bra		divemenu_set_xgas2_o2plus2
+	movlw	d'5'						; O2 limit
+	movwf	lo
+divemenu_set_xgas2_o2plus2:				; test if O2+He>100...
+	read_int_eeprom		d'25'			; He value
+	movf	EEDATA,W
+	addwf	lo,W						; add O2 value
+	movwf	hi							; store in temp
+	movlw	d'101'
+	cpfseq	hi							; O2 and He > 100?
+	bra		divemenu_set_xgas2_o2plus3	; No!
+	decf	lo,F						; reduce O2 again = unchanged after operation
+divemenu_set_xgas2_o2plus3:				; save current value
+	movff	lo, EEDATA
+	write_int_eeprom	d'24'			; O2 Value
+
+	call	PLED_divemode_set_xgas		; Redraw menu
+	movlw	d'2'
+	movwf	menupos						; reset cursor
+	return
+
+divemenu_set_xgas2_exit:
+	read_int_eeprom		d'25'			; Read He ratio
+	movff	EEDATA,char_I_He_ratio		; And copy into hold register
+
+	read_int_eeprom		d'24'			; Read O2 ratio
+	movff	EEDATA, char_I_O2_ratio		; O2 ratio
+	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; 
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_N2_ratio		; = N2!
+	bsf		manual_gas_changed			; set event flag
+	bsf		event_occured				; set global event flag
+	bra		timeout_divemenu2			; quit underwater menu!
+
+divemenu_set_bailout:
+	bsf		display_set_gas				; set flag	
+	call	PLED_clear_divemode_menu	; Clear Menu
+
+	bcf		FLAG_const_ppO2_mode		; Delete Flag to show all bailouts
+	bsf		select_bailoutgas			; Set Flag for Bailout list
+	call	PLED_gas_list				; Display all 5 gases
+	bsf		FLAG_const_ppO2_mode		; Reset Flag
+
+	movlw	d'1'
+	movwf	menupos						; reset cursor
+	call	PLED_divemenu_cursor		; update cursor
+	return
+
+divemenu_set_gas:
+	btfsc	FLAG_const_ppO2_mode		; in ppO2 mode?
+	bra		divemenu_set_setpoint		; Yes, display SetPoint/Sensor result list
+
+	bsf		display_set_gas				; set flag	
+	call	PLED_clear_divemode_menu	; Clear Menu
+	call	PLED_gas_list				; Display all 5 gases
+	movlw	d'1'
+	movwf	menupos						; reset cursor
+	call	PLED_divemenu_cursor		; update cursor
+	return
+
+divemenu_set_setpoint:
+	bsf		display_set_setpoint		; set flag	
+	bsf		display_set_gas				; set flag	
+
+	call	PLED_clear_divemode_menu	; Clear Menu
+	call	PLED_splist_start			; Display SetPoints and Sensor results
+	movlw	d'1'
+	movwf	menupos						; reset cursor
+	call	PLED_divemenu_cursor		; update cursor
+	
+	return
+
+
+divemenu_set_gas2:
+	btfsc	select_bailoutgas			; Are we in the Bailout list?
+	bra		divemenu_set_gas2a			; Yes, choose gas
+
+	btfss	FLAG_const_ppO2_mode		; are we in ppO2 mode?
+	bra		divemenu_set_gas2a			; no, choose gas
+	; Yes, so select SP 1-3 or Sensor mode
+	
+divemenu_set_gas1:	
+	movlw	d'35'						; offset in memory
+	addwf	menupos,W					; add SP number 0-2
+	movwf	EEADR
+	call	read_eeprom					; Read SetPoint
+	movff	EEDATA, char_I_const_ppO2	; Use SetPoint
+
+divemenu_set_gas1a:
+	bcf		display_set_setpoint		; Clear Display Flag
+; Now, Set correct Diluent (again)
+	read_int_eeprom 	d'33'			; Read byte (stored in EEDATA)
+	movff	EEDATA,active_gas			; Read start gas (1-5)
+
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'7'						; = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,char_I_He_ratio		; And copy into hold register
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'6'						; = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	movff	EEDATA, char_I_O2_ratio		; O2 ratio
+	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; Borrow bit
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	bsf		STATUS,C					; Borrow bit
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_N2_ratio		; = N2!
+
+	call	PLED_active_gas_clear		; Clear gas in case of AIR (Will be redrawn)	
+	
+	bsf		stored_gas_changed			; set event flag
+	bsf		event_occured				; set global event flag
+	bra		timeout_divemenu2			; quit menu!
+
+divemenu_set_gas2a:
+	clrf	lo							; clear Setpoint, PLED_const_ppO2_value now displayes "Bail"
+	movff	lo,char_I_const_ppO2		
+
+	bcf		display_set_gas				; clear flag
+	movff	menupos,active_gas			; copy into active gas register
+	decf	menupos,W					; # of selected gas (0-4)
+	mullw	d'4'						; times 4...
+	movf	PRODL,W						;
+	addlw	d'7'						; +7 = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,char_I_He_ratio		; And copy into hold register
+
+	decf	menupos,W					; # of selected gas (0-4)
+	mullw	d'4'						; times 4...
+	movf	PRODL,W						;
+	addlw	d'6'						; +6 = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	movff	EEDATA, char_I_O2_ratio		; O2 ratio
+	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; 
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_N2_ratio		; = N2!
+	bsf		stored_gas_changed			; set event flag
+	bsf		event_occured				; set global event flag
+	bra		timeout_divemenu2			; quit menu!
+	
+timeout_divemenu:
+	btfss	menubit					; is the Dive mode menu displayed?
+	return							; No
+
+	btfsc	display_see_l_tissue	; Are the leading tissue details displayed?
+	bra		timeout_divemenu7		; Yes, update them
+
+	btfsc	display_set_simulator	; Is the Simulator Mask active?
+	bra		timeout_divemenu6		; Yes, update Simulator mask
+
+	
+	btfss	display_see_deco		; Is the decoplan active?
+	bra		timeout_divemenu1		; No, skip updating the decoplan
+
+	btfsc	multi_gf_display		; display the multi-gf table screen?
+	bra		timeout_divemenu3		; Yes...
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	bra		timeout_divemenu1				; No, skip updating the decoplan
+	
+	call	PLED_decoplan				; update the Decoplan
+	
+timeout_divemenu1:	
+	incf	timeout_counter3,F		; increase timeout_counter3
+	GETCUSTOM8	d'10'				; loads timeout_divemenu into WREG
+	cpfsgt	timeout_counter3		; ... longer then timeout_divemenu
+	return							; No!
+timeout_divemenu2:					; quit divemode menu
+	btfss	multi_gf_display			; Was the Multi-GF Table displayed?
+	bra		timeout_divemenu2a			; No, normal OLED rebuild
+
+; Restore some outputs
+	bcf		multi_gf_display			; Do not display the multi-gf table screen
+	call	PLED_ClearScreen			; Yes, clean up OLED first
+	call	PLED_temp_divemode			; Displays temperature
+	call	PLED_max_pressure			; Max. Depth
+	btfsc	dekostop_active
+	call	PLED_display_deko_mask		; clear nostop time, display decodata
+	btfss	dekostop_active
+	call	PLED_display_ndl_mask		;  Clear deco data, display nostop time
+
+timeout_divemenu2a:
+	bcf		multi_gf_display			; Do not display the multi-gf table screen
+	bcf		menubit
+	bcf		premenu					; Yes, clear flags and menu, display dive time and mask again
+	call	PLED_active_gas_divemode	; Display gas, if required
+	call	PLED_clear_divemode_menu; Clear dive mode menu
+	call	PLED_divemode_mask		; Display mask
+	call	PLED_divemins			; Display (new) divetime!
+	clrf	timeout_counter3		; Also clear timeout
+	bcf		display_see_deco		; clear all display flags
+	bcf		display_see_l_tissue
+	bcf		display_set_gas			
+	bcf		display_set_graphs
+	bcf		display_set_xgas
+	bcf		display_set_setpoint
+	bcf		display_set_simulator
+	bcf		switch_left				; and debounce switches
+	bcf		switch_right
+	return
+	
+timeout_divemenu3:
+	call	PLED_MultiGF_deco_mask
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	bra		timeout_divemenu1				; No, skip updating the decoplan
+
+	call	PLED_MultiGF_deco_all		; Display the new screen
+	bra		timeout_divemenu1			; Check timeout
+	
+timeout_divemenu6:
+	; Update Simulator Mask
+	call	PLED_divemode_simulator_mask; Show mask
+	call	PLED_divemenu_cursor		; update cursor
+	bra		timeout_divemenu1			; Check timeout
+	
+timeout_divemenu7:
+	; Update Leading tissue infos
+	call	PLED_show_leading_tissue	; Update infos about leading tissue	
+	bra		timeout_divemenu1			; Check timeout
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/docu/COPYING__GNU_GPLv3_deutsch.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,541 @@
+GNU General Public License
+
+Deutsche Übersetzung der Version 3, 29. Juni 2007
+
+Copyright Đ 2007 Free Software Foundation, Inc. (http://fsf.org/) 51 Franklin Street, Fifth Floor, 
+Boston, MA 02110-1301, USA
+
+Es ist jedermann gestattet, diese Lizenzurkunde zu vervielfältigen und unveränderte Kopien zu 
+verbreiten; Änderungen sind jedoch nicht erlaubt.
+
+Diese Übersetzung ist kein rechtskräftiger Ersatz für die englischsprachige Originalversion!
+
+Vorwort
+
+Die GNU General Public License – die Allgemeine Öffentliche GNU-Lizenz – ist eine freie 
+Copyleft-Lizenz für Software und andere Arten von Werken.
+
+Die meisten Lizenzen für Software und andere nutzbaren Werke sind daraufhin entworfen worden, 
+Ihnen die Freiheit zu nehmen, die Werke mit anderen zu teilen und zu verändern. Im Gegensatz 
+dazu soll Ihnen die GNU General Public License die Freiheit garantieren, alle Versionen eines 
+Programms zu teilen und zu verändern. Sie soll sicherstellen, daß die Software für alle ihre 
+Benutzer frei bleibt. Wir, die Free Software Foundation, nutzen die GNU General Public License 
+für den größten Teil unserer Software; sie gilt außerdem für jedes andere Werk, dessen Autoren es 
+auf diese Weise freigegeben haben. Auch Sie können diese Lizenz auf Ihre Programme anwenden.
+
+Wenn wir von freier Software sprechen, so beziehen wir uns auf Freiheit, nicht auf den Preis. 
+Unsere Allgemeinen Öffentlichen Lizenzen sind darauf angelegt, sicherzustellen, daß Sie die 
+Freiheit haben, Kopien freier Software zu verbreiten (und dafür etwas zu berechnen, wenn Sie 
+möchten), die Möglichkeit, daß Sie die Software als Quelltext erhalten oder den Quelltext auf 
+Wunsch bekommen, daß Sie die Software ändern oder Teile davon in neuen freien Programmen 
+verwenden dürfen und daß Sie wissen, daß Sie dies alles tun dürfen.
+
+Um Ihre Rechte zu schützen, müssen wir andere daran hindern, Ihnen diese Rechte zu verweigern 
+oder Sie aufzufordern, auf diese Rechte zu verzichten. Aus diesem Grunde tragen Sie eine 
+Verantwortung, wenn Sie Kopien der Software verbreiten oder die Software verändern: die 
+Verantwortung, die Freiheit anderer zu respektieren.
+
+Wenn Sie beispielsweise die Kopien eines solchen Programms verbreiten – kostenlos oder gegen 
+Bezahlung – müssen Sie an die Empfänger dieselben Freiheiten weitergeben, die Sie selbst erhalten 
+haben. Sie müssen sicherstellen, daß auch die Empfänger die Software im Quelltext erhalten bzw. 
+den Quelltext erhalten können. Und Sie müssen ihnen diese Bedingungen zeigen, damit sie ihre 
+Rechte kennen.
+
+Software-Entwickler, die die GNU GPL nutzen, schützen Ihre Rechte in zwei Schritten: (1) Sie 
+machen ihr Urheberrecht (Copyright) auf die Software geltend, und (2) sie bieten Ihnen diese 
+Lizenz an, die Ihnen das Recht gibt, die Software zu vervielfältigen, zu verbreiten und/oder zu 
+verändern.
+
+Um die Entwickler und Autoren zu schützen, stellt die GPL darüberhinaus klar, daß für diese freie 
+Software keinerlei Garantie besteht. Um sowohl der Anwender als auch der Autoren Willen 
+erfordert die GPL, daß modifizierte Versionen der Software als solche gekennzeichnet werden, 
+damit Probleme mit der modifizierten Software nicht fälschlicherweise mit den Autoren der 
+Originalversion in Verbindung gebracht werden.
+
+Manche Geräte sind daraufhin entworfen worden, ihren Anwendern zu verweigern, modifizierte 
+Versionen der darauf laufenden Software zu installieren oder laufen zu lassen, wohingegen der 
+Hersteller diese Möglichkeit hat. Dies ist grundsätzlich unvereinbar mit dem Ziel, die Freiheit der 
+Anwender zu schützen, die Software zu modifizieren. Derartige gezielte mißbräuchliche 
+Verhaltensmuster finden auf dem Gebiet persönlicher Gebrauchsgegenstände statt – also genau 
+dort, wo sie am wenigsten akzeptabel sind. Aus diesem Grunde wurde diese Version der GPL 
+daraufhin entworfen, diese Praxis für diese Produkte zu verbieten. Sollten derartige Probleme 
+substantiell auf anderen Gebieten auftauchen, sind wir bereit, diese Regelung auf diese Gebiete 
+auszudehnen, soweit dies notwendig ist, um die Freiheit der Benutzer zu schützen.
+
+Schließlich und endlich ist jedes Computerprogramm permanent durch Software-Patente bedroht. 
+Staaten sollten es nicht zulassen, daß Patente die Entwicklung und Anwendung von Software für 
+allgemein einsetzbare Computer einschränken, aber in Staaten, wo dies geschieht, wollen wir die 
+spezielle Gefahr vermeiden, daß Patente dazu verwendet werden, ein freies Programm im 
+Endeffekt proprietär zu machen. Um dies zu verhindern, stellt die GPL sicher, daß Patente nicht 
+verwendet werden können, um das Programm nicht-frei zu machen.
+
+Es folgen die präzisen Bedingungen für das Kopieren, Verbreiten und Modifizieren.
+LIZENZBEDINGUNGEN
+0. Definitionen
+
+„Diese Lizenz“ bezieht sich auf die Version 3 der GNU General Public License.
+
+Mit „Urheberrecht“ sind auch urheberrechtähnliche Rechte gemeint, die auf andere Arten von 
+Werken Anwendung finden, beispielsweise auf Fotomasken in der Halbleitertechnologie.
+
+„Das Programm“ bezeichnet jedes urheberrechtlich schützbare Werk, das unter diese Lizenz 
+gestellt wurde. Jeder Lizenznehmer wird als „Sie“ angeredet. „Lizenznehmer“ und „Empfänger“ 
+können natürliche oder rechtliche Personen sein.
+
+Ein Werk zu „modifizieren“ bedeutet, aus einem Werk zu kopieren oder es ganz oder teilweise auf 
+eine Weise umzuarbeiten, die eine urheberrechtliche Erlaubnis erfordert und kein Eins-zu-eins-
+Kopieren darstellt. Das daraus hervorgehende Werk wird als „modifizierte Version“ des früheren 
+Werks oder als auf dem früheren Werk „basierendes“ Werk bezeichnet.
+
+Ein „betroffenes Werk“ bezeichnet entweder das unmodifizierte Programm oder ein auf dem 
+Programm basierendes Werk.
+
+Ein Werk zu „propagieren“ bezeichnet jedwede Handlung mit dem Werk, für die man wegen 
+Verletzung anwendbaren Urheberrechts direkt oder indirekt zur Verantwortung gezogen würde, 
+ausgenommen das Ausführen auf einem Computer oder das Modifizieren einer privaten Kopie. von 
+Modifikationen, die an niemanden weitergegeben werden. Unter das Propagieren eines Werks 
+fallen Kopieren, Weitergeben (mit oder ohne Modifikationen), öffentliches Zugänglichmachen und 
+in manchen Staaten noch weitere Tätigkeiten.
+
+Ein Werk zu „übertragen“ bezeichnet jede Art von Propagation, die es Dritten ermöglicht, das 
+Werk zu kopieren oder Kopien zu erhalten. Reine Interaktion mit einem Benutzer über ein 
+Computer-Netzwerk ohne Übergabe einer Kopie ist keine Übertragung.
+
+Eine interaktive Benutzerschnittstelle zeigt „angemessene rechtliche Hinweise“ in dem Umfang, 
+daß sie eine zweckdienliches und deutlich sichtbare Funktion bereitstellt, die (1) einen 
+angemessenen Copyright-Vermerk zeigt und (2) dem Benutzer mitteilt, daß keine Garantie für das 
+Werk besteht (ausgenommen in dem Umfang, in dem Garantie gewährt wird), daß Lizenznehmer 
+das Werk gemäß dieser Lizenz übertragen dürfen und wie man ein Exemplar dieser Lizenz zu 
+Gesicht bekommen kann. Wenn die Benutzerschnittstelle eine Liste von Benutzerkommandos oder 
+Optionen anzeigt, zum Beispiel ein Menü, dann erfüllt ein deutlich sichtbarer Punkt in dieser Liste 
+dieses Kriterium.
+1. Quelltext
+
+Der „Quelltext“ eines Werkes bezeichnet diejenige Form des Werkes, die für Bearbeitungen 
+vorzugsweise verwendet wird. „Objekt-Code“ bezeichnet jede Nicht-Quelltext-Form eines Werks.
+
+Eine „Standardschnittstelle“ bezeichnet eine Schnittstelle, die entweder ein offizieller Standard 
+eines anerkannten Standardisierungsgremiums ist oder – im Falle von Schnittstellen, die für eine 
+spezielle Programmiersprache spezifiziert wurden – eine Schnittstelle, die unter Entwicklern, die in 
+dieser Programmiersprache arbeiten, weithin gebräuchlich ist.
+
+Die „Systembibliotheken“ eines ausführbaren Werks enthalten alles, ausgenommen das Werk als 
+Ganzes, was (a) normalerweise zum Lieferumfang einer Hauptkomponente gehört, aber selbst nicht 
+die Hauptkomponente ist, und (b) ausschließlich dazu dient, das Werk zusammen mit der 
+Hauptkomponente benutzen zu können oder eine Standardschnittstelle zu implementieren, für die 
+eine Implementation als Quelltext öffentlich erhältlich ist. Eine „Hauptkomponente“ bezeichnet in 
+diesem Zusammenhang eine größere wesentliche Komponente (Betriebssystemkern, Fenstersystem 
+usw.) des spezifischen Betriebssystems (soweit vorhanden), auf dem das ausführbare Werk läuft, 
+oder des Compilers, der zur Erzeugung des Objekt-Codes eingesetzt wurde, oder des für die 
+Ausführung verwendeten Objekt-Code-Interpreters.
+
+Der „korrespondierende Quelltext“ eines Werks in Form von Objekt-Code bezeichnet den 
+vollständigen Quelltext, der benötigt wird, um das Werk zu erzeugen, es zu installieren, um (im 
+Falle eines ausführbaren Werks) den Objekt-Code auszuführen und um das Werk zu modifizieren, 
+einschließlich der Skripte zur Steuerung dieser Aktivitäten. Er schließt jedoch nicht die 
+Systembibliotheken, allgemein einsetzbare Werkzeuge oder allgemein erhältliche freie 
+Computerprogramme mit ein, die in unmodifizierter Form verwendet werden, um die o.a. 
+Tätigkeiten durchzuführen, die aber nicht Teil des Werks sind. Zum Beispiel enthält der 
+korrespondierende Quelltext die zum Programmquelltext gehörenden 
+Schnittstellendefinitionsdateien sowie die Quelltexte von dynamisch eingebundenen Bibliotheken 
+und Unterprogrammen, auf die das Werk konstruktionsbedingt angewiesen ist, beispielsweise 
+durch komplexe Datenkommunikation oder Ablaufsteuerung zwischen diesen Unterprogrammen 
+und anderen Teilen des Werks.
+
+Der korrespondierende Quelltext braucht nichts zu enthalten, das der Anwender aus anderen Teilen 
+des korrespondierenden Quelltextes automatisch regenerieren kann.
+
+Der korrespondierende Quelltext eines Werks in Quelltextform ist das Werk selbst.
+2. Grundlegende Genehmigungen
+
+Alle unter dieser Lizenz gewährten Rechte werden gewährt auf Grundlage des Urheberrechts an 
+dem Programm, und sie sind unwiderruflich, solange die festgelegten Bedingungen erfüllt sind. 
+Diese Lizenz erklärt ausdrücklich Ihr uneingeschränktes Recht zur Ausführung des unmodifizierten 
+Programms. Die beim Ausführen eines betroffenen Werks erzeugten Ausgabedaten fallen unter 
+diese Lizenz nur dann, wenn sie, in Anbetracht ihres Inhalts, ein betroffenes Werk darstellen. Diese 
+Lizenz erkennt Ihr im Urheberrecht vorgesehenes Recht auf angemessene Benutzung – oder seine 
+Entsprechung – an.
+
+Sie dürfen betroffene Werke, die Sie nicht übertragen, uneingeschränkt erzeugen, ausführen und 
+propagieren, solange Ihre Lizenz ansonsten in Kraft bleibt. Sie dürfen betroffene Werke an Dritte 
+übertragen für den einzigen Zweck, Modifikationen exklusiv für Sie durchzuführen oder 
+Einrichtungen für Sie bereitzustellen, um diese Werke auszuführen, vorausgesetzt, Sie erfüllen alle 
+Bedingungen dieser Lizenz für das Übertragen von Material, dessen Urheberrecht nicht bei Ihnen 
+liegt. Diejenigen, die auf diese Weise betroffene Werke für Sie anfertigen oder ausführen, müssen 
+dies ausschließlich in Ihrem Namen tun, unter Ihrer Anleitung und Kontrolle und unter 
+Bedingungen, die ihnen verbieten, außerhalb ihrer Beziehung zu Ihnen weitere Kopien Ihres 
+urheberrechtlich geschützten Materials anzufertigen.
+
+Übertragung ist in jedem Fall ausschließlich unter den unten aufgeführten Bedingungen gestattet. 
+Unterlizensierung ist nicht gestattet, ist aber wegen §10 unnötig.
+3. Schutz von Anwenderrechten vor Umgehungsverbotgesetzen
+
+Kein betroffenes Werk darf als Teil eines wirksamen technischen Mechanismus' unter jedwedem 
+anwendbarem Recht betrachtet werden, das die Auflagen von Artikel 11 des am 20. Dezember 
+1996 verabschiedeten WIPO-Urheberrechtsvertrags oder unter vergleichbaren Gesetzen, die die 
+Umgehung derartiger Mechanismen verbietet oder einschränkt.
+
+Wenn Sie ein betroffenes Werk übertragen, verzichten Sie auf jedes Recht, die Umgehung 
+technischer Mechanismen zu verbieten, insoweit diese Umgehung durch die Ausübung der von 
+dieser Lizenz gewährten Rechte in bezug auf das betroffene Werk herbeigeführt wird, und Sie 
+weisen jede Absicht von sich, die Benutzung oder Modifikation des Werks zu beschränken, um 
+Ihre Rechtsansprüche oder Rechtsansprüche Dritter zum Verbot der Umgehung technischer 
+Mechanismen gegen die Anwender des Werks durchzusetzen.
+4. Unveränderte Kopien
+
+Sie dürfen auf beliebigen Medien unveränderte Kopien des Quelltextes des Programms, wie sie ihn 
+erhalten, übertragen, sofern Sie auf deutliche und angemessene Weise auf jeder Kopie einen 
+angemessenen Urheberrechts-Vermerk veröffentlichen, alle Hinweise intakt lassen, daß diese 
+Lizenz und sämtliche gemäß §7 hinzugefügten Einschränkungen auf den Quelltext anwendbar sind, 
+alle Hinweise auf das Nichtvorhandensein einer Garantie intakt lassen und allen Empfängern 
+gemeinsam mit dem Programm ein Exemplar dieser Lizenz zukommen lassen.
+
+Sie dürfen für jede übertragene Kopie ein Entgelt – oder auch kein Entgelt – verlangen, und Sie 
+dürfen Kundendienst- oder Garantieleistungen gegen Entgelt anbieten.
+5. Übertragung modifizierter Quelltextversionen
+
+Sie dürfen ein auf dem Programm basierendes Werk oder die nötigen Modifikationen, um es aus 
+dem Programm zu generieren, kopieren und übertragen in Form von Quelltext unter den 
+Bestimmungen von §4, vorausgesetzt, daß Sie zusätzlich alle im folgenden genannten Bedingungen 
+erfüllen:
+
+a) 	Das veränderte Werk muß auffällige Vermerke tragen, die besagen, daß Sie es modifiziert 
+haben, und die ein darauf bezogenes Datum angeben.
+b) 	Das veränderte Werk muß auffällige Vermerke tragen, die besagen, daß es unter dieser 
+Lizenz einschließlich der gemäß §7 hinzugefügten Bedingungen herausgegeben wird. Diese 
+Anforderung wandelt die Anforderung aus §4 ab, „alle Hinweise intakt zu lassen“.
+c) 	Sie müssen das Gesamtwerk als Ganzes gemäß dieser Lizenz an jeden lizensieren, der in 
+den Besitz einer Kopie gelangt. Diese Lizenz wird daher – ggf. einschließlich zusätzlicher 
+Bedingungen gemäß §7 – für das Werk als Ganzes und alle seine Teile gelten, unabhängig davon, 
+wie diese zusammengepackt werden. Diese Lizenz erteilt keine Erlaubnis, das Werk in irgendeiner 
+anderen Weise zu lizensieren, setzt aber eine derartige Erlaubnis nicht außer Kraft, wenn Sie sie 
+diese gesondert erhalten haben.
+d) 	Wenn das Werk über interaktive Benutzerschnittstellen verfügt, müssen diese jeweils 
+angemessene rechtliche Hinweise anzeigen. Wenn allerdings das Programm interaktive 
+Benutzerschnittstellen hat, die keine angemessenen rechtlichen Hinweise anzeigen, braucht Ihr 
+Werk nicht dafür zu sorgen, daß sie dies tun.
+
+Die Zusammenstellung eines betroffenen Werks mit anderen gesonderten und unabhängigen 
+Werken, die nicht ihrer Natur nach Erweiterungen des betroffenen Werks sind und die nicht mit 
+ihm in einer Weise kombiniert sind, um ein größeres Programm zu bilden, in oder auf einem 
+Speicher- oder Verbreitungsmedium wird als „Aggregat“ bezeichnet, wenn die Zusammenstellung 
+und das sich für sie ergebende Urheberrecht nicht dazu verwendet werden, den Zugriff oder die 
+Rechte der Benutzer der Zusammenstellung weiter einzuschränken, als dies die einzelnen Werke 
+erlauben. Die Aufnahme des betroffenen Werks in ein Aggregat sorgt nicht dafür, daß diese Lizenz 
+auf die anderen Teile des Aggregats wirke.
+6. Übertragung in Nicht-Quelltext-Form
+
+Sie dürfen ein betroffenes Werk in Form von Objekt-Code unter den Bedingungen der Paragraphen 
+4 und 5 kopieren und übertragen – vorausgesetzt, daß Sie außerdem den maschinenlesbaren 
+korrespondierenden Quelltext unter den Bedingungen dieser Lizenz übertragen auf eine der 
+folgenden Weisen:
+
+a) 	Sie übertragen den Objekt-Code in einem physikalischen Produkt (einschließlich ein 
+physikalisches Speichermedium) gemeinsam mit dem korrespondierenden Quelltext, der sich 
+unveränderlich auf einem haltbaren physikalischen Medium befindet, das üblicherweise für den 
+Austausch von Software verwendet wird.
+b) 	Sie übertragen den Objekt-Code in einem physikalischen Produkt (einschließlich ein 
+physikalisches Speichermedium) gemeinsam mit einem schriftlichen Angebot, das mindestens drei 
+Jahre lang gültig sein muß und so lange, wie Sie Ersatzteile und Kundendienst für dieses 
+Produktmodell anbieten, jedem, der im Besitz des Objekt-Codes ist, entweder (1) eine Kopie des 
+korrespondierenden Quelltextes der gesamten Software, die in dem Produkt enthalten und von 
+dieser Lizenz betroffen ist, zur Verfügung zu stellen – auf einem haltbaren physikalischen Medium, 
+das üblicherweise für den Austausch von Software verwendet wird, und zu nicht höheren Kosten 
+als denen, die begründbar durch den physikalischen Vorgang der Übertragung des Quelltextes 
+anfallen, oder (2) kostenlosen Zugriff, um den korrespondierenden Quelltext von einem Netzwerk-
+Server zu kopieren.
+c) 	Sie übertragen Kopien des Objekt-Codes gemeinsam mit einer Kopie des schriftlichen 
+Angebots, den korrespondierenden Quelltext zur Verfügung zu stellen. Diese Alternative ist nur für 
+gelegentliche, nicht-kommerzielle Übertragung zulässig und nur, wenn Sie den Objekt-Code als 
+mit einem entsprechenden Angebot gemäß Absatz 6b erhalten haben.
+d) 	
+
+Sie übertragen den Objekt-Code dadurch, daß Sie Zugriff auf eine dafür vorgesehene Stelle 
+gewähren, und bieten gleichwertigen Zugriff auf den korrespondierenden Quelltext auf gleichem 
+Weg auf dieselbe Stelle und ohne zusätzliche Kosten. Sie müssen nicht von den Empfängern 
+verlangen, den korrespondierenden Quelltext gemeinsam mit dem Objekt-Code zu kopieren. Wenn 
+es sich bei der für das Kopieren vorgesehenen Stelle um einen Netzwerk-Server handelt, darf sich 
+der korrespondierende Quelltext auf einem anderen Server befinden (von Ihnen oder von einem 
+Dritten betrieben), der gleichwertige Kopiermöglichkeiten unterstützt – vorausgesetzt Sie legen 
+dem Objekt-Code klare Anleitungen bei, die besagen, wo der korrespondierende Quelltext zu 
+finden ist. Unabhängig davon, welcher Netzwerk-Server den korrespondierenden Quelltext 
+beherbergt, bleiben Sie verpflichtet, sicherzustellen, daß dieser lange genug bereitgestellt wird, um 
+diesen Bedingungen zu genügen.
+e) 	Sie übertragen den Objekt-Code unter Verwendung von Peer-To-Peer-Übertragung – 
+vorausgesetzt, Sie informieren andere Teilnehmer darüber, wo der Objekt-Code und der 
+korrespondierende Quelltext des Werks unter den Bedingungen von Absatz 6d öffentlich und 
+kostenfrei angeboten werden.
+
+Ein abtrennbarer Anteil des Objekt-Codes, dessen Quelltext von dem korrespondierenden Quelltext 
+als Systembibliothek ausgeschlossen ist, braucht bei der Übertragung des Werks als Objekt-Code 
+nicht miteinbezogen zu werden.
+
+Ein „Benutzerprodukt“ ist entweder (1) ein „Endbenutzerprodukt“, womit ein materieller 
+persönlicher Besitz gemeint ist, der normalerweise für den persönlichen oder familiären Gebrauch 
+oder im Haushalt eingesetzt wird, oder (2) alles, was für den Einbau in eine Wohnung hin 
+entworfen oder dafür verkauft wird. Bei der Entscheidung, ob ein Produkt ein Endbenutzerprodukt 
+ist, sollen Zweifelsfälle als erfaßt gelten. Wenn ein spezieller Anwender ein spezielles Produkt 
+erhält, bezeichnet „normalerweise einsetzen“ eine typische oder weitverbreitete Anwendung dieser 
+Produktklasse, unabhängig vom Status des speziellen Anwenders oder der Art und Weise, wie der 
+spezielle Anwender des spezielle Produkt tatsächlich einsetzt oder wie von ihm erwartet wird, daß 
+er es einsetzt. Ein Produkt gilt als Endbenutzerprodukt unabhängig davon, ob es substantiellen 
+kommerziellen, industriellen oder nicht-endbenutzerspezifischen Nutzen hat, es sei denn, dieser 
+Nutzen stellt das einzige signifikante Anwendungsgebiet des Produkts dar.
+
+Mit „Installationsinformationen“ für ein Benutzerprodukt sind jedwede Methoden, Prozeduren, 
+Berechtigungsschlüssel oder andere informationen gemeint, die notwendig sind, um modifizierte 
+Versionen eines betroffenen Werks, die aus einer modifizierten Version seines korrespondierenden 
+Quelltextes hervorgegangen sind, auf dem Produkt zu installieren und auszuführen. Die 
+Informationen müssen ausreichen, um sicherzustellen, daß das Weiterfunktionieren des 
+modifizierten Objekt-Codes in keinem Fall verhindert oder gestört wird aus dem einzigen Grunde, 
+weil Modifikationen vorgenommen worden sind.
+
+Wenn Sie Objekt-Code gemäß diesem Paragraphen innerhalb oder zusammen mit oder speziell für 
+den Gebrauch innerhalb eines Benutzerprodukts übertragen und die Übertragung als Teil einer 
+Transaktion stattfindet, in der das Recht auf den Besitz und die Benutzung des Benutzerprodukts 
+dauerhaft auf den Empfänger übergeht (unabhängig davon, wie diese Transaktion charakterisiert 
+ist), müssen dem gemäß diesem Paragraphen mitübertragenen korrespondierenden Quelltext die 
+Installationsinformationen beiliegen. Diese Anforderung gilt jedoch nicht, wenn weder Sie noch 
+irgendeine Drittpartei die Möglichkeit behält, modifizierten Objekt-Code auf dem Benutzerprodukt 
+zu installieren (zum Beispiel, wenn das Werk in einem ROM installiert wurde).
+
+Die Anforderung, Installationsinformationen bereitzustellen, schließt keine Anforderung mit ein, 
+weiterhin Kundendienst, Garantie oder Updates für ein Werk bereitzustellen, das vom Empfänger 
+modifiziert oder installiert worden ist, oder für das Benutzerprodukt, in dem das Werk modifiziert 
+oder installiert worden ist. Der Zugriff auf ein Computer-Netzwerk darf verweigert werden, wenn 
+die Modifikation selbst die Funktion des Netzwerks grundlegend nachteilig beeinflußt oder wenn 
+sie die Regeln und Protokolle für die Kommunikation über das Netzwerk verletzt.
+
+Der korrespondierende Quelltext und die Installationsinformationen, die in Übereinstimmung mit 
+diesem Paragraphen übertragen werden, müssen in einem öffentlich dokumentierten Format 
+vorliegen (für das eine Implementation in Form von Quelltext öffentlich zugänglich ist), und sie 
+dürfen keine speziellen Passwörter oder Schlüssel für das Auspacken, Lesen oder Kopieren 
+erfordern.
+7. Zusätzliche Bedingungen
+
+„Zusätzliche Genehmigungen“ sind Bedingungen, die die Bedingungen dieser Lizenz ergänzen, 
+indem sie Ausnahmen von einer oder mehreren Auflagen zulassen. Zusätzliche Genehmigungen 
+zur Anwendung auf das gesamte Programm sollen so betrachtet werden, als wären sie in dieser 
+Lizenz enthalten, soweit dies unter anwendbarem Recht zulässig ist. Wenn zusätzliche 
+Genehmigungen nur für einen Teil des Programms gelten, darf dieser Teil separat unter diesen 
+Genehmigungen verwendet werden; das gesamte Programm jedoch unterliegt weiterhin dieser 
+Lizenz ohne Beachtung der zusätzlichen Genehmigungen.
+
+Ungeachtet jeglicher anderer Regelungen dieser Lizenz dürfen Sie für Material, das Sie einem 
+betroffenen Werk hinzufügen (sofern Sie durch die Urheberrechtsinhaber dieses Materials 
+autorisiert sind), die Bedingungen dieser Lizenz um folgendes ergänzen:
+
+a) 	Gewährleistungsausschluß oder Haftungsbegrenzung abweichend von §§15 und 16 dieser 
+Lizenz oder
+b) 	die Anforderung, spezifizierte sinnvolle rechtliche Hinweise oder Autorenschaftshinweise 
+in diesem Material oder in den angemessenen rechtlichen Hinweisen, die von den sie enthaltenen 
+Werken angezeigt werden, zu erhalten, oder
+c) 	das Verbot, die Herkunft des Materials falsch darzustellen oder die Anforderung, daß 
+modifizierte Versionen des Materials auf angemessens Weise als vom Original verschieden 
+markiert werden, oder
+d) 	Begrenzung der Verwendung der Namen von Lizenzgebern oder Autoren des Materials für 
+Werbezwecke oder
+e) 	das Zurückweisen der Einräumung von Rechten gemäß dem Markenrecht zur Benutzung 
+gewisser Produktnamen, Produkt- oder Service-Marken oder
+f) 	die Erfordernis der Freistellung des Lizenznehmers und der Autoren des Materials durch 
+jeden, der die Software (oder modifizierte Versionen davon) überträgt, mit vertraglichen Prämissen 
+der Verantwortung gegenüber dem Empfänger für jede Verantwortung, die diese vertraglichen 
+Prämissen diesen Lizenzgebern und Autoren direkt auferlegen.
+
+Alle anderen hinzugefügten einschränkenden Bedingungen werden als „zusätzliche 
+Einschränkungen“ im Sinne von §10 betrachtet. Wenn das Programm, wie Sie es erhalten haben, 
+oder ein Teil davon dieser Lizenz untersteht zuzüglich einer weiteren Bedingung, die eine 
+zusätzliche Einschränkung darstellt, dürfen Sie diese Bedingung entfernen. Wenn ein 
+Lizenzdokument eine zusätzliche Einschränkung enthält, aber die Relizensierung unter dieser 
+Lizenz erlaubt, dürfen Sie dem betroffenen Werk Material hinzufügen, das den Bedingungen jenes 
+Lizenzdokuments unterliegt, unter der Voraussetzung, daß die zusätzlichen Einschränkungen bei 
+einer derartigen Relizensierung oder Übertragung verfallen.
+
+Wenn Sie einem betroffenen Werk in Übereinstimmung mit diesem Paragraphen Bedingungen 
+hinzufügen, müssen Sie in den betroffenen Quelltextdateien eine Aufstellung der zusätzlichen 
+Bedingungen plazieren, die auf diese Quelltextdatei Anwendung finden, oder einen Hinweis darauf, 
+wo die Zusätzlichen Bedingungen zu finden sind.
+
+Zusätzliche Bedingungen, seien es Genehmigungen oder Einschränkungen, dürfen in Form einer 
+separaten schriftlichen Lizenz oder in Form von Ausnahmen festgelegt werden; die o.a. 
+Anforderungen gelten in jedem Fall.
+8. Kündigung
+
+Sie dürfen das Programm nicht verbreiten oder modifizieren, sofern es nicht durch diese Lizenz 
+ausdrücklich gestattet ist. Jeder anderweitige Versuch der Verbreitung oder Modifizierung ist 
+nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz (einschließlich aller 
+Patentlizenzen gemäß §11 Abs. 3).
+
+Wenn Sie jedoch alle Verletzungen dieser Lizenz beenden, wird Ihre Lizenz durch einen speziellen 
+Urheberrechtsinhaber wiederhergestellt, und zwar (a) vorübergehend, solange nicht bzw. bis der 
+Rechteinhaber Ihre Lizenz ausdrücklich und endgültig kündigt, und (b) dauerhaft, sofern es der 
+Rechteinhaber versäumt, Sie auf sinnvolle Weise auf die Lizenzverletzung innerhalb von 60 Tagen 
+ab deren Beendigung hinzuweisen.
+
+Darüberhinaus wird Ihre Lizenz durch einen speziellen Urheberrechtsinhaber permanent 
+wiederhergestellt, wenn Sie der Rechteinhaber auf sinnvolle Weise auf die Verletzung hinweist, 
+wenn außerdem dies das erste Mal ist, daß Sie auf die Verletzung dieser Lizenz (für jedes Werk) 
+des Rechteinhabers hingewiesen werden, und wenn Sie die Verletzung innerhalb von 30 Tagen ab 
+dem Eingang des Hinweises einstellen.
+
+Die Beendigung Ihrer Rechte unter dieser Lizenz beendet nicht die Lizenzen Dritter, die von Ihnen 
+Kopien oder Rechte unter dieser Lizenz erhalten haben. Wenn Ihre Rechte beendet und nicht 
+dauerhaft wiederhergestellt worden sind, sind Sie nicht berechtigt, neue Lizenzen für dasselbe 
+Material gemäß §10 zu erhalten.
+9. Annahme der Lizenz keine Voraussetzung für den Besitz von Kopien
+
+Um eine Kopie des Programms auszuführen, ist es nicht erforderlich, daß Sie diese Lizenz 
+annehmen. Die nebenbei stattfindende Verbreitung eines betroffenen Werks, die sich ausschließlich 
+als Konsequenz der Teilnahme an einer Peer-To-Peer-Datenübertragung ergibt, um eine Kopie 
+entgegennehmen zu können, erfordert ebenfalls keine Annahme dieser Lizenz. Jedoch gibt Ihnen 
+nichts außer dieser Lizenz die Erlaubnis, das Programm oder jedes betroffene Werk zu verbreiten 
+oder zu verändern. Diese Handlungen verstoßen gegen das Urheberrecht, wenn Sie diese Lizenz 
+nicht anerkennen. Indem Sie daher ein betroffenes Werk verändern oder propagieren, erklären Sie 
+Ihr Einverständnis mit dieser Lizenz, die Ihnen diese Tätigkeiten erlaubt.
+10. Automatische Lizensierung nachgeordneter Anwender
+
+Jedesmal, wenn Sie ein betroffenes Werk übertragen, erhält der Empfänger automatisch vom 
+ursprünglichen Lizenzgeber die Lizenz, das Werk auszuführen, zu verändern und zu propagieren – 
+in Übereinstimmung mit dieser Lizenz. Sie sind nicht dafür verantwortlich, die Einhaltung dieser 
+Lizenz durch Dritte durchzusetzen.
+
+Eine „Organisations-Transaktion“ ist entweder eine Transaktion, bei der die Kontrolle über eine 
+Organisation oder das im wesentlichen gesamte Kapital einer solchen, übertragen wird, oder sie ist 
+die Aufteilung einer Organisation in mehrere oder die Fusion mehrerer Organisationen zu einer. 
+Wenn die Propagation eines betroffenen Werks durch eine Organisations-Transaktion erfolgt, 
+erhält jeder an der Transaktion Beteiligte, der eine Kopie des Werks erhält, zugleich jedwede 
+Lizenz an dem Werk, die der Interessenvorgänger des Beteiligten hatte, sowie das Recht auf den 
+Besitz des korrespondierenden Quelltextes des Werks vom Interessenvorgänger, wenn dieser ihn 
+hat oder mit vertretbarem Aufwand beschaffen kann.
+
+Sie dürfen keine zusätzlichen Einschränkungen bzgl. der Ausübung der unter dieser Lizenz 
+gewährten oder zugesicherten Rechte vornehmen. Beispielsweise dürfen Sie keine Lizenzgebühr 
+oder sonstige Gebühr für die Ausübung der unter dieser Lizenz gewährten Rechte verlangen, und 
+Sie dürfen keine Rechtsstreitigkeit beginnen (eingeschlossen Kreuz- oder Gegenansprüche in einem 
+Gerichtsverfahren), in der Sie unterstellen, daß irgendein Patentanspruch durch Erzeugung, 
+Anwendung, Verkauf, Verkaufsangebot oder Import des Programms oder irgendeines Teils davon 
+verletzt wurde.
+11. Patente
+
+Ein „Kontributor“ ist ein Urheberrechtsinhaber, der die Benutzung des Programms oder eines auf 
+dem Programm basierenden Werks unter dieser Lizenz erlaubt. Das auf diese Weise lizensierte 
+Werk bezeichnen wir als die „Kontributor-Version“ des Kontributors.
+
+Die „wesentlichen Patentansprüche“ eines Kontributors sind all diejenigen Patentansprüche, die der 
+Kontributor besitzt oder kontrolliert, ob bereits erworben oder erst in Zukunft zu erwerben, die 
+durch irgendeine Weise des gemäß dieser Lizenz erlaubten Erzeugens, Ausführens oder Verkaufens 
+seiner Kontributor-Version verletzt würden. Dies schließt keine Patentansprüche ein, die erst als 
+Konsequenz weiterer Modifizierung seiner Kontributor-Version entstünden. Für den Zweck dieser 
+Definition schließt "Kontrolle" das Recht mit ein, Unterlizenzen für ein Patent zu erteilen auf eine 
+Weise, die mit den Erfordernissen dieser Lizenz vereinbar ist.
+
+Jeder Kontributor gewährt Ihnen eine nicht-exklusive, weltweite und gebührenfreie Patentlizenz 
+gemäß den wesentlichen Patentansprüchen des Kontributors, den Inhalt seiner Kontributor-Version 
+zu erzeugen, zu verkaufen, zum Verkauf anzubieten, zu importieren und außerdem auszuführen, zu 
+modifizieren und zu propagieren.
+
+In den folgenden drei Absätzen ist eine „Patentlizenz“ jedwede ausdrückliche Vereinbarung oder 
+Verpflichtung, wie auch immer benannt, ein Patent nicht geltend zu machen (beispielsweise eine 
+ausdrückliche Erlaubnis, ein Patent zu nutzen oder eine Zusicherung, bei Patentverletzung nicht zu 
+klagen). Jemandem eine solche Patentlizenz zu „erteilen“ bedeutet, eine solche Vereinbarung oder 
+Verpflichtung zu beschließen, ein Patent nicht gegen ihn durchzusetzen.
+
+Wenn Sie ein betroffenes Werk übertragen, das wissentlich auf eine Patentlizenz angewiesen ist, 
+und wenn der korrespondierende Quelltext nicht für jeden zum Kopieren zur Verfügung gestellt 
+wird – kostenlos, unter den Bedingungen dieser Lizenz und über einen öffentlich zugänglichen 
+Netzwerk-Server oder andere leicht zugängliche Mittel –, dann müssen Sie entweder (1) dafür 
+sorgen, daß der korrespondierende Quelltext auf diese Weise verfügbar gemacht wird oder (2) 
+dafür sorgen, daß Ihnen selbst die Vorteile der Patentlizenz für dieses spezielle Werk entzogen 
+werden oder (3) in einer mit den Erfordernissen dieser Lizenz vereinbaren Weise bewirken, daß die 
+Patentlizenz auf nachgeordnete Empfänger ausgedehnt wird. „Wissentlich angewiesen sein“ 
+bedeutet, daß Sie tatsächliches Wissen darüber haben, daß – außer wegen der Patentlizenz – Ihre 
+Übertragung des betroffenen Werks in einen Staat oder die Benutzung des betroffenen Werks durch 
+Ihren Empfänger in einem Staat, eins oder mehrere identifizierbare Patente in diesem Staat 
+verletzen würden, deren Gültigkeit Ihnen glaubhaft erscheint.
+
+Wenn Sie, als Folge von oder in Verbindung mit einer einzelnen Transaktion oder Vereinbarung, 
+ein betroffenes Werk übertragen oder durch Vermittlung einer Übertragung propagieren, und Sie 
+gewähren einigen Empfängern eine Patentlizenz, die ihnen das Benutzen, Propagieren, 
+Modifizieren und Übertragen einer speziellen Kopie des betroffenen Werks gestatten, dann wird 
+die von Ihnen gewährte Patentlizenz automatisch auf alle Empfänger des betroffenen Werks und 
+darauf basierender Werke ausgedehnt.
+
+Eine Patentlizenz ist „diskriminierend“, wenn sie in ihrem Gültigkeitsbereich die speziell unter 
+dieser Lizenz gewährten Rechte nicht einschließt, wenn sie die Ausübung dieser Rechte verbietet 
+oder wenn sie die Nichtausübung einer oder mehrerer dieser Rechte zur Bedingung hat. Sie dürfen 
+ein betroffenes Werk nicht übertragen, wenn Sie Partner in einem Vertrag mit einer Drittpartei sind, 
+die auf dem Gebiet der Verbreitung von Software geschäftlich tätig ist, gemäß dem Sie dieser 
+Drittpartei Zahlungen leisten, die auf dem Maß Ihrer Aktivität des Übertragens des Werks basieren, 
+und gemäß dem die Drittpartei eine diskriminierende Patentlizenz all denjenigen gewährt, die das 
+Werk von Ihnen erhielten, (a) in Verbindung mit von Ihnen übertragenen Kopien des betroffenen 
+Werks (oder Kopien dieser Kopien) oder (b) hauptsächlich für und in Verbindung mit spezifischen 
+Produkten oder Zusammenstellungen, die das betroffene Werk enthalten, es sei denn, Sie sind in 
+diesen Vertrag vor dem 28. März 2007 eingetreten oder die Patentlizenz wurde vor diesem Datum 
+erteilt.
+
+Nichts in dieser Lizenz soll in einer Weise ausgelegt werden, die irgendeine implizite Lizenz oder 
+sonstige Abwehr gegen Rechtsverletzung ausschließt oder begrenzt, die Ihnen ansonsten gemäß 
+anwendbarem Patentrecht zustünde.
+12. Keine Preisgabe der Freiheit Dritter
+
+Sollten Ihnen (durch Gerichtsbeschluß, Vergleich oder anderweitig) Bedingungen auferlegt 
+werden, die den Bedingungen dieser Lizenz widersprechen, so befreien Sie diese Umstände nicht 
+von den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht möglich ist, ein betroffenes Werk unter 
+gleichzeitiger Beachtung der Bedingungen in dieser Lizenz und Ihrer anderweitigen 
+Verpflichtungen zu übertragen, dann dürfen Sie als Folge das Programm überhaupt nicht 
+übertragen. Wenn Sie zum Beispiel Bedingungen akzeptieren, die Sie dazu verpflichten, von denen, 
+denen Sie das Programm übertragen haben, eine Gebühr für die weitere Übertragung einzufordern, 
+dann besteht der einzige Weg, sowohl jene Bedingungen als auch diese Lizenz zu befolgen darin, 
+ganz auf die Übertragung des Programms zu verzichten.
+13. Nutzung zusammen mit der GNU Affero General Public License
+
+Ungeachtet anderer Regelungen dieser Lizenz, ist es Ihnen gestattet, ein betroffenes Werk mit 
+einem Werk zu einem einzelnen, kombinierten Werk zu verbinden (linken) oder zu kombinieren, 
+das unter Version 3 der GNU Affero General Public License steht, und das Ergebnis zu übertragen. 
+Die Bedingungen dieser Lizenz bleiben weiterhin auf denjenigen Teil anwendbar, der das 
+betroffene Werk darstellt, aber die speziellen Anforderungen der GNU Affero General Public 
+License, §13, die sich auf Interaktion über ein Computer-Netzwerk beziehen, werden auf die 
+Kombination als solche anwendbar.
+14. Überarbeitungen dieser Lizenz
+
+Die Free Software Foundation kann von Zeit zu Zeit überarbeitete und/oder neue Versionen der 
+General Public License veröffentlichen. Solche neuen Versionen werden vom Grundprinzip her der 
+gegenwärtigen entsprechen, können aber im Detail abweichen, um neuen Problemen und 
+Anforderungen gerecht zu werden.
+
+Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in einem Programm 
+angegeben wird, daß es dieser Lizenz in einer bestimmten Versionsnummer „oder jeder späteren 
+Version“ (“or any later version”) unterliegt, so haben Sie die Wahl, entweder den Bestimmungen 
+der genannten Version zu folgen oder denen jeder beliebigen späteren Version, die von der Free 
+Software Foundation veröffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, 
+können Sie eine beliebige Version wählen, die je von der Free Software Foundation veröffentlicht 
+wurde.
+15. Gewährleistungsausschluß
+
+Es besteht keinerlei Gewährleistung für das Programm, soweit dies gesetzlich zulässig ist. Sofern 
+nicht anderweitig schriftlich bestätigt, stellen die Urheberrechtsinhaber und/oder Dritte das 
+Programm so zur Verfügung, „wie es ist“, ohne irgendeine Gewährleistung, weder ausdrücklich 
+noch implizit, einschließlich – aber nicht begrenzt auf – die implizite Gewährleistung der 
+Marktreife oder der Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich 
+Qualität und Leistungsfähigkeit des Programms liegt bei Ihnen. Sollte sich das Programm als 
+fehlerhaft herausstellen, liegen die Kosten für notwendigen Service, Reparatur oder Korrektur bei 
+Ihnen.
+16. Haftungsbegrenzung
+
+In keinem Fall, außer wenn durch geltendes Recht gefordert oder schriftlich zugesichert, ist 
+irgendein Urheberrechtsinhaber oder irgendein Dritter, der das Programm wie oben erlaubt 
+modifiziert oder übertragen hat, Ihnen gegenüber für irgendwelche Schäden haftbar, einschließlich 
+jeglicher allgemeiner oder spezieller Schäden, Schäden durch Seiteneffekte (Nebenwirkungen) oder 
+Folgeschäden, die aus der Benutzung des Programms oder der Unbenutzbarkeit des Programms 
+folgen (einschließlich – aber nicht beschränkt auf – Datenverluste, fehlerhafte Verarbeitung von 
+Daten, Verluste, die von Ihnen oder anderen getragen werden müssen, oder dem Unvermögen des 
+Programms, mit irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein 
+Urheberrechtsinhaber oder Dritter über die Möglichkeit solcher Schäden unterrichtet worden war.
+17. Interpretation von §§ 15 und 16
+
+Sollten der o.a. Gewährleistungsausschluß und die o.a. Haftungsbegrenzung aufgrund ihrer 
+Bedingungen gemäß lokalem Recht unwirksam sein, sollen Bewertungsgerichte dasjenige lokale 
+Recht anwenden, das einer absoluten Aufhebung jeglicher zivilen Haftung in Zusammenhang mit 
+dem Programm am nächsten kommt, es sei denn, dem Programm lag eine entgeltliche 
+Garantieerklärung oder Haftungsübernahme bei.
+ENDE DER LIZENZBEDINGUNGEN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/docu/COPYING__GNU_GPLv3_english.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
Binary file code_part1/OSTC_code_asm_part1/docu/README_howtocompile.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/eeprom_rs232.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,237 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; internal EEPROM and RS232 UART interface
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 02/01/06
+; last updated: 090109
+; known bugs:
+; ToDo: 
+
+write_int_eeprom	macro	eeprom_address
+	movlw	eeprom_address
+	call	write_int_eeprom_1
+	endm
+
+write_int_eeprom_1:
+	movwf	EEADR
+	bra		write_eeprom			; writes and "returns" after write
+
+read_int_eeprom	macro	eeprom_address
+	movlw	eeprom_address
+	call	read_int_eeprom_1
+	endm
+
+read_int_eeprom_1:
+	movwf	EEADR
+	bra		read_eeprom					; reads and "returns" after write
+
+internal_eeprom_access_b1:				; accesses internal EEPROM BANK 1 via the UART
+	bcf		internal_eeprom_write2		; clear flag!
+	movlw	d'1'
+	movwf	EEADRH						;BANK1
+	movlw	"i"
+	bra		internal_eeprom_access1		; Continue with bank1 and bank0 common routines
+
+internal_eeprom_access_b0:				; accesses internal EEPROM BANK 0 via the UART
+	bcf		internal_eeprom_write		; clear flag!
+	clrf	EEADRH						; Bank0
+	movlw	"d"
+;	bra		internal_eeprom_access1		; Continue with bank1 and bank0 common routines
+
+internal_eeprom_access1:
+	movwf	TXREG						; Send command echo ("i" or "d")
+	bsf		no_sensor_int				; No Sensor Interrupt
+	movlw	d'4'
+	movwf	EEADR
+	bcf		PIE1,RCIE					; no interrupt for UART
+	bcf		PIR1,RCIF					; clear flag
+	call	set_LEDusb					; LEDusb ON
+
+internal_eeprom_access2:
+	rcall	rs232_get_byte				; Get byte to write...
+	movff	RCREG,EEDATA				; copy to write register
+	call	set_LEDy					; show activity
+
+	btfsc	rs232_recieve_overflow		; overflow recieved?
+	bra		internal_eeprom_access3		; Yes, abort!
+
+	rcall	write_eeprom				; No, write one byte
+	call	clear_LEDy					
+	movff	EEDATA,TXREG				; Send echo!
+	rcall	rs232_wait_tx				; Wait for UART
+	incfsz 	EEADR,F						; Do until EEADR rolls to zero
+	bra		internal_eeprom_access2
+internal_eeprom_access2a:
+	call	clear_LEDusb				; LEDusb OFF
+	bcf		PIR1,RCIF					; clear flag
+	bsf		PIE1,RCIE					; re-enable interrupt for UART
+	clrf	EEADRH						; Point to Bank0 again
+	bcf		rs232_recieve_overflow		; Clear Flag
+	bcf		no_sensor_int				; Renable Sensor Interrupt
+	goto	restart
+
+internal_eeprom_access3:				; Overflow! Abort writing
+	movlw	0xFF
+	movwf	TXREG						; Error Byte
+	bra		internal_eeprom_access2a	; Quit
+
+read_eeprom: 							; reads from internal eeprom
+	bcf		EECON1,EEPGD
+	bcf		EECON1,CFGS
+	bsf		EECON1,RD
+	return
+
+write_eeprom:							; writes into internal eeprom
+	bcf		EECON1,EEPGD
+	bcf		EECON1,CFGS
+	bsf		EECON1,WREN
+
+	bcf		INTCON,GIE					; even the RTC will be delayed for the next 5 instructions...
+	movlw	0x55		
+	movwf	EECON2
+	movlw	0xAA
+	movwf	EECON2
+	bsf		EECON1,WR
+	bsf		INTCON,GIE					; ...but the flag for the ISR routines were still set, so they will interrupt now!
+
+write_eep2:
+	btfsc	EECON1,WR		
+	bra 	write_eep2					; wait about 4ms...
+	bcf		EECON1,WREN
+	return
+
+
+
+; RS232 Routines:
+;enable_rs232_19k2_tx:
+;	bsf		TRISC,6			; TX Pin 
+;	movlw	b'00100100'			; initialise serial port for 19200/8/N/1 BRGH=1
+;	movwf	TXSTA
+;	return	
+;
+;disable_rs232_19k2_tx:
+;	bcf		TRISC,6			; TX Pin 
+;	movlw	b'00000100'			; Only receiver mode, BRGH=1
+;	movwf	TXSTA
+;	bsf		PORTC,6				; TX PIN
+;	return	
+;
+;enable_rs232_19k2:
+;	bsf		TRISC,6			; TX Pin IO Ports must be input in order to activate the module
+;	bsf		TRISC,7			; RX Pin
+;				
+;	movlw	b'00100100'			; initialise serial port for 19200/8/N/1 BRGH=1
+;	movwf	TXSTA
+;	movlw	b'10000000'			
+;	movwf	RCSTA
+;	movlw	b'00001000'			; BRG16=1
+;	movwf	BAUDCON
+;	bsf		RCSTA,CREN				; Enable
+;	movlw	d'0'
+;	movwf	SPBRGH
+;	movlw	d'207'				; Take care of the baud rate when changing Fosc!
+;	movwf	SPBRG
+;	clrf	RCREG
+;	bcf		PIE1,RCIE			; disable interrupt for RS232
+;	clrf	PIR1
+;	return
+;
+
+enable_rs232:				;IO Ports must be input in order to activate the module
+	bsf		TRISC,6			; TX Pin
+	bsf		TRISC,7			; RX Pin
+
+	movlw	b'00100100'			; BRGH=1
+	movwf	TXSTA
+	movlw	b'10010000'
+	movwf	RCSTA
+	movlw	b'00001000'
+	movwf	BAUDCON
+	clrf	SPBRGH
+	movlw	d'34'				; Take care of the baud rate when changing Fosc!
+	movwf	SPBRG
+	clrf	RCREG
+	clrf	PIR1
+	bsf		PIE1,RCIE			; enable interrupt for RS232
+	return
+
+disable_rs232:
+	clrf	TXSTA
+	clrf	RCSTA
+	bcf		PIE1,RCIE			; disable interrupt for RS232
+	bcf		TRISC,6			; TX Pin
+	bcf		TRISC,7			; RX Pin
+	bcf		PORTC,6			; TX Pin
+	bcf		PORTC,7			; RX Pin
+	return
+
+rs232_wait_tx:
+	btfss	RCSTA,SPEN			; Transmitter active?
+	return						; No, return!
+	nop
+	btfss	TXSTA,TRMT			; RS232 Busy?
+	bra		rs232_wait_tx		; yes, wait...
+	return						; Done.
+
+
+rs232_get_byte:
+	bcf		PIR1,RCIF		; clear flag
+	bcf		rs232_recieve_overflow		; clear flag
+	clrf 	uart1_temp
+rs232_get_byte2:
+	clrf 	uart2_temp
+rs232_get_byte3:
+	btfsc 	PIR1,RCIF		; data arrived?
+	return					; data received
+
+	nop						; Wait 1us * 255 * 255 = 65ms+x Timeout/Byte
+	nop
+	nop
+	nop
+	btfsc 	PIR1,RCIF		; data arrived?
+	return	
+
+	nop
+	nop
+	nop
+	nop
+	btfsc 	PIR1,RCIF		; data arrived?
+	return	
+
+	nop
+	nop
+	nop
+	nop
+	btfsc 	PIR1,RCIF		; data arrived?
+	return	
+	nop
+	nop
+	nop
+	nop
+	btfsc 	PIR1,RCIF		; data arrived?
+	return	
+
+	decfsz 	uart2_temp,F
+	bra 	rs232_get_byte3
+	decfsz 	uart1_temp,F
+	bra		rs232_get_byte2
+						; timeout occoured (about 20ms)
+	bcf		RCSTA,CREN		; Clear receiver status
+	bsf		RCSTA,CREN
+	bsf		rs232_recieve_overflow		; set flag
+	return				; and return anyway
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/fisch_128x64.inc	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,513 @@
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0xff;
+	db 0xff, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff;
+	db 0x0f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x0f, 0xff;
+	db 0xff, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x0f, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0xff;
+	db 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00;
+	db 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x0f, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0xff;
+	db 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0x00;
+	db 0x0f, 0x0f, 0x00, 0x0f, 0x00, 0xf0, 0xf0, 0x0f;
+	db 0x00, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0x0f, 0x00, 0x00;
+	db 0x0f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xff;
+	db 0x0f, 0x0f, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x00;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xff;
+	db 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00;
+	db 0x0f, 0x0f, 0x00, 0xff, 0x0f, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f;
+	db 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xff;
+	db 0x0f, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f;
+	db 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x00;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0x0f;
+	db 0x0f, 0x0f, 0x00, 0x0f, 0xf0, 0x00, 0xff, 0x00;
+	db 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0x0f, 0x0f, 0x0f;
+	db 0x0f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xf0, 0xff, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x0f;
+	db 0xf0, 0x0f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x00;
+	db 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0;
+	db 0x0f, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00;
+	db 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0;
+	db 0x00, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0xf0;
+	db 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xff;
+	db 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xf0, 0x00, 0x0f, 0xff, 0x0f, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff;
+	db 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/i2c_eeprom.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,365 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+; provides routines for external EEPROM via I2C
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 08/21/06
+; known bugs:
+; ToDo: use 2nd 32KB from external EEPROM for something
+
+incf_eeprom_address	macro	ext_ee_temp1	; Will increase eeprom_address:2 with the 8Bit value "ext_ee_temp1" and takes
+	movlw	ext_ee_temp1					; care of bank switching at 0x8000
+	call 	incf_eeprom_address0
+	endm
+
+incf_eeprom_address0:
+	movwf		ext_ee_temp1
+incf_eeprom_address1:
+	movlw		d'1'				; increase address
+	addwf		eeprom_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_address+1,F
+	btfss		eeprom_address+1,7		; at address 8000?
+	bra			incf_eeprom_address2	; No, continue
+	
+	; Yes, clear eeprom_address:2
+	clrf		eeprom_address+0		; Clear eeprom address
+	clrf		eeprom_address+1
+	
+incf_eeprom_address2:
+	decfsz		ext_ee_temp1,F			; All done?
+	bra			incf_eeprom_address1	; No, continue
+	return								; Done.
+
+decf_eeprom_address	macro	ext_ee_temp1	; Will decrease eeprom_address:2 with the 8Bit value "ext_ee_temp1" and takes
+	movlw	ext_ee_temp1					; care of bank switching at 0x8000
+	call 	decf_eeprom_address0
+	endm
+
+decf_eeprom_address0:
+	movwf		ext_ee_temp1
+decf_eeprom_address1:
+	movlw		d'1'					; decrease address
+	subwf		eeprom_address+0,F
+	movlw		d'0'
+	subwfb		eeprom_address+1,F		
+
+	btfss		eeprom_address+1,7		; at address 8000?
+	bra			decf_eeprom_address2	; No, continue
+	
+	movlw		b'01111111'					; yes, reset highbyte
+	movwf		eeprom_address+1
+	
+decf_eeprom_address2:
+	decfsz		ext_ee_temp1,F			; All done?
+	bra			decf_eeprom_address1	; No, continue
+	return								; Done.
+
+
+write_external_eeprom:				; data in WREG
+								; increase address eeprom_address+0:eeprom_address+1 after write
+								; with banking after 7FFF
+	rcall		I2CWRITE			; writes WREG into EEPROM@eeprom_address
+	movlw		d'1'				; increase address
+	addwf		eeprom_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_address+1,F
+	bcf			eeprom_overflow		
+	btfss		eeprom_address+1,7		; at address 8000?
+	return								; no, return
+
+	clrf		eeprom_address+0		; Clear eeprom address
+	clrf		eeprom_address+1
+	bsf			eeprom_overflow			; and set overflow bit
+	return
+write_external_eeprom_block:			; Writes a block of 64Byte (one page in external EEPROM without stop condition
+	btfsc		eeprom_blockwrite		; Blockwrite continue?
+	rcall		I2CWRITE_BLOCK2
+	btfss		eeprom_blockwrite		; Blockwrite start?
+	rcall		I2CWRITE_BLOCK
+	bsf			eeprom_blockwrite		; After the start, do blockwriting for the next 63Bytes!
+	
+	movlw		d'0'				; increase address
+	incf		eeprom_address+0,F	
+	addwfc		eeprom_address+1,F
+	bcf			eeprom_overflow		
+	
+	btfss		eeprom_address+1,7	; at address 8000
+	return						; no, return
+	
+	clrf		eeprom_address+0		; Clear eeprom address
+	clrf		eeprom_address+1
+	bsf			eeprom_overflow		; and set overflow bit
+	return
+I2CWRITE_BLOCK:
+	movwf		ext_ee_temp1				; Data byte in WREG
+	bsf			SSPCON2,SEN			; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100110'			; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF				; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		eeprom_address+1,SSPBUF	; High Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		eeprom_address+0,SSPBUF	; Low Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+I2CWRITE_BLOCK2:	
+	movff		ext_ee_temp1, SSPBUF		; Data Byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	return
+
+
+get_free_EEPROM_location:			; Searches 0xFD, 0xFD, 0xFE and sets Pointer to 0xFE
+	clrf		ext_ee_temp1		; low address counter
+	clrf		ext_ee_temp2		; high address counter
+	bcf			second_FD			; clear flags
+	bcf			first_FD
+get_free_EEPROM_location3:
+	bsf			SSPCON2, PEN		; Stop condition
+	rcall		WaitMSSP	
+	bsf			SSPCON2,SEN			; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100110'			; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF				; control byte
+	rcall		WaitMSSP	
+	btfsc		SSPCON2,ACKSTAT
+	bra			get_free_EEPROM_location3	; EEPROM NOT acknowledged, retry!
+	
+	movff		ext_ee_temp2,SSPBUF		; High Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		ext_ee_temp1,SSPBUF		; Low Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	
+	bsf			SSPCON2,RSEN		; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100111'			; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+
+get_free_EEPROM_location2:
+	bsf			SSPCON2, RCEN		; Enable recieve mode
+	rcall		WaitMSSP	
+	btfsc		first_FD
+	bra			test_2nd_FD
+	bsf			first_FD			; found first 0xFD?
+	movlw		0xFD
+	cpfseq		SSPBUF
+	bcf			first_FD			; No
+	bra			get_free_EEPROM_location2c
+
+test_2nd_FD:
+	btfsc		second_FD
+	bra			test_FE
+	bsf			second_FD			; found second 0xFD?
+	movlw		0xFD
+	cpfseq		SSPBUF
+	bra			get_free_EEPROM_location2b	;No, clear both flags
+	bra			get_free_EEPROM_location2c	
+test_FE:
+	movlw		0xFE				; found the final 0xFE?
+	cpfseq		SSPBUF
+	bra			get_free_EEPROM_location2b	;No, clear both flags
+	movff		ext_ee_temp1,eeprom_address+0	;Yes, copy ext_ee_temp1->eeprom_address+0 and 
+	movff		ext_ee_temp2,eeprom_address+1	;ext_ee_temp2->eeprom_address+1
+	bra			get_free_EEPROM_location4	; Done.
+
+get_free_EEPROM_location2b:
+	bcf			second_FD			; clear both flags!
+	bcf			first_FD
+get_free_EEPROM_location2c:
+	movlw		d'1'				; and increase search address
+	addwf		ext_ee_temp1,F
+	movlw		d'0'
+	addwfc		ext_ee_temp2,F
+	
+	btfsc		ext_ee_temp2,7			; 8000 reached?
+	bra			get_free_EEPROM_location3b	; yes
+	
+	bsf			SSPCON2, ACKEN		; no, send Ack
+	rcall		WaitMSSP				
+	bra			get_free_EEPROM_location2	; and continue search
+get_free_EEPROM_location3b:
+	clrf 		eeprom_address+0		; Not found in entire EEPROM, set to address 0
+	clrf 		eeprom_address+1
+get_free_EEPROM_location4:
+	bsf			SSPCON2, PEN		; Stop
+	rcall		WaitMSSP	
+	
+	bcf			second_FD			; clear flags
+	bcf			first_FD
+	return					; return
+	
+	
+I2CREAD:
+	bsf			SSPCON2, PEN	; Stop
+	rcall		WaitMSSP	
+	bsf			SSPCON2,SEN		; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100110'		; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	btfsc		SSPCON2,ACKSTAT
+	bra			I2CREAD			; EEPROM NOT acknowledged, retry!	
+	movff		eeprom_address+1,SSPBUF	; High Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		eeprom_address+0,SSPBUF	; Low Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	
+	bsf			SSPCON2,RSEN	; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100111'		; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	
+	bsf			SSPCON2, RCEN	; Enable recieve mode
+	rcall		WaitMSSP	
+	movf		SSPBUF,W		; copy read byte into WREG
+	bsf			SSPCON2, PEN	; Stop
+	rcall		WaitMSSP	
+	return
+
+I2CREAD2:						; same as I2CREAD but with automatic address increase 
+	rcall		I2CREAD
+	movlw		d'1'
+	addwf		eeprom_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_address+1,F
+	bcf			eeprom_overflow		
+	btfss		eeprom_address+1,7	; at 0x8000?
+	return		; no, return
+	
+	clrf		eeprom_address+0	; Yes, clear address
+	clrf		eeprom_address+1
+	bsf			eeprom_overflow		; and set overflow bit
+	return
+	
+I2CWRITE:
+	movwf		ext_ee_temp1				; Data byte
+	bsf			SSPCON2,SEN			; Start condition
+	rcall		WaitMSSP
+	movlw		b'10100110'			; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		eeprom_address+1,SSPBUF	; High Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		eeprom_address+0,SSPBUF	; Low Address byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		ext_ee_temp1, SSPBUF		; Data Byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	bsf			SSPCON2,PEN			; Stop condition
+	rcall		WaitMSSP	
+	WAITMS		d'6'				; Write delay
+	return
+
+I2C_WaitforACK:
+	btfsc		SSPCON2,ACKSTAT		; checks for ACK bit from slave
+	rcall		I2CFail
+	return
+	
+I2CFail:
+	ostc_debug	'M'		; Sends debug-information to screen if debugmode active
+	call		set_LEDy					
+	rcall		I2CReset			; I2C Reset
+	bcf			PIR1,SSPIF
+	clrf		i2c_temp
+	return	
+	
+WaitMSSP:
+	decfsz		i2c_temp,F		; check for timeout during I2C action
+	bra			WaitMSSP2
+	bra			I2CFail			; timeout occured
+WaitMSSP2:
+	btfss		PIR1,SSPIF
+	bra		WaitMSSP
+	clrf		i2c_temp
+	bcf			PIR1,SSPIF
+	return
+
+I2CReset:						; Something went wrong (Slave holds SDA low?)
+	clrf		SSPCON1			; wake-up slave and reset entire module
+	ostc_debug	'N'		; Sends debug-information to screen if debugmode active
+	clrf		SSPCON2
+	clrf		SSPSTAT
+	bcf			TRISC,3			; SCL	OUTPUT
+	bsf			TRISC,4			; SDA	Input
+	bcf			PORTC,3
+	movlw		d'9'
+	movwf		i2c_temp		; clock-out 9 clock cycles manually
+I2CReset_1:
+	bsf			PORTC,3			; SCL=1
+	nop
+	btfsc		PORTC,4			; SDA=1?
+	bra		I2CReset_2		; =1, SDA has been released from slave
+	bcf			PORTC,3			; SCL=0	
+	bcf			PORTC,3
+	decfsz		i2c_temp,F
+	bra		I2CReset_1			; check for nine clock cycles
+I2CReset_2:
+	bsf			TRISC,3			; SCL	Input
+	clrf		SSPCON1			; set IēC Mode
+	WAITMS		d'10'				; Reset-Timeout for I2C devices
+	movlw		b'00000000'
+	movwf		SSPSTAT
+	movlw		b'00101000'
+	movwf		SSPCON1
+	movlw		b'00000000'
+	movwf		SSPCON2
+	movlw		d'8'				; 400kHz I2C clock @ 16MHz Fcy
+	movwf		SSPADD
+	call		clear_LEDy					
+	ostc_debug	'O'		; Sends debug-information to screen if debugmode active
+	return
+I2C_TX:
+	movwf		i2c_temp2				; Data byte
+	bsf			SSPCON2,SEN			; Start condition
+	rcall		WaitMSSP
+	movlw		b'10010000'		; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	movff		i2c_temp2, SSPBUF		; Data Byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	bsf			SSPCON2,PEN			; Stop condition
+	rcall		WaitMSSP	
+	return
+I2C_RX:
+	bcf			PIR1,SSPIF
+	bsf			SSPCON2,SEN			; Start condition
+	rcall		WaitMSSP
+	movlw		b'10010001'		; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF			; control byte
+	rcall		WaitMSSP	
+	rcall		I2C_WaitforACK
+	bsf			SSPCON2, RCEN	; Enable recieve mode
+	rcall		WaitMSSP	
+	movff		SSPBUF,i2c_temp2	; Data Byte
+	bsf			SSPCON2,ACKEN		; Master acknowlegde
+	rcall		WaitMSSP	
+	bsf			SSPCON2,PEN			; Stop condition
+	rcall		WaitMSSP	
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/icdpictypes.inc	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,256 @@
+;IdTypePIC
+;bits      7   6   5   4   3  2  1  0
+;meaning:   type16/18/ds |  model_nr
+;
+;
+;If you want to work with another model that is not on the list
+;find one model that is similar to yours and has THE SAME amount
+;of flash and replace its "IFDEF __XXXXXX" and 
+;"#include "ZZZZZZZZZ.inc"", but the ID must remain.
+;Each IdTypePIC has one corespondent in the PC application,
+;if you add new ones they will not be recognized.
+
+IdTypePIC SET 0
+
+	IFDEF __16F876A
+		#include "p16f876a.inc"
+IdTypePIC = 0x31		
+		#define max_flash 0x2000
+	ENDIF
+	IFDEF __16F877A
+		#include "p16f877a.inc"
+IdTypePIC = 0x31		
+		#define max_flash 0x2000
+	ENDIF
+
+	IFDEF __16F873A
+		#include "p16f873a.inc"
+IdTypePIC = 0x32		
+		#define max_flash 0x1000
+	ENDIF
+	IFDEF __16F874A
+		#include "p16f874a.inc"
+IdTypePIC = 0x32		
+		#define max_flash 0x1000
+	ENDIF
+
+	IFDEF __16F87
+		#include "p16f87.inc"
+IdTypePIC = 0x33		
+		#define max_flash 0x1000
+	ENDIF
+	IFDEF __16F88
+		#include "p16f88.inc"
+IdTypePIC = 0x33		
+		#define max_flash 0x1000
+	ENDIF
+
+	IFDEF __16F887
+		#include "p16f887.inc"
+IdTypePIC = 0x36		
+		#define max_flash 0x2000
+	ENDIF
+
+
+;---------- 18F -------------
+
+	; 28/40pin
+	IFDEF __18F252
+		#include "p18f252.inc"
+IdTypePIC = 0x41
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F452
+		#include "p18f452.inc"
+IdTypePIC = 0x41
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F242
+		#include "p18f242.inc"
+IdTypePIC = 0x42
+		#define max_flash 0x4000
+	ENDIF
+	IFDEF __18F442
+		#include "p18f442.inc"
+IdTypePIC = 0x42
+		#define max_flash 0x4000
+	ENDIF
+
+
+
+	IFDEF __18F2520
+		#include "p18f2520.inc"
+IdTypePIC = 0x41
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F4520
+		#include "p18f4520.inc"
+IdTypePIC = 0x41
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F2420
+		#include "p18f2420.inc"
+IdTypePIC = 0x42
+		#define max_flash 0x4000
+	ENDIF
+	IFDEF __18F4420
+		#include "p18f4420.inc"
+IdTypePIC = 0x42
+		#define max_flash 0x4000
+	ENDIF
+
+
+
+
+
+	; 28/40pin  can2.0
+	IFDEF __18F258
+		#include <p18f258.inc>
+IdTypePIC = 0x43
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F458
+		#include <p18f458.inc>
+IdTypePIC = 0x43
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F248
+		#include <p18f248.inc>
+IdTypePIC = 0x44
+		#define max_flash 0x4000
+	ENDIF
+	IFDEF __18F448
+		#include <p18f448.inc>
+IdTypePIC = 0x44
+		#define max_flash 0x4000
+	ENDIF
+
+
+	; 18/28pin 6pwm  (some:I2C/SPI)
+	IFDEF __18F1320
+		#include <p18f1320.inc>
+IdTypePIC = 0x45
+		#define max_flash 0x2000
+	ENDIF
+	IFDEF __18F2320
+		#include <p18f2320.inc>
+IdTypePIC = 0x45
+		#define max_flash 0x2000
+	ENDIF
+	IFDEF __18F1220
+		#include <p18f1220.inc>
+IdTypePIC = 0x46
+		#define max_flash 0x1000
+	ENDIF
+	IFDEF __18F2220
+		#include <p18f2220.inc>
+IdTypePIC = 0x46
+		#define max_flash 0x1000
+	ENDIF
+
+	
+	; 40pin  6pwm
+	IFDEF __18F4320
+		#include <p18f4320.inc>
+IdTypePIC = 0x47
+		#define max_flash 0x2000
+	ENDIF
+	IFDEF __18F4220
+		#include <p18f4220.inc>
+IdTypePIC = 0x48
+		#define max_flash 0x1000
+	ENDIF
+	
+	
+	; 64/80pin TQFP 2usart
+	IFDEF __18F6720
+		#include <p18f6720.inc>
+IdTypePIC = 0x4A
+		#define max_flash 0x20000
+	ENDIF
+	IFDEF __18F8720
+		#include <p18f8720.inc>
+IdTypePIC = 0x4A
+		#define max_flash 0x20000
+	ENDIF
+	IFDEF __18F6620
+		#include <p18f6620.inc>
+IdTypePIC = 0x4B
+		#define max_flash 0x10000
+	ENDIF
+	IFDEF __18F8620
+		#include <p18f8620.inc>
+IdTypePIC = 0x4B
+		#define max_flash 0x10000
+	ENDIF
+	IFDEF __18F6520
+		#include <p18f6520.inc>
+IdTypePIC = 0x4C
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F8520
+		#include <p18f8520.inc>
+IdTypePIC = 0x4C
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F8680
+		#include <p18f8680.inc>
+IdTypePIC = 0x4D
+		#define max_flash 0x10000
+	ENDIF
+
+
+	;PIC18F 2525/2620/4525/4620  EA-USART, nanoWatt, intOSC
+
+	IFDEF __18F2525
+		#include "p18f2525.inc"
+IdTypePIC = 0x4E
+		#define max_flash 0xC000
+	ENDIF
+	IFDEF __18F4525
+		#include "p18f4525.inc"
+IdTypePIC = 0x4E
+		#define max_flash 0xC000
+	ENDIF
+	IFDEF __18F2620
+		#include "p18f2620.inc"
+IdTypePIC = 0x4F
+		#define max_flash 0x10000
+	ENDIF
+	IFDEF __18F4620
+		#include "p18f4620.inc"
+IdTypePIC = 0x4F
+		#define max_flash 0x10000
+	ENDIF
+
+;---------------- USB ------------------------------
+
+	IFDEF __18F2550
+		#include "p18f2550.inc"
+IdTypePIC = 0x55
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F4550
+		#include "p18f4550.inc"
+IdTypePIC = 0x55
+		#define max_flash 0x8000
+	ENDIF
+	IFDEF __18F2455
+		#include "p18f2455.inc"
+IdTypePIC = 0x56
+		#define max_flash 0x6000
+	ENDIF
+	IFDEF __18F4455
+		#include "p18f4455.inc"
+IdTypePIC = 0x56
+		#define max_flash 0x6000
+	ENDIF
+	IFDEF __18F4685
+;		#include "p18f4685.inc"
+IdTypePIC = 0x57
+		#define max_flash 0x18000
+	ENDIF
+
+	if IdTypePIC==0
+		error "Pic not yet implemeted"
+	endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/interface.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,240 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Interface, Downloader, MD2 Hash send routine
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 12/27/07
+; known bugs:
+; ToDo: 
+
+uart_store_tissues:
+	bcf		uart_store_tissue_data			; Clear flag
+	bcf		PIE1,RCIE						; No Interrupt for UART
+	call	set_LEDusb
+	call	simulator_save_tissue_data		; store and set flag for automatic restore
+	movlw		'k'							; send echo
+	movwf		TXREG						; When done
+	call		rs232_wait_tx				; wait for UART
+	call	clear_LEDusb
+	bsf			PIE1,RCIE				; Interrupt for RS232
+	goto		surfloop_loop			; return to surface loop
+
+; reset Decodata
+reset_decodata:
+	bcf			uart_reset_decodata				; clear flag
+	bcf			PIE1,RCIE						; No Interrupt for UART
+	call		set_LEDusb
+
+	call		deco_main_clear_tissue			; Reset Decodata
+	movlb		b'00000001'						; select ram bank 1
+	call		deco_main_calc_desaturation_time	; calculate desaturation time
+	movlb		b'00000001'						; select ram bank 1
+	call		main_clear_CNS_fraction			; clear CNS
+	movlb		b'00000001'						; select ram bank 1
+
+	movlw		d'1'
+	movwf		nofly_time+0				; Clear nofly time
+	clrf		nofly_time+1				; Clear nofly time
+
+	movlw		'h'							; send echo
+	movwf		TXREG						; When done
+	call		rs232_wait_tx				; wait for UART
+
+	bsf			oneminupdate				; set flag, so display will be updated at once
+	call		clear_LEDusb
+	bsf			PIE1,RCIE					; Interrupt for RS232
+	goto		surfloop_loop				; return to surface loop
+
+; send internal EEPROM BANK 0 via the UART
+send_int_eeprom_b0:
+	bcf			uart_send_int_eeprom	; clear flag
+	bcf			PIE1,RCIE				; No Interrupt for UART
+	call		set_LEDusb
+
+	clrf		EEADRH						; Point to Bank0
+	rcall		send_internal_eeprom1		; sends complete 1st. page of internal EEPROM
+
+	call		clear_LEDusb
+	bsf			PIE1,RCIE				; Interrupt for RS232
+	goto		surfloop_loop			; return to surface loop
+
+; send internal EEPROM BANK 1 via the UART
+send_int_eeprom_b1:
+	bcf			uart_send_int_eeprom2	; clear flag
+	bcf			PIE1,RCIE				; No Interrupt for UART
+	call		set_LEDusb
+
+	movlw		d'1'
+	movwf		EEADRH						; Point to Bank1
+	rcall		send_internal_eeprom1		; sends complete 2nd page of internal EEPROM
+	clrf		EEADRH						; Point to Bank0
+
+	call		clear_LEDusb
+	bsf			PIE1,RCIE				; Interrupt for RS232
+	goto		surfloop_loop			; return to surface loop
+
+
+; Send firmware version and 16bytes MD2 hash via the UART
+send_md2_hash:
+	bcf			uart_send_hash			; clear flag
+	bcf			PIE1,RCIE				; No Interrupt for UART
+	call		set_LEDusb
+
+	call		rs232_wait_tx					; wait for UART
+	movlw		softwareversion_x				; Softwareversion
+	movwf		TXREG
+	call		rs232_wait_tx					; wait for UART
+	movlw		softwareversion_y				; Softwareversion
+	movwf		TXREG
+
+	lfsr		FSR2, char_O_hash
+	movlw		d'16'
+	movwf		temp1
+send_md2_hash2:
+	call		rs232_wait_tx					; wait for UART
+	movff		POSTINC2,TXREG					; copy hash byte to TXREG
+	decfsz		temp1,F
+	bra		send_md2_hash2					; loop 16 times
+
+	call		clear_LEDusb
+	bsf			PIE1,RCIE				; Interrupt for RS232
+	goto		surfloop_loop			; return to surface loop
+
+
+; Sends first 256Byte from internal and first 32KB from external EEPROM using the UART module
+menu_interface:
+	bcf		dump_external_eeprom			; clear flag
+	bcf		PIE1,RCIE					; No Interrupt for UART
+	call	set_LEDusb
+	call	PLED_ClearScreen
+	call	PLED_topline_box
+	WIN_INVERT	.1					; Init new Wordprocessor	
+	DISPLAYTEXT	.15						; "Interface"
+	WIN_INVERT	.0					; Init new Wordprocessor
+
+	movlw		d'5'
+	movwf		uart1_temp
+menu_interface1:
+	movlw		0xAA						; Startbytes
+	movwf		TXREG
+	call		rs232_wait_tx				; wait for UART
+	decfsz	uart1_temp
+	bra		menu_interface1
+	movlw		0x55						; finish preamble
+	movwf		TXREG
+
+	DISPLAYTEXT	.16						; "Start"
+
+	call		get_free_EEPROM_location		; 
+	movlw		d'1'						; increase
+	addwf		eeprom_address+0,F
+	movlw		d'0'
+	addwfc	eeprom_address+1,F
+
+	DISPLAYTEXT	.17						; "Data"
+
+	rcall		send_internal_eeprom1		; sends complete 1st. page of internal EEPROM
+
+	call		rs232_wait_tx				; wait for UART
+	movff		batt_voltage+0,TXREG			; Battery
+
+	call		rs232_wait_tx				; wait for UART
+	movff		batt_voltage+1,TXREG			; Battery 
+
+	call		rs232_wait_tx				; wait for UART
+	movlw		softwareversion_x				; Softwareversion
+	movwf		TXREG
+
+	call		rs232_wait_tx				; wait for UART
+	movlw		softwareversion_y				; Softwareversion
+	movwf		TXREG
+
+	DISPLAYTEXT .18						; "Header"
+
+	clrf		uart1_temp					; low address counter
+	clrf		uart2_temp					; high address counter
+
+menu_interface3:
+	bsf		SSPCON2,SEN					; Start condition
+	call		WaitMSSP
+
+	movlw		b'10100110'					; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF					; control byte
+	call		WaitMSSP	
+	btfsc		SSPCON2,ACKSTAT
+	bra		menu_interface3				; No Ack, try again!
+	
+	movff		eeprom_address+1,SSPBUF			; High Address byte
+	call		WaitMSSP	
+	call		I2C_WaitforACK
+	movff		eeprom_address+0,SSPBUF			; Low Address byte
+	call		WaitMSSP	
+	call		I2C_WaitforACK
+	bsf		SSPCON2,RSEN				; Start condition
+	call		WaitMSSP
+
+	movlw		b'10100111'					; Bit0=0: WRITE, Bit0=1: READ
+	movwf		SSPBUF					; control byte
+	call		WaitMSSP	
+	call		I2C_WaitforACK
+
+	DISPLAYTEXT	.19						; "Profile"
+
+menu_interface2:
+	call		rs232_wait_tx				; wait for UART
+
+	bsf			SSPCON2, RCEN				; Enable recieve mode
+	call		WaitMSSP	
+
+	movff		SSPBUF, TXREG
+
+	movlw		d'1'
+	addwf		uart1_temp,F
+	movlw		d'0'
+	addwfc		uart2_temp,F
+
+	btfsc		uart2_temp,7				; 32KB done?
+	bra			menu_interface4				; Yes
+	
+	bsf			SSPCON2, ACKEN				; Ack
+	call		WaitMSSP	
+	bra			menu_interface2				; go on
+
+menu_interface4:
+	bsf			SSPCON2, PEN				; Stop
+	call		WaitMSSP	
+	
+	DISPLAYTEXT	.20						; Done.
+
+	WAITMS	d'250'
+	call		clear_LEDusb
+	bsf			PIE1,RCIE					; Interrupt for RS232
+	goto		surfloop					; back to surfacemode
+
+send_internal_eeprom1:
+	clrf		uart1_temp					; Send the total of 256bytes
+	clrf		EEADR						; Send bytes 0-255 from internal EEPROM
+send_internal_eeprom2:
+	call		read_eeprom					; read byte
+	movff		EEDATA,TXREG				; send byte
+	incf		EEADR,F						; increase pointer
+	call		rs232_wait_tx				; wait for UART
+	decfsz		uart1_temp,F				; until limit reached
+	bra			send_internal_eeprom2
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/io.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,64 @@
+; OSTC - diving computer code
+; Copyright (C) 2009 HeinrichsWeikamp GbR
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; low-level routines for i/O
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 090801
+; last updated: 090801
+; known bugs:
+; ToDo:
+
+set_LEDy:	; Yellow LED
+	bsf		LED_red
+	return
+clear_LEDy	; Yellow LED
+	bcf		LED_red
+	return
+
+set_LEDr:	; Red LED
+	bsf		LED_red
+	return
+clear_LEDr	; Red LED
+	bcf		LED_red
+	return
+toggle_LEDr	; Red LED
+	btg		LED_red
+	return
+
+
+set_LEDg:	; Green LED
+	bsf		LED_red
+	return
+clear_LEDg	; Green LED
+	bcf		LED_red
+	return
+
+set_LEDusb:	; USB LED
+	bsf		LED_blue
+	return
+clear_LEDusb;  USB LED
+	bcf		LED_blue
+	return
+
+set_LEDnofly:	; nofly LED
+	bsf		LED_blue
+	return
+clear_LEDnofly;  nofly LED
+	bcf		LED_blue
+	return
+toggle_LEDnofly	; nofly LED
+	btg		LED_blue
+	return
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/isr.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,394 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 05/16/08
+; known bugs:
+; ToDo:
+
+; the timer1 module interrupts every 62.5ms (16x/second)
+; temperature and pressure is averaged over 4 measurements
+; flag pressure_refresh is set every 500ms 
+; and provides accurate pressure (+/-1mBar stable) and temperature (0.1C stable)
+
+uartint:
+		btfsc	simulatormode_active		; are we in simulatormode?
+		bra		simulator_int				; Yes, reading is depth in m!
+
+		movff	RCREG,uart1_temp
+		movlw	d'96'
+		subwf	uart1_temp,F
+		dcfsnz	uart1_temp,F				; "a"
+		bsf		dump_external_eeprom		; set flag
+		dcfsnz	uart1_temp,F				; "b"
+		bsf		uart_settime				; set flag
+		dcfsnz	uart1_temp,F				; "c"
+		bsf		simulatormode_active		; set flag
+		dcfsnz	uart1_temp,F				; "d"
+		bsf		internal_eeprom_write		; set flag
+		dcfsnz	uart1_temp,F				; "e"
+		bsf		uart_send_hash				; set flag
+		dcfsnz	uart1_temp,F				; "f"
+		bsf		uart_compensate_temp		; set flag
+		dcfsnz	uart1_temp,F				; "g"
+		bsf		uart_send_int_eeprom		; set flag
+		dcfsnz	uart1_temp,F				; "h"
+		bsf		uart_reset_decodata			; set flag
+		dcfsnz	uart1_temp,F				; "i"
+		bsf		internal_eeprom_write2		; set flag
+		dcfsnz	uart1_temp,F				; "j"
+		bsf		uart_send_int_eeprom2		; set flag
+		dcfsnz	uart1_temp,F				; "k"
+		bsf		uart_store_tissue_data		; set flag
+
+
+uartint1:
+		movf	RCREG,w						; unload RCREG in stand-alone simulator mode
+		bcf		PIR1,RCIF					; Clear flag
+		bcf		RCSTA,CREN					; Clear receiver status
+		bsf		RCSTA,CREN
+		return
+
+simulator_int:
+		btfsc	standalone_simulator		; ignore in standalone simulator mode
+		bra		uartint1
+
+		call	set_LEDusb
+		tstfsz	RCREG						; =0x00?
+		bra		simulator_int1				; No
+		incf	RCREG,F						; Yes, so force RCREG=1
+
+simulator_int1:
+		movf	RCREG,w						; depth in m
+		mullw	d'100'						; result will be mbar
+		movff	PRODL,sim_pressure+0		; stored for pressure overwrite
+		movff	PRODH,sim_pressure+1
+		bra		uartint1					; exit uart int
+
+schalter_links:								; 
+		bcf		INTCON,INT0IF				; Clear flag
+
+		btfsc	T0CON,TMR0ON				; Timer0 running?
+		bra		timer0_restart				; Yes, restart
+
+		bsf		switch_left					; Set flag, button press is OK
+
+		bsf		T0CON,TMR0ON				; Start Timer 0
+		return
+
+
+schalter_rechts:							; 
+		bcf		INTCON3,INT1IF				; Clear flag
+
+		btfsc	T0CON,TMR0ON				; Timer0 running?
+		bra		timer0_restart				; Yes, restart
+
+		bsf		switch_right				; Set flag, button press is OK
+
+		bsf		T0CON,TMR0ON				; Start Timer 0
+		return
+
+timer0_restart:
+		bcf		INTCON,TMR0IF				; Clear flag
+
+		clrf	T0CON						; Timer0
+		clrf	TMR0H
+		clrf	TMR0L
+		bsf		T0CON,TMR0ON				; Start Timer 0
+		return
+
+timer0int:
+		bcf		INTCON,TMR0IF				; Clear flag
+		bcf		T0CON,TMR0ON				; Stop Timer 0
+		clrf	TMR0H
+		clrf	TMR0L
+		return
+		
+
+timer0int_left_reset:
+		bcf		INTCON2, INTEDG0			; Interrupt on faling edge again
+		bcf		switch_left_isr				; Clear flag, button press is done
+
+		movlw	T0CON_debounce				; Timer0
+		movwf	T0CON
+
+		bsf		T0CON,TMR0ON				; Start Timer 0
+		return
+
+timer0int_left:
+		bsf		INTCON2, INTEDG0			; Interrupt on rising edge again
+		return
+
+timer0int_right_reset:
+		bcf		INTCON2, INTEDG1			; Interrupt on faling edge again
+		bcf		switch_right_isr			; Clear flag, button press is done
+
+		movlw	T0CON_debounce				; Timer0
+		movwf	T0CON
+
+		bsf		T0CON,TMR0ON				; Start Timer 0
+		return
+
+timer0int_right:
+		bsf		INTCON2, INTEDG1			; Interrupt on rising edge again
+		return
+
+timer3int:
+		bcf		PIR2,TMR3IF					; Clear flag
+		bcf		T3CON,TMR0ON				; Stop Timer 3
+		bcf		T2CON,2						; stop Timer 2
+		return
+
+timer1int:
+		bcf		PIR1,TMR1IF					; Clear flag
+
+timer1int_debug:
+
+		call	clear_LEDr					; LEDr off (For charge indicator)
+
+		movlw	0x08						; Timer1 int after 62.5ms (=16/second)
+		cpfslt	TMR1H						; Did we miss a 1/16 second?
+		incf	timer1int_counter1,F		; Yes, add extra 1/16 second
+
+		movlw	0x08						; Timer1 int after 62.5ms (=16/second)
+		subwf	TMR1H,F			
+	
+		incf	timer1int_counter1,F
+		movlw	d'15'						; One second 16
+		cpfsgt	timer1int_counter1			 
+		bra		sensor_int_pre				; only pressure sensor
+		call	RTCisr						; adjust time, then query pressure sensor
+
+sensor_int_pre:
+		btfss	sleepmode					; In sleepmode?
+		bra		sensor_int					; No
+		return
+
+sensor_int:
+		btfsc		no_sensor_int			; No sensor interrupt (because it's addressed during sleep)
+		return						
+
+		incf		timer1int_counter2,F		; counts to eight for state maschine
+
+		movlw		d'1'
+		cpfseq		timer1int_counter2		; State 1?
+		bra			sensor_int1				; No
+
+		bcf			pressure_refresh			; clear flags
+		clrf		isr3_temp+0				; pressure average registers
+		clrf		isr3_temp+1
+		clrf		temperature_temp+0
+		clrf		temperature_temp+1
+sensor_int0:
+		call		get_temperature_value		; State 1: Get temperature
+		call		get_pressure_start	 	; and start pressure integration.
+		return						; Done.
+sensor_int1:
+		movlw		d'2'
+		cpfseq		timer1int_counter2		; State 2?
+		bra			sensor_int2				; No
+		
+sensor_int1_1:
+		call		get_pressure_value		; State2: Get pressure (51us)
+		call		get_temperature_start		; and start temperature integration (73,5us)
+		call		calculate_compensation		; calculate temperature compensated pressure (233us)
+		movf		amb_pressure+0,W
+		addwf		isr3_temp+0				; average pressure
+		movf		amb_pressure+1,W
+		addwfc		isr3_temp+1
+		movf		temperature+0,W
+		addwf		temperature_temp+0		; average temperature
+		movf		temperature+1,W
+		addwfc		temperature_temp+1
+		return		
+sensor_int2:
+		movlw		d'3'
+		cpfseq		timer1int_counter2		; State 3?
+		bra			sensor_int3				; No
+		bra			sensor_int0				; Yes, but same as State 1!
+sensor_int3:
+		movlw		d'4'
+		cpfseq		timer1int_counter2		; State 4?
+		bra			sensor_int4				; No
+		bra			sensor_int1_1			; Yes, but same as State 2!
+sensor_int4:
+		movlw		d'5'					
+		cpfseq		timer1int_counter2		; State 5?
+		bra			sensor_int5				; No
+		bra			sensor_int0				; Yes, but same as State 1!
+sensor_int5:
+		movlw		d'6'
+		cpfseq		timer1int_counter2		; State 6?
+		bra			sensor_int6				; No
+		bra			sensor_int1_1			; Yes, but same as State 2!
+sensor_int6:
+		movlw		d'7'
+		cpfseq		timer1int_counter2		; State 7?
+		bra			sensor_int7				; No
+		bra			sensor_int0				; Yes, but same as State 1!
+sensor_int7:
+		rcall		sensor_int1_1			; Do State 2...
+		clrf		timer1int_counter2		; ..then reset State counter...
+		movlw		d'2'					; and calculate average!
+		movwf		isr2_temp				
+sensor_int8:		
+		bcf			STATUS,C
+		rrcf		isr3_temp+1				; isr3_temp / 2
+		rrcf		isr3_temp+0
+		bcf			STATUS,C
+		rrcf		temperature_temp+1		; temperature_temp /2
+		rrcf		temperature_temp+0
+		decfsz		isr2_temp,F
+		bra			sensor_int8				; once more
+		
+		movff		isr3_temp+1,amb_pressure+1	; copy into actual register
+		movff		isr3_temp+0,amb_pressure+0
+
+		movff		temperature_temp+1,temperature+1
+		movff		temperature_temp+0,temperature+0
+
+		bsf			pressure_refresh 			; Set flag! Temp and pressure were updated!
+
+		btfss		simulatormode_active		; are we in simulator mode?
+		bra			comp_air_pressure			; no
+
+comp_air_pressure0:	
+		movlw		LOW		d'1000'				; yes, so simulate 1Bar surface pressure
+		movwf		last_surfpressure+0
+		movlw		HIGH	d'1000'
+		movwf		last_surfpressure+1
+
+comp_air_pressure:
+		bcf			neg_flag				
+		movf		last_surfpressure+0,W		; compensate airpressure
+		subwf   	amb_pressure+0,W             
+		movwf   	rel_pressure+0			; rel_pressure stores depth!
+
+		movf		last_surfpressure+1,W
+		subwfb  	amb_pressure+1,W
+		movwf   	rel_pressure+1
+		btfss		STATUS,N				; result is below zero?
+		return
+		clrf		rel_pressure+0			; Yes, do not display negative depths
+		clrf		rel_pressure+1			; e.g. when surface air pressure dropped during the dive
+		return
+
+RTCisr:			
+		clrf		timer1int_counter1		; counts to 16 (one second / 62.5ms)
+		bsf			onesecupdate			; we have a new second!
+
+		bcf			STATUS,Z				; are we in dive mode?
+		btfss		divemode
+		bra			RTCisr2				; No, must be surface or sleepmode
+
+		incf		samplesecs,F			; CF20 diving seconds done 
+		decf		samplesecs_value,W		; holds CF20 value  (minus 1 into WREG)
+		cpfsgt		samplesecs
+		bra			RTCisr1				; no
+
+		clrf		samplesecs				; clear counter...
+		bsf			store_sample			; ...and set bit for profile storage
+RTCisr1:		
+; Increase re-setable average depth divetime counter
+		incf		average_divesecs+0,F	; increase divetime registers	
+		btfsc		STATUS,Z
+		incf		average_divesecs+1,F	; increase divetime registers	
+
+		btfss		divemode2				; displayed divetime is running?
+		bra			RTCisr2					; No (e.g. too shallow)
+
+		incf		divesecs,F				; increase divetime registers
+		movlw		d'59'
+		cpfsgt		divesecs
+		bra			RTCisr1a
+		clrf		divesecs
+		bsf			realdive				; this bit is always set (again) if the dive is longer then one minute
+
+		incf		divemins+0,F			; increase divemins
+		btfsc		STATUS,Z
+		incf		divemins+1,F			; and now do the realtime clock routine anyway
+		
+RTCisr1a:	
+		btfss		FLAG_apnoe_mode			; Are we in Apnoe mode?
+		bra			RTCisr2					; No, skip the following
+		
+		incf		apnoe_secs,F			; increase descent registers
+		movlw		d'59'
+		cpfsgt		apnoe_secs
+		bra			RTCisr2
+		clrf		apnoe_secs
+		
+		incf		apnoe_mins,F			; increase descent mins
+		; Now, do the RTC routine....
+RTCisr2:
+		incf		secs,F					; adjusts seconds, minutes, hours, day, month and year. Checks for a leap year and works until 2099!
+		movlw		d'59'
+		cpfsgt		secs
+		return
+		clrf		secs
+		bsf			oneminupdate
+		incf		mins,F
+		movlw		d'59'
+		cpfsgt		mins
+		return
+		clrf		mins
+		incf		hours,F
+		movlw		d'23'
+		cpfsgt		hours
+		return
+		clrf		hours
+		incf		day,F					
+check_date:
+		movff		month,isr_divB		; new month?
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.28
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.30
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.30
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.30
+		dcfsnz		isr_divB,F
+		movlw		.31
+		dcfsnz		isr_divB,F
+		movlw		.30
+		dcfsnz		isr_divB,F
+		movlw		.31
+		cpfsgt		day,1
+		return
+		movlw		.1
+		movwf		day
+		incf		month,F				
+		movlw		.12					
+		cpfsgt		month,1
+		return
+		movlw		.1
+		movwf		month
+		incf		year,F				
+		return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/math.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,323 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Math routines
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 06/21/07
+; known bugs:
+; ToDo: clean up!
+
+convert_time:							; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	movff	lo,xA+0						; divide by 60...
+	movff	hi,xA+1						; 
+	movlw	d'60'						; 
+	movwf	xB+0						; 
+	clrf	xB+1						; 
+	rcall	div16x16					; xA/xB=xC with xA as remainder
+	movff	xC+0,hi						; Hours
+	movff	xA+0,lo						; =remaining minutes (0.....59)
+	return
+
+div16:
+; divA=divA/2^divB (divB: 8Bit only!)
+	bcf		STATUS,C
+	rrcf	divA+1
+	rrcf	divA
+	decfsz	divB
+	bra		div16
+	return
+
+div32:
+; xC=xC(32Bit)/2^divB (divB: 8Bit only!)
+	bcf		STATUS,C
+	rrcf	xC+3
+	rrcf	xC+2
+	rrcf	xC+1	
+	rrcf	xC+0
+	decfsz	divB
+	bra		div32
+	return
+
+invert_xC:
+	movf   xC+1, w 				; inverses xC+0:xC+1
+	sublw  0xFF
+	movwf  xC+1
+	movf   xC+0, w 
+	bcf		STATUS,C
+	sublw  0xFF
+	movwf  xC+0
+	return	
+
+
+sub16:
+;  sub_c = sub_a - sub_b
+	bcf		neg_flag
+	movf   sub_b+0, w             	;  Get Value to be subtracted
+	subwf  sub_a+0, w             	;  Do the High Byte
+	movwf  sub_c+0
+	movf   sub_b+1, w               ;  Get the Value to be Subbed
+	subwfb sub_a+1, w
+	movwf  sub_c+1
+	btfss	STATUS,N
+	return							; result positve
+;  sub_c = sub_a - sub_b
+	bsf		neg_flag				; result negative
+	movff	sub_c+0,sub_b+0
+	movff	sub_c+1,sub_b+1
+	setf	sub_a
+	setf	sub_a+1
+	movf   sub_b+0, w             	;  Get Value to be subtracted
+	subwf  sub_a+0, w             	;  Do the High Byte
+	movwf  sub_c+0
+	movf   sub_b+1, w               ;  Get the Value to be Subbed
+	subwfb  sub_a+1, w
+	movwf  	sub_c+1
+    return        
+
+
+mult16x16:
+;xA*xB=xC
+	clrf    xC+2        	  ;  Clear the High-Order Bits
+	clrf    xC+3
+	movf    xA, w               ;  Do the "L" Multiplication first
+	mulwf   xB
+	movf    PRODL, w            ;  Save result
+	movwf   xC
+	movf    PRODH, w
+	movwf   xC+1
+	movf    xA, w               ;  Do the "I" Multiplication
+	mulwf   xB+1
+	movf    PRODL, w            ;  Save the Most Significant Byte First
+	addwf   xC+1, f
+	movf    PRODH, w
+	addwfc  xC+2, f    	 		 ;  Add to the Last Result
+	movf    xA+1, w               ;  Do the "O" Multiplication
+	mulwf   xB
+	movf    PRODL, w            ;  Add the Lower Byte Next
+	addwf   xC+1, f
+	movf    PRODH, w            ;  Add the High Byte First
+	addwfc  xC+2, f
+	btfsc   STATUS, C           ;  Add the Carry
+	incf    xC+3, f
+	movf    xA+1, w               ;  Do the "F" Multiplication
+	mulwf   xB+1
+	movf    PRODL, w
+	addwf   xC+2, f
+	movf    PRODH, w
+	addwfc  xC+3, f
+	return
+
+
+div16x16:						;xA/xB=xC with xA as remainder 	
+								;uses divB as temp variable
+		clrf	xC+0
+		clrf	xC+1
+        MOVF    xB+0,W       	; Check for zero
+        IORWF   xB+1,W     		; 
+        BTFSC   STATUS,Z        ; Check for zero
+        RETLW   H'FF'           ; return 0xFF if illegal
+        MOVLW   1               ; Start count at 1
+        MOVWF   divB	       ; Clear Count
+div16x16_1
+    	BTFSC   xB+1,7     		; High bit set ?
+        bra	    div16x16_2      ; Yes then continue
+        INCF    divB,F     		; Increment count
+
+		bcf		STATUS,C
+		rlcf	xB+0,F
+		rlcf	xB+1,F
+        bra	    div16x16_1
+div16x16_2:
+								; Shift result left
+		bcf		STATUS,C
+		rlcf	xC+0,F
+		rlcf	xC+1,F
+
+ 			; Reduce Divisor		
+
+        MOVF    xB,W         ; Get low byte of subtrahend
+        SUBWF   xA,F         ; Subtract DST(low) - SRC(low)
+        MOVF    xB+1,W       ; Now get high byte of subtrahend
+        BTFSS   STATUS,C     ; If there was a borrow, rather than
+        INCF    xB+1,W       ; decrement high byte of dst we inc src
+        SUBWF   xA+1,F       ; Subtract the high byte and we're done
+
+
+        BTFSC   STATUS, C       ; Did it reduce?        
+        bra	    div16x16_3      ; No, so it was less than
+
+		movf	xB+0,W			; Reverse subtraction
+		addwf	xA+0,F
+		movf	xB+1,W
+		addwfc	xA+1,F
+
+        bra	    div16x16_4      ; Continue the process
+div16x16_3:
+	     BSF     xC+0,0        	; Yes it did, this gets a 1 bit
+div16x16_4:
+	     DECF    divB,F 		    ; Decrement N_COUNT
+        BTFSC   STATUS,Z        ; If its not zero then continue
+        return
+
+		bcf		STATUS,C
+		rrcf	xB+1,F
+		rrcf	xB+0,F
+
+        bra    div16x16_2              ; Next bit.
+
+div32x16:  ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+	; Setup
+	movlw		.32		; setup shift counter
+	movwf		divB
+	movf		xC+3,W	; move ACCb to ACCf
+	movwf		xA+1
+	movf		xC+2,W
+	movwf		xA+0
+	movf		xC+1,W	; move ACCc to ACCe
+	movwf		sub_a+1
+	movf		xC+0,W
+	movwf		sub_a+0
+	clrf		xC+3
+	clrf		xC+2
+	clrf		xC+1
+	clrf		xC+0
+	clrf		sub_b+1
+	clrf		sub_b+0
+div32x16_2
+	bcf			STATUS,C
+	rlcf		sub_a+0,F
+	rlcf		sub_a+1,F
+	rlcf		xA+0,F
+	rlcf		xA+1,F
+	rlcf		sub_b+0,F
+	rlcf		sub_b+1,F
+	movf		xB+1,W
+	subwf		sub_b+1,W	; check if a>d
+	btfss		STATUS,Z
+	goto		div32x16_3
+	movf		xB+0,W
+	subwf		sub_b+0,W	; if msb equal then check lsb
+div32x16_3
+	btfss		STATUS,C	; carry set if d>a
+	goto		div32x16_4
+	movf		xB+0,W	; d-a into d
+	subwf		sub_b+0,F
+	btfss		STATUS,C
+	decf		sub_b+1,F
+	movf		xB+1,W
+	subwf		sub_b+1,F
+	bsf			STATUS,C	; shift a 1 into b (result)
+div32x16_4
+	rlcf		xC+0,F
+	rlcf		xC+1,F
+	rlcf		xC+2,F
+	rlcf		xC+3,F
+	decfsz		divB,F	; loop until all bits checked
+	goto		div32x16_2
+	return
+
+  
+isr_div16:
+; divA=divA/2^divB (divB: 8Bit only!)
+	bcf		STATUS,C
+	rrcf	isr_divA+1
+	rrcf	isr_divA
+	decfsz	isr_divB
+	bra		isr_div16
+	return
+
+isr_div32:
+; xC=xC(32Bit)/2^divB (divB: 8Bit only!)
+	bcf		STATUS,C
+	rrcf	isr_xC+3
+	rrcf	isr_xC+2
+	rrcf	isr_xC+1	
+	rrcf	isr_xC+0
+	decfsz	isr_divB
+	bra		isr_div32
+	return
+
+isr_invert_xC:
+	movf   isr_xC+1, w 				; inverses xC+0:xC+1
+	sublw  0xFF
+	movwf  isr_xC+1
+	movf   isr_xC+0, w 
+	bcf		STATUS,C
+	sublw  0xFF
+	movwf  isr_xC+0
+	return	
+
+
+isr_sub16:
+;  sub_c = sub_a - sub_b
+	bcf		neg_flag_isr
+	movf   isr_sub_b+0, w             	;  Get Value to be subtracted
+	subwf  isr_sub_a+0, w             	;  Do the High Byte
+	movwf  isr_sub_c+0
+	movf   isr_sub_b+1, w               ;  Get the Value to be Subbed
+	subwfb isr_sub_a+1, w
+	movwf  isr_sub_c+1
+	btfss	STATUS,N
+	return							; result positve
+;  sub_c = sub_a - sub_b
+	bsf		neg_flag_isr				; result negative
+	movff	isr_sub_c+0,isr_sub_b+0
+	movff	isr_sub_c+1,isr_sub_b+1
+	setf	isr_sub_a
+	setf	isr_sub_a+1
+	movf   isr_sub_b+0, w             	;  Get Value to be subtracted
+	subwf  isr_sub_a+0, w             	;  Do the High Byte
+	movwf  isr_sub_c+0
+	movf   isr_sub_b+1, w               ;  Get the Value to be Subbed
+	subwfb  isr_sub_a+1, w
+	movwf  	isr_sub_c+1
+    return        
+
+
+isr_mult16x16:
+;xA*xB=xC
+	clrf    isr_xC+2        	  ;  Clear the High-Order Bits
+	clrf    isr_xC+3
+	movf    isr_xA, w               ;  Do the "L" Multiplication first
+	mulwf   isr_xB
+	movf    PRODL, w            ;  Save result
+	movwf   isr_xC
+	movf    PRODH, w
+	movwf   isr_xC+1
+	movf    isr_xA, w               ;  Do the "I" Multiplication
+	mulwf   isr_xB+1
+	movf    PRODL, w            ;  Save the Most Significant Byte First
+	addwf   isr_xC+1, f
+	movf    PRODH, w
+	addwfc  isr_xC+2, f    	 		 ;  Add to the Last Result
+	movf    isr_xA+1, w               ;  Do the "O" Multiplication
+	mulwf   isr_xB
+	movf    PRODL, w            ;  Add the Lower Byte Next
+	addwf   isr_xC+1, f
+	movf    PRODH, w            ;  Add the High Byte First
+	addwfc  isr_xC+2, f
+	btfsc   STATUS, C           ;  Add the Carry
+	incf    isr_xC+3, f
+	movf    isr_xA+1, w               ;  Do the "F" Multiplication
+	mulwf   isr_xB+1
+	movf    PRODL, w
+	addwf   isr_xC+2, f
+	movf    PRODH, w
+	addwfc  isr_xC+3, f
+	return
+       
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,559 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Main Menu and Setup menu
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 11/1/05
+; last updated: 05/15/80
+; known bugs:
+; ToDo: 
+
+wait_switches:
+;	bsf		LEDg
+	movlw	d'40'
+	btfss	button_delay_done		; Start counting?
+	movlw	d'200'
+	movwf	switch_timeout
+
+wait_switches1:
+	WAITMS	d'5'
+	btfsc	SWITCH2
+	bra		wait_switches2		; Check other switch
+
+	decfsz	switch_timeout,F
+	bra		wait_switches1
+	
+	btfsc	SWITCH2
+	bra		wait_switches3
+	
+	bsf		button_delay_done		; Start counting
+	bsf		switch_left				; Set button flag
+	bcf		switch_right			; only for the other button
+;	bcf		LEDg
+	return
+
+wait_switches2:
+	btfss	SWITCH1
+	bra		wait_switches1		; Wait 
+	
+	; Yes, both switches released before timeout...
+wait_switches3:
+	bcf		switch_left
+	bcf		switch_right
+	bcf		button_delay_done
+	call	clear_LEDg					
+	return
+
+menu:
+	bcf		deco_mode_changed			; Clear flag (Description is only showed once)
+	movlw	d'1'
+	movwf	menupos
+menu2:
+
+	bcf		leftbind
+	call	PLED_ClearScreen
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	bsf		menubit
+	bsf		cursor
+	call	PLED_menu_mask
+	call	PLED_menu_cursor
+	bcf		switch_left
+	bcf		switch_right
+
+menu_loop:
+	call	check_switches_menu
+
+	btfsc	menubit2
+	bra	do_menu						; call submenu
+
+	btfss	menubit
+	goto	restart						; exit menu, restart
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	btfsc	onesecupdate
+	call	test_charger				; check if charger IC is active
+
+	btfsc	onesecupdate
+	call	get_battery_voltage			; get battery voltage
+
+	bcf		onesecupdate				; End of one second tasks
+
+	btfsc	sleepmode
+	goto	restart
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		menu_loop	
+		
+check_switches_menu:							; checks switches
+	btfss	switch_right			
+	bra	check_switches_menu2
+	bsf		menubit3
+	incf	menupos,F
+	movlw	d'6'
+	cpfsgt	menupos
+	bra	refresh_cursor
+	movlw	d'1'
+	movwf	menupos
+	bra	refresh_cursor
+check_switches_menu2:
+	btfsc	switch_left
+	bsf		menubit2					; Enter!
+	return
+
+
+do_menu:								; calls submenu
+	dcfsnz	menupos,F
+	goto	menu_logbook
+	dcfsnz	menupos,F
+	goto	menu_gassetup
+	dcfsnz	menupos,F
+	goto	menu_reset
+	dcfsnz	menupos,F
+	goto	setup_menu
+	dcfsnz	menupos,F
+	goto	more_menu
+	dcfsnz	menupos,F
+	goto	restart						; exit...
+
+refresh_cursor:
+	clrf	timeout_counter2
+	btfsc	cursor
+	call	PLED_menu_cursor
+	bcf		switch_right
+	return
+
+more_menu:
+	movlw	d'1'
+	movwf	menupos
+more_menu2:
+	bcf		leftbind
+	call	PLED_ClearScreen
+more_menu3:
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	bsf		menubit
+	bsf		cursor
+	call	PLED_more_menu_mask
+	call	PLED_menu_cursor
+	bcf		switch_left
+	bcf		switch_right
+more_menu_loop:
+	call	check_switches_menu
+
+	movlw	d'5'					; 5 items in "More Menu"
+	cpfseq	menupos
+	bra		more_menu_loop2
+	movlw	d'6'
+	movwf	menupos
+	call	PLED_menu_cursor
+
+more_menu_loop2:
+	btfsc	menubit2
+	bra	do_more_menu						; call submenu
+
+	btfss	menubit
+	bra		menu							; exit setup menu and return to main menu
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	btfsc	onesecupdate
+	call	test_charger				; check if charger IC is active
+
+	btfsc	onesecupdate
+	call	get_battery_voltage			; get battery voltage
+
+	bcf		onesecupdate				; End of one second tasks
+
+	btfsc	sleepmode
+	bra		menu
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		more_menu_loop	
+
+do_more_menu:								; calls submenu
+	dcfsnz	menupos,F
+	goto	menu_settime
+	dcfsnz	menupos,F
+	goto	menu_const_ppO2
+	dcfsnz	menupos,F
+	goto	menu_battery_state
+	dcfsnz	menupos,F
+	goto	menu_simulator
+	dcfsnz	menupos,F
+	goto	menu_simulator
+	movlw	d'5'
+	movwf	menupos
+	bra		menu2						; exit...
+
+setup_menu:
+	bcf		deco_mode_changed			; Clear flag
+	movlw	d'1'
+	movwf	menupos
+setup_menu2:
+	bcf		leftbind
+	call	PLED_ClearScreen
+	call	PLED_setup_menu_mask
+setup_menu3a:
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	bsf		menubit
+	bsf		cursor
+	call	show_decotype
+	call	show_salinity_value
+	call	PLED_menu_cursor
+	bcf		switch_left
+	bcf		switch_right
+
+setup_menu_loop:
+	call	check_switches_menu
+
+	btfsc	menubit2
+	bra		do_setup_menu						; call submenu
+
+	btfss	menubit
+	goto	restart						; exit menu, restart and enter surfmode
+	btfsc	onesecupdate
+	call	timeout_surfmode
+	btfsc	onesecupdate
+	call	set_dive_modes
+	btfsc	onesecupdate
+	call	test_charger				; check if charger IC is active
+	btfsc	onesecupdate
+	call	get_battery_voltage			; get battery voltage
+
+	bcf		onesecupdate				; End of one second tasks
+
+	btfsc	sleepmode
+	goto	restart						; exit menu, restart and enter surfmode
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		setup_menu_loop	
+
+
+do_setup_menu:								; calls submenu
+	dcfsnz	menupos,F
+	goto	menu_custom_functions
+	dcfsnz	menupos,F
+	goto	menu_custom_functions_page2
+	dcfsnz	menupos,F
+	bra		toggle_salinity
+	dcfsnz	menupos,F
+	bra		toggle_decotype
+	dcfsnz	menupos,F
+	bra		more_setup_menu
+	bra		exit_setup_menu						; exit...
+
+toggle_decotype:
+	bsf		deco_mode_changed			; Set flag
+	read_int_eeprom d'34'		; Read deco data
+	incf	EEDATA,F
+	
+toggle_decotype0:	
+	movlw	d'6'						; number of different modes
+	cpfseq	EEDATA
+	bra		toggle_decotype1
+	clrf	EEDATA
+
+toggle_decotype1:
+	call	write_eeprom			; save new mode
+	movlw	d'4'
+	movwf	menupos
+	bcf		switch_right
+	bra		setup_menu3a				; return to manu loop
+
+show_decotype:
+	read_int_eeprom d'34'		; Read deco data
+	tstfsz	EEDATA
+	bra		show_decotype2
+	DISPLAYTEXT	.101			; ZH-L16 OC =0
+	return
+show_decotype2:
+	decfsz	EEDATA,F
+	bra		show_decotype3
+	DISPLAYTEXT	.102			; Gauge	=1
+	return
+show_decotype3:
+	decfsz	EEDATA,F
+	bra		show_decotype4
+	DISPLAYTEXT	.104			; ZH-L16 CC =2
+	return
+show_decotype4:
+	decfsz	EEDATA,F
+	bra		show_decotype5
+	DISPLAYTEXT	.138			; Apnoe	=3
+	return
+show_decotype5:
+	decfsz	EEDATA,F
+	bra		show_decotype6
+	DISPLAYTEXT	.152			; L16-GF OC	=4
+	return
+show_decotype6:
+	decfsz	EEDATA,F
+	return
+	DISPLAYTEXT	.236			; L16-GF CC	=5
+	return
+
+exit_setup_menu:
+	btfss	deco_mode_changed			; Was the decomode changed in Setup menu?
+	goto	restart						; No, restart to surfacemode
+
+	call	PLED_ClearScreen
+	
+deco_info_screen1:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.235			;Decomode changed!
+	WIN_INVERT	.0	; Init new Wordprocessor	
+
+	read_int_eeprom d'34'		; Read deco data
+
+	movlw	d'7'						; length of description text
+	mulwf	EEDATA						; Multiply with Decomode 0-5 (5=Spare)	
+	
+	movf	PRODL,W
+	addlw	d'193'						; Description text offset
+	movwf	menupos						; Used as loop counter temp
+	
+	movlw	d'7'
+	movwf	temp1						; Loop 7 times
+
+menu0:
+	movf	menupos,W	
+	call	displaytext1				; Display text!
+	incf	menupos,F
+	
+	decfsz	temp1,F
+	bra		menu0						; loop 7 times
+
+	movlw	d'30'
+	call	startup_screen3a
+	goto	restart						; Restart to surfacemode
+
+more_setup_menu:
+	movlw	d'1'
+	movwf	menupos
+more_setup_menu2:
+	bcf		leftbind
+	call	PLED_ClearScreen
+	call	PLED_more_setup_menu_mask
+more_setup_menu3a:
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	bsf		menubit
+	bsf		cursor
+	call	show_debugstate
+	call	show_dateformat
+	call	PLED_menu_cursor
+	bcf		switch_left
+	bcf		switch_right
+
+more_setup_menu_loop:
+	call	check_switches_menu
+
+	movlw	d'3'				; x-1 menu entries
+	cpfseq	menupos
+	bra		more_setup_menu_loop2
+	movlw	d'6'
+	movwf	menupos
+	call	PLED_menu_cursor
+more_setup_menu_loop2:
+
+	btfsc	menubit2
+	bra		do_more_setup_menu						; call submenu
+
+	btfss	menubit
+	goto	restart						; exit menu, restart and enter surfmode
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+	btfsc	onesecupdate
+	call	set_dive_modes
+	btfsc	onesecupdate
+	call	test_charger				; check if charger IC is active
+	btfsc	onesecupdate
+	call	get_battery_voltage			; get battery voltage
+
+	bcf		onesecupdate				; End of one second tasks
+
+	btfsc	sleepmode
+	goto	setup_menu					; exit menu
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		more_setup_menu_loop	
+
+do_more_setup_menu:								; calls submenu
+	dcfsnz	menupos,F
+	bra		toggle_datemode
+	dcfsnz	menupos,F
+	bra		toggle_debugmode
+	dcfsnz	menupos,F
+	bra		setup_menu						; spare
+	dcfsnz	menupos,F
+	bra		setup_menu						; spare
+	dcfsnz	menupos,F
+	bra		setup_menu						; spare
+	movlw	d'5'					; set cursor to "More again"
+	movwf	menupos
+	bra		setup_menu2						; exit...
+
+toggle_salinity:
+; Toggles between 1.00 and 1.04
+	read_int_eeprom	d'26'			; Read Salinity from EEPROM
+	incf	EEDATA,F				; Increase value
+	
+	movlw	d'99'					; 99% ?
+	cpfsgt	EEDATA					; Salinity lower limit
+	bra		toggle_salinity_reset	; Out of limit, reset value to 1.00
+	movlw	d'105'					; 105% ?
+	cpfslt	EEDATA					; Salinity higher limit
+	bra		toggle_salinity_reset	; Out of limit, reset value to 1.00
+
+toggle_salinity2:
+	write_int_eeprom	d'26'			; Store salinity
+	movlw	d'3'
+	movwf	menupos
+	bcf		switch_right
+	bra		setup_menu3a			; return to manu loop
+
+toggle_salinity_reset:
+	movlw	d'100'
+	movwf	EEDATA
+	bra		toggle_salinity2			; back
+
+show_salinity_value:
+	read_int_eeprom	d'26'			; Read Salinity from EEPROM
+	movlw	d'99'					; 99% ?
+	cpfsgt	EEDATA					; Salinity lower limit
+	rcall	toggle_salinity_reset2	; Reset before display!
+	movlw	d'105'					; 105% ?
+	cpfslt	EEDATA					; Salinity higher limit
+	rcall	toggle_salinity_reset2	; Reset before display!
+	WIN_TOP		.95
+	WIN_LEFT	.83
+	WIN_FONT 	FT_SMALL
+	lfsr	FSR2,letter
+	movff	EEDATA,lo
+	clrf	hi
+	bsf		leftbind
+	output_16dp	d'3'
+	bcf		leftbind
+	movlw	'k'
+	movwf	POSTINC2
+	movlw	'g'
+	movwf	POSTINC2
+	movlw	'/'
+	movwf	POSTINC2
+	movlw	'l'
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+toggle_salinity_reset2:
+	movlw	d'100'
+	movwf	EEDATA
+	write_int_eeprom	d'26'			; Store salinity
+	return
+	
+toggle_datemode:
+; Toggles setting for 
+; MM/DD/YY =0, Default
+; DD/MM/YY =1
+; YY/MM/DD =2
+	read_int_eeprom	d'91'				; Read date format
+	incf	EEDATA,F
+	movlw	d'2'
+	cpfsgt	EEDATA
+	bra		toggle_datemode1
+	clrf	EEDATA
+toggle_datemode1:
+	write_int_eeprom	d'91'			; Store date format
+	movlw	d'1'
+	movwf	menupos
+	bcf		switch_right
+	bra		more_setup_menu3a			; return to manu loop
+
+show_dateformat:
+	read_int_eeprom d'91'			; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
+	tstfsz	EEDATA
+	bra		show_dateformat2
+	DISPLAYTEXTH	.259			; MM/DD/YY = 0
+	return
+show_dateformat2:
+	decfsz	EEDATA,F
+	bra		show_dateformat3
+	DISPLAYTEXTH	.260			; DD/MM/YY = 1
+	return
+show_dateformat3:
+	DISPLAYTEXTH	.261			; YY/MM/DD = 2 
+	return
+
+toggle_debugmode:
+	read_int_eeprom	d'39'				; Read status
+	incf	EEDATA,F
+	movlw	d'1'
+	cpfsgt	EEDATA
+	bra		toggle_debugmode1
+	clrf	EEDATA
+toggle_debugmode1:
+	write_int_eeprom	d'39'			; Store status
+	bsf		debug_mode					; set flag
+	movlw	d'1'
+	cpfseq	EEDATA
+	bcf		debug_mode					; clear flag
+	movlw	d'2'
+	movwf	menupos
+	bcf		switch_right
+	bra		more_setup_menu3a			; return to manu loop
+
+show_debugstate:
+	read_int_eeprom	d'39'
+	tstfsz	EEDATA
+	bra		show_debugstate2
+	DISPLAYTEXT	.131			; OFF
+show_debugstate2:
+	decf	EEDATA,F
+	tstfsz	EEDATA
+	bra		show_decotype3
+	DISPLAYTEXT	.130			; ON
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_battery.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,193 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Submenu battery state
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 05/15/08
+; last updated: 05/15/08
+; known bugs:
+; ToDo: 
+
+menu_battery_state:
+	call	PLED_ClearScreen
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.114		; Battery Information
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	
+	WIN_TOP		.35
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.115		; Cycles:
+	read_int_eeprom	d'50'	; Get charge cycles
+	movff	EEDATA,lo
+	read_int_eeprom	d'51'
+	movff	EEDATA,hi
+	bsf		leftbind
+	output_16
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	read_int_eeprom	d'52'	; Get complete cycles
+	movff	EEDATA,lo
+	read_int_eeprom	d'53'
+	movff	EEDATA,hi
+	bsf		leftbind
+	output_16
+	movlw	')'
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.65
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.117		; Last Complete at:
+	read_int_eeprom	d'47'	; Month
+	movff	EEDATA,convert_value_temp+0
+	read_int_eeprom	d'48'	; Day
+	movff	EEDATA,convert_value_temp+1
+	read_int_eeprom	d'49'	; Year
+	movff	EEDATA,convert_value_temp+2
+	call	PLED_convert_date		; coverts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	call	word_processor
+
+	WIN_TOP		.95
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.118		; Lowest Battery:
+	read_int_eeprom	d'40'	; Batt LOW
+	movff	EEDATA,lo
+	read_int_eeprom	d'41'	; Batt HIGH
+	movff	EEDATA,hi
+	movlw	d'1'
+	movwf	ignore_digits
+	bsf		leftbind
+	output_16dp	d'2'
+	bcf		leftbind
+	movlw	'V'
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.125
+	lfsr	FSR2,letter
+	OUTPUTTEXT .119		; Lowest Battery at:
+	read_int_eeprom	d'42'	; Month
+	movff	EEDATA,convert_value_temp+0
+	read_int_eeprom	d'43'	; Day
+	movff	EEDATA,convert_value_temp+1
+	read_int_eeprom	d'44'	; Year
+	movff	EEDATA,convert_value_temp+2
+	call	PLED_convert_date		; coverts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	call	word_processor
+
+	WIN_TOP		.155
+	lfsr	FSR2,letter
+	OUTPUTTEXT .120		; Temp min:
+	read_int_eeprom	d'54'	; TEMP_min LOW
+	movff	EEDATA,lo
+	read_int_eeprom	d'55'	; TEMP_min HIGH
+	movff	EEDATA,hi
+	movlw	d'3'
+	movwf	ignore_digits
+	bsf		leftbind			; left orientated output
+	output_16dp	d'2'
+	bcf		leftbind
+	movlw	'°'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	read_int_eeprom	d'56'	; Month
+	movff	EEDATA,convert_value_temp+0
+	read_int_eeprom	d'57'	; Day
+	movff	EEDATA,convert_value_temp+1
+	read_int_eeprom	d'58'	; Year
+	movff	EEDATA,convert_value_temp+2
+	call		PLED_convert_date		; coverts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.185
+	lfsr	FSR2,letter
+	OUTPUTTEXT .121		; Temp max:
+	read_int_eeprom	d'59'	; TEMP_max LOW
+	movff	EEDATA,lo
+	read_int_eeprom	d'60'	; TEMP_max HIGH
+	movff	EEDATA,hi
+	movlw	d'3'
+	movwf	ignore_digits
+	bsf		leftbind			; left orientated output
+	output_16dp	d'2'
+	bcf		leftbind
+	movlw	'°'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	read_int_eeprom	d'61'	; Month
+	movff	EEDATA,convert_value_temp+0
+	read_int_eeprom	d'62'	; Day
+	movff	EEDATA,convert_value_temp+1
+	read_int_eeprom	d'63'	; Year
+	movff	EEDATA,convert_value_temp+2
+	call	PLED_convert_date		; coverts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	
+menu_battery_state5:
+	btfss	SWITCH2
+	bra		menu_battery_state5
+	
+	bcf		switch_left
+	bcf		switch_right
+	bcf		menubit2
+menu_battery_state_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit2
+	bra		menu_battery_state_exit		; Exit
+
+	btfsc	divemode
+	goto	restart			; dive started!
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	; 1 sec. functions done
+
+	btfsc	sleepmode
+	bra		menu_battery_state_exit
+
+	bra		menu_battery_state_loop
+	
+menu_battery_state_exit:		; exit...
+	movlw	d'3'
+	movwf	menupos
+	goto	more_menu2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_custom.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,706 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Menu "Custom Functions", Custom Functions checker (Displays permanent warning if critical custom functions are altered)
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 05/10/30
+; last updated: 08/08/31
+; known bugs:
+; ToDo: 
+
+;First Bank of Custom Functions:
+; The custom functions are stored in the internal EEPROM after 0x80
+; any custom function occupies 4 byte:
+; 2 byte (low:high) store the default value, reset from menu "reset"
+; if bit16=1 then the custrom function is 15bit value, if not it's a 8bit value
+; 2 byte (low:high) store the actual value
+; defaults for custom functions are in menu "reset"
+; get values with GETCUSTOM8	.x with x=0...32 for 8 Bit values (stored in WREG)
+; or with GETCUSTOM15	.x with x=0...32 for 15 Bit values (stored in lo and hi)
+
+;Second Bank of Custom Functions:
+; The custom functions are stored in the internal EEPROM after 0x180
+; any custom function occupies 4 byte:
+; 2 byte (low:high) store the default value, reset from menu "reset"
+; if bit16=1 then the custrom function is 15bit value, if not it's a 8bit value
+; 2 byte (low:high) store the actual value
+; defaults for custom functions are in menu "reset"
+; get values with GETCUSTOM8	.x with x=0...32 for 8 Bit values (stored in WREG)
+; or with GETCUSTOM15	.x with x=0...32 for 15 Bit values (stored in lo and hi)
+
+
+GETCUSTOM8	macro	custom8
+	movlw	custom8
+	call	getcustom8_1
+	endm
+
+getcustom8_1:
+	; # number of requested custom function in wreg
+	movwf	customfunction_temp2
+	
+	movlw	d'31'
+	cpfsgt	customfunction_temp2
+	bra		getcustom8_2			; Lower bank
+	
+	movlw	d'1'					; Upper Bank
+	movwf	EEADRH
+	movlw	d'32'
+	subwf	customfunction_temp2,F
+	bra		getcustom8_3
+
+getcustom8_2:
+	clrf	EEADRH
+getcustom8_3:
+	movf	customfunction_temp2,W
+	mullw	d'4'
+	movf	PRODL,W			; x4 for adress
+	addlw	d'130'
+	movwf	EEADR			; +130 for LOW Byte of value
+	call	read_eeprom		; Lowbyte
+	movf	EEDATA,W		; copied into wreg
+	clrf	EEADRH
+	return					; return
+
+GETCUSTOM15	macro	custom15
+	movlw	custom15
+	call	getcustom15_1
+	endm
+
+getcustom15_1:
+	; # number of requested custom function in wreg
+	movwf	customfunction_temp2
+	
+	movlw	d'31'
+	cpfsgt	customfunction_temp2
+	bra		getcustom15_2			; Lower bank
+	
+	movlw	d'1'					; Upper Bank
+	movwf	EEADRH
+	movlw	d'32'
+	subwf	customfunction_temp2,F
+	bra		getcustom15_3
+getcustom15_2:
+	clrf	EEADRH
+getcustom15_3:
+	movf	customfunction_temp2,W
+	mullw	d'4'
+	movf	PRODL,W			; x4 for adress
+	addlw	d'130'
+	movwf	EEADR			; +130 for LOW Byte of value
+	call	read_eeprom		; Lowbyte
+	movff	EEDATA,lo
+	incf	EEADR,F
+	call	read_eeprom		; Highbyte
+	movff	EEDATA,hi
+	clrf	EEADRH
+	return					; return
+
+menu_custom_functions_page2:
+	movlw	d'154'			; start of custom function descriptors		
+	movwf	customfunction_temp1
+	bsf		customfunction_page	; Use Page I...
+	movlw	d'1'
+	movwf	EEADRH
+	bra		menu_custom_functions0
+
+menu_custom_functions:
+	movlw	d'36'			; start of custom function descriptors		
+	movwf	customfunction_temp1
+	bcf		customfunction_page	; Use Page I...
+	clrf	EEADRH
+	
+menu_custom_functions0:
+	bsf		leftbind
+	call	PLED_ClearScreen
+	movlw	d'1'
+	movwf	menupos
+
+	bcf		menubit4
+	bcf		cursor
+	bcf		sleepmode
+	clrf	decodata+0				; here: # of CustomFunction
+	clrf	divemins+0				; here: # of CustomFunction*4
+	bcf		first_FA				; here: =1: -, =0: +
+	bcf		second_FA				; here: =1: stepsize 1, =0: stepsize 10
+
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+
+	btfss	customfunction_page		;
+	bra		menu_custom_functions10
+	DISPLAYTEXT	.186				; Custom FunctionsII
+	bra		menu_custom_functions11
+	
+menu_custom_functions10:
+	DISPLAYTEXT	.27					; Custom FunctionsI
+	
+menu_custom_functions11:
+	WIN_INVERT	.0	; Init new Wordprocessor	
+
+menu_custom_functions1:
+	clrf	timeout_counter2
+	bcf		menubit2
+	bcf		menubit3
+	WIN_LEFT 	.20
+	WIN_TOP		.35
+	lfsr	FSR2,letter
+	movff	decodata+0,lo
+	
+	movlw	d'0'
+	btfsc	customfunction_page			; Add offset for display
+	movlw	d'32'
+	addwf	lo,F
+	movff	lo,apnoe_mins				; apnoe_mins used as temp for binary CFs
+				
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+
+;	movlw	d'16'
+;	movwf	temp1
+;	WIN_LEFT 	.40
+;	WIN_TOP		.35
+;	call	PLED_display_clear_common_y1
+;
+	movf	customfunction_temp1,W		; start of custom function descriptors		
+	addwf	decodata+0,W				; add # of current custom function, place result in wreg
+	call	displaytext1				; shows descriptor
+
+	movlw	binary_cf1
+	subwf	apnoe_mins,W						; Binary cf?
+	btfsc	STATUS,Z
+	bra		menu_custom_functions10c			; Yes
+
+	movlw	binary_cf2
+	subwf	apnoe_mins,W						; Binary cf?
+	btfsc	STATUS,Z
+	bra		menu_custom_functions10c			; Yes
+
+	movlw	binary_cf3
+	subwf	apnoe_mins,W						; Binary cf?
+	btfsc	STATUS,Z
+	bra		menu_custom_functions10c			; Yes
+
+	movlw	binary_cf4
+	subwf	apnoe_mins,W						; Binary cf?
+	btfsc	STATUS,Z
+	bra		menu_custom_functions10c			; Yes
+
+	movlw	binary_cf5
+	subwf	apnoe_mins,W						; Binary cf?
+	btfsc	STATUS,Z
+	bra		menu_custom_functions10c			; Yes
+
+
+	bra		menu_custom_functions10a			; Not a  binary CF selected
+
+menu_custom_functions10c:
+	movlw	d'1'
+	movwf	apnoe_mins					; Yes, set apnoe_mins to "1"
+	bra		menu_custom_functions10b
+
+menu_custom_functions10a:
+	clrf	apnoe_mins					; Yes, clear apnoe_mins
+menu_custom_functions10b:
+	WIN_LEFT 	.20
+	WIN_TOP		.65
+	lfsr	FSR2,letter
+	movlw	'+'
+	movwf	POSTINC2
+	movlw	'/'
+	movwf	POSTINC2
+	movlw	'-'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'+'
+	btfsc	first_FA
+	movlw	'-'
+	movwf	POSTINC2
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.95
+	lfsr	FSR2,letter
+	movlw	'1'
+	movwf	POSTINC2
+	movlw	'/'
+	movwf	POSTINC2
+	movlw	'1'
+	movwf	POSTINC2
+	movlw	'0'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'1'
+	movwf	POSTINC2
+	movlw	'0'
+	btfsc	second_FA
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.125
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'89'				;"Default:"
+	
+	movf	divemins+0,W
+	addlw	0x80
+	movwf	EEADR
+	call	read_eeprom				; Lowbyte
+	movff	EEDATA,lo
+	movf	divemins+0,W
+	addlw	0x81
+	movwf	EEADR
+	call	read_eeprom				; Highbyte
+	movff	EEDATA,hi
+	bcf		hi,7					; clear Bit 7 of value
+	output_16
+	movlw	'('
+	movwf	POSTINC2
+
+	movlw	'1'
+	btfss	EEDATA,7				; 15Bit?
+	movlw	'8'						; 8Bit!
+	tstfsz  apnoe_mins				; apnoe_mins=0?
+	movlw	'1'						; No, 1Bit!
+	movwf	POSTINC2
+
+	movlw	'5'
+	btfsc	EEDATA,7				; 15Bit?
+	movwf	POSTINC2
+
+	movlw	'B'
+	movwf	POSTINC2
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.155
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'97'				; "Current:"
+
+	movf	divemins+0,W
+	addlw	0x82
+	movwf	EEADR
+	call	read_eeprom				; Lowbyte
+	movff	EEDATA,lo
+	movf	divemins+0,W
+	addlw	0x83
+	movwf	EEADR
+	call	read_eeprom				; Highbyte
+	movff	EEDATA,hi
+	output_16
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+menu_custom_functions1a:
+	DISPLAYTEXT	.11					; Exit
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	call	PLED_menu_cursor
+
+customfunctions_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit3
+	bra	customfunctions2		; Move cursor or generate next page
+
+	btfsc	menubit2
+	bra	do_customfunction		; call subfunction
+
+	btfsc	divemode
+	goto	restart					; dive started during cf menu
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate			; end of 1sek. tasks
+
+	btfsc	sleepmode
+	bra	exit_customfunctions
+
+	bra	customfunctions_loop
+
+customfunctions2:
+	incf	menupos,F
+	movlw	d'7'
+	cpfseq	menupos					; =7?
+	bra		customfunctions3		; No
+	movlw	d'1'
+	movwf	menupos
+
+customfunctions3:
+	clrf	timeout_counter2
+	call	PLED_menu_cursor
+	
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+
+	bcf		menubit3				; clear flag
+	bra		customfunctions_loop
+
+
+do_customfunction:
+	CLRF	EEADRH					
+	movlw	d'1'
+	btfsc	customfunction_page
+	movwf	EEADRH					; Reset EEADRH correct (Was adjusted in check_timeout...)
+
+	dcfsnz	menupos,F
+	bra		next_customfunction
+	dcfsnz	menupos,F
+	bra		toggle_plusminus
+	dcfsnz	menupos,F
+	bra		toggle_oneorten
+	dcfsnz	menupos,F
+	bra		restore_cfn_value
+	dcfsnz	menupos,F
+	bra		adjust_cfn_value
+exit_customfunctions:
+	movlw	d'2'					; Return to correct list entry
+	btfss	customfunction_page
+	movlw	d'1'
+	movwf	menupos					; 
+	clrf	EEADRH					; Clear EEADRH !
+	goto	setup_menu2				; exit...
+
+
+next_customfunction:
+	incf	decodata+0
+	btfsc	decodata+0,5			;>31?
+	clrf	decodata+0				;Yes, so reset to zero
+	
+	movf	decodata+0,W
+	mullw	d'4'
+	movff	PRODL, divemins+0		;divemins+0 for correct addressing
+
+	movlw	d'1'
+	movwf	menupos
+	bra		menu_custom_functions1	; also debounces switches
+
+toggle_plusminus:
+	btg		first_FA
+	movlw	d'2'
+	movwf	menupos
+	bra		menu_custom_functions1	; also debounces switches
+
+toggle_oneorten:
+	btg		second_FA
+	movlw	d'3'
+	movwf	menupos
+	bra		menu_custom_functions1	; also debounces switches
+
+restore_cfn_value:
+	movf	divemins+0,W			; read default value
+	addlw	0x80
+	movwf	EEADR
+	call	read_eeprom				; Lowbyte
+	movff	EEDATA,lo
+	movf	divemins+0,W
+	addlw	0x81
+	movwf	EEADR
+	call	read_eeprom				; Highbyte
+	movff	EEDATA,hi
+	bcf		hi,7					; clear bit 7 of value
+
+	movf	divemins+0,W			; store default value
+	addlw	0x82
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom			; Lowbyte
+	movf	divemins+0,W
+	addlw	0x83
+	movwf	EEADR
+	movff	hi,EEDATA
+	call	write_eeprom			; Highbyte
+
+	movlw	d'4'
+	movwf	menupos
+	bra		menu_custom_functions1	; also debounces switches
+
+adjust_cfn_value:
+	movf	divemins+0,W			; get current value
+	addlw	0x82
+	movwf	EEADR
+	call	read_eeprom				; Lowbyte
+	movff	EEDATA,lo
+	movf	divemins+0,W
+	addlw	0x83
+	movwf	EEADR
+	call	read_eeprom				; Highbyte
+	movff	EEDATA,hi
+
+	movf	divemins+0,W
+	addlw	0x81
+	movwf	EEADR
+	call	read_eeprom				; Highbyte
+	movff	EEDATA,divemins+1		; Highbyte of default value
+
+	movlw	d'1'
+	cpfseq	apnoe_mins				; If apnoe_mins=1 then CF is binary
+	bra		adjust_cfn_value1		; Not Binary
+
+	tstfsz	lo				; =0?
+	setf	lo				; No, Set to 255
+	incf	lo,F			; Increase by one
+	clrf	hi				; Delete hi byte (Not required but to make sure...)
+	bra		adjust_cfn_value3		; Store result
+
+adjust_cfn_value1:
+	btfss	first_FA				; Minus?
+	bra		adjust_cfn_value2		; No, Plus
+
+	movlw	d'1'
+	btfsc	second_FA				; -10?
+	movlw	d'10'
+	
+	subwf	lo,F					; substract value
+	movlw	d'0'
+	btfsc	divemins+1,7			; 8Bit value
+	subwfb	hi,F
+
+	movlw	b'01111111'
+	btfsc	hi,7					; >32768?
+	movwf	hi						
+
+	bra		adjust_cfn_value3
+	
+adjust_cfn_value2:
+	movlw	d'1'
+	btfsc	second_FA				; +10?
+	movlw	d'10'
+	
+	addwf	lo,F					; add value
+	movlw	d'0'
+	btfsc	divemins+1,7			; 8Bit value?
+	addwfc	hi,F
+
+	btfsc	hi,7					; >32768?
+	clrf	hi
+
+adjust_cfn_value3:
+	movf	divemins+0,W			; Store current value
+	addlw	0x82
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom			; Lowbyte
+	movf	divemins+0,W
+	addlw	0x83
+	movwf	EEADR
+	movff	hi,EEDATA
+	call	write_eeprom			; Highbyte 
+	movlw	d'5'
+	movwf	menupos
+	bra		menu_custom_functions1	; also debounces switches
+
+getcustom15_default:
+	; # number of requested custom function in wreg
+	movwf	customfunction_temp2
+	
+	movlw	d'31'
+	cpfsgt	customfunction_temp2
+	bra		getcustom15_d2			; Lower bank
+	
+	movlw	d'1'					; Upper Bank
+	movwf	EEADRH
+	movlw	d'32'
+	subwf	customfunction_temp2,F
+	bra		getcustom15_d3
+getcustom15_d2:
+	clrf	EEADRH
+getcustom15_d3:
+	movf	customfunction_temp2,W
+	mullw	d'4'
+	movf	PRODL,W			; x4 for adress
+	addlw	d'128'
+	movwf	EEADR			; +130 for LOW Byte of value
+	call	read_eeprom		; Lowbyte
+	movff	EEDATA,lo
+	incf	EEADR,F
+	call	read_eeprom		; Highbyte
+	movff	EEDATA,hi
+	clrf	EEADRH
+	return					; return
+
+custom_functions_check_divemode:			;displays warning if a critical custom function is not set to default
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf11
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf12
+	return
+
+custom_functions_check_surfmode:			;displays warning if a critical custom function is not set to default
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf11
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf12
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf17
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf18
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf19
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf29
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf32
+	dcfsnz	cf_checker_counter,F			; counts custom functions to check for warning symbol
+	bra		check_cf33
+	return
+
+check_cf11:
+	movlw	d'11'					; saturation factor
+	rcall	custom_function_check_low	; compares current with default value
+	call	test_and_display_warning	; displays the warning if the custom function is not correct
+	movlw	d'2'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf12:
+	movlw	d'12'					; desaturation factor
+	rcall	custom_function_check_high	; compares current with default value
+	call	test_and_display_warning	; displays the warning if the custom function is not correct
+	movlw	d'3'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf17:
+	movlw	d'17'					; lower threshold ppO2
+	rcall	custom_function_check_low	; compares current with default value
+	call	test_and_display_warning	; displays the warning if the custom function is not correct
+	movlw	d'4'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf18:
+	movlw	d'18'					; upper threshold ppO2
+	rcall	custom_function_check_high	; compares current with default value
+	call	test_and_display_warning	; displays the warning if the custom function is not correct
+	movlw	d'5'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf19:
+	movlw	d'19'					; upper threshold ppO2 display
+	rcall	custom_function_check_high	; compares current with default value
+	call	test_and_display_warning	; displays the warning if the custom function is not correct
+	movlw	d'6'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf29:
+	movlw	d'6'
+	movwf	cf_checker_counter		; upper limit for CF29, here: used as a temp variable
+	movlw	d'29'					; last deco stop in [m]
+	rcall	custom_function_check_high_limit	; compares current with default value
+	call	test_and_display_warning			; displays the warning if the custom function is not correct
+	movlw	d'7'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf32:
+	movlw	d'32'					; GF LOW
+	rcall	custom_function_check_high	; compares current with default value
+	call	test_and_display_warning			; displays the warning if the custom function is not correct
+	movlw	d'8'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+check_cf33:
+	movlw	d'33'					; GF HIGH
+	rcall	custom_function_check_high	; compares current with default value
+	call	test_and_display_warning			; displays the warning if the custom function is not correct
+	movlw	d'1'						; next in testing row
+	movwf	cf_checker_counter			; 
+	return
+
+
+test_and_display_warning:
+	movwf	lo						; copy result
+	tstfsz	lo
+	return							; CF OK
+	goto	custom_warn_surfmode
+
+custom_function_check_low:					; Checks CF (#WREG)
+											; Returns WREG=0 if CF is lower then default
+	movwf	temp1							; save for custom value
+	call	getcustom15_1					; Get Current Value stored in hi and lo
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1						; save value
+	
+	movf	temp1,w
+	call	getcustom15_default				; Get Default value stored in hi and lo
+	movff	lo,sub_b+0
+	movff	hi,sub_b+1						; save value
+	call	sub16							; sub_c = sub_a - sub_b with "neg_flag" bit set if sub_b > sub_a
+	btfss	neg_flag						; negative?
+	retlw	.255							; no
+	retlw	.0								; yes
+
+custom_function_check_high:					; Checks CF (#WREG)
+											; Returns WREG=0 if CF is higher then default
+	movwf	temp1							; save for custom value
+	call	getcustom15_1					; Get Current Value stored in hi and lo
+	movff	lo,sub_b+0
+	movff	hi,sub_b+1						; save value
+	
+	movf	temp1,w
+	call	getcustom15_default				; Get Default value stored in hi and lo
+	movff	lo,sub_a+0
+	movff	hi,sub_a+1						; save value
+	call	sub16							; sub_c = sub_a - sub_b with "neg_flag" bit set if sub_b > sub_a
+	btfss	neg_flag						; negative?
+	retlw	.255							; no
+	retlw	.0								; yes
+
+custom_function_check_high_limit:			; Checks if CF (#WREG) is lower then limit (#cf_checker_counter)
+	movwf	temp1							; save for custom value
+	call	getcustom15_1					; Get Current Value stored in hi and lo
+	movff	lo,sub_b+0
+	movff	hi,sub_b+1						; save value
+	movff	cf_checker_counter, sub_a+0
+	clrf	sub_a+1
+	call	sub16							; sub_c = sub_a - sub_b with "neg_flag" bit set if sub_b > sub_a
+	btfss	neg_flag						; negative?
+	retlw	.255							; no
+	retlw	.0								; yes
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_gassetup.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,1111 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Gas Setup menu
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/08/07
+; last updated: 080906
+; known bugs:
+; ToDo: 
+
+menu_gassetup:				
+	movlw	d'1'
+	movwf	menupos
+
+menu_gassetup_prelist:
+	call	PLED_ClearScreen
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor
+	DISPLAYTEXT	.106			; Gas List
+	WIN_INVERT	.0	; Init new Wordprocessor
+	clrf	decodata+0				; Here: # of gas 0-4
+	clrf	divemins+0				; Here: # of Gas * 4
+	movlw	d'5'
+	movwf	waitms_temp		; here: stores row for gas list
+	movlw	d'2'
+	movwf	wait_temp			; here: stores eeprom address for gas list
+
+; Changed v1.44se
+menu_gassetup_list:
+	WIN_LEFT	.20
+	movlw	d'4'
+	addwf	wait_temp,F			; Increase eeprom address for gas list
+	movlw	d'30'
+	addwf	waitms_temp,F		; Increase row
+	movf	waitms_temp,W		; Load row into WREG
+	movff	WREG,win_top
+	lfsr	FSR2,letter
+	movlw	'G'
+	movwf	POSTINC2
+	movff	decodata+0,lo		
+	incf	lo,F				
+	bsf		leftbind
+	output_99
+	movlw	':'
+	movwf	POSTINC2
+	
+	call	menu_gassetup_grey_inactive			; Sets Greyvalue for inactive gases
+	call	word_processor
+	WIN_LEFT	.40
+	movf	waitms_temp,W		; Load row into WREG
+	movff	WREG,win_top
+	lfsr	FSR2,letter
+
+	movlw	d'33'
+	movwf	EEADR
+	call	read_eeprom			; Get current startgas 1-5 # into EEDATA
+	decf	EEDATA,W			; 0-4
+	cpfseq	decodata+0			; =current displayed gas #?
+	bra		menu_gassetup_Tx	; no, do not display *
+	movlw	'*'					; display *
+	movwf	POSTINC2	
+
+; New v1.44se
+menu_gassetup_Tx:
+	call	menu_gassetup_grey_inactive			; Sets Greyvalue for inactive gases	
+	call	word_processor
+
+	WIN_LEFT	.48
+	movf	waitms_temp,W		; Load row into WREG
+	movff	WREG,win_top
+	lfsr	FSR2,letter
+
+	movff	wait_temp, EEADR	; Gas %He - Set address in internal EEPROM
+	incf	EEADR,F				; Gas %He - Set address in internal EEPROM
+	call	read_eeprom			; Read He value from EEPROM
+	movff	EEDATA,lo			; Move EEDATA -> lo
+	movf	lo,f				; Move lo -> f
+	movlw	d'0'				; Move 0 -> WREG
+	cpfsgt	lo					; He > 0?
+	bra 	menu_gassetup_Nx	; NO check o2
+
+	; YES Write TX 15/55
+	call 	gassetup_write_Tx
+	movff	wait_temp, EEADR	; Gas %O2 - Set address in internal EEPROM
+	call	read_eeprom			; O2 value
+	movff	EEDATA,lo
+	output_8
+	movlw	'/'
+	movwf	POSTINC2
+	incf	EEADR,F				; Gas #hi: %He - Set address in internal EEPROM
+	call	read_eeprom			; He value
+	movff	EEDATA,lo
+	output_8
+	bra 	menu_gassetup_list0
+
+; New v1.44se
+menu_gassetup_Nx:
+	movff	wait_temp, EEADR	; Gas %O2 - Set address in internal EEPROM
+	call	read_eeprom			; Read O2 value from EEPROM
+	movff	EEDATA,lo			; Move EEDATA -> lo
+	movf	lo,f				; Move lo -> f
+	movlw	d'21'				; Move 21 -> WREG
+	cpfsgt	lo					; o2 > 21%
+	bra 	menu_gassetup_Air	; NO AIR
+	movlw	d'100'				; Move 100 -> WREG
+	cpfslt	lo					; o2 < 100%
+	bra		menu_gassetup_O2	; NO write O2
+	
+	; YES Write NX 32
+	call	gassetup_write_Nx
+	output_8
+	bra 	menu_gassetup_list0
+
+; New v1.44se
+menu_gassetup_O2:
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	output_8
+	bra 	menu_gassetup_list0
+
+; New v1.44se
+menu_gassetup_Air:
+	cpfseq	lo					; o2 = 21%
+	call menu_gassetup_Err
+
+	movlw	'A'
+	movwf	POSTINC2
+	movlw	'I'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	' '		
+	movwf	POSTINC2
+	output_8
+	bra 	menu_gassetup_list0
+
+; New v1.44se
+menu_gassetup_Err:
+	movlw	'E'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	' '		
+	movwf	POSTINC2
+	output_8
+
+; Changed v1.44se
+menu_gassetup_list0:
+	call	menu_gassetup_grey_inactive			; Sets Greyvalue for inactive gases
+	call	word_processor
+
+	WIN_LEFT	.105
+	movf	waitms_temp,W		; Load row into WREG
+	movff	WREG,win_top
+	lfsr	FSR2,letter
+
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'i'
+	movwf	POSTINC2
+	movlw	'n'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movf	decodata+0,W		; read current value 
+	addlw	d'28'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	output_8
+	movlw	'm'
+	movwf	POSTINC2
+	call	menu_gassetup_grey_inactive			; Sets Greyvalue for inactive gases
+	call	word_processor	
+
+	WIN_COLOR	color_white	
+	
+	incf	decodata+0,F
+	movlw	d'5'	
+	cpfseq	decodata+0
+	goto	menu_gassetup_list
+
+	DISPLAYTEXT	.11			; Exit
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	call	PLED_menu_cursor
+
+gassetup_list_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit3
+	bra		gassetup_list2		; move cursor
+
+	btfsc	menubit2
+	bra		do_gassetup_list; call gas-specific submenu
+
+	btfsc	divemode
+	goto	restart			; dive started!
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	; 1 sec. functions done
+
+	btfsc	sleepmode
+	bra		exit_gassetup_list
+
+	bra		gassetup_list_loop
+
+gassetup_list2:
+	incf	menupos,F
+	movlw	d'7'
+	cpfseq	menupos			; =7?
+	bra		gassetup_list3	; No
+	movlw	d'1'
+	movwf	menupos
+
+gassetup_list3:
+	clrf	timeout_counter2
+	call	PLED_menu_cursor
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+
+	bcf		menubit3		; clear flag
+	bra		gassetup_list_loop
+
+exit_gassetup_list:			; exit...
+	movlw	d'2'
+	movwf	menupos
+	goto	menu2
+
+do_gassetup_list:
+	dcfsnz	menupos,F
+	bra		gassetup_list_edit_gas1
+	dcfsnz	menupos,F
+	bra		gassetup_list_edit_gas2
+	dcfsnz	menupos,F
+	bra		gassetup_list_edit_gas3
+	dcfsnz	menupos,F
+	bra		gassetup_list_edit_gas4
+	dcfsnz	menupos,F
+	bra		gassetup_list_edit_gas5
+	bra		exit_gassetup_list			; Exit List
+
+gassetup_list_edit_gas1:
+	movlw	d'0'
+	movwf	decodata+0
+	movlw	d'0'
+	movwf	divemins+0
+	bra		menu_gassetup_page1
+
+gassetup_list_edit_gas2:
+	movlw	d'1'
+	movwf	decodata+0
+	movlw	d'4'
+	movwf	divemins+0
+	bra		menu_gassetup_page1
+
+gassetup_list_edit_gas3:
+	movlw	d'2'
+	movwf	decodata+0
+	movlw	d'8'
+	movwf	divemins+0
+	bra		menu_gassetup_page1
+
+gassetup_list_edit_gas4:
+	movlw	d'3'
+	movwf	decodata+0
+	movlw	d'12'
+	movwf	divemins+0
+	bra		menu_gassetup_page1
+
+gassetup_list_edit_gas5:
+	movlw	d'4'
+	movwf	decodata+0
+	movlw	d'16'
+	movwf	divemins+0
+	bra		menu_gassetup_page1
+
+menu_gassetup_page1:
+	movlw	d'1'
+	movwf	menupos
+	bcf		gas_setup_page2			; Page 1 of gassetup
+	bcf		menubit4
+	bcf		cursor
+	bcf		sleepmode
+	bcf		first_FA				; Here: =1: -, =0: +
+
+menu_gassetup0:
+	call	PLED_ClearScreen
+	DISPLAYTEXT	.30			; More...
+	DISPLAYTEXT	.11			; Exit
+
+menu_gassetup1:
+	clrf	timeout_counter2
+	bcf		menubit2
+	bcf		menubit3
+
+	rcall	gassetup_title_bar2			; Displays the title bar with the current Gas info
+
+	WIN_TOP		.65
+	WIN_LEFT	.20
+	lfsr	FSR2,letter
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom		; O2 value
+	movff	EEDATA,lo
+	output_8
+	movlw	'%'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	movlw	'M'
+	movwf	POSTINC2
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'D'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+
+; Show MOD in m
+	GETCUSTOM8 .18				; ppO2 warnvalue in WREG
+	mullw	d'10'
+	movff	PRODL,xA+0
+	movff	PRODH,xA+1			; ppO2 in [0.01Bar] * 10
+
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom			; O2 value
+	movff	EEDATA,xB+0
+	clrf	xB+1
+	call	div16x16			;xA/xB=xC with xA as remainder
+	movlw	d'10'
+	subwf	xC+0,F				; Subtract 10m...
+	movff	xC+0,lo
+	movlw	d'0'
+	subwfb	xC+1,F
+	movff	xC+1,hi
+	output_16
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor	
+
+	WIN_TOP		.95
+	lfsr	FSR2,letter
+	movlw	'H'
+	movwf	POSTINC2
+	movlw	'e'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom		; He value
+	movff	EEDATA,lo
+	output_8
+	movlw	'%'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+	WIN_TOP		.125
+	lfsr	FSR2,letter
+	movlw	'+'
+	movwf	POSTINC2
+	movlw	'/'
+	movwf	POSTINC2
+	movlw	'-'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'+'
+	btfsc	first_FA
+	movlw	'-'
+	movwf	POSTINC2
+	call	word_processor	
+
+	WIN_TOP		.155
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.89			; Default: 
+	movf	divemins+0,W
+	addlw	0x04
+	movwf	EEADR
+	call	read_eeprom		; Default O2 value
+	movff	EEDATA,lo
+	output_8
+	movlw	'/'
+	movwf	POSTINC2
+	movf	divemins+0,W
+	addlw	0x05
+	movwf	EEADR
+	call	read_eeprom		; Default He value
+	movff	EEDATA,lo
+	output_8
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	call	PLED_menu_cursor
+
+gassetup_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit3
+	bra		gassetup2	; move cursor
+
+	btfsc	menubit2
+	bra		do_gassetup		; call submenu
+
+	btfsc	divemode
+	goto	restart			; dive started!
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	; 1 sec. functions done
+
+	btfsc	sleepmode
+	bra		exit_gassetup
+
+	bra	gassetup_loop
+
+gassetup2:
+	incf	menupos,F
+	movlw	d'7'
+	cpfseq	menupos			; =7?
+	bra		gassetup3	; No
+	movlw	d'1'
+	movwf	menupos
+
+gassetup3:
+
+	clrf	timeout_counter2
+	call	PLED_menu_cursor
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+
+	bcf		menubit3		; clear flag
+	bra		gassetup_loop
+
+do_gassetup:
+	dcfsnz	menupos,F
+	bra		next_gas_page
+	dcfsnz	menupos,F
+	bra		adjust_o2
+	dcfsnz	menupos,F
+	bra		adjust_he
+	dcfsnz	menupos,F
+	bra		toggle_plus_minus_gassetup
+	dcfsnz	menupos,F
+	bra		restore_gas
+exit_gassetup:			; exit...
+	movff	decodata+0,menupos
+	incf	menupos,F
+	bra		menu_gassetup_prelist
+
+toggle_plus_minus_gassetup:
+	btg		first_FA
+	movlw	d'4'
+	movwf	menupos
+	bra		menu_gassetup1	; return
+
+next_gas:
+	movlw	d'1'
+	movwf	menupos
+	bra		menu_gassetup0		; incl. clear screen
+
+adjust_o2:
+	movf	divemins+0,W			; read current value 
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom		; Low-value
+	movff	EEDATA,lo
+
+	btfsc	first_FA				; Minus?
+	bra		adjust_o2_1			; yes, minus!
+	
+	incf	lo,F			; increase O2
+	movlw	d'101'
+	cpfseq	lo
+	bra		adjust_o2_2
+	movlw	d'4'			; LOWER O2 Limit
+	movwf	lo
+	bra		adjust_o2_2
+
+adjust_o2_1:
+	decf	lo,F			; decrease O2
+	movlw	d'3'
+	cpfseq	lo
+	bra		adjust_o2_2
+
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom		; read He value
+
+	movlw	d'100'
+	movwf	lo
+	movf	EEDATA,W		; He value
+	subwf	lo,F			; lo=100% - He%
+
+adjust_o2_2:				; test if O2+He>100...
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom		; read He value
+	movf	EEDATA,W		; He value
+	addwf	lo,W			; add O2 value
+	movwf	hi				; store in temp
+	movlw	d'101'
+	cpfseq	hi				; O2 and He > 100?
+	bra		adjust_o2_3		; No!
+
+	movlw	d'4'			; LOWER O2 Limit
+	movwf	lo
+	
+adjust_o2_3:
+	movf	divemins+0,W			; save current value
+	addlw	0x06
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom		; Low-value
+
+	movlw	d'2'
+	movwf	menupos
+	bra		menu_gassetup1	
+
+adjust_he:
+	movf	divemins+0,W			; read current value
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom		; Low-value
+	movff	EEDATA,lo
+
+	btfsc	first_FA			; Minus?
+	bra		adjust_he_1			; yes, minus!
+	
+	incf	lo,F
+	movlw	d'92'			; He limited to (useless) 90%
+	cpfseq	lo
+	bra		adjust_he_2
+	clrf	lo
+	bra		adjust_he_2
+
+adjust_he_1:
+	decf	lo,F			; decrease He
+	movlw	d'255'
+	cpfseq	lo
+	bra		adjust_he_2
+	clrf	lo
+
+adjust_he_2:				; test if O2+He>100...
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom		; read He value
+	movf	EEDATA,W		; He value
+	addwf	lo,W			; add O2 value
+	movwf	hi				; store in temp
+	movlw	d'101'
+	cpfseq	hi				; O2 and He > 100?
+	bra		adjust_he_3		; No!
+;	clrf	lo				; Yes, clear He to zero
+	decf	lo,F			; reduce He again = unchanged after operation
+
+adjust_he_3:
+	movf	divemins+0,W			; save current value
+	addlw	0x07
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom		; Low-value
+
+	movlw	d'3'
+	movwf	menupos
+	bra		menu_gassetup1	; 
+
+restore_gas:
+	movf	divemins+0,W			; read Default value 
+	addlw	0x04
+	movwf	EEADR
+	call	read_eeprom		; Low-value
+	movff	EEDATA,lo
+	movf	divemins+0,W
+	addlw	0x05
+	movwf	EEADR
+	call	read_eeprom		; High-value
+	movff	EEDATA,hi
+
+	movf	divemins+0,W			; save Default value
+	addlw	0x06
+	movwf	EEADR
+	movff	lo,EEDATA
+	call	write_eeprom		; Low-value
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	movff	hi,EEDATA
+	call	write_eeprom		; High-value
+
+	movlw	d'5'
+	movwf	menupos
+	bra		menu_gassetup1	; 
+
+
+next_gas_page:
+	call	PLED_ClearScreen		
+	movlw	d'1'
+	movwf	menupos
+	DISPLAYTEXT	.109		; Back
+
+	DISPLAYTEXT	.11			; Exit
+
+next_gas_page1:
+	clrf	timeout_counter2
+	bcf		menubit2
+	bcf		menubit3
+
+	rcall	gassetup_title_bar2			; Displays the title bar with the current Gas info
+	rcall	gassetup_show_ppO2			; Display the ppO2 of the change depth with the current gas
+
+	WIN_TOP		.65
+	WIN_LEFT	.20
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.105			; "Active Gas? "
+	read_int_eeprom		d'27'	; read flag register
+
+	; hi contains active gas flags in BIT0:4 ....
+
+	movff	decodata+0,lo	; Gas 0-4
+	incf	lo,F			; Gas 1-5
+
+active_gas_display:
+	rrcf	EEDATA			; roll flags into carry
+	decfsz	lo,F			; max. 5 times...
+	bra		active_gas_display
+	
+	btfss	STATUS,C		; test carry
+	bra		active_gas_display_no
+	
+	OUTPUTTEXT	.96			; Yes 
+	bra		active_gas_display_end
+	
+active_gas_display_no:
+	movlw	' '					; three spaces instead of "Yes"
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+
+active_gas_display_end:	
+	call	word_processor	
+
+	WIN_TOP		.95
+	WIN_LEFT	.20
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.88			; First Gas?
+	movlw	' '
+	movwf	POSTINC2
+
+	movlw	d'33'
+	movwf	EEADR
+	call	read_eeprom		; Get current startgas 1-5 # into EEDATA
+	decf	EEDATA,W		; 0-4
+	cpfseq	decodata+0		; =current displayed gas #?
+	bra		menu_firstgas0	; no, display three spaces
+
+	OUTPUTTEXT	.96			; Yes 
+	bra		menu_firstgas1
+
+menu_firstgas0:
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+
+menu_firstgas1:
+	call	word_processor			
+
+	WIN_TOP		.125
+	WIN_LEFT	.20
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.107		; Change+
+	call	word_processor		
+
+	WIN_TOP		.155
+	WIN_LEFT	.20
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.108		; Change-
+	call	word_processor		
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	call	PLED_menu_cursor
+
+next_gas_page_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit3
+	bra		next_gas_page2	; move cursor
+
+	btfsc	menubit2
+	bra		do_next_gas_page		; call submenu
+
+	btfsc	divemode
+	goto	restart			; dive started!
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	; 1 sec. functions done
+
+	btfsc	sleepmode
+	bra		exit_gassetup
+
+	bra		next_gas_page_loop
+
+next_gas_page2:
+	incf	menupos,F
+
+	movlw	d'7'
+	cpfseq	menupos			; =7?
+	bra		next_gas_page3	; No
+	movlw	d'1'
+	movwf	menupos
+
+next_gas_page3:
+	clrf	timeout_counter2
+	call	PLED_menu_cursor
+	
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+
+	bcf		menubit3		; clear flag
+	bra		next_gas_page_loop
+
+do_next_gas_page:
+	dcfsnz	menupos,F
+	bra		next_gas
+	dcfsnz	menupos,F
+	bra		toggle_active_gas
+	dcfsnz	menupos,F
+	bra		make_first_gas
+	dcfsnz	menupos,F
+	bra		change_gas_depth_plus
+	dcfsnz	menupos,F
+	bra		change_gas_depth_minus
+	bra		exit_gassetup			; Exit menu
+
+make_first_gas:
+	movff	decodata+0,EEDATA		; current gas (0-4) into EEDATA
+	incf	EEDATA,F				; current gas (1-5) into EEDATA
+	movlw	d'33'
+	movwf	EEADR
+	call	write_eeprom			; store in internal EEPROM
+	movlw	d'3'
+	movwf	menupos
+	bra		next_gas_page1
+
+toggle_active_gas:
+	read_int_eeprom		d'27'		; read flag register
+	movff	decodata+0,lo			; selected gas 0-4
+	incf	lo,F
+	dcfsnz	lo,F
+	btg		EEDATA,0
+	dcfsnz	lo,F
+	btg		EEDATA,1
+	dcfsnz	lo,F
+	btg		EEDATA,2
+	dcfsnz	lo,F
+	btg		EEDATA,3
+	dcfsnz	lo,F
+	btg		EEDATA,4
+	write_int_eeprom	d'27'		; write flag register
+	movlw	d'2'
+	movwf	menupos
+	bra		next_gas_page1
+	
+change_gas_depth_plus:
+	movf	decodata+0,W		; read current value 
+	addlw	d'28'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	
+	incf	lo,F				; increase depth
+	movlw	d'100'				; Change depth limit + 1
+	cpfseq	lo
+	bra		change_gas_depth_plus2
+	movlw	d'99'				; Change depth limit
+	movwf	lo
+change_gas_depth_plus2:
+	movff	lo,EEDATA			; write result
+	call	write_eeprom		; save result in EEPROM
+
+	movlw	d'4'
+	movwf	menupos
+	bra		next_gas_page1
+
+
+change_gas_depth_minus:
+	movf	decodata+0,W		; read current value 
+	addlw	d'28'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	
+	decf	lo,F				; decrease depth
+	movlw	d'255'
+	cpfseq	lo
+	bra		change_gas_depth_minus2
+	movlw	d'0'
+	movwf	lo
+
+change_gas_depth_minus2:
+	movff	lo,EEDATA			; write result
+	call	write_eeprom		; save result in EEPROM
+
+	movlw	d'5'
+	movwf	menupos
+	bra		next_gas_page1
+
+; Changed v1.44se
+gassetup_title_bar2:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	WIN_TOP		.2
+	WIN_LEFT	.0
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.95				; Gas# 
+	movff	decodata+0,lo		
+	incf	lo,F				
+	bsf		leftbind
+	output_99
+	movlw	':'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	
+	WIN_TOP		.2
+	WIN_LEFT	.50
+	lfsr	FSR2,letter
+
+	;He check
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom			; He value
+	movff	EEDATA,lo			; Move EEData -> lo
+	movf	lo,f				; Move lo -> f
+	movlw	d'0'				; Move 0 -> WREG
+	cpfsgt	lo					; He > 0?
+	bra 	gassetup_title_bar3	; NO check o2
+	
+	; YES Write TX 15/55
+	call 	gassetup_write_Tx	; Write TX
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom			; O2 value
+	movff	EEDATA,lo
+	output_8					; Write O2
+	movlw	'/'
+	movwf	POSTINC2
+	movf	divemins+0,W
+	addlw	0x07
+	movwf	EEADR
+	call	read_eeprom			; He value
+	movff	EEDATA,lo
+	output_8					; Write He
+	bra		gassetup_title_bar7
+
+; New v1.44se
+gassetup_title_bar3:			; O2 Check		
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom			; O2 value
+	movff	EEDATA,lo	
+	movf	lo,f				; Move lo -> f
+	movlw	d'21'				; Move 21 -> WREG
+	cpfseq	lo					; o2 = 21
+	cpfsgt	lo					; o2 > 21%
+	bra 	gassetup_title_bar5	; NO AIR
+	movlw	d'100'				; Move 100 -> WREG
+	cpfslt	lo					; o2 < 100%
+	bra		gassetup_title_bar4	; NO write O2
+
+	; YES Write NX 32
+	call	gassetup_write_Nx 	
+	output_8
+	bra 	gassetup_title_bar7
+
+; New v1.44se
+gassetup_title_bar4:
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	output_8
+	bra 	gassetup_title_bar7
+
+; New v1.44se
+gassetup_title_bar5:
+	cpfseq	lo					; o2 = 21%
+	bra 	gassetup_title_bar6
+
+	movlw	'A'
+	movwf	POSTINC2
+	movlw	'I'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	' '		
+	movwf	POSTINC2
+	output_8
+	bra 	gassetup_title_bar7
+
+; New v1.44se
+gassetup_title_bar6:		; ERROR
+	movlw	'E'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	'R'
+	movwf	POSTINC2
+	movlw	' '		
+	movwf	POSTINC2
+	output_8
+	bra 	gassetup_title_bar7
+
+gassetup_title_bar7:
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'i'
+	movwf	POSTINC2
+	movlw	'n'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movf	decodata+0,W		; read current value 
+	addlw	d'28'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	output_8
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+
+	call	word_processor	
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	return
+
+; New v1.44se
+gassetup_write_Nx:
+	movlw	'N'
+	movwf	POSTINC2
+	movlw	'X'
+	movwf	POSTINC2
+	movlw	' '					
+	movwf	POSTINC2	
+	return
+
+; New v1.44se
+gassetup_write_Tx:
+	movlw	'T'
+	movwf	POSTINC2
+	movlw	'X'
+	movwf	POSTINC2
+	movlw	' '					
+	movwf	POSTINC2
+	return
+
+; New v1.44se
+menu_gassetup_grey_inactive:
+; Set Greyvalue to lower value when gas is inactive
+	read_int_eeprom		d'27'	; read flag register
+	movff	decodata+0,lo		; copy gas number 0-4
+	incf	lo,F				; 1-5
+menu_gassetup_list1:
+	rrcf	EEDATA			; roll flags into carry
+	decfsz	lo,F			; max. 5 times...
+	bra		menu_gassetup_list1
+	movlw	color_white	
+	btfss	STATUS,C		; test carry
+	movlw	color_grey
+	call	PLED_set_color	; grey out inactive gases!
+	return
+	
+gassetup_show_ppO2:
+	movf	divemins+0,W
+	addlw	0x06
+	movwf	EEADR
+	call	read_eeprom			; O2 value
+	movff	EEDATA,hi
+
+	movf	decodata+0,W		; read current value 
+	addlw	d'28'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Change depth in m
+	movff	EEDATA,lo
+	movlw	d'10'
+	addwf	lo,F				; Depth+10m=lo
+	movf	hi,W
+	mulwf	lo					; (Depth+10m)*O2
+	movff	PRODL,xA+0
+	movff	PRODH,xA+1
+	movlw	d'10'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16			;xA/xB=xC with xA as remainder 	
+	movff	xC+0,lo				; ((Depth+10m)*O2)/10 = [0.01Bar] ppO2
+	movff	xC+1,hi
+
+	WIN_LEFT	.55
+	WIN_TOP		.35
+	lfsr	FSR2,letter
+	movlw	'('
+	movwf	POSTINC2
+	movlw	'p'
+	movwf	POSTINC2
+	movlw	'p'
+	movwf	POSTINC2
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	output_16dp	d'3'
+	movlw	'B'
+	movwf	POSTINC2
+	movlw	'a'
+	movwf	POSTINC2
+	movlw	'r'
+	movwf	POSTINC2
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_logbook.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,1095 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Menu "Logbook"
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 060107
+; last updated: 081026
+; known bugs: 
+; ToDo: 
+
+; searches external EEPROM for dive headers and displays them in a list
+; a detailed view with all informations and profile can be selected
+; does not require a FAT, will work with other profile intervals as ten seconds, too
+
+menu_logbook:
+	bcf		return_from_profileview				; clear some flags
+;call	enable_rs232
+menu_logbook1:
+	bcf			logbook_header_drawn
+	call		PLED_ClearScreen				; Clear screen
+	bcf			all_dives_shown					; clear some flags
+	bcf			logbook_profile_view
+	bcf			logbook_page_not_empty
+	clrf		menupos3						; Here: used rows on current logbook-page	
+	clrf		menupos2						; Here: # of current displayed page
+	clrf		divenumber						; # of dive in list during search
+
+
+menu_logbook1a:
+	WIN_INVERT	.1
+	DISPLAYTEXT	.12							;" Wait.."
+	WIN_INVERT	.0
+	clrf		divemins+0					; Here: used as temp variables
+	clrf		divemins+1
+	call 		I2CReset					; Reset I2C Bus
+	call		get_free_EEPROM_location	; search from "here" backwards through the external memory
+	clrf		temp1						; max. 32KB
+	clrf		temp2
+
+	movlw		d'5'
+	movwf		menupos					; Here: stores current position on display (5-x)
+	
+menu_logbook1b:
+									; search external EEPROM backwards from eeprom_address
+									; for 0xFA, 0xFA (store 1st. 0xFA position for next search)
+									; read header data and display it
+									; wait for user to confirm/exit
+									; recopy data to search from here
+	WIN_INVERT	.1
+	DISPLAYTEXT	.12						;" Wait.."
+	WIN_INVERT	.0
+	bcf		first_FA					; clear flags
+	bcf		second_FA
+
+menu_logbook2:
+	movlw		d'1'						; increase 16Bit value
+	addwf		divemins+0,F
+	movlw		d'0'
+	addwfc		divemins+1,F
+
+	btfsc		divemins+1,7				; At 0x8000?
+	bra			menu_logbook_reset			; yes, restart (if not empty)
+
+	decf_eeprom_address	d'1'			; Macro, that subtracts 8Bit from eeprom_address:2 with banking at 0x8000
+	
+	call		I2CREAD					; reads one byte (Slow! Better use Blockread!)
+
+	btfsc		first_FA					; 
+	bra			test_2nd_FA
+
+	bsf			first_FA					; Found 1st. 0xFA?
+	movlw		0xFA
+	cpfseq		SSPBUF
+	bcf			first_FA					; No, clear flag
+	bra			menu_logbook3				; and continue search
+
+test_2nd_FA:
+	btfsc		second_FA
+	bra			test_FA_DONE
+
+	bsf			second_FA					; found 2nd 0xFA?
+	movlw		0xFA
+	cpfseq		SSPBUF
+	rcall		no_second_FA				; No, clear both flags!
+	bra			menu_logbook3				; and continue search
+
+test_FA_DONE:							; Found 0xFA 0xFA!
+	movff		eeprom_address+0,eeprom_header_address+0	; store current address into temp register
+	movff		eeprom_address+1,eeprom_header_address+1	; we must continue search here later
+	incf		divenumber,F				; new header found, increase divenumber
+	bra			menu_logbook4				; Done with searching, display the header!
+
+no_second_FA:							; discard both flags!
+	bcf			second_FA					
+	bcf			first_FA			
+	return
+
+
+menu_logbook3:
+	movlw		d'1'						; increase global counter
+	addwf		temp1,F
+	movlw		d'0'
+	addwfc		temp2,F
+
+	btfsc		temp2,7					; 32KB searched?
+	bra			menu_logbook3b				; Yes
+	bra			menu_logbook2				; No, not now
+
+
+menu_logbook3b:
+	btfss		logbook_page_not_empty			; Was there at least one dive?
+	goto		menu						; Not a single header was found, leave logbook.
+	bra		menu_logbook_display_loop2		; rcall of get_free_eeprom_location not required here (faster)
+
+menu_logbook_reset:	
+	movf		divenumber,W
+	btfsc		STATUS,Z					; Was there at least one dive?
+	bra		menu_logbook3b				; No, Nothing to do
+
+	bsf		all_dives_shown				; Yes
+	bra		menu_logbook_display_loop2		; rcall of get_free_eeprom_location not required here (faster)
+
+
+menu_logbook4:
+	; Adjust eeprom_address to set pointer on first headerbyte
+	incf_eeprom_address	d'3'				; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000
+
+	btfss		logbook_profile_view			; Display profile (search routine is used in profileview, too)
+	bra			menu_logbook_display_loop		; No, display overwiev list
+
+	movf		divesecs,W					; divenumber that is searched
+	cpfseq		divenumber					; current divenumber
+	bra			next_logbook				; No match, continue search
+	bra			display_profile2
+	
+
+menu_logbook_display_loop:
+	btfsc		all_dives_shown				; All dives displayed?
+	bra			menu_logbook_display_loop2		; Yes, but display first page again.
+
+	rcall 		display_listdive			; display short header for list on current list position
+
+	movlw		d'5'
+	cpfseq		menupos					; first dive on list (top place)?
+	bra			menu_logbook_display_loop1		; no, so skip saving of address
+
+
+	movff		divenumber,mintemp+0			; store all registered required to rebuilt the current logbookpage after the detail/profile view
+	movff		eeprom_header_address+0,decodata+0	; several registers are used as temp registers here
+	movff		eeprom_header_address+1,decodata+1		
+	movff		divemins+0,max_pressure+0			
+	movff		divemins+1,max_pressure+1			
+	movff		temp1,logbook_temp6
+	movff		temp2,samplesecs					
+
+	movlw		d'3'
+	addwf		decodata+0,F
+	movlw 		d'0'
+	addwfc		decodata+1,F				; Re-Adjust pointer again
+	movlw		d'3'						; So first row will be the same again after detail/profile view
+	subwf		max_pressure+0,F
+	movlw		d'0'
+	subwfb		max_pressure+1,F
+
+menu_logbook_display_loop1:
+	decfsz	menupos,F					; List full?
+	bra		next_logbook				; no, search another dive for our current logbook page
+
+menu_logbook_display_loop2:
+	btfss	logbook_page_not_empty			; Was there one dive at all?
+	bra		menu_logbook				; Yes, so reload the first page
+
+	call	PLED_topline_box			; Draw box
+	WIN_INVERT	.1	
+	DISPLAYTEXT	.26						; "Logbook"
+	WIN_INVERT	.0
+	
+	DISPLAYTEXT .11						; Displays "Exit" in the last row on the current page
+
+	bcf		sleepmode					; clear some flags for user input
+	bcf		menubit2
+	bcf		menubit3
+	bcf		cursor
+	bcf		switch_right
+	bcf		switch_left
+	clrf		timeout_counter2
+
+	movlw		d'1'						; Set cursor to position 1...
+	btfsc		return_from_profileview		; .. unless we are returning from a detail/profile view
+	movf		mintemp+1,W					; load last cursor position again
+	movwf		menupos						; and set menupos byte
+	bcf			return_from_profileview		; Do this only once while the page is loaded again!
+
+	bcf			logbook_page_not_empty			; Obviously the current page is NOT empty
+	call		PLED_logbook_cursor
+
+menu_logbook_loop:
+	call		check_switches_logbook
+	
+	btfsc		menubit3					; SET/MENU?
+	bra			next_logbook3				; adjust cursor or create new page
+
+	btfsc		menubit2					; ENTER?
+	bra			display_profile_or_exit		; view details/profile or exit logbook
+
+	btfsc		onesecupdate
+	call		timeout_surfmode			; Timeout
+
+	btfsc		onesecupdate
+	call		set_dive_modes				; Check, if divemode must be entered
+
+	bcf			onesecupdate				; one second update 
+
+	btfsc		sleepmode					; Timeout?
+	goto		menu						; Yes
+
+	btfsc		divemode
+	goto		restart						; Enter Divemode if required
+
+	bra			menu_logbook_loop			; Wait for something to do
+
+display_profile_or_exit:
+	bcf			menubit2					; debounce
+	movlw		d'6'						; exit?
+	cpfseq		menupos
+	bra			display_profile				; No, show details/profile
+	goto		menu
+
+display_profile:	
+	movff		menupos,mintemp+1				; store current cursor position
+	bsf			return_from_profileview			; tweak search routine to exit after found
+
+	movf		menupos2,W						; Number of page
+	mullw		d'5'				
+	movf		PRODL,W						
+	addwf		menupos,W						; page*5+menupos=
+	movwf		divesecs						; # of dive to search
+
+	call		PLED_ClearScreen				; search for dive
+	bsf			logbook_profile_view			; set flag for search routine
+
+	clrf		divenumber					; search from scratch
+	bra			menu_logbook1a				; start search
+display_profile2:
+	bcf			logbook_profile_view			; clear flag for search routine
+
+	call		PLED_display_wait_clear
+	WIN_TOP		.0
+	WIN_LEFT	.0
+	lfsr		FSR2,letter
+	movlw		'#'
+	movwf		POSTINC2
+
+	GETCUSTOM15	.28							; Logbook Offset -> lo, hi
+	tstfsz		lo							; lo=0?
+	bra			display_profile_offset1		; No, adjust offset	
+	tstfsz		hi							; hi=0?
+	bra			display_profile_offset1		; No, adjust offset
+	bra			display_profile_offset2		; lo=0 and hi=0 -> skip Offset routine
+
+display_profile_offset1:
+	movlw		d'1'
+	addwf		lo,F
+	movlw		d'0'
+	addwfc		hi,F						; hi:lo = hi:lo + 1
+	movff		lo,sub_a+0
+	movff		hi,sub_a+1
+	movff		divesecs,sub_b+0
+	clrf		sub_b+1
+	call		sub16						;  sub_c = sub_a - sub_b
+	movff		sub_c+0,lo
+	movff		sub_c+1,hi
+	bsf			leftbind
+	output_16dp	d'10'						; # of dive with offset
+	bra			display_profile_offset3		; Skip normal routine
+	
+display_profile_offset2:
+	movff		divesecs,lo
+	output_99x							; # of dive
+
+display_profile_offset3:
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo				; 
+
+	call		I2CREAD2				; Skip Profile version
+	movff		SSPBUF,lo				; read month
+
+	movff		eeprom_address+0, EventByte		; Store current EEPROM position
+	movff		eeprom_address+1, ProfileFlagByte
+; Offset to SamplingRate
+	incf_eeprom_address	d'32'				; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000
+	call		I2CREAD						; Read Sampling rate
+	movff		SSPBUF,samplesecs_value		; Copy sampling rate
+
+	movff		EventByte, eeprom_address+0		; Re-Store current EEPROM position
+	movff		ProfileFlagByte, eeprom_address+1		; Re-Store current EEPROM position
+
+;display_profile2a:
+
+	movff		lo,convert_value_temp+0		; Month (in lo, see above)
+	call		I2CREAD2					; Day
+	movff		SSPBUF,convert_value_temp+1
+	call		I2CREAD2					; Year
+	movff		SSPBUF,convert_value_temp+2
+	call		PLED_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2					; hour
+	movff		SSPBUF,lo
+	output_99x			
+	movlw		':'
+	movwf		POSTINC2
+	call		I2CREAD2					; Minute
+	movff		SSPBUF,lo
+	output_99x			
+	call		word_processor				; Display 1st row of details
+
+	WIN_TOP		.25
+	WIN_LEFT	.05
+	lfsr		FSR2,letter
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	movff		lo,xA+0					; calculate y-scale for profile display
+	movff		hi,xA+1
+	movlw		d'164'					; 164pixel height available
+	movwf		xB+0
+	clrf		xB+1
+	call		div16x16				; does xA/xB=xC
+	movff		xC+0,sim_pressure+0		; holds LOW byte of y-scale   (mbar/pixel!)
+	movff		xC+1,sim_pressure+1		; holds HIGH byte of y-scale  (mbar/pixel!)
+	incf		sim_pressure+0,F		; increase one, because there may be a remainder
+	movlw		d'0'
+	addwfc		sim_pressure+1,F
+
+	bsf		leftbind
+	output_16dp	d'3'						; max. depth
+	movlw		'm'
+	movwf		POSTINC2
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+
+	movff		lo,xA+0					; calculate x-scale for profile display
+	movff		hi,xA+1					; calculate total diveseconds first
+	movlw		d'60'					; 60seconds are one minute
+	movwf		xB+0
+	clrf		xB+1
+	call		mult16x16				; result is in xC:2 !
+
+	bsf		leftbind
+	output_16							; divetime minutes
+	movlw		d'39'
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	movf		lo,W					; add seconds to total seconds
+	addwf		xC+0
+	movlw		d'0'
+	addwfc		xC+1					; xC:2 now holds total dive seconds!
+	movff		xC+0,xA+0				; now calculate x-scale value
+	movff		xC+1,xA+1
+	movlw		d'159'					; 159pix width available
+	movwf		xB+0
+	clrf		xB+1
+	call		div16x16				; xA/xB=xC
+	movff		xC+0,xA+0	
+	movff		xC+1,xA+1
+	movf		samplesecs_value,W		; devide through sample interval!
+	movwf		xB+0
+	clrf		xB+1
+	call		div16x16				; xA/xB=xC
+	movff		xC+0,profile_temp+0		; store value (use any #xC sample, skip xC-1) into temp registers
+	movff		xC+1,profile_temp+1		; store value (use any #xC sample, skip xC-1) into temp registers
+	incf		profile_temp+0,F		; increase one, because there may be a remainder
+	movlw		d'0'
+	addwfc		profile_temp+1,F
+
+	bsf		leftbind
+	output_99x							; divetime seconds
+	movlw		'"'
+	movwf		POSTINC2
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	movlw		d'3'
+	movwf		ignore_digits
+	bsf		leftbind
+	output_16dp	d'2'						; temperature
+	movlw		'°'
+	movwf		POSTINC2
+	movlw		'C'		
+	movwf		POSTINC2
+	call		word_processor				; Display 2nd row of details
+
+	WIN_TOP		.50
+	WIN_LEFT	.05
+	lfsr		FSR2,letter
+
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	bsf		leftbind
+	output_16							; Air pressure before dive
+	movlw		'm'
+	movwf		POSTINC2
+	movlw		'b'
+	movwf		POSTINC2
+	movlw		'a'
+	movwf		POSTINC2
+	movlw		'r'
+	movwf		POSTINC2
+	movlw		' '
+	movwf		POSTINC2
+
+	movlw		'D'
+	movwf		POSTINC2
+	movlw		'e'
+	movwf		POSTINC2
+	movlw		's'
+	movwf		POSTINC2
+	movlw		'a'
+	movwf		POSTINC2
+	movlw		't'
+	movwf		POSTINC2
+	movlw		' '
+	movwf		POSTINC2
+
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	call		convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	bsf			leftbind
+	movf		lo,W
+	movff		hi,lo
+	movwf		hi							; exchange lo and hi...
+	output_8								; Hours
+	movlw		':'
+	movwf		POSTINC2
+	movff		hi,lo						; Minutes
+	output_99x
+	bcf			leftbind
+	call		word_processor				; display 3rd page of details
+
+	call		I2CREAD2					; Skip Gas1 current O2
+	call		I2CREAD2					; Skip Gas1 current HE
+	call		I2CREAD2					; Skip Gas2 current O2
+	call		I2CREAD2					; Skip Gas2 current HE
+	call		I2CREAD2					; Skip Gas3 current O2
+	call		I2CREAD2					; Skip Gas3 current HE
+	call		I2CREAD2					; Skip Gas4 current O2
+	call		I2CREAD2					; Skip Gas4 current HE
+	call		I2CREAD2					; Skip Gas5 current O2
+	call		I2CREAD2					; Skip Gas5 current HE
+	call		I2CREAD2					; Skip Gas6 current O2
+	call		I2CREAD2					; Skip Gas6 current HE
+	call		I2CREAD2					; Skip Start Gas
+	call		I2CREAD2					; Skip Firmware x
+	call		I2CREAD2					; Skip Firmware y
+	call		I2CREAD2					; Skip battery
+	call		I2CREAD2					; Skip battery
+	call		I2CREAD2					; Skip Sampling rate
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_temperature	; Store divisor
+	bcf			divisor_temperature,4		; Clear information length
+	bcf			divisor_temperature,5
+	bcf			divisor_temperature,6
+	bcf			divisor_temperature,7
+	incf		divisor_temperature,F		; increase divisor 
+	movff		divisor_temperature,logbook_temp1		; Store as temp, too
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_deco			; Store divisor
+	bcf			divisor_deco,4				; Clear information length
+	bcf			divisor_deco,5
+	bcf			divisor_deco,6
+	bcf			divisor_deco,7
+	movff		divisor_deco,logbook_temp2	; Store as temp, too
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_tank			; Store divisor
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_ppo2			; Store divisor
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_deco_debug	; Store divisor
+	call		I2CREAD2					; Read divisor
+	movff		SSPBUF,divisor_nuy2			; Store divisor
+	call		I2CREAD2					; Read Salinity
+	call		I2CREAD2					; Skip Dummy byte
+
+display_profile2d:
+	; Start Profile display
+	
+	movlw		color_deepblue
+	movff		WREG,box_temp+0		; Data
+	movlw		.75
+	movff		WREG,box_temp+1		; row top (0-239)
+	movlw		.239
+	movff		WREG,box_temp+2		; row bottom (0-239)
+	movlw		.0
+	movff		WREG,box_temp+3		; column left (0-159)
+	movlw		.159	
+	movff		WREG,box_temp+4		; column right (0-159)
+	call		PLED_box
+
+
+	call		I2CREAD2					; skip 0xFB		(Header-end)
+	clrf		timeout_counter2			; here: used as counter for depth readings
+	call		I2CREAD2					; skip 0xFB		(Header-end)
+	movlw		d'158'
+	movwf		ignore_digits				; here: used as counter for x-pixels
+	bcf			second_FD					; clear flag
+	movlw		d'5'
+	movwf		timeout_counter3			; here: used as colum x2 (Start at Colum 5)
+	movlw		d'75'						; Zero-m row
+	movwf		apnoe_mins					; here: used for fill between rows
+	incf		timeout_counter3,W			; Init Column
+	call		PLED_SetColumnPixel			; pixel x2
+
+profile_display_loop:
+	movff		profile_temp+0,profile_temp2+0
+	movff		profile_temp+1,profile_temp2+1		; 16Bit x-scaler
+	incf		profile_temp2+1,F					
+
+profile_display_loop2:
+	rcall		profile_view_get_depth		; reads depth, ignores temp and profile data	-> hi, lo
+
+	btfsc		second_FD					; end-of profile reached?
+	bra			profile_display_loop_done	; Yes, skip all remaining pixels
+
+	movff		sim_pressure+0,xB+0			; devide pressure in mbar/quant for row offsett
+	movff		sim_pressure+1,xB+1
+	movff		lo,xA+0
+	movff		hi,xA+1
+	call		div16x16					; xA/xB=xC
+	movlw		d'75'
+	addwf		xC+0,F						; add 75 pixel offset to result
+	call		profile_display_fill		; In this column between this row (xC+0) and the last row (apnoe_mins)
+	movff		xC+0,apnoe_mins				; Store last row for fill routine
+	movf		xC+0,W
+	call		PLED_SetRow					; 0...259
+
+	incf		timeout_counter3,F
+	movf		timeout_counter3,W
+	call		PLED_SetColumnPixel			; pixel x2
+	WIN_COLOR	color_white
+	call		PLED_PxlWrite				; Write two pixels
+
+profile_display_skip_loop1:					; skips readings!
+	dcfsnz		profile_temp2+0,F
+	bra			profile_display_loop3		; check 16bit....
+
+	rcall		profile_view_get_depth		; reads depth, ignores temp and profile data
+	bra			profile_display_skip_loop1
+
+profile_display_loop3:
+	decfsz		profile_temp2+1,F			; 16 bit x-scaler test
+	bra			profile_display_skip_loop1	; skips readings!
+
+	decfsz		ignore_digits,F				; counts x-pixels to zero
+	bra			profile_display_loop		; Not ready yet
+; Done.
+profile_display_loop_done:
+	bcf			sleepmode					; clear some flags
+	bcf			menubit2
+	bcf			menubit3
+	bcf			switch_right
+	bcf			switch_left
+	clrf		timeout_counter2
+
+display_profile_loop:
+	call		check_switches_logbook
+	
+	btfsc		menubit2					; SET/MENU?
+	bra			exit_profileview			; back to list
+
+	btfsc		menubit3					; ENTER?
+	bra			profileview_menu			; Switch to the Profileview menu
+
+	btfsc		onesecupdate
+	call		timeout_surfmode			; timeout
+
+	btfsc		onesecupdate
+	call		set_dive_modes				; check, if divemode must be entered
+
+	bcf			onesecupdate				; one second update
+
+	btfsc		sleepmode					; Timeout?
+	bra			exit_profileview			; back to list
+
+	btfsc		divemode
+	goto		restart						; Enter Divemode if required
+
+	bra			display_profile_loop		; wait for something to do
+
+profile_display_fill:		; In this column between this row (xC+0) and the last row (apnoe_mins), keep xC+0!!
+; First, check if xC+0>apnoe_mins or xC+0<aponoe_mins
+	movf	xC+0,W
+	cpfseq	apnoe_mins				; xC+0 = apone_mins?
+	bra		profile_display_fill2	; No!
+	return
+profile_display_fill2:	
+	movf	xC+0,W
+	cpfsgt	apnoe_mins				; apnoe_mins>xC+0?
+	bra		profile_display_fill_up	; Yes!
+
+profile_display_fill_down:			; Fill downwards from apone_mins to xC+0!
+	movff		apnoe_mins,xC+1		; Copy
+profile_display_fill_down2:			; Loop	
+	decf		xC+1,F
+	movf		xC+1,W				; Row
+	call		PLED_SetRow			; 0...259
+	WIN_COLOR	color_white
+	call		PLED_PxlWrite_Single; Write one Pixel
+	movf		xC+0,W
+	cpfseq		xC+1				; Loop until xC+1=xC+0
+	bra			profile_display_fill_down2
+	return							; apnoe_mins and xC+0 are untouched
+
+profile_display_fill_up:			; Fill upwards from xC+0 to apone_mins!
+	movff		xC+0,xC+1			; Copy
+profile_display_fill_up2:			; Loop	
+	decf		xC+1,F
+	movf		xC+1,W				; Row
+	call		PLED_SetRow			; 0...259
+	WIN_COLOR	color_white
+	call		PLED_PxlWrite_Single; Write one Pixel
+	movf		apnoe_mins,W
+	cpfseq		xC+1				; Loop until xC+1=apnoe_mins
+	bra			profile_display_fill_up2
+	return							; apnoe_mins and xC+0 are untouched
+
+profile_view_get_depth:						
+	call		I2CREAD2					; read first depth
+	movff		SSPBUF,lo					; low value
+	call		I2CREAD2					; read first depth
+	movff		SSPBUF,hi					; high value
+	call		I2CREAD2					; read Profile Flag Byte
+	movff		SSPBUF,timeout_counter2		; Read Profile Flag Byte
+	bcf			event_occured				; clear flag
+	btfsc		timeout_counter2,7
+	bsf			event_occured				; We also have an Event byte!
+	bcf			timeout_counter2,7			; Clear Event Byte Flag (If any)
+	; timeout_counter2 now holds the number of additional bytes to ignore (0-127)
+	movlw		0xFD						; end of profile bytes?
+	cpfseq		lo
+	bra			profile_view_get_depth_new1	; no 0xFD
+	movlw		0xFD						; end of profile bytes?
+	cpfseq		hi
+	bra			profile_view_get_depth_new1	; no 0xFD
+	bsf			second_FD					; End found! Set Flag! Skip remaining pixels!
+	return
+
+profile_view_get_depth_new1:
+	decfsz		divisor_deco,F				; Check divisor
+	bra			profile_view_get_depth_new1_1	; Divisor not zero...	
+
+;	tstfsz		timeout_counter2			; Any bytes to ignore
+;	bra			profile_view_get_depth_new2	; Yes (1-127)
+;	return									; No (0)
+
+	movff	logbook_temp2,divisor_deco		; Restore divisor value!
+; check for event byte and the extra informations
+	btfss		event_occured
+	bra			profile_view_get_depth_new2		; No event!
+	
+	call		I2CREAD2					; read event byte
+	decf		timeout_counter2,F			; Reduce number of bytes to ignore
+
+	movlw		d'0'						; Extra bytes to ignore because of event
+	btfsc		SSPBUF,4
+	addlw		d'2'						; two bytes for manual gas set
+	btfsc		SSPBUF,5
+	addlw		d'1'						; one byte for gas change
+	movwf		logbook_temp5				; store extra bytes to ignore
+
+	tstfsz		logbook_temp5				; Anything to ignore?
+	bra			profile_view_get_depth_new1_2	; Yes
+	bra			profile_view_get_depth_new2	; No, continue with normal routine
+
+profile_view_get_depth_new1_2:
+	call		I2CREAD2					; ignore byte
+	decf		timeout_counter2,F			; Reduce number of bytes to ignore
+	decfsz		logbook_temp5,F				; reduce extra bytes ignore counter
+	bra			profile_view_get_depth_new1_2	; loop
+
+profile_view_get_depth_new2:
+	movlw		d'4'							; Temp (2) and Deko (2) in the sample?
+	cpfseq		timeout_counter2
+	bra			profile_view_get_depth_new2_2	; No
+	; Yes, skip Temp!
+	call		I2CREAD2					; ignore byte
+	decf		timeout_counter2,F			; Reduce number of bytes to ignore
+	call		I2CREAD2					; ignore byte
+	decf		timeout_counter2,F			; Reduce number of bytes to ignore
+
+profile_view_get_depth_new2_2:
+	call		I2CREAD2					; ignore byte
+
+	decfsz		timeout_counter2,F			; reduce counter
+	bra			profile_view_get_depth_new2_2; Loop
+	return
+
+profile_view_get_depth_new1_1:
+	tstfsz		timeout_counter2			; Any bytes to ignore
+	bra			profile_view_get_depth_new3	; Yes (1-127)
+	return									; No (0)
+
+	; timeout_counter2 now holds the number of additional bytes to ignore (0-127)
+profile_view_get_depth_new3:
+	call		I2CREAD2					; ignore byte
+	decfsz		timeout_counter2,F			; reduce counter
+	bra			profile_view_get_depth_new3	; Loop
+	return
+
+exit_profileview:
+	bcf			sleepmode
+	clrf		timeout_counter2				; restore all registers to build same page again
+	movff		decodata+0,eeprom_address+0
+	movff		decodata+1,eeprom_address+1		
+	movff		max_pressure+0,divemins+0
+	movff		max_pressure+1,divemins+1
+	movff		mintemp+0, divenumber
+	movff		logbook_temp6,temp1
+	movff		samplesecs,temp2
+	decf		divenumber,F
+	bcf			all_dives_shown
+
+	decf		menupos2,F	
+
+	clrf		menupos3					; here: used row on current page
+	movlw		d'5'
+	movwf		menupos						; here: active row on current page
+	incf		menupos2,F					; start new page
+	call		PLED_ClearScreen			; clear details/profile
+	bra			menu_logbook1b					; start search
+
+next_logbook2:
+	btfsc		all_dives_shown				; all shown
+	goto		menu_logbook1				; all reset
+
+	clrf		menupos3	
+	movlw		d'5'
+	movwf		menupos					; 
+	incf		menupos2,F					; start new screen
+	call		PLED_ClearScreen
+	
+next_logbook:
+	movff		eeprom_header_address+0,eeprom_address+0
+	movff		eeprom_header_address+1,eeprom_address+1	; continue search here
+	goto		menu_logbook1b
+
+check_switches_logbook:
+	btfsc		switch_right			
+	bsf			menubit3
+	btfsc		switch_left
+	bsf			menubit2					; Enter
+	return
+
+next_logbook3:
+	incf		menupos,F
+	movlw		d'7'
+	cpfseq		menupos					; =7?
+	bra			next_logbook3a				; No
+	bra			next_logbook2				; yes, new page please
+
+next_logbook3a:
+	incf		menupos3,W					; 
+	cpfseq		menupos
+	bra			next_logbook3b
+	movlw		d'6'
+	movwf		menupos					; Jump directly to exit if page is not full
+
+next_logbook3b:
+	clrf		timeout_counter2
+	call		PLED_logbook_cursor
+
+	bcf			switch_right
+	bcf			menubit3					; clear flag
+	bra			menu_logbook_loop
+
+display_listdive:
+	bsf			logbook_page_not_empty		; Page not empty
+	incf		menupos3,F					
+
+	btfsc		logbook_header_drawn		; "Logbook already displayed?
+	bra			display_listdive1a
+	call		PLED_topline_box			; Draw box
+	WIN_INVERT	.1
+	DISPLAYTEXT	.26							; "Logbook"
+	WIN_INVERT	.0
+	bsf			logbook_header_drawn
+	
+display_listdive1a:	
+	WIN_LEFT	.20
+	
+	movf		menupos2,W
+	mullw		d'5'
+	movf		PRODL,W
+	subwf		divenumber,W				; current row on page
+
+	mullw		d'30'						; x30
+	movf		PRODL,W						; is pixel-row for entry
+	addlw		d'5'						; +5 Pixel, so list entries are at rows 35,65,95,125,155,185
+	movff		WREG,win_top
+
+	lfsr		FSR2,letter
+	movff		divenumber,lo
+	output_99x								; # of dive
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	movlw		d'13'
+	cpfsgt		lo							; Skip if lo>13
+	bra			display_listdive2			; use old format
+
+	call		I2CREAD2					; Skip Profile version
+	movff		SSPBUF,lo					; in new format, read month
+
+display_listdive2:
+	movff		lo,convert_value_temp+0		; Month (in lo, see above)
+	call		I2CREAD2					; Day
+	movff		SSPBUF,convert_value_temp+1
+	call		I2CREAD2					; Year
+	movff		SSPBUF,convert_value_temp+2
+	call		PLED_convert_date_short		; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2
+
+
+	call		I2CREAD2					; hours (Skip)
+	call		I2CREAD2					; minutes (skip)
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2					; Depth
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	bsf			leftbind
+	bsf			ignore_digit5				; Do not display 1cm figure
+	output_16dp	d'3'						; max. depth
+	movlw		'm'
+	movwf		POSTINC2
+	movlw		' '
+	movwf		POSTINC2
+	call		I2CREAD2	
+	movff		SSPBUF,lo
+	call		I2CREAD2	
+	movff		SSPBUF,hi
+	bsf			leftbind
+	output_16								; Divetime minutes
+	movlw		d'39'						; "'"
+	movwf		POSTINC2
+	
+	call		word_processor				; Display header-row in list
+	return
+
+
+profileview_menu:
+	movlw		d'1'
+	movwf		menupos
+profileview_menu1:	
+	call		PLED_clear_divemode_menu
+	call		PLED_profileview_menu		; Displays Menu
+profileview_menu2:
+	call		PLED_divemenu_cursor
+	bcf			sleepmode					; clear some flags
+	bcf			menubit2
+	bcf			menubit3
+	bcf			switch_right
+	bcf			switch_left
+	clrf		timeout_counter2
+
+profileview_menu_loop:
+	call		check_switches_logbook
+	
+	btfsc		menubit3					; SET/MENU?
+	bra			profileview_menu_move_cursor; Move Cursor
+	btfsc		menubit2					; ENTER?
+	bra			profileview_menu_do			; Do task
+
+	btfsc		onesecupdate
+	call		timeout_surfmode			; timeout
+	btfsc		onesecupdate
+	call		set_dive_modes				; check, if divemode must be entered
+	bcf			onesecupdate				; one second update
+	btfsc		sleepmode					; Timeout?
+	bra			exit_profileview			; back to list
+	btfsc		divemode
+	goto		restart						; Enter Divemode if required
+
+	bra			profileview_menu_loop		; wait for something to do
+	
+profileview_menu_do:
+	dcfsnz		menupos,F
+	bra			exit_profileview		; back to list, quit profileview menu
+	dcfsnz		menupos,F
+	bra			profileview_menu_delete	; Delete Dive from external EEPROM
+	dcfsnz		menupos,F
+	bra			profileview_menu_format	; Delete all Dives from external EEPROM
+
+profileview_menu_move_cursor:
+	incf		menupos,F
+	movlw		d'4'						; number of menu options+1
+	cpfseq		menupos						; =limit?
+	bra			profileview_menu_move_cursor2	; No!
+	movlw		d'1'							; Yes, reset to position 1!
+	movwf		menupos
+profileview_menu_move_cursor2:
+	bra			profileview_menu2		; Return to Profile Menu, also updates cursor
+
+profileview_menu_format:
+	call		PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+
+	movwf		menupos						; Used as temp
+	tstfsz		menupos
+	bra			profileview_menu_format_loop2		; Format now!
+
+	bra			exit_profileview		; back to list, quit profileview menu
+
+profileview_menu_format_loop2:			; Do now format!
+	call		PLED_ClearScreen
+	DISPLAYTEXT	.12						; "Wait.."
+	call		reset_external_eeprom		; delete profile memory
+	goto		menu						; Return to Menu
+
+profileview_menu_delete:
+	call		PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+	movwf		menupos						; Used as temp
+	tstfsz		menupos
+	bra			profileview_menu_delete_loop2		; Delete now!
+
+	bra			exit_profileview		; back to list, quit profileview menu
+
+profileview_menu_delete_loop2:	; Do now delete
+	call		PLED_ClearScreen
+	DISPLAYTEXT	.12				; "Wait.."
+
+; eeprom_address:2 is set to the second byte after the ending 0xFD 0xFD
+; eeprom_address:2 - 1 -> set to the last byte after the 0xFD 0xFD of the current dive
+
+; Set pointer to Byte after the final "0xFD 0xFD"
+	decf_eeprom_address	d'1'			; Macro, that subtracts 8Bit from eeprom_address:2 with banking at 0x8000
+	movff		eeprom_address+0,divemins+0
+	movff		eeprom_address+1,divemins+1			
+
+; eeprom_header_address:2 + 1 -> set to the first 0xFA of the 0xFA 0xFA start bytes of the header
+	movlw		d'1'								; 
+	addwf		eeprom_header_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_header_address+1,F			; eeprom_header_address:2 + 1
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+0				; Yes, clear address (+0 first!)
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+1				; Yes, clear address
+
+	movff		divemins+0,eeprom_address+0
+	movff		divemins+1,eeprom_address+1					; Read source
+	call		I2CREAD										; reads one byte (Slow! Better use Blockread!)	
+	movwf		profile_temp+0
+	movlw		0xFE
+	cpfseq		profile_temp+0
+	bra			profileview_menu_delete_notlast				; we're not deleting the last dive....
+
+; Just move the 0xFE after the dive and delete the rest with 0xFF			
+	movff		eeprom_header_address+0, eeprom_address+0
+	movff		eeprom_header_address+1, eeprom_address+1	; Write target
+	movlw		0xFE
+	call		I2CWRITE									; Write the byte
+
+; Now, delete everything _between_ eeprom_header_address and divemins:2+2 with 0xFF
+	movlw		d'1'								; 
+	addwf		eeprom_header_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_header_address+1,F			; eeprom_header_address:2 + 1
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+0				; Yes, clear address (+0 first!)
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+1				; Yes, clear address
+
+	movff		eeprom_header_address+0,eeprom_address+0
+	movff		eeprom_header_address+1,eeprom_address+1
+
+	movlw		d'1'								; 
+	addwf		divemins+0,F
+	movlw		d'0'
+	addwfc		divemins+1,F						; divemins:2 + 1
+	btfss		divemins+1,7						; at 7FFF?
+	bra			profileview_menu_delete_loop2a		; Skip
+	clrf		divemins+0							; Yes, clear address
+	clrf		divemins+1
+
+;	movff		eeprom_header_address+0,eeprom_address+0
+;	movff		eeprom_header_address+1,eeprom_address+1
+
+
+profileview_menu_delete_loop2a:	
+	movlw		0xFF
+	call		I2CWRITE							; Write the byte
+
+	incf_eeprom_address	d'1'				; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000
+
+	movff		divemins+0,sub_a+0
+	movff		divemins+1,sub_a+1
+	movff		eeprom_address+0,sub_b+0
+	movff		eeprom_address+1,sub_b+1
+	call		sub16								; sub_c = sub_a - sub_b
+	tstfsz		sub_c+0								; Done (Result=Zero?) ?
+	bra			profileview_menu_delete_loop2a		; No, continue
+	tstfsz		sub_c+1								; Done (Result=Zero?) ?
+	bra			profileview_menu_delete_loop2a		; No, continue
+	goto		menu_logbook						; Return to list when done deleting
+
+profileview_menu_delete_notlast:
+; Move everything byte-wise from divemins:2 to eeprom_header_address:2 until 0xFD 0xFD 0xFE is found and were moved
+	call		get_free_EEPROM_location			; Searches 0xFD, 0xFD, 0xFE and sets Pointer to 0xFE
+
+	incf_eeprom_address	d'2'				; Macro, that adds 8Bit to eeprom_address:2 with banking at 0x8000
+	movff		eeprom_address+0,profile_temp+0		
+	movff		eeprom_address+1,profile_temp+1	
+; holds now address of 0xFE + 2 (Abort condition....)
+	decf_eeprom_address	d'2'			; Macro, that subtracts 8Bit from eeprom_address:2 with banking at 0x8000
+; holds now address of 0xFE again
+	movff		eeprom_address+0,divemins+0
+	movff		eeprom_address+1,divemins+1					; Copy to working read registers
+
+profileview_menu_delete_loop3:
+	movff		divemins+0,eeprom_address+0
+	movff		divemins+1,eeprom_address+1					; Read source
+	call		I2CREAD										; reads one byte (Slow! Better use Blockread!)	
+	movff		eeprom_header_address+0, eeprom_address+0
+	movff		eeprom_header_address+1, eeprom_address+1	; Write target
+	call		I2CWRITE									; Write the byte
+
+	movff		divemins+0,eeprom_address+0
+	movff		divemins+1,eeprom_address+1					; Set to source again
+	movlw		0xFF
+	call		I2CWRITE									; Delete the source....
+
+	movlw		d'1'
+	addwf		divemins+0,F							; Increase source (Divemins:2)
+	movlw		d'0'
+	addwfc		divemins+1,F
+	btfsc		divemins+1,7						; at 0x8000?
+	clrf		divemins+0							; Yes, clear address (+0 first!)
+	btfsc		divemins+1,7						; at 0x8000?
+	clrf		divemins+1							; Yes, clear address
+
+	movlw		d'1'								; Increase target (eeprom_header_address:2)
+	addwf		eeprom_header_address+0,F
+	movlw		d'0'
+	addwfc		eeprom_header_address+1,F			; eeprom_header_address:2 + 1
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+0				; Yes, clear address (+0 first!)
+	btfsc		eeprom_header_address+1,7			; at 7FFF?
+	clrf		eeprom_header_address+1				; Yes, clear address
+
+	movff		divemins+0,sub_a+0
+	movff		divemins+1,sub_a+1
+	movff		profile_temp+0,sub_b+0
+	movff		profile_temp+1,sub_b+1
+	call		sub16								; sub_c = sub_a - sub_b
+	tstfsz		sub_c+0								; Done (Result=Zero?) ?
+	bra			profileview_menu_delete_loop3		; No, continue
+	tstfsz		sub_c+1								; Done (Result=Zero?) ?
+	bra			profileview_menu_delete_loop3		; No, continue
+
+	goto		menu_logbook								; Return to list when done deleting
+
+
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_ppO2.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,285 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Constant ppO2 Setup menu
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 08/04/04
+; last updated: 080904
+; known bugs:
+; ToDo: 
+
+menu_const_ppO2:
+	movlw	d'1'
+	movwf	menupos
+
+	bcf		menubit4
+	bcf		cursor
+	bcf		sleepmode
+	clrf	decodata+0				; Here: # of SP
+	bcf		first_FA				; Here: =1: -, =0: +
+	bcf		second_FA				; Here: =1: 1, =0: 10 steps
+
+menu_const_ppO20:
+	call	PLED_ClearScreen
+	call	PLED_topline_box
+
+	WIN_INVERT	.1			; Init new Wordprocessor	
+	DISPLAYTEXT	.111		; Constant ppO2 Setup
+	WIN_INVERT	.0			; Init new Wordprocessor	
+
+
+menu_const_ppO21:
+	clrf	timeout_counter2
+	bcf		menubit2
+	bcf		menubit3
+
+	WIN_LEFT 	.20
+	WIN_TOP		.35
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.112				; SP# 
+	movff	decodata+0,lo		
+	incf	lo,F				
+	bsf		leftbind
+	output_99
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	
+	OUTPUTTEXT	d'192'				; Dil.
+	movlw	' '
+	movwf	POSTINC2
+
+	read_int_eeprom 	d'33'			; Read byte (stored in EEDATA)
+	movff	EEDATA,active_gas			; Read start gas (1-5)
+
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'6'						; = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	movff	EEDATA, lo		; O2 ratio
+
+
+	bsf		leftbind
+	output_99
+
+	movlw	'/'
+	movwf	POSTINC2
+
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'7'						; = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,lo		; And copy into hold register
+
+	bsf		leftbind
+	output_99
+	movlw	')'
+	movwf	POSTINC2
+	call	word_processor		
+
+
+	WIN_LEFT 	.20
+	WIN_TOP		.65
+
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.97			; "Current: "
+	movf	decodata+0,W
+	addlw	d'36'				; offset in eeprom
+	movwf	EEADR
+	call	read_eeprom		; ppO2 value
+	movff	EEDATA,lo
+	clrf	hi
+	bsf		leftbind
+	output_16dp	d'3'
+	bcf		leftbind
+	movlw	'B'
+	movwf	POSTINC2
+	movlw	'a'
+	movwf	POSTINC2
+	movlw	'r'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.95
+
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'190'			; ppO2 +
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.125
+
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'191'			; ppO2 -
+	call	word_processor		
+
+	WIN_LEFT 	.20
+	WIN_TOP		.155
+
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.89			; "Default: "
+	movlw	'1'
+	movwf	POSTINC2
+	movlw	'.'
+	movwf	POSTINC2
+	movlw	'0'
+	movwf	POSTINC2
+	movlw	'0'
+	movwf	POSTINC2
+	call	word_processor		
+
+	DISPLAYTEXT	.11			; Exit
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	call	PLED_menu_cursor
+
+menu_const_ppO2_loop:
+	call	check_switches_logbook
+
+	btfsc	menubit3
+	bra	menu_const_ppO22	; move cursor
+
+	btfsc	menubit2
+	bra	do_menu_const_ppO2		; call submenu
+
+	btfsc	divemode
+	goto	restart			; dive started!
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	; 1 sec. functions done
+
+	btfsc	sleepmode
+	bra	exit_menu_const_ppO2
+
+	bra	menu_const_ppO2_loop
+
+menu_const_ppO22:
+	incf	menupos,F
+	
+	movlw	d'2'
+	cpfseq	menupos				; =2?
+	bra		menu_const_ppO22a	; No
+	incf	menupos,F			; Skip pos. 2
+
+menu_const_ppO22a:
+	movlw	d'7'
+	cpfseq	menupos			; =7?
+	bra		menu_const_ppO23	; No
+	movlw	d'1'
+	movwf	menupos
+
+menu_const_ppO23:
+	clrf	timeout_counter2
+	call	PLED_menu_cursor
+	
+	; debounce switches
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!	
+	bcf		menubit3		; clear flag
+	bra		menu_const_ppO2_loop
+
+do_menu_const_ppO2:
+	dcfsnz	menupos,F
+	bra		next_ppO2
+	dcfsnz	menupos,F
+	bra		change_ppo2_plus
+	dcfsnz	menupos,F
+	bra		change_ppo2_plus
+	dcfsnz	menupos,F
+	bra		change_ppo2_minus
+	dcfsnz	menupos,F
+	bra		change_ppo2_reset
+exit_menu_const_ppO2:			; exit...
+	movlw	d'2'
+	movwf	menupos
+	goto	more_menu2
+
+change_ppo2_plus:
+	movf	decodata+0,W		; read current value 
+	addlw	d'36'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	
+	incf	lo,F				; increase depth
+	movlw	d'251'
+	cpfseq	lo
+	bra		change_ppo2_plus2
+	movlw	d'250'
+	movwf	lo
+change_ppo2_plus2:
+	movff	lo,EEDATA			; write result
+	call	write_eeprom		; save result in EEPROM
+	movlw	d'3'
+	movwf	menupos
+	bra		menu_const_ppO21
+
+change_ppo2_minus:
+	movf	decodata+0,W		; read current value 
+	addlw	d'36'				; offset in memory
+	movwf	EEADR
+	call	read_eeprom			; Low-value
+	movff	EEDATA,lo
+	
+	decf	lo,F				; decrease depth
+	movlw	d'255'
+	cpfseq	lo
+	bra	change_ppo2_minus2
+	movlw	d'0'
+	movwf	lo
+
+change_ppo2_minus2:
+	movff	lo,EEDATA			; write result
+	call	write_eeprom		; save result in EEPROM
+
+	movlw	d'4'
+	movwf	menupos
+	bra	menu_const_ppO21
+
+change_ppo2_reset:				; reset to 1.00Bar
+	movf	decodata+0,W		; read current value 
+	addlw	d'36'				; offset in memory
+	movwf	EEADR
+	movlw	d'100'
+	movwf	EEDATA
+	call	write_eeprom		; save result in EEPROM
+	movlw	d'5'
+	movwf	menupos
+	bra	menu_const_ppO21
+
+next_ppO2:
+	incf	decodata+0,F
+	movlw	d'3'
+	cpfseq	decodata+0			; =3?
+	bra	next_ppO22
+	clrf	decodata+0			; yes, so reset to zero
+next_ppO22:	
+	movlw	d'1'
+	movwf	menupos
+	bra	menu_const_ppO21	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_reset.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,519 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Menu "Reset all"
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/30/05
+; last updated: 08/08/31
+; known bugs:
+; ToDo: 
+
+; routines to reset external EEPROM (currently inactvated!)
+; routines to reset custom function, gases and decompression values
+; does not reset clock
+
+menu_reset:
+	movlw	d'1'
+	movwf	menupos
+
+	call	PLED_ClearScreen
+	call	PLED_reset_menu_mask
+
+menu_reset2:
+	clrf	timeout_counter2
+	bcf		sleepmode
+	bcf		menubit2
+	bcf		menubit3
+	bsf		menubit
+	bsf		cursor
+	call	PLED_reset_menu_mask
+	call	PLED_menu_cursor
+	bcf		switch_left
+	bcf		switch_right
+menu_reset_loop:
+	call	check_switches_menu
+	btfsc	menubit2
+	bra		do_menu_reset					; call submenu
+	btfss	menubit
+	bra		menu							; exit setup menu and return to main menu
+	btfsc	onesecupdate
+	call	timeout_surfmode
+	btfsc	onesecupdate
+	call	set_dive_modes
+	btfsc	onesecupdate
+	call	test_charger				; check if charger IC is active
+	btfsc	onesecupdate
+	call	get_battery_voltage			; get battery voltage
+	bcf		onesecupdate				; End of one second tasks
+	btfsc	sleepmode
+	goto	menu
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+	bra		menu_reset_loop
+do_menu_reset:						; calls submenu
+	dcfsnz	menupos,F
+	bra		do_menu_reset_exit				; Cancel, exit
+	dcfsnz	menupos,F
+	bra		do_menu_reset_all				; Reset all settings
+	dcfsnz	menupos,F
+	bra		do_menu_reset_logbook			; Reset Logbook Memory!
+	dcfsnz	menupos,F
+	bra		do_menu_reset_reboot			; Reboot OSTC
+	dcfsnz	menupos,F
+	bra		do_menu_reset_decodata			; Reset Decodata
+do_menu_reset_exit:
+	movlw	d'3'
+	movwf	menupos
+	bra		menu2							; exit...
+
+
+do_menu_reset_reboot:
+	call	PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+	movwf	menupos						; Used as temp
+	tstfsz	menupos
+	bra		do_menu_reset_reboot2		; Delete now!
+	bra		do_menu_reset_exit			; Cancel!
+
+do_menu_reset_reboot2:
+	call	PLED_DisplayOff					; Power-down OLED 
+	movlw	b'00000000'						; Bit6: PPL Disable
+	movwf	OSCTUNE
+	movlw	b'01111110'						; 8MHz
+	movwf	OSCCON
+	reset
+	goto	0x00000							; restart to 0x00000
+
+do_menu_reset_logbook:
+	call	PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+	movwf	menupos						; Used as temp
+	tstfsz	menupos
+	bra		do_menu_reset_logbook2		; Delete Logbook now!
+	bra		do_menu_reset_exit			; Cancel!
+
+do_menu_reset_logbook2:
+	call	PLED_ClearScreen
+	DISPLAYTEXT	.25					; "Reset..."
+	call	reset_external_eeprom		; delete profile memory
+	bra		do_menu_reset_exit
+
+do_menu_reset_decodata:
+	call	PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+	movwf	menupos						; Used as temp
+	tstfsz	menupos
+	bra		do_menu_reset_decodata2		; Reset Deco Data now!
+	bra		do_menu_reset_exit			; Cancel!
+
+do_menu_reset_decodata2:
+; reset deco data
+	call	PLED_ClearScreen
+	DISPLAYTEXT	.25					; "Reset..."
+	movff	amb_pressure+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		
+	call	deco_main_clear_tissue	;
+	movlb	b'00000001'				; RAM Bank1 selected
+	goto	restart					; done. quit to surfmode
+
+do_menu_reset_all:
+	call	PLED_confirmbox				; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK!
+	movwf	menupos						; Used as temp
+	tstfsz	menupos
+	bra		do_menu_reset_all2			; Reset all now!
+	bra		do_menu_reset_exit			; Cancel!
+
+do_menu_reset_all2:
+	call	PLED_ClearScreen
+	DISPLAYTEXT	.25					; "Reset..."
+
+reset_start:
+; reset deco data
+	movff	amb_pressure+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		
+	call	deco_main_clear_tissue	;
+	movlb	b'00000001'				; RAM Bank1 selected
+
+; reset gases
+	clrf	EEADRH					; EEPROM BANK 0 !
+
+	movlw	d'3'					; address of first gas-1
+	movwf	EEADR
+	clrf	hi						; He part (default for all gases: 0%)
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #1
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #2
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #3
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #4
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #5
+	movlw	d'21'					; O2 part (21%)
+	rcall	reset_customfunction	; saves default and current value for gas #6
+
+reset_all_cf:
+; resets all customfunctions to the following default values
+	movlw	d'1'
+	movwf	EEDATA
+	write_int_eeprom	d'33'		; reset start gas
+	clrf	EEDATA
+	write_int_eeprom	d'34'		; reset deco model to ZH-L16
+	clrf	EEDATA
+	write_int_eeprom	d'35'		; Do not use O2 Sensor in CC Modes
+
+	movlw	d'0'
+	clrf	EEDATA
+	write_int_eeprom	d'39'		; Disable Debugbode
+	clrf	EEDATA
+	write_int_eeprom	d'90'		; Disable Brightness offset? (Dim=1, Normal = 0)
+	clrf	EEDATA
+	write_int_eeprom	d'91'		; Reset Date format to MM/DD/YY
+
+	movlw	d'100'
+	write_int_eeprom	d'26'		; Salinity default: 1.00 kg/l
+
+	movlw	b'00011111'	
+	movwf	EEDATA
+	write_int_eeprom	d'27'		; reset active gas flags
+
+	clrf	EEDATA
+	write_int_eeprom	d'28'		; reset change depth gas #1
+	clrf	EEDATA
+	write_int_eeprom	d'29'		; reset change depth gas #2
+	clrf	EEDATA
+	write_int_eeprom	d'30'		; reset change depth gas #3
+	clrf	EEDATA
+	write_int_eeprom	d'31'		; reset change depth gas #4
+	clrf	EEDATA
+	write_int_eeprom	d'32'		; reset change depth gas #5
+
+	movlw	d'100'
+	movwf	EEDATA
+	write_int_eeprom	d'36'		; reset mix1 to ppO2=1.00Bar
+	write_int_eeprom	d'37'		; reset mix2 to ppO2=1.00Bar
+	write_int_eeprom	d'38'		; reset mix3 to ppO2=1.00Bar
+
+	movlw	d'1'
+	movwf	nofly_time+0			; Clear nofly time
+	clrf	nofly_time+1			; Clear nofly time
+
+#DEFINE dive_threshold				d'100'		; 8BIT 		100cm
+#DEFINE surf_threshold				d'30'		; 8BIT 		30cm
+#DEFINE diveloop_timeout    		d'240'		; 8BIT 		240s
+#DEFINE surfloop_timeout			d'120'		; 8BIT 		120s
+#DEFINE	premenu_timeout				d'5'		; 8BIT 		5s
+
+#DEFINE	minimum_velocity			d'7'		; 8BIT 		7min/min
+#DEFINE	pressure_offset_divemode	d'1160'		; 15BIT		1160mBar
+#DEFINE	max_surfpressure			d'1100'		; 15BIT		1100mBar
+#DEFINE	min_gradient_factor			d'20'		; 8Bit 		20%
+#DEFINE	oxygen_threshold			d'20'		; 8Bit 		20%
+
+#DEFINE	dive_menu_timeout			d'30'		; 8BIT 		30s
+#DEFINE	saturation_multiplier		d'110'		; 8BIT 		x1.1
+#DEFINE	desaturation_multiplier		d'90'		; 8BIT 		x0.9
+#DEFINE	nofly_time_ratio			d'60'		; 8BIT		60%
+#DEFINE	gradient_factor_alarm1		d'100'		; 8Bit		100%
+
+#DEFINE	gradient_factor_alarm2		d'120'		; 8Bit		120%
+#DEFINE	deco_distance_for_sim		d'10'		; 8Bit		1m
+#DEFINE	ppo2_warning_low			d'019'		; 8Bit		0.19 Bar
+#DEFINE	ppo2_warning_high			d'160'		; 8Bit		1.60 Bar
+#DEFINE	ppo2_display_high			d'150'		; 8Bit		1.50 Bar
+
+#DEFINE	sampling_rate				d'10'		; 8Bit		10s
+#DEFINE	sampling_divisor_temp		d'6'		; 8Bit		/6
+#DEFINE	sampling_divisor_deco		d'6'		; 8Bit		/6
+#DEFINE	sampling_divisor_tank		d'0'		; 8Bit		never
+#DEFINE	sampling_divisor_ppo2		d'0'		; 8Bit		never
+
+#DEFINE	sampling_divisor_deco2		d'12'		; 8Bit		/12
+#DEFINE	sampling_divisor_nyu2		d'0'		; 8Bit		never
+#DEFINE	cns_display_high			d'20'		; 8Bit		20%
+#DEFINE	logbook_offset				d'0'		; 15Bit		No Offset, but 15Bit value
+#DEFINE	last_deco_depth				d'3'		; 8Bit		3m
+#DEFINE	timeout_apnoe_mode			d'10'		; 8Bit		10min
+#DEFINE	show_voltage_value			d'0'		; 1Bit		=1 Show value instead of symbol, =0 Show Symbol
+
+#DEFINE	GF_low_default				d'30'		; 8Bit		30%
+#DEFINE	GF_high_default				d'90'		; 8Bit		90%
+#DEFINE	color_battery_surface		d'223'		; 8Bit		Color Battery sign Surfacemode
+#DEFINE	SP_high_HUD_default			d'140'		; 8Bit		1.40Bar
+#DEFINE	SP_nom_HUD_default			d'120'		; 8Bit		1.20Bar
+#DEFINE	HUD_style					d'0'		; 8Bit		OSTC Style
+
+#DEFINE	show_seconds_divemode		d'0'		; 1Bit 		=1 Show the seconds in Divemode
+#DEFINE	flip_display_default		d'0'		; 1Bit		=1 Flip Display
+#DEFINE	use_ppo2_screen_default		d'0'		; 1Bit		=1 Use alternative outputs for ppO2 sensor
+#DEFINE	replace_temp_with_avr_depth d'0'		; 1Bit		=1 Show (resetable) average Depth instead of temperature
+
+	movlw	d'127'					; address of low byte of first custom function
+	movwf	EEADR
+	clrf	hi						; only required once
+	movlw	LOW		dive_threshold	; 8Bit value
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		surf_threshold
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		diveloop_timeout
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		surfloop_timeout
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		premenu_timeout
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		minimum_velocity
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	HIGH	pressure_offset_divemode
+	movwf	hi
+	bsf		hi,7					; 15Bit value
+	movlw	LOW		pressure_offset_divemode
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	HIGH	max_surfpressure
+	movwf	hi
+	bsf		hi,7					; 15Bit value
+	movlw	LOW		max_surfpressure
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		min_gradient_factor
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		oxygen_threshold
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		dive_menu_timeout
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		saturation_multiplier
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		desaturation_multiplier
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		nofly_time_ratio
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		gradient_factor_alarm1
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		gradient_factor_alarm2
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		deco_distance_for_sim
+	rcall	reset_customfunction	; saves default and current value
+		
+	movlw	LOW		ppo2_warning_low
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		ppo2_warning_high
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		ppo2_display_high
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		sampling_rate
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_temp
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_deco
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_tank
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_ppo2
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_deco2
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		sampling_divisor_nyu2
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		cns_display_high
+	rcall	reset_customfunction	; saves default and current value
+
+	clrf	hi	
+	bsf		hi,7					; 15Bit value
+	movlw	LOW		logbook_offset
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		last_deco_depth				
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		timeout_apnoe_mode
+	rcall	reset_customfunction	; saves default and current value
+	
+	movlw	LOW		show_voltage_value
+	rcall	reset_customfunction	; saves default and current value
+
+reset_all_cf_bank1:
+	movlw	d'1'
+	movwf	EEADRH					; EEPROM BANK 1 !!
+	movlw	d'127'					; address of low byte of first custom function
+	movwf	EEADR
+	clrf	hi						; only required once/bank
+	
+	movlw	LOW		GF_low_default
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	LOW		GF_high_default
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	color_battery_surface
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	SP_high_HUD_default			
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	SP_nom_HUD_default			
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	HUD_style
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	show_seconds_divemode
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	flip_display_default
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	use_ppo2_screen_default	
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	replace_temp_with_avr_depth	
+	rcall	reset_customfunction	; saves default and current value
+
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+	movlw	d'0'
+	rcall	reset_customfunction	; saves default and current value
+
+	clrf	EEADRH					; EEPROM BANK 0 !
+	
+
+;call	reset_external_eeprom	; delete profile memory
+	goto	restart					; all reset, quit to surfmode
+
+reset_customfunction:
+	movwf	lo
+	incf	EEADR,F
+	movff	lo, EEDATA					; Lowbyte Defaul value
+	call	write_eeprom
+	incf	EEADR,F
+	movff	hi, EEDATA					; Highbyte default value
+	call	write_eeprom
+	incf	EEADR,F
+	movff	lo, EEDATA					; Lowbyte current value
+	call	write_eeprom
+	incf	EEADR,F
+	bcf		hi,7						; This bit will only be written for the default value
+	movff	hi, EEDATA					; Highbyte current value
+	call	write_eeprom
+	clrf	hi	
+	return
+	
+
+reset_external_eeprom:				; deletes complete external eeprom!
+	clrf	eeprom_address+0
+	clrf	eeprom_address+1
+
+	movlw	d'2'
+	movwf	temp3
+reset_eeprom02:
+	clrf	temp4
+reset_eeprom01:
+	movlw	d'64'
+	movwf	temp2
+	bcf		eeprom_blockwrite		; Blockwrite start
+reset_eeprom1:
+	setf	ext_ee_temp1			; byte for Blockwrite....
+	movf	ext_ee_temp1,W			; So, 1st. Byte of block is fine, too
+	call	write_external_eeprom_block
+	decfsz	temp2,F		; 64 Byte done
+	bra		reset_eeprom1
+	bsf		SSPCON2,PEN					; Stop condition
+	call	WaitMSSP	
+	WAITMS	d'7'
+	decfsz	temp4,F
+	bra		reset_eeprom01				; do this 256 times
+	decfsz	temp3,F
+	bra		reset_eeprom02				; and this all 2 times -> 512 *64Bytes = 32KB
+
+	bcf		eeprom_blockwrite			; clear blockwrite flag
+
+	clrf	eeprom_address+0
+	clrf	eeprom_address+1
+
+	movlw	0xFD						; With these three bytes the OSTC will find the free area in the EEPROM faster
+	call	write_external_eeprom
+	movlw	0xFD
+	call	write_external_eeprom
+	movlw	0xFE						
+	call	write_external_eeprom	
+
+	clrf	eeprom_address+0
+	clrf	eeprom_address+1
+	return
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/menu_settime.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,290 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; menu "Set Time"
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 5/19/06
+; last updated: 080904
+; known bugs:
+; ToDo: 
+
+
+menu_settime:
+	call	PLED_ClearScreen
+
+	bcf		set_minutes
+	bcf		menubit4
+	bcf		cursor
+	clrf	timeout_counter2
+	bcf		menubit2
+	bcf		menubit3
+	bcf		sleepmode
+	bcf		set_year
+	bcf		set_day
+	bcf		set_month
+	clrf	menupos2
+
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.29			; Set Time
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXT	.22			; Time:
+	DISPLAYTEXT	.23			; Date:
+
+	call	set_time_refresh
+
+	DISPLAYTEXT	.24			; Set Hours
+	
+	bcf		switch_left
+	bcf		switch_right
+
+settime_loop:
+	btfsc	switch_left
+	call	add_hours_or_minutes_or_date
+
+	btfsc	switch_right
+	call	set_time_next_or_exit
+
+	btfsc	menubit4
+	bra	set_time_done
+
+	btfsc	onesecupdate
+	call	timeout_surfmode
+
+	btfsc	onesecupdate
+	call	set_dive_modes
+
+	bcf		onesecupdate	
+
+	btfsc	sleepmode
+	bra	exit_settime
+
+	btfsc	divemode
+	goto	restart			
+
+	bra	settime_loop
+
+set_time_refresh:
+	WIN_LEFT	.70
+	WIN_TOP		.65
+	lfsr	FSR2,letter
+	movff	hours,lo
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	mins,lo
+	output_99x
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+
+set_date_refresh:
+	WIN_LEFT	.70
+	WIN_TOP		.95
+	lfsr	FSR2,letter
+	movff	month,convert_value_temp+0
+	movff	day,convert_value_temp+1
+	movff	year,convert_value_temp+2
+	call	PLED_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	movlw	' '
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+
+set_time_done:				; Check date
+	movff	month,lo		; new month
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.28
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	cpfsgt	day						; day ok?
+	bra	set_time_done2			; OK
+	movlw	.1						; not OK, set to 1st
+	movwf	day
+
+set_time_done2:
+	WIN_LEFT	.32
+	WIN_TOP		.155
+	movlw	d'8'
+	movwf	temp1
+	call	PLED_display_clear_common_y1
+	
+	movlw	d'5'
+	movwf	wait_temp
+	clrf	secs
+	bcf		onesecupdate
+	
+set_time_done_loop	
+	btfss	onesecupdate
+	bra	set_time_done_loop
+	bcf		onesecupdate
+
+	call	set_date_refresh
+
+	WIN_LEFT	.70
+	WIN_TOP		.65
+	lfsr	FSR2,letter
+	movff	hours,lo
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	mins,lo
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	secs,lo
+	output_99x
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+
+	decfsz	wait_temp,F
+	bra	set_time_done_loop
+exit_settime:				;Exit
+	movlw	d'1'
+	movwf	menupos
+	goto	more_menu2
+
+
+set_time_next_or_exit:
+	btfsc	set_year
+	bsf		menubit4		; quit settime
+	incf	menupos2,F
+	movff	menupos2,menupos3
+
+	dcfsnz	menupos3,F
+	bsf		set_minutes
+	dcfsnz	menupos3,F
+	bsf		set_month
+	dcfsnz	menupos3,F
+	bsf		set_day	
+	dcfsnz	menupos3,F
+	bsf		set_year
+	
+	WIN_LEFT	.32
+	WIN_TOP		.155
+	lfsr	FSR2,letter
+	OUTPUTTEXT	.94			; Set
+
+	movff	menupos2,menupos3
+	decfsz	menupos3,F
+	bra	set_time_next_or_exit2
+	OUTPUTTEXT	.90				; Minutes
+	bra	set_time_next_or_exit5
+set_time_next_or_exit2:	
+	decfsz	menupos3,F
+	bra	set_time_next_or_exit3
+	OUTPUTTEXT	.91				; Month
+	bra	set_time_next_or_exit5
+set_time_next_or_exit3:	
+	decfsz	menupos3,F
+	bra	set_time_next_or_exit4
+	OUTPUTTEXT	.92				; Day
+	bra	set_time_next_or_exit5
+set_time_next_or_exit4:	
+	OUTPUTTEXT	.93				; Year
+
+set_time_next_or_exit5:	
+	call	word_processor
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	return
+	
+
+add_hours_or_minutes_or_date:
+	bcf		switch_right
+	clrf	secs
+
+	btfsc	set_year
+	bra	add_year
+
+	btfsc	set_day
+	bra	add_day
+
+	btfsc	set_month
+	bra	add_month
+
+	btfsc	set_minutes
+	bra	add_minutes
+; Also Stunden erhöhen
+add_hours:
+	incf	hours,F
+	movlw	d'23'
+	cpfsgt	hours
+	bra	set_time_refresh_x
+	clrf	hours
+	bra	set_time_refresh_x
+add_minutes:
+	incf	mins,F
+	movlw	d'59'
+	cpfsgt	mins
+	bra	set_time_refresh_x
+	clrf	mins
+	bra	set_time_refresh_x
+add_day:
+	incf	day,F
+	movlw	d'31'
+	cpfsgt	day
+	bra	set_time_refresh_x
+	movlw	d'1'
+	movwf	day
+	bra	set_time_refresh_x
+add_month:
+	incf	month,F
+	movlw	d'12'
+	cpfsgt	month
+	bra	set_time_refresh_x
+	movlw	d'1'
+	movwf	month
+	bra	set_time_refresh_x
+add_year:
+	incf	year,F
+	movlw	d'20'					; calendar until 2020
+	cpfsgt	year
+	bra	set_time_refresh_x
+	movlw	d'8'
+	movwf	year					; Set Year to 2008
+	
+set_time_refresh_x:
+	call	set_time_refresh
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/ms5535.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,603 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; routines for Intersema MS5535A, MS5541B and MS5541C
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 9/26/05
+; last updated: 08/08/31
+; known bugs:
+; ToDo: 
+
+; with second order temperature compensation
+
+calculate_compensation:
+; calculate xdT
+	clrf	isr_xA+1
+	movlw	d'8'
+	movwf	isr_xA+0
+	movff	C5+0,isr_xB+0
+	movff	C5+1,isr_xB+1
+	call	isr_mult16x16		;isr_xA*isr_xB=isr_xC
+	movlw   LOW		d'10000'
+	addwf   isr_xC+0, f
+	movlw   HIGH 	d'10000'
+	addwfc  isr_xC+1, f			;isr_xC= 8*C5 + 10000
+	movff	D2+0,isr_sub_a+0
+	movff	D2+1,isr_sub_a+1
+	movff	isr_xC+0,isr_sub_b+0
+	movff	isr_xC+1,isr_sub_b+1
+	call	isr_sub16	;  isr_sub_c = isr_sub_a - isr_sub_b
+	movff	isr_sub_c+0,xdT+0
+	movff	isr_sub_c+1,xdT+1
+
+; Second order temperature calculation
+	btfsc	neg_flag_isr		
+	bra		dTzero_yes
+;	dT>0
+	bcf		neg_flag_xdT
+	movff	xdT+0,isr_xA+0
+	movff	xdT+1,isr_xA+1
+	movff	xdT+0,isr_xB+0
+	movff	xdT+1,isr_xB+1
+	call	isr_mult16x16		;isr_xA*isr_xB=isr_xC
+	movlw	d'17'			; 2^17=(128*128)*8
+	movwf	isr_divB
+	call	isr_div32			; isr_xC=isr_xC(32Bit)/2^isr_divB (isr_divB: 8Bit only!)
+	movff	xdT+0,isr_sub_a+0
+	movff	xdT+1,isr_sub_a+1
+	movff	isr_xC+0,isr_sub_b+0
+	movff	isr_xC+1,isr_sub_b+1
+	call	isr_sub16	;  isr_sub_c = isr_sub_a - isr_sub_b
+	movff	isr_sub_c+0,xdT2+0
+	movff	isr_sub_c+1,xdT2+1
+	bra		OFF_calc			; Done
+		
+dTzero_yes:
+;	dT<0
+	bsf		neg_flag_xdT
+	movff	xdT+0,isr_xA+0
+	movff	xdT+1,isr_xA+1
+	movff	xdT+0,isr_xB+0
+	movff	xdT+1,isr_xB+1
+	call	isr_mult16x16		;isr_xA*isr_xB=isr_xC
+	movlw	d'15'			; 2^15=(128*128)*2
+	movwf	isr_divB
+	call	isr_div32			; isr_xC=isr_xC(32Bit)/2^isr_divB (isr_divB: 8Bit only!)
+
+	movf	xdT+0,W
+	addwf	isr_xC+0,F
+	movf	xdT+1,W
+	addwfc	isr_xC+1,F	
+	movff	isr_xC+0,xdT2+0
+	movff	isr_xC+1,xdT2+1
+
+OFF_calc:
+; calculate OFF
+	movff	C4+0,isr_sub_a
+	movff	C4+1,isr_sub_a+1
+	movlw	d'250'
+	movwf	isr_sub_b
+	clrf	isr_sub_b+1
+	call	isr_sub16				; (C4-250) - Sets neg_flag_isr!
+	movff	isr_sub_c,isr_xA
+	movff	isr_sub_c+1,isr_xA+1
+	movff	xdT+0,isr_xB
+	movff	xdT+0+1,isr_xB+1
+	call	isr_mult16x16			; (C4-250)*dT
+	movff	isr_xC+0,isr_divA
+	movff	isr_xC+1,isr_divA+1
+	movlw	d'12'
+	movwf	isr_divB
+	call	isr_div16				; [(C4-250)*dT]/2^12
+	movff	isr_divA+0,isr_xC+0	
+	movff	isr_divA+1,isr_xC+1			; isr_xC= {[(C4-250)*dT]/2^12}
+	btfss	neg_flag_isr			; neg_flag_isr=1?
+	bra		OFF_calc2			; Yes, do C2 - isr_xC
+								; no, so do C2 + isr_xC
+	movf	C2+0,W
+	addwf   isr_xC+0, f				
+	movf	C2+1,W
+	addwfc  isr_xC+1, f				; isr_xC= C2 + {[(C4-250)*dT/2^12]}
+OFF_calc3:	
+	movlw   LOW	d'10000'
+	addwf   isr_xC+0, f
+	movlw   HIGH d'10000'
+	addwfc  isr_xC+1, f				; isr_xC=[(C4-250)*dT/2^12] + 10000
+	movff	isr_xC+0,OFF+0
+	movff	isr_xC+1,OFF+1
+	bra		calculate_SENS		; Done with OFF
+
+OFF_calc2:	
+	movff	C2+0,isr_sub_a+0
+	movff	C2+1,isr_sub_a+1
+	movff	isr_xC+0,isr_sub_b+0
+	movff	isr_xC+1,isr_sub_b+1
+	call	isr_sub16	;  isr_sub_c = isr_sub_a - isr_sub_b
+						; isr_xC= C2 - {[(C4-250)*dT/2^12]}
+	movff	isr_sub_c+0,isr_xC+0
+	movff	isr_sub_c+1,isr_xC+1			; Done with OFF
+	bra		OFF_calc3
+	
+calculate_SENS:
+	movff	C3+0, C3_temp+0
+	movff	C3+1, C3_temp+1
+	movlw   d'200'
+	addwf   C3_temp+0, f
+	movlw   d'0'
+	addwfc  C3_temp+1, f		; C3 no longer valid!
+	movff	C3_temp+0, isr_xA
+	movff	C3_temp+1, isr_xA+1
+	movff	xdT+0, isr_xB
+	movff	xdT+1, isr_xB+1
+	call	isr_mult16x16
+	movff	isr_xC+0,isr_divA
+	movff	isr_xC+1,isr_divA+1
+	movlw	d'13'
+	movwf	isr_divB
+	call	isr_div16
+	movff	isr_divA,SENS+0
+	movff	isr_divA+1,SENS+1
+	movff	C1+0,isr_divA
+	movff	C1+1,isr_divA+1
+	movlw	d'1'
+	movwf	isr_divB
+	call	isr_div16
+	movf	isr_divA,W
+	addwf   SENS+0, f
+	movf	isr_divA+1,W
+	addwfc  SENS+1, f
+	movlw   d'184'
+	addwf   SENS+0, f
+	movlw   d'11'
+	addwfc  SENS+1, f
+
+; calculate amb_pressure
+	movff	D1+0,isr_sub_a
+	movff	D1+1,isr_sub_a+1
+	movff	OFF+0,isr_sub_b
+	movff	OFF+1,isr_sub_b+1
+	call	isr_sub16
+	movff	isr_sub_c,isr_xA
+	movff	isr_sub_c+1,isr_xA+1
+	movff	SENS+0,isr_xB
+	movff	SENS+1,isr_xB+1
+	call	isr_mult16x16
+	movlw	d'12'
+	movwf	isr_divB
+	call	isr_div32
+	btfsc	neg_flag_isr		; invert isr_xC+0 and isr_xC+1
+	call	isr_invert_xC
+	movlw   LOW 	d'1000'
+	addwf   isr_xC+0, f
+	movlw   HIGH 	d'1000'
+	addwfc  isr_xC+1, f
+	movff	isr_xC+0,amb_pressure+0
+	movff	isr_xC+1,amb_pressure+1
+
+	btfss	simulatormode_active		; are we in simulator mode?
+	bra		calc_pressure_done			; no
+
+	movff	sim_pressure+0,amb_pressure+0	; override readings with simulator values
+	movff	sim_pressure+1,amb_pressure+1
+	
+calc_pressure_done:
+
+; calculate temp	
+	movff	C6+0, C3_temp+0
+	movff	C6+1, C3_temp+1
+	movlw   d'100'
+	addwf   C3_temp+0, f
+	movlw   d'0'
+	addwfc  C3_temp+1, f
+	movff	C3_temp+0,isr_xA+0
+	movff	C3_temp+1,isr_xA+1
+	movff	xdT2+0,isr_xB+0	
+	movff	xdT2+1,isr_xB+1
+	call	isr_mult16x16
+	movlw	d'11'
+	movwf	isr_divB
+	call	isr_div32
+	bcf		neg_temp				; Temperatur positive 
+	
+	btfsc	neg_flag_xdT			; was xdT negative?
+	bra		neg_sub_temp			; yes,  200 - dT*(....
+									; No, 200 + dT*(....
+;	movf	temperature_correction,W
+;	addlw   d'200'
+;	btfsc	STATUS,C
+;	incf	isr_xC+1,F
+
+	movlw	d'200'
+	addwf   isr_xC+0, f
+	movlw   d'0'
+	addwfc  isr_xC+1, f
+	movff	isr_xC+0,temperature+0
+	movff	isr_xC+1,temperature+1
+	return			; done
+
+neg_sub_temp:					; 200 - dT*(....
+;	movf	temperature_correction,W
+;	addlw   d'200'
+;	btfsc	STATUS,C
+;	decf	isr_xC+1,F
+
+	movlw	d'200'
+neg_sub_temp3:
+	movwf	isr_sub_a+0
+	clrf	isr_sub_a+1
+	movff	isr_xC+0, isr_sub_b+0
+	movff	isr_xC+1, isr_sub_b+1
+	call	isr_sub16				; isr_sub_c = isr_sub_a - isr_sub_b
+	btfsc	neg_flag_isr			; below zero?
+	bsf		neg_temp			; temperature negative!
+
+	movff	isr_sub_c+0,temperature+0
+	movff	isr_sub_c+1,temperature+1
+	return			; Fertig mit allem
+
+
+get_pressure_start:
+	rcall	reset_MS5535A
+	movlw	b'10100000'	;+3*high as start and 1+low as stop!
+get_pressure_start2:
+	movwf	isr1_temp
+	movlw	d'12'
+	movwf	clock_count
+	rcall	send_data_MS55535A
+	return
+
+get_pressure_value:
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,D1+1	
+	movff	dLSB,D1+0
+	return
+
+get_temperature_start:
+	rcall	reset_MS5535A
+	movlw	b'10010000'	;+3*high as start and 1+low as stop!
+	bra		get_pressure_start2	; continue in "get_pressure"
+
+get_temperature_value:
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,D2+1
+	movff	dLSB,D2+0
+	return
+
+get_calibration_data:
+	; read addional temperature correction from internal EEPROM 0x100
+	bsf		no_sensor_int				; No sensor interupt!
+	clrf	temperature_correction		; clear compensation value
+	movlw	LOW		0x100
+	movwf	EEADR
+	movlw	HIGH	0x100
+	movwf	EEADRH
+	call	read_eeprom
+	clrf	EEADRH						; Only 256Bytes used in normal program
+	movlw	d'200'						; limit value
+	cpfsgt	EEDATA						; EEDATA>200?
+	movff	EEDATA, temperature_correction	; No, Store for compensation
+	
+	rcall	reset_MS5535A
+	movlw	d'13'
+	movwf	clock_count
+	movlw	b'01010100'	;+3*high as start and 1+low as stop!
+	movwf	isr1_temp
+	rcall	send_data_MS55535A
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,W1+1	
+	movff	dLSB,W1+0
+
+	movlw	d'13'
+	movwf	clock_count
+	movlw	b'01011000'	;+3*high as start and 1+low as stop!
+	movwf	isr1_temp
+	rcall	send_data_MS55535A
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,W2+1	
+	movff	dLSB,W2+0
+
+	movlw	d'13'
+	movwf	clock_count
+	movlw	b'01100100'	;+3*high as start and 1+low as stop!
+	movwf	isr1_temp
+	rcall	send_data_MS55535A
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,W3+1	
+	movff	dLSB,W3+0
+
+	movlw	d'13'
+	movwf	clock_count
+	movlw	b'01101000'	;+3*high as start and 1+low as stop!
+	movwf	isr1_temp
+	rcall	send_data_MS55535A
+	rcall	get_2bytes_MS5535A
+	movff	dMSB,W4+1	
+	movff	dLSB,W4+0
+
+; calculate C1 (16Bit)
+	movff	W1+1, C1+1
+	bcf		STATUS,C
+	rrcf	C1+1
+	bcf		STATUS,C
+	rrcf	C1+1
+	bcf		STATUS,C
+	rrcf	C1+1
+	movff	W1+0, C1+0
+	bsf		STATUS,C
+	btfss	W1+1,0
+	bcf		STATUS,C
+	rrcf	C1+0
+	bsf		STATUS,C
+	btfss	W1+1,1
+	bcf		STATUS,C
+	rrcf	C1+0
+	bsf		STATUS,C
+	btfss	W1+1,2
+	bcf		STATUS,C
+	rrcf	C1+0
+
+; calculate C2 (16Bit)
+	movff	W2+0, C2+0
+	bsf		STATUS,C
+	btfss	W2+1,0
+	bcf		STATUS,C
+	rrcf	C2+0
+	bsf		STATUS,C
+	btfss	W2+1,1
+	bcf		STATUS,C
+	rrcf	C2+0
+	bsf		STATUS,C
+	btfss	W2+1,2
+	bcf		STATUS,C
+	rrcf	C2+0
+	bsf		STATUS,C
+	btfss	W2+1,3
+	bcf		STATUS,C
+	rrcf	C2+0
+	bsf		STATUS,C
+	btfss	W2+1,4
+	bcf		STATUS,C
+	rrcf	C2+0
+	bsf		STATUS,C
+	btfss	W2+1,5
+	bcf		STATUS,C
+	rrcf	C2+0
+
+	movff	W2+1, C2+1
+	bsf		STATUS,C
+	btfss	W1+0,0
+	bcf		STATUS,C
+	rrcf	C2+1
+	bsf		STATUS,C
+	btfss	W1+0,1
+	bcf		STATUS,C
+	rrcf	C2+1
+	bsf		STATUS,C
+	btfss	W1+0,2
+	bcf		STATUS,C
+	rrcf	C2+1
+	bcf		STATUS,C
+	rrcf	C2+1
+	bcf		STATUS,C
+	rrcf	C2+1
+	bcf		STATUS,C
+	rrcf	C2+1
+
+; calculate C3 (16Bit)
+	movff	W3+1,C3+0
+	bsf		STATUS,C
+	btfss	W3+0,7
+	bcf		STATUS,C
+	rlcf	C3+0
+	bsf		STATUS,C
+	btfss	W3+0,6
+	bcf		STATUS,C
+	rlcf	C3+0
+	clrf	C3+1
+	btfsc	W3+1,7
+	bsf		C3+1,1
+	btfsc	W3+1,6
+	bsf		C3+1,0
+	
+; calculate C4 (16Bit)	
+	movff	W4+1,C4+0
+	bsf		STATUS,C
+	btfss	W4+0,7
+	bcf		STATUS,C
+	rlcf	C4+0
+	clrf	C4+1
+	btfsc	W4+1,7
+	bsf		C4+1,0
+	
+; calculate C5 (16Bit)		
+	movff	W3+0,C5+0
+	bcf		C5+0,6
+	btfsc	W2+0,0
+	bsf		C5+0,6
+	bcf		C5+0,7
+	btfsc	W2+0,1
+	bsf		C5+0,7
+	clrf	C5+1
+	btfsc	W2+0,2
+	bsf		C5+1,0
+	btfsc	W2+0,3
+	bsf		C5+1,1
+	btfsc	W2+0,4
+	bsf		C5+1,2
+	btfsc	W2+0,5
+	bsf		C5+1,3
+
+; calculate C6 (16Bit)		
+	clrf	C6+1
+	movff	W4+0,C6+0
+	bcf		C6+0,7
+
+	bcf		no_sensor_int		; enable sensor interrupts
+	return
+
+reset_MS5535A_one:
+	bsf		sensor_SDO
+	nop
+	bsf		sensor_CLK
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	return	
+
+reset_MS5535A_zero:
+	bcf		sensor_SDO
+	nop
+	bsf		sensor_CLK
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	return	
+
+reset_MS5535A:
+	rcall	reset_MS5535A_one			;0
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero
+	rcall	reset_MS5535A_one
+	rcall	reset_MS5535A_zero			;15
+	rcall	reset_MS5535A_zero	
+	rcall	reset_MS5535A_zero	
+	rcall	reset_MS5535A_zero	
+	rcall	reset_MS5535A_zero	
+	rcall	reset_MS5535A_zero			;20
+	return
+
+get_2bytes_MS5535A:
+	movlw	d'8'
+	movwf	clock_count
+	rcall	recieve_loop
+	movff	isr1_temp,dMSB
+
+	movlw	d'8'
+	movwf	clock_count
+	rcall	recieve_loop
+	movff	isr1_temp,dLSB
+	bsf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	return
+
+recieve_loop:
+	bsf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	btfss	sensor_SDI	;MSB first
+	bcf		STATUS,C
+	btfsc	sensor_SDI	;MSB first
+	bsf		STATUS,C
+	rlcf	isr1_temp,F
+	decfsz	clock_count,F
+	bra		recieve_loop
+	return
+	
+
+send_data_MS55535A:
+	; send three startbits first
+	bcf		sensor_CLK
+	bsf		sensor_SDO
+	movlw	d'3'
+	subwf	clock_count,F	; total bit counter
+	bsf		sensor_CLK		
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bsf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bsf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+	; now send 8 bytes from isr_temp1 and fill-up with zeros
+datenbits:
+	btfss	isr1_temp,7	;MSB first
+	bcf		sensor_SDO
+	btfsc	isr1_temp,7	;MSB first
+	bsf		sensor_SDO
+	bcf		STATUS,C
+	rlcf	isr1_temp
+
+	bsf		sensor_CLK	
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	bcf		sensor_CLK	
+
+	decfsz	clock_count,F
+	bra		datenbits
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/oled_samsung.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,768 @@
+; OSTC - diving computer code
+; Copyright (C) 2009 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; hardware routines for S6E6D6 Samsung OLED Driver IC
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 090801
+; last updated: 090830
+; known bugs:
+; ToDo: Optimise PLED_box calls
+
+WIN_FONT 	macro	win_font_input
+			movlw	win_font_input
+			movff	WREG,win_font
+			endm
+			
+WIN_TOP 	macro 	win_top_input
+			movlw	win_top_input
+			movff	WREG,win_top
+			endm
+			
+WIN_LEFT 	macro 	win_left_input
+			movlw	win_left_input
+			movff	WREG,win_leftx2
+			endm
+			
+WIN_INVERT	macro 	win_invert_input
+			movlw	win_invert_input
+			movff	WREG,win_invert
+			endm
+
+WIN_COLOR	macro 	win_color_input
+			movlw	win_color_input
+			call	PLED_set_color
+			endm
+	
+
+word_processor:						; word_processor:
+	clrf	POSTINC2				; Required!
+	movff	win_color2,win_color2_temp
+	movff	win_color1,win_color1_temp
+	call	main_wordprocessor		; C-Code
+	movlb	b'00000001'				; Back to Rambank1
+	movff	win_color2_temp,win_color2
+	movff	win_color1_temp,win_color1
+	return
+
+; -----------------------------
+; PLED_SetColumnPixel:
+; -----------------------------
+PLED_SetColumnPixel:
+	movwf	LastSetColumn		; d'0' ... d'159'
+	movff	LastSetColumn,win_leftx2
+	movlw	0x21				; Start Address Vertical (.0 - .319)
+	rcall	PLED_CmdWrite
+	bcf		STATUS,C
+	rlcf	LastSetColumn,W		; x2 -> WREG
+	movlw	d'0'
+	btfsc	STATUS,C			; Result >255?
+	movlw	d'1'				; Yes: Upper=1!
+	rcall	PLED_DatWrite		; Upper
+	bcf		STATUS,C
+	rlcf	LastSetColumn,W		; x2 -> WREG
+	rcall	PLED_DatWrite		; Lower
+	return
+
+; -----------------------------
+; PLED_SetRow:
+; -----------------------------
+PLED_SetRow:		
+	movwf	LastSetRow		; d'0' ... d'239'
+	movff	LastSetRow,win_top
+	movlw	0x20			; Horizontal Address START:END
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movf	LastSetRow,W
+	rcall	PLED_DatWrite		
+	return
+
+; -----------------------------
+; PLED Write Two Pixel
+; -----------------------------
+PLED_PxlWrite:
+	movlw	0x22					; Start Writing Data to GRAM
+	rcall	PLED_CmdWrite
+	bsf		oled_rs					; Data!
+	movff	win_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	movff	win_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+
+; Reset Column+1
+	movlw	0x21				; Start Address Vertical (.0 - .319)
+	rcall	PLED_CmdWrite
+	bcf		STATUS,C
+	rlcf	LastSetColumn,W		; x2
+	movlw	d'0'
+	btfsc	STATUS,C			; Result >256?
+	movlw	d'1'				; Yes!
+	rcall	PLED_DatWrite		; Upper
+	bcf		STATUS,C
+	rlcf	LastSetColumn,F
+	incf	LastSetColumn,W		; x2
+	rcall	PLED_DatWrite		; Lower
+
+; Reset Row
+	movlw	0x20			; Horizontal Address START:END
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movf	LastSetRow,W
+	rcall	PLED_DatWrite		
+
+; Write 2nd Pixel on same row but one column to the right
+	movlw	0x22					; Start Writing Data to GRAM
+	rcall	PLED_CmdWrite
+	bsf		oled_rs					; Data!
+	movff	win_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	movff	win_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+	return
+
+; -----------------------------
+; PLED Write One Pixel
+; -----------------------------
+PLED_PxlWrite_Single:
+	movlw	0x22					; Start Writing Data to GRAM
+	rcall	PLED_CmdWrite
+	bsf		oled_rs					; Data!
+	movff	win_color1, PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	movff	win_color2, PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+	return
+
+; -----------------------------
+; PLED Display Off
+; -----------------------------
+PLED_DisplayOff:
+	clrf	PORTD
+	bcf		oled_hv
+	bcf		oled_vdd
+	bcf		oled_cs
+	bcf		oled_e_nwr	
+	bcf		oled_rw
+	bcf		oled_nreset
+	return
+
+; -----------------------------
+; PLED FRAME (win_color1 and win_color2)
+; -----------------------------
+PLED_frame: 
+	movf	box_temp+0,W
+	call	PLED_set_color
+	; draw right line from row top (box_temp+1) to row bottom (box_temp+2)
+	movff	box_temp+1,draw_box_temp1		; Store start row
+PLED_frame2:
+	movf	draw_box_temp1,W				; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	movf	box_temp+3,W					; d'0' ... d'159'
+	call	PLED_SetColumnPixel				; Set left column
+	rcall	PLED_PxlWrite_Single			; Write Pixel
+	incf	draw_box_temp1,F
+	movf	draw_box_temp1,W				; Copy to W
+	cpfseq	box_temp+2						; Done?
+	bra		PLED_frame2						; Not yet...
+
+	movf	draw_box_temp1,W				; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	movf	box_temp+3,W					; d'0' ... d'159'
+	call	PLED_SetColumnPixel				; Set left column
+	rcall	PLED_PxlWrite_Single			; Write Pixel
+
+	; draw left line from row top (box_temp+1) to row bottom (box_temp+2)
+	movff	box_temp+1,draw_box_temp1		; Store start row
+PLED_frame3:
+	movf	draw_box_temp1,W				; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	movf	box_temp+4,W					; d'0' ... d'159'
+	call	PLED_SetColumnPixel				; Set left column
+	rcall	PLED_PxlWrite_Single			; Write Pixel
+	incf	draw_box_temp1,F
+	movf	draw_box_temp1,W				; Copy to W
+	cpfseq	box_temp+2						; Done?
+	bra		PLED_frame3						; Not yet...
+
+	movf	draw_box_temp1,W				; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	movf	box_temp+4,W					; d'0' ... d'159'
+	call	PLED_SetColumnPixel				; Set left column
+	rcall	PLED_PxlWrite_Single			; Write Pixel
+
+	; draw top line from box_temp+3 (0-159) to box_temp+4 (0-159)
+	movff	box_temp+3,draw_box_temp1		; Store start column
+PLED_frame4:
+	movf	draw_box_temp1,W				; d'0' ... d'159'
+	rcall	PLED_SetColumnPixel				; Set Column
+	movf	box_temp+1,W					; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	rcall	PLED_PxlWrite					; Write 2 Pixels
+	incf	draw_box_temp1,F
+	movf	draw_box_temp1,W
+	cpfseq	box_temp+4
+	bra		PLED_frame4
+
+	; draw bottom line from box_temp+3 (0-159) to box_temp+4 (0-159)
+	movff	box_temp+3,draw_box_temp1		; Store start column
+PLED_frame5:
+	movf	draw_box_temp1,W				; d'0' ... d'159'
+	rcall	PLED_SetColumnPixel				; Set Column
+	movf	box_temp+2,W					; d'0' ... d'239'
+	rcall	PLED_SetRow						; Set Row
+	rcall	PLED_PxlWrite					; Write 2 Pixels
+	incf	draw_box_temp1,F
+	movf	draw_box_temp1,W
+	cpfseq	box_temp+4
+	bra		PLED_frame5
+
+	movlw	color_white
+	call	PLED_set_color
+
+	return
+
+; -----------------------------
+; PLED Box (win_color1 and win_color2)
+; -----------------------------
+PLED_box:
+	movf	box_temp+0,W
+	call	PLED_set_color
+; /Define Window
+	movlw	0x35				; VerticalStartAddress HIGH:LOW
+	rcall	PLED_CmdWrite
+	movff	box_temp+3,draw_box_temp1
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2
+	movlw	d'0'
+	btfsc	STATUS,C			; Result >255?
+	movlw	d'1'				; Yes: Upper=1!
+	rcall	PLED_DatWrite		; Upper
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2 -> WREG
+	rcall	PLED_DatWrite		; Lower
+
+	movlw	0x36				; VerticalEndAddress HIGH:LOW
+	rcall	PLED_CmdWrite
+	movff	box_temp+4,draw_box_temp1
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2
+	movlw	d'0'
+	btfsc	STATUS,C			; Result >255?
+	movlw	d'1'				; Yes: Upper=1!
+	rcall	PLED_DatWrite		; Upper
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2 -> WREG
+	rcall	PLED_DatWrite		; Lower
+
+	movlw	0x37				; HorizontalAddress START:END
+	rcall	PLED_CmdWrite
+	movff	box_temp+1,draw_box_temp1
+	movf	draw_box_temp1,W
+	rcall	PLED_DatWrite		
+	movff	box_temp+2,draw_box_temp1
+	movf	draw_box_temp1,W
+	rcall	PLED_DatWrite		
+
+	movlw	0x20				; Start Address Horizontal (.0 - .239)
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movff	box_temp+1,draw_box_temp1
+	movf	draw_box_temp1,W
+	rcall	PLED_DatWrite		
+
+	movlw	0x21				; Start Address Vertical (.0 - .319)
+	rcall	PLED_CmdWrite
+	movff	box_temp+3,draw_box_temp1
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2
+	movlw	d'0'
+	btfsc	STATUS,C			; Result >255?
+	movlw	d'1'				; Yes: Upper=1!
+	rcall	PLED_DatWrite		; Upper
+	bcf		STATUS,C
+	rlcf	draw_box_temp1,W		; x2 -> WREG
+	rcall	PLED_DatWrite		; Lower
+; /Define Window
+
+; Fill Window
+	movlw	0x22					; Start Writing Data to GRAM
+	rcall	PLED_CmdWrite
+
+	movff	box_temp+1,draw_box_temp1
+	movff	box_temp+2,draw_box_temp2
+	movf	draw_box_temp1,W
+	subwf	draw_box_temp2,F			; X length
+	incf	draw_box_temp2,F
+
+	movff	box_temp+3,draw_box_temp1
+	movff	box_temp+4,draw_box_temp3
+	movf	draw_box_temp1,W
+	subwf	draw_box_temp3,F			; Y length/2
+
+	incf	draw_box_temp3,F			; Last pixel...
+
+	bsf		oled_rs					; Data!
+
+PLED_box2:
+	movff	draw_box_temp3,draw_box_temp1
+PLED_box3:
+	movff	win_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	movff	win_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+
+	movff	win_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	movff	win_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+
+	decfsz	draw_box_temp1,F
+	bra		PLED_box3
+	decfsz	draw_box_temp2,F
+	bra		PLED_box2
+
+	movlw	0x00					; NOP, to stop Address Update Counter
+	rcall	PLED_CmdWrite
+
+	movlw	color_white
+	call	PLED_set_color
+	return
+
+
+; -----------------------------
+; PLED_ClearScreen:
+; -----------------------------
+PLED_ClearScreen:
+	movlw	0x35				; VerticalStartAddress HIGH:LOW
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movlw	0x00
+	rcall	PLED_DatWrite		
+
+	movlw	0x36				; VerticalEndAddress HIGH:LOW
+	rcall	PLED_CmdWrite
+	movlw	0x01
+	rcall	PLED_DatWrite		
+	movlw	0x3F
+	rcall	PLED_DatWrite		
+
+	movlw	0x37				; HorizontalAddress START:END
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movlw	0xEF
+	rcall	PLED_DatWrite		
+
+	movlw	0x20				; Start Address Horizontal (.0 - .239)
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movlw	0x00
+	rcall	PLED_DatWrite		
+
+	movlw	0x21				; Start Address Vertical (.0 - .319)
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite		
+	movlw	0x00
+	rcall	PLED_DatWrite		
+
+	movlw	0x22					; Start Writing Data to GRAM
+	rcall	PLED_CmdWrite
+
+	bsf		oled_rs					; Data!
+
+	clrf	PORTD					; See Page 101 of OLED Driver IC Datasheet
+	
+	movlw	d'10'
+	movwf	draw_box_temp3
+PLED_ClearScreen2:
+	movlw	d'30'
+	movwf	draw_box_temp2
+PLED_ClearScreen3:
+	clrf	draw_box_temp1				; 30*10*256=76800 Pixels -> Clear complete 240*320
+PLED_ClearScreen4:
+
+	bcf		oled_rw
+	bsf		oled_rw					; Upper
+	bcf		oled_rw
+	bsf		oled_rw					; Lower
+
+	decfsz	draw_box_temp1,F
+	bra		PLED_ClearScreen4
+	decfsz	draw_box_temp2,F
+	bra		PLED_ClearScreen3
+	decfsz	draw_box_temp3,F
+	bra		PLED_ClearScreen2
+
+	movlw	0x00					; NOP, to stop Address Update Counter
+	rcall	PLED_CmdWrite
+
+	return
+
+
+; -----------------------------
+; PLED Write Cmd via W
+; -----------------------------
+PLED_CmdWrite:
+	bcf		oled_rs					; Command!
+	movwf	PORTD					; Move Data to PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	return
+
+; -----------------------------
+; PLED Write Display Data via W
+; -----------------------------
+PLED_DataWrite:
+
+; -----------------------------
+; PLED Data Cmd via W
+; -----------------------------
+PLED_DatWrite:
+	bsf		oled_rs					; Data!
+	movwf	PORTD					; Move Data to PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	return
+
+; -----------------------------
+; PLED boot
+; -----------------------------
+PLED_boot:
+	bcf		oled_hv
+	WAITMS	d'32'
+	bsf		oled_vdd
+	nop
+	bcf		oled_cs
+	nop
+	bsf		oled_nreset
+	WAITMS	d'10'			; Quick wake-up
+;	WAITMS	d'250'
+	bsf		oled_e_nwr	
+	nop
+	bcf		oled_nreset
+	WAIT10US	d'2'
+	bsf		oled_nreset
+	WAITMS	d'10'
+
+	movlw	0x24				; 80-System 8-Bit Mode
+	rcall	PLED_CmdWrite
+
+	movlw	0x02				; RGB Interface Control (S6E63D6 Datasheet page 42)
+	rcall	PLED_CmdWrite
+	movlw	0x00				; X X X X X X X RM
+	rcall	PLED_DatWrite
+	movlw	0x00				; DM X RIM1 RIM0 VSPL HSPL EPL DPL
+	rcall	PLED_DatWrite		; System Interface: RIM is ignored, Internal Clock
+
+	movlw	0x03				; Entry Mode (S6E63D6 Datasheet page 46)
+	rcall	PLED_CmdWrite
+	movlw	0x00				; =b'00000000' 	CLS MDT1 MDT0 	BGR 	X  	X  	X  	SS  65k Color
+	rcall	PLED_DatWrite
+	movlw	b'00110000'			; =b'00110000'	X  	X 	 I/D1 	I/D0 	X  	X  	X 	AM
+	rcall	PLED_DatWrite
+
+	movlw	0x18
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x28
+	rcall	PLED_DatWrite
+
+	movlw	0xF8
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x0F
+	rcall	PLED_DatWrite
+
+	movlw	0xF9
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x0F
+	rcall	PLED_DatWrite
+
+	movlw	0x10
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+
+; Now Gamma settings...
+	rcall	PLED_brightness_full
+; End Gamma Settings
+
+	rcall	PLED_ClearScreen
+
+	bsf		oled_hv
+	WAITMS	d'32'
+
+	movlw	0x05
+	rcall	PLED_CmdWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x01
+	rcall	PLED_DatWrite			; Display ON
+	return
+
+
+PLED_brightness_full:
+	movlw	0x70
+	rcall	PLED_CmdWrite
+	movlw	0x1F
+	rcall	PLED_DatWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x71
+	rcall	PLED_CmdWrite
+	movlw	0x23
+	rcall	PLED_DatWrite
+	movlw	0x80
+	rcall	PLED_DatWrite
+	movlw	0x72
+	rcall	PLED_CmdWrite
+	movlw	0x2A
+	rcall	PLED_DatWrite
+	movlw	0x80
+	rcall	PLED_DatWrite
+
+	movlw	0x73
+	rcall	PLED_CmdWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x11
+	rcall	PLED_DatWrite
+	movlw	0x74
+	rcall	PLED_CmdWrite
+	movlw	0x1C
+	rcall	PLED_DatWrite
+	movlw	0x11
+	rcall	PLED_DatWrite
+
+	movlw	0x75
+	rcall	PLED_CmdWrite
+	movlw	0x1B
+	rcall	PLED_DatWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x76
+	rcall	PLED_CmdWrite
+	movlw	0x1A
+	rcall	PLED_DatWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+
+	movlw	0x77
+	rcall	PLED_CmdWrite
+	movlw	0x1C
+	rcall	PLED_DatWrite
+	movlw	0x18
+	rcall	PLED_DatWrite
+	movlw	0x78
+	rcall	PLED_CmdWrite
+	movlw	0x21
+	rcall	PLED_DatWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	
+	return
+
+PLED_brightness_low:
+	movlw	0x70
+	rcall	PLED_CmdWrite
+	movlw	0x14
+	rcall	PLED_DatWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x71
+	rcall	PLED_CmdWrite
+	movlw	0x17
+	rcall	PLED_DatWrite
+	movlw	0x00
+	rcall	PLED_DatWrite
+	movlw	0x72
+	rcall	PLED_CmdWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x80
+	rcall	PLED_DatWrite
+
+	movlw	0x73
+	rcall	PLED_CmdWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x11
+	rcall	PLED_DatWrite
+	movlw	0x74
+	rcall	PLED_CmdWrite
+	movlw	0x14
+	rcall	PLED_DatWrite
+	movlw	0x0B
+	rcall	PLED_DatWrite
+
+	movlw	0x75
+	rcall	PLED_CmdWrite
+	movlw	0x1B
+	rcall	PLED_DatWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x76
+	rcall	PLED_CmdWrite
+	movlw	0x13
+	rcall	PLED_DatWrite
+	movlw	0x0E
+	rcall	PLED_DatWrite
+
+	movlw	0x77
+	rcall	PLED_CmdWrite
+	movlw	0x1C
+	rcall	PLED_DatWrite
+	movlw	0x18
+	rcall	PLED_DatWrite
+	movlw	0x78
+	rcall	PLED_CmdWrite
+	movlw	0x15
+	rcall	PLED_DatWrite
+	movlw	0x0E
+	rcall	PLED_DatWrite
+	
+	return
+
+PLED_set_color:;Converts 8Bit RGB b'RRRGGGBB' into 16Bit RGB b'RRRRRGGGGGGBBBBB'
+	movwf	oled1_temp				; Get 8Bit RGB b'RRRGGGBB'
+	movff	oled1_temp,	oled2_temp	; Copy
+
+	; Mask Bit 7,6,5,4,3,2
+	movlw	b'00000011'
+	andwf	oled2_temp,F
+
+	movlw	b'00000000'
+	dcfsnz	oled2_temp,F
+	movlw	b'01010000'
+	dcfsnz	oled2_temp,F
+	movlw	b'10100000'
+	dcfsnz	oled2_temp,F
+	movlw	b'11111000'
+	movwf	oled3_temp				; Blue done.
+
+	movff	oled1_temp,	oled2_temp	; Copy
+	; Mask Bit 7,6,5,1,0
+	movlw	b'00011100'
+	andwf	oled2_temp,F
+	rrncf	oled2_temp,F
+	rrncf	oled2_temp,F
+
+	movlw	b'00000000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00000100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00001000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00001100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00010000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00010100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00100000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00111111'
+	movwf	oled4_temp			
+
+	rrcf	oled4_temp,F
+	rrcf	oled3_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled3_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled3_temp,F		; oled3_temp (b'GGGBBBBB') done.
+
+	movff	oled1_temp,	oled2_temp	; Copy
+	clrf	oled1_temp
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F		; Green done.
+
+	; Mask Bit 4,3,2,1,0
+	movlw	b'11100000'
+	andwf	oled2_temp,F
+
+	rrncf	oled2_temp,F
+	rrncf	oled2_temp,F
+	rrncf	oled2_temp,F
+	rrncf	oled2_temp,F
+	rrncf	oled2_temp,F
+
+	movlw	b'00000000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00000100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00001000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00001100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00010000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00010100'
+	dcfsnz	oled2_temp,F
+	movlw	b'00100000'
+	dcfsnz	oled2_temp,F
+	movlw	b'00111111'
+	movwf	oled4_temp			
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F	
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F
+
+	rrcf	oled4_temp,F
+	rrcf	oled1_temp,F		; Red done.
+
+	movff	oled1_temp,win_color1
+	movff	oled3_temp,win_color2	; Set Bank0 Color registers...
+	return
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/ostc_part2_compiled_start_0C000.MCH	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,22134 @@
+0109
+6B30
+6B31
+6B32
+6B33
+5134
+0B04
+E004
+0E08
+6F34
+6B35
+D003
+0E04
+6F34
+6B35
+6B36
+6B37
+6938
+C434
+F9B5
+C435
+F9B6
+C436
+F9B7
+C437
+F9B8
+C438
+F9B9
+C439
+F9BA
+C43A
+F9BB
+C43B
+F9BC
+C51F
+F983
+C51E
+F984
+C40C
+F985
+C40D
+F986
+C40E
+F987
+C40F
+F988
+C297
+F989
+C298
+F98A
+C299
+F98B
+C29A
+F98C
+C29B
+F98D
+C29C
+F98E
+C29D
+F98F
+C29E
+F990
+C5EF
+F991
+C5F0
+F992
+C5F1
+F993
+C5F2
+F994
+C5F3
+F995
+C5F4
+F996
+C5F5
+F997
+C5F6
+F998
+C5F7
+F999
+C5F8
+F99A
+C5F9
+F99B
+C5FA
+F99C
+C95F
+F99D
+C960
+F99E
+C961
+F99F
+C962
+F9A0
+C963
+F9A1
+C964
+F9A2
+C965
+F9A3
+C966
+F9A4
+C96F
+F9A5
+C970
+F9A6
+C971
+F9A7
+C972
+F9A8
+C977
+F9A9
+C978
+F9AA
+C979
+F9AB
+C97A
+F9AC
+C97B
+F9AD
+C97C
+F9AE
+C97D
+F9AF
+C97E
+F9B0
+C97F
+F9B1
+C980
+F9B2
+C981
+F9B3
+C982
+F9B4
+0105
+511F
+E002
+0109
+8130
+6A2C
+6A2D
+6A2E
+6A2F
+C5EF
+F027
+C5F0
+F028
+C5F1
+F029
+C5F2
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+8330
+0E10
+0109
+6FBE
+6BBF
+0E20
+AFBF
+D002
+90D8
+D003
+5DBE
+0E00
+59BF
+E22D
+C9BE
+FFE9
+C9BF
+FFEA
+90D8
+36E9
+36EA
+90D8
+36E9
+36EA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+8530
+0109
+2BBE
+0E00
+23BF
+D7CA
+6A2C
+6A2D
+6A2E
+6A2F
+C5F3
+F027
+C5F4
+F028
+C5F5
+F029
+C5F6
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+8730
+0EA4
+6E2C
+0E70
+6E2D
+0E7D
+6E2E
+0E3F
+6E2F
+C977
+F027
+C978
+F028
+C979
+F029
+C97A
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8930
+0E66
+6E2C
+6E2D
+0EA6
+6E2E
+0E3F
+6E2F
+C977
+F027
+C978
+F028
+C979
+F029
+C97A
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8B30
+0E5C
+6E2C
+0E8F
+6E2D
+0E42
+6E2E
+0E3E
+6E2F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8D30
+0EAE
+6E2C
+0E47
+6E2D
+0E81
+6E2E
+0E3F
+6E2F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8F30
+0E9A
+6E2C
+0E99
+6E2D
+0E19
+6E2E
+0E3F
+6E2F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8131
+0EAE
+6E2C
+0E47
+6E2D
+0E81
+6E2E
+0E3F
+6E2F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8331
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E33
+6E2C
+6E2D
+0E73
+6E2E
+0E3F
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8531
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0ECD
+6E2C
+0ECC
+6E2D
+0E4C
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8731
+6A2C
+6A2D
+0E80
+6E2E
+0E3E
+6E2F
+C97F
+F027
+C980
+F028
+C981
+F029
+C982
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8931
+0105
+511E
+0808
+E202
+0109
+8B31
+6A2C
+6A2D
+6A2E
+6A2F
+C9A5
+F027
+C9A6
+F028
+C9A7
+F029
+C9A8
+F02A
+ECC2
+F06E
+0A01
+E02F
+C963
+F02C
+C964
+F02D
+C965
+F02E
+C966
+F02F
+C95F
+F027
+C960
+F028
+C961
+F029
+C962
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E33
+6E2C
+6E2D
+0E73
+6E2E
+0E3F
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8D31
+6A2C
+6A2D
+6A2E
+6A2F
+C9A5
+F027
+C9A6
+F028
+C9A7
+F029
+C9A8
+F02A
+ECC2
+F06E
+0A01
+E030
+C963
+F02C
+C964
+F02D
+C965
+F02E
+C966
+F02F
+C95F
+F027
+C960
+F028
+C961
+F029
+C962
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0ECD
+6E2C
+0ECC
+6E2D
+0E4C
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8F31
+6A2C
+6A2D
+0E40
+6E2E
+6E2F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8132
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C40C
+F027
+C40D
+F028
+C40E
+F029
+C40F
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0ECD
+6E2C
+0ECC
+6E2D
+0E4C
+6E2E
+0E3E
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8332
+6A2C
+6A2D
+0E40
+6E2E
+0E3F
+6E2F
+C40C
+F027
+C40D
+F028
+C40E
+F029
+C40F
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8532
+0E7B
+6E2C
+0E14
+6E2D
+0E8E
+6E2E
+0E3F
+6E2F
+C40C
+F027
+C40D
+F028
+C40E
+F029
+C40F
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8732
+0E33
+6E2C
+6E2D
+6E2E
+0E3F
+6E2F
+C97B
+F027
+C97C
+F028
+C97D
+F029
+C97E
+F02A
+ECD2
+F06E
+0A01
+E102
+0109
+8932
+0EAE
+6E2C
+0E47
+6E2D
+0E81
+6E2E
+0E3F
+6E2F
+C97B
+F027
+C97C
+F028
+C97D
+F029
+C97E
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8B32
+C29B
+F02C
+C29C
+F02D
+C29D
+F02E
+C29E
+F02F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8D32
+0012
+0109
+9534
+9536
+0012
+0EFF
+0109
+5D38
+E120
+0105
+0EB8
+80D8
+5500
+0E0B
+5501
+E219
+C522
+F938
+C938
+F000
+6A01
+BE00
+6801
+0EFF
+1800
+E101
+5001
+E10D
+C938
+F000
+6A01
+BE00
+6801
+0EFE
+1800
+E101
+5001
+E002
+0E00
+D001
+0E01
+0012
+CFD9
+FFE6
+CFE1
+FFD9
+0109
+6BC0
+6BC1
+C434
+F02C
+C435
+F02D
+C436
+F02E
+C437
+F02F
+C9B5
+F027
+C9B6
+F028
+C9B7
+F029
+C9B8
+F02A
+ECC2
+F06E
+0A01
+E114
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C9B9
+F027
+C9BA
+F028
+C9BB
+F029
+C9BC
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+81C0
+C5EF
+F02C
+C5F0
+F02D
+C5F1
+F02E
+C5F2
+F02F
+C991
+F027
+C992
+F028
+C993
+F029
+C994
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+83C0
+C977
+F02C
+C978
+F02D
+C979
+F02E
+C97A
+F02F
+C9A9
+F027
+C9AA
+F028
+C9AB
+F029
+C9AC
+F02A
+ECC2
+F06E
+0A01
+E114
+C97B
+F02C
+C97C
+F02D
+C97D
+F02E
+C97E
+F02F
+C9AD
+F027
+C9AE
+F028
+C9AF
+F029
+C9B0
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+89C0
+0105
+511F
+0109
+5D83
+E001
+8BC0
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C985
+F027
+C986
+F028
+C987
+F029
+C988
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+8DC0
+D03A
+0E10
+0109
+6FBE
+6BBF
+0E20
+AFBF
+D002
+90D8
+D003
+5DBE
+0E00
+59BF
+E22D
+C9BE
+FFE9
+C9BF
+FFEA
+90D8
+36E9
+36EA
+90D8
+36E9
+36EA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+8FC0
+0109
+2BBE
+0E00
+23BF
+D7CA
+C5F7
+F02C
+C5F8
+F02D
+C5F9
+F02E
+C5FA
+F02F
+C999
+F027
+C99A
+F028
+C99B
+F029
+C99C
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+81C1
+C96F
+F02C
+C970
+F02D
+C971
+F02E
+C972
+F02F
+C9A5
+F027
+C9A6
+F028
+C9A7
+F029
+C9A8
+F02A
+ECC2
+F06E
+0A01
+E128
+C95F
+F02C
+C960
+F02D
+C961
+F02E
+C962
+F02F
+C99D
+F027
+C99E
+F028
+C99F
+F029
+C9A0
+F02A
+ECC2
+F06E
+0A01
+E114
+C963
+F02C
+C964
+F02D
+C965
+F02E
+C966
+F02F
+C9A1
+F027
+C9A2
+F028
+C9A3
+F029
+C9A4
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+83C1
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C9B1
+F027
+C9B2
+F028
+C9B3
+F029
+C9B4
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+85C1
+0105
+511E
+0109
+5D84
+E001
+87C1
+C297
+F02C
+C298
+F02D
+C299
+F02E
+C29A
+F02F
+C989
+F027
+C98A
+F028
+C98B
+F029
+C98C
+F02A
+ECC2
+F06E
+0A01
+E114
+C29B
+F02C
+C29C
+F02D
+C29D
+F02E
+C29E
+F02F
+C98D
+F027
+C98E
+F028
+C98F
+F029
+C990
+F02A
+ECC2
+F06E
+0A01
+E002
+0109
+89C1
+6A2C
+6A2D
+0E50
+6E2E
+0E41
+6E2F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8DC1
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C40C
+F027
+C40D
+F028
+C40E
+F029
+C40F
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0ECD
+6E2C
+0ECC
+6E2D
+0E4C
+6E2E
+0E3E
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8FC1
+0EFE
+50DB
+E006
+0109
+51C0
+1336
+51C1
+1337
+D005
+0109
+51C0
+1334
+51C1
+1335
+52E5
+CFE7
+FFD9
+0012
+6AE6
+DE46
+52E5
+0012
+0E01
+6EE6
+DE41
+52E5
+0012
+0102
+6B70
+0105
+051F
+E001
+D3D7
+0102
+5192
+E001
+D14C
+0EF0
+6E2C
+0E85
+6E2D
+0E99
+6E2E
+0E3E
+6E2F
+C2BB
+F027
+C2BC
+F028
+C2BD
+F029
+C2BE
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+0EA4
+6E2C
+0E70
+6E2D
+0E7D
+6E2E
+0E3F
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECF8
+F06C
+EC93
+F06E
+C028
+F404
+C029
+F405
+0104
+0E1F
+80D8
+5504
+0E00
+5505
+E203
+0E1F
+6F04
+6B05
+0E00
+5D04
+0E00
+5905
+E202
+6B04
+6B05
+C404
+F2C6
+0E03
+0102
+03C6
+CFF3
+F2C5
+C2C5
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E96
+6E2C
+0EB2
+6E2D
+0ECC
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F2E8
+C028
+F2E9
+C029
+F2EA
+C02A
+F2EB
+0102
+51C6
+E105
+6BA7
+6BA8
+6BA9
+6BAA
+D026
+C2C6
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C29F
+F027
+C2A0
+F028
+C2A1
+F029
+C2A2
+F02A
+EC8E
+F06D
+C027
+F2A7
+C028
+F2A8
+C029
+F2A9
+C02A
+F2AA
+6A2C
+6A2D
+6A2E
+6A2F
+C2A7
+F027
+C2A8
+F028
+C2A9
+F029
+C2AA
+F02A
+ECD2
+F06E
+0A01
+E105
+0102
+6BA7
+6BA8
+6BA9
+6BAA
+C29F
+F02C
+C2A0
+F02D
+C2A1
+F02E
+C2A2
+F02F
+C2A7
+F027
+C2A8
+F028
+C2A9
+F029
+C2AA
+F02A
+ECC9
+F06E
+0A01
+E108
+C29F
+F2A7
+C2A0
+F2A8
+C2A1
+F2A9
+C2A2
+F2AA
+6A2C
+0E40
+6E2D
+0E1C
+6E2E
+0E46
+6E2F
+C2A7
+F027
+C2A8
+F028
+C2A9
+F029
+C2AA
+F02A
+ECE1
+F06D
+EC93
+F06E
+C028
+F242
+C029
+F243
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C2E8
+F027
+C2E9
+F028
+C2EA
+F029
+C2EB
+F02A
+ECE1
+F06D
+EC93
+F06E
+C028
+F248
+C029
+F249
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C2AF
+F027
+C2B0
+F028
+C2B1
+F029
+C2B2
+F02A
+ECE1
+F06D
+EC93
+F06E
+C028
+F24A
+C029
+F24B
+C2C6
+F24E
+0102
+0E01
+6F92
+6BC7
+51C7
+E153
+C2C6
+F2C7
+C2C7
+F029
+ECD1
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C2A7
+F02C
+C2A8
+F02D
+C2A9
+F02E
+C2AA
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECF7
+F06C
+C027
+F2A3
+C028
+F2A4
+C029
+F2A5
+C02A
+F2A6
+0102
+51C7
+6AEA
+0F70
+6EE9
+0E02
+22EA
+50EF
+0104
+6F04
+6B05
+C404
+F308
+0103
+0E21
+6F09
+D004
+0E01
+0104
+6F04
+6B05
+0104
+0E01
+1904
+E101
+5105
+E001
+D191
+0102
+05C7
+0104
+6F04
+6B05
+0E01
+1904
+E101
+5105
+E001
+D07F
+C2C3
+F028
+C2C4
+F029
+C404
+F02D
+C405
+F02E
+EC4E
+F06E
+C026
+F004
+C027
+F005
+C004
+F028
+C005
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E96
+6E2C
+0EB2
+6E2D
+0ECC
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+0E40
+6E2E
+6E2F
+C2A7
+F027
+C2A8
+F028
+C2A9
+F029
+C2AA
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2C3
+F008
+C2C4
+F009
+0E06
+80D8
+5608
+0E00
+5609
+C008
+F028
+C009
+F029
+ECE2
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F2AB
+C028
+F2AC
+C029
+F2AD
+C02A
+F2AE
+D05F
+5104
+1105
+E11F
+6B14
+6B15
+6B16
+6B17
+C2A3
+F02C
+C2A4
+F02D
+C2A5
+F02E
+C2A6
+F02F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECF7
+F06C
+C027
+F2AB
+C028
+F2AC
+C029
+F2AD
+C02A
+F2AE
+D03D
+0E03
+6E28
+6A29
+C404
+F02D
+C405
+F02E
+EC4E
+F06E
+C026
+F004
+C027
+F005
+C004
+F028
+C005
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E96
+6E2C
+0EB2
+6E2D
+0ECC
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C2A7
+F2AB
+C2A8
+F2AC
+C2A9
+F2AD
+C2AA
+F2AE
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECF8
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C2AB
+F02C
+C2AC
+F02D
+C2AD
+F02E
+C2AE
+F02F
+C2A3
+F027
+C2A4
+F028
+C2A5
+F029
+C2A6
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECC9
+F06E
+0A01
+E104
+0104
+6B04
+6B05
+D027
+C404
+F2C7
+C2AB
+F02C
+C2AC
+F02D
+C2AD
+F02E
+C2AE
+F02F
+C2A3
+F027
+C2A4
+F028
+C2A5
+F029
+C2A6
+F02A
+ECF8
+F06C
+C027
+F2A3
+C028
+F2A4
+C029
+F2A5
+C02A
+F2A6
+0102
+51C7
+6AEA
+0F70
+6EE9
+0E02
+22EA
+50EF
+0104
+6F04
+6B05
+D668
+0102
+51C7
+0800
+E301
+D086
+0EF0
+6E00
+0E85
+6E01
+0E99
+6E02
+0E3E
+6E03
+C2C7
+F029
+ECD1
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F420
+C028
+F421
+C029
+F422
+C02A
+F423
+0102
+05C7
+E105
+C2C3
+F2BF
+C2C4
+F2C0
+D005
+0E03
+03C7
+50F3
+6FBF
+6BC0
+0E21
+0103
+5D09
+E112
+C2C7
+F309
+0102
+51C7
+6AEA
+0F70
+6EE9
+0E02
+22EA
+CFEF
+F30A
+0103
+290C
+6F0C
+0E64
+5D0C
+E101
+6B0C
+D00A
+C40C
+F420
+C40D
+F421
+C40E
+F422
+C40F
+F423
+6BBF
+6BC0
+D0E8
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C474
+F027
+C475
+F028
+C476
+F029
+C477
+F02A
+ECF7
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECD2
+F06E
+0A01
+E101
+D0B2
+0EF0
+6E2C
+0E85
+6E2D
+0E99
+6E2E
+0E3E
+6E2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0EA4
+6E2C
+0E70
+6E2D
+0E7D
+6E2E
+0E3F
+6E2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECF8
+F06C
+EC93
+F06E
+C028
+F2BF
+C029
+F2C0
+0E03
+6E28
+6A29
+C2BF
+F02D
+C2C0
+F02E
+EC4E
+F06E
+C026
+F2BF
+C027
+F2C0
+0102
+51BF
+11C0
+E109
+C40C
+F420
+C40D
+F421
+C40E
+F422
+C40F
+F423
+D065
+51C3
+5DBF
+51C4
+59C0
+E204
+C2C3
+F2BF
+C2C4
+F2C0
+C2BF
+F028
+C2C0
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E96
+6E2C
+0EB2
+6E2D
+0ECC
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F420
+C028
+F421
+C029
+F422
+C02A
+F423
+D00B
+C40C
+F420
+C40D
+F421
+C40E
+F422
+C40F
+F423
+0102
+6BBF
+6BC0
+0012
+0105
+051F
+E11D
+0E20
+0104
+6F04
+6B05
+6B00
+5104
+5D00
+0E00
+5505
+E213
+5100
+6AEA
+0FC8
+6EE9
+0E02
+22EA
+50EF
+6EE6
+5100
+6AEA
+0F50
+6EE9
+0E02
+22EA
+52E5
+50E7
+6EEF
+2B00
+D7E8
+0012
+0105
+051F
+E10E
+0104
+6B00
+0E20
+5D00
+E209
+5100
+6AEA
+0FC8
+6EE9
+0E02
+22EA
+6AEF
+2B00
+D7F4
+0012
+0105
+051F
+E123
+0102
+51C7
+6AEA
+0FC8
+6EE9
+0E02
+22EA
+50EF
+6E00
+6A01
+90D8
+5001
+E604
+0EFF
+5C00
+0E00
+5801
+E211
+51C7
+6AEA
+0FC8
+6EE9
+0E02
+22EA
+28EF
+6EE6
+51C7
+6AEA
+0FC8
+6EE9
+0E02
+22EA
+52E5
+50E7
+6EEF
+0012
+0105
+051F
+E101
+D045
+6A2C
+6A2D
+6A2E
+6A2F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECD2
+F06E
+0A01
+E11B
+C97B
+F02C
+C97C
+F02D
+C97D
+F02E
+C97E
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+D01A
+C977
+F02C
+C978
+F02D
+C979
+F02E
+C97A
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+0012
+0100
+0E13
+6F8A
+0E1C
+6F8B
+6B97
+0EF5
+6F98
+6B99
+6B9A
+0E30
+6F9B
+0E39
+6F9C
+EF86
+F06A
+0100
+0E0C
+6F8A
+0E10
+6F8B
+6B97
+0EE1
+6F98
+6B99
+6B9A
+0E2E
+6F9B
+0E3E
+6F9C
+EF86
+F06A
+0100
+6B90
+C090
+FFDE
+8284
+0100
+6B70
+0100
+5187
+E103
+0100
+0E01
+6F87
+0100
+5186
+E103
+0100
+0E01
+6F86
+0100
+518B
+0100
+80D8
+5588
+E202
+C08B
+F088
+0100
+5187
+0100
+2588
+0841
+E206
+0E41
+0100
+80D8
+5587
+0100
+6F88
+C086
+F092
+0100
+6B91
+0100
+5191
+2B91
+6AEA
+0F60
+6EE9
+0E00
+22EA
+CFEF
+F093
+D85B
+0100
+6B90
+0100
+0E01
+6F94
+0100
+5193
+E052
+0100
+0594
+E101
+D8F1
+D8FF
+0E01
+0100
+1994
+0100
+6F94
+0100
+0594
+E108
+D8CE
+0E40
+0100
+5D92
+E202
+0100
+2B92
+D9A5
+0100
+2B90
+0E04
+0100
+5D90
+E202
+0E00
+D001
+0E01
+6E03
+0E3C
+0100
+5D93
+E002
+0E00
+D001
+0E01
+6E02
+0E3A
+0100
+5D93
+E002
+0E00
+D001
+0E01
+6E01
+0E2E
+0100
+5D93
+E002
+0E00
+D001
+0E01
+1001
+1002
+1403
+6E00
+0100
+518A
+0100
+5D90
+E202
+0E00
+D001
+0E01
+1000
+E00D
+0100
+5191
+2B91
+6AEA
+0F60
+6EE9
+0E00
+22EA
+CFEF
+F093
+D804
+0100
+6B90
+D7AB
+0012
+0100
+519C
+80D8
+5593
+E302
+0E00
+D001
+0E01
+6E00
+519B
+5D93
+E302
+0E00
+D001
+0E01
+1000
+E006
+6B8C
+6B8D
+6B8E
+6B8F
+6B95
+D071
+519B
+5D93
+6F8C
+6B8D
+6B8E
+6B8F
+298B
+0BFE
+42E8
+6E00
+6A01
+6A02
+6A03
+C08C
+F026
+C08D
+F027
+C08E
+F028
+C08F
+F029
+C000
+F02B
+C001
+F02C
+C002
+F02D
+C003
+F02E
+EC48
+F070
+C022
+F08C
+C023
+F08D
+C024
+F08E
+C025
+F08F
+C08A
+F000
+6A01
+6A02
+6A03
+C08C
+F026
+C08D
+F027
+C08E
+F028
+C08F
+F029
+C000
+F02B
+C001
+F02C
+C002
+F02D
+C003
+F02E
+EC48
+F070
+C022
+F08C
+C023
+F08D
+C024
+F08E
+C025
+F08F
+0100
+5197
+278C
+5198
+238D
+5199
+238E
+519A
+238F
+0E3C
+5D93
+E002
+0E00
+D001
+0E01
+6E01
+0E3A
+5D93
+E002
+0E00
+D001
+0E01
+6E00
+0E2E
+5D93
+E002
+0E00
+D001
+0E01
+1000
+1001
+E00B
+518B
+24E8
+6E00
+0100
+5000
+0100
+278C
+0E00
+238D
+238E
+238F
+0012
+0100
+0E75
+6F96
+D8F0
+0100
+0587
+6F96
+D8EC
+0100
+0E3F
+6F96
+D8E8
+0100
+0E15
+6F96
+D8E4
+0100
+0592
+6F96
+D8E0
+0100
+0592
+6F96
+EF94
+F06C
+0100
+6B95
+5188
+5D95
+E209
+5195
+6AEA
+0F00
+6EE9
+0E08
+22EA
+6AEF
+2B95
+D7F4
+0012
+0100
+518C
+118D
+118E
+118F
+E101
+D0AE
+0100
+518C
+0100
+6F95
+C095
+FFF6
+C08D
+F000
+C08E
+F001
+C08F
+F002
+0100
+6A03
+5000
+0100
+6F95
+C095
+FFF7
+C08E
+F000
+C08F
+F001
+0100
+6A02
+6A03
+5000
+0100
+6F95
+C095
+FFF8
+0100
+6B95
+0100
+5188
+0100
+5D95
+E301
+D07A
+0009
+CFF5
+F096
+0100
+5189
+E01C
+0100
+3989
+0BF0
+6E00
+0EF0
+0100
+1596
+5C00
+E207
+0100
+3989
+0BF0
+0100
+5D96
+0100
+6F96
+0E0F
+0100
+1596
+0100
+5D89
+E206
+0100
+5189
+0100
+5D96
+0100
+6F96
+0100
+0594
+E11E
+0EF0
+0100
+1596
+6EE6
+0100
+5195
+6AEA
+0F00
+6EE9
+0E08
+22EA
+52E5
+50E7
+6EEF
+0100
+3996
+0BF0
+0BF0
+6EE6
+0100
+2995
+6AEA
+0F00
+6EE9
+0E08
+22EA
+52E5
+50E7
+6EEF
+D033
+0100
+3996
+0B0F
+0B0F
+6E00
+0100
+5195
+6AEA
+0F00
+6EE9
+0E08
+22EA
+50EF
+0BF0
+1000
+6EE6
+0100
+5195
+6AEA
+0F00
+6EE9
+0E08
+22EA
+52E5
+50E7
+6EEF
+0E0F
+0100
+1596
+6E00
+0100
+2995
+6AEA
+0F00
+6EE9
+0E08
+22EA
+50EF
+0BF0
+1000
+6EE6
+0100
+2995
+6AEA
+0F00
+6EE9
+0E08
+22EA
+52E5
+50E7
+6EEF
+0E02
+0100
+2795
+D780
+0100
+298B
+0BFE
+42E8
+6E00
+0100
+5000
+0100
+278C
+0E00
+238D
+238E
+238F
+0012
+8284
+0100
+6B95
+0100
+5188
+0100
+5D95
+E20D
+0100
+5195
+6AEA
+0F00
+6EE9
+0E08
+22EA
+CFEF
+F096
+D807
+0100
+2B95
+D7EE
+0012
+9284
+D801
+0012
+0101
+9084
+0100
+9083
+BF96
+8283
+9083
+AF96
+9283
+8083
+BD96
+8283
+9083
+AD96
+9283
+8083
+BB96
+8283
+9083
+AB96
+9283
+8083
+B996
+8283
+9083
+A996
+9283
+8083
+B796
+8283
+9083
+A796
+9283
+8083
+B596
+8283
+9083
+A596
+9283
+8083
+B396
+8283
+9083
+A396
+9283
+8083
+B196
+8283
+9083
+A196
+9283
+8083
+8084
+0101
+0100
+0100
+6B96
+0012
+9E21
+D005
+9E21
+AE29
+D002
+6C29
+8E21
+C029
+F023
+6A22
+6A33
+6A32
+0E86
+6E24
+6A25
+EF4C
+F06F
+9E21
+D008
+9E21
+AE29
+D005
+6C28
+1E29
+6AE8
+2229
+8E21
+C029
+F023
+C028
+F022
+6A33
+6A32
+0E8E
+6E24
+6A25
+EF4C
+F06F
+7E2F
+6A21
+EC88
+F06F
+ECA0
+F06F
+B621
+EF30
+F06F
+A221
+D00A
+AA21
+D003
+BE21
+EF30
+F06F
+A421
+EF3C
+F06F
+EF39
+F06F
+AA21
+D005
+AC21
+EF3C
+F06F
+EF39
+F06F
+A021
+D00A
+A821
+D008
+BE21
+D004
+A421
+D002
+EF45
+F06F
+EF49
+F06F
+6A32
+6A25
+502F
+5C2A
+6E31
+E310
+C027
+F033
+C028
+F022
+C029
+F023
+C02A
+F030
+C02C
+F027
+C02D
+F028
+C02E
+F029
+3A21
+D009
+C02C
+F033
+C02D
+F022
+C02E
+F023
+C02F
+F030
+6C31
+9E21
+BC21
+8E21
+C030
+F024
+B021
+EF78
+F06F
+0E1A
+6031
+EF78
+F06F
+6A24
+6A2A
+A421
+D008
+6C27
+1E28
+1E29
+1E2A
+6AE8
+2228
+2229
+222A
+AC21
+D008
+6C33
+1E22
+1E23
+1E24
+6AE8
+2222
+2223
+2224
+6A26
+5231
+E007
+342A
+3229
+3228
+3227
+3226
+2E31
+D7F9
+5027
+2633
+5028
+2222
+5029
+2223
+502A
+2224
+C026
+F032
+9E21
+AE24
+D00B
+6C32
+1E33
+1E22
+1E23
+1E24
+6AE8
+2233
+2222
+2223
+2224
+8E21
+A024
+D006
+80D8
+3223
+3222
+3233
+3232
+2A30
+C030
+F024
+EF4C
+F06F
+6A21
+EC88
+F06F
+ECA0
+F06F
+B621
+EF30
+F06F
+A221
+D005
+BA21
+EF30
+F06F
+EF37
+F06F
+BA21
+EF43
+F06F
+A021
+D005
+B821
+EF30
+F06F
+EF43
+F06F
+B821
+EF37
+F06F
+6A25
+0E7F
+242A
+6E24
+6AE8
+2225
+502F
+5E24
+6AE8
+5A25
+0E1A
+6E30
+6A2A
+6A32
+6A33
+6A22
+6A23
+502C
+5E27
+502D
+5A28
+502E
+5A29
+0E00
+5A2A
+E709
+502C
+2627
+502D
+2228
+502E
+2229
+0E00
+222A
+D001
+8A32
+90D8
+3627
+3628
+3629
+362A
+90D8
+3632
+3633
+3622
+3623
+2E30
+D7E1
+5029
+1028
+1027
+A4D8
+8A32
+EF4C
+F06F
+6A21
+EC88
+F06F
+ECA0
+F06F
+B621
+EF30
+F06F
+A221
+D005
+B821
+EF30
+F06F
+EF37
+F06F
+AA21
+D005
+B021
+EF30
+F06F
+EF37
+F06F
+B021
+D002
+A821
+D002
+EF43
+F06F
+6A25
+502F
+242A
+6E24
+6AE8
+2225
+0E7E
+5E24
+6AE8
+5A25
+6A32
+6A33
+6A22
+6A23
+502E
+0229
+CFF4
+F023
+CFF3
+F022
+502D
+0229
+50F3
+2633
+50F4
+2222
+0E00
+2223
+502E
+0228
+50F3
+2633
+50F4
+2222
+0E00
+2223
+502C
+0229
+50F3
+2632
+50F4
+2233
+0E00
+2222
+2223
+502D
+0228
+50F3
+2632
+50F4
+2233
+0E00
+2222
+2223
+502E
+0227
+50F3
+2632
+50F4
+2233
+0E00
+2222
+2223
+502C
+0228
+50F4
+2632
+0E00
+2233
+2222
+2223
+502D
+0227
+50F4
+2632
+0E00
+2233
+2222
+2223
+EF4C
+F06F
+C028
+F032
+5028
+022D
+CFF4
+F027
+CFF3
+F026
+5029
+022E
+CFF4
+F029
+CFF3
+F028
+022D
+50F3
+2627
+50F4
+2228
+6AE8
+2229
+5032
+022E
+50F3
+2627
+50F4
+2228
+6AE8
+2229
+0C00
+6A21
+EC88
+F06F
+B621
+EF76
+F06E
+A221
+D00A
+B421
+D003
+0E7F
+6E29
+D019
+0E80
+6E29
+D016
+6A29
+D014
+B021
+D7FC
+0E87
+602A
+D7F1
+0E7E
+642A
+D7F6
+0E86
+5C2A
+E004
+90D8
+3229
+2A2A
+D7F9
+A421
+D003
+6C29
+AE29
+D7EA
+0012
+6A21
+EC88
+F06F
+B621
+EF9D
+F06E
+A221
+D00E
+B421
+D005
+0E7F
+6E29
+0EFF
+6E28
+D01F
+0E80
+6E29
+6A28
+D01B
+6A29
+6A28
+D018
+B021
+D7FB
+0E8F
+602A
+D7ED
+0E7E
+642A
+D7F5
+0E8E
+5C2A
+E005
+90D8
+3229
+3228
+2A2A
+D7F8
+A421
+D006
+6C28
+1E29
+6AE8
+2229
+AE29
+D7E5
+0012
+ECDB
+F06E
+B621
+0C00
+B021
+0C01
+0C00
+ECDB
+F06E
+B621
+0C00
+B021
+0C00
+B421
+0C00
+0C01
+ECDB
+F06E
+B621
+0C00
+B021
+0C00
+A421
+0C00
+0C01
+6A21
+EC88
+F06F
+ECA0
+F06F
+B621
+0012
+AE21
+D008
+A021
+D004
+A821
+D002
+8021
+0012
+9021
+0012
+502F
+5C2A
+E10B
+502E
+5C29
+E108
+502D
+5C28
+E105
+502C
+5C27
+E102
+8021
+0012
+A0D8
+D002
+8E21
+D010
+502A
+C02F
+F02A
+6E2F
+5029
+C02E
+F029
+6E2E
+5028
+C02D
+F028
+6E2D
+5027
+C02C
+F027
+6E2C
+502F
+5C2A
+E010
+0FFF
+E009
+9021
+B421
+D003
+AE21
+8421
+0012
+AE21
+9421
+0012
+2A2F
+90D8
+322E
+322D
+322C
+502C
+5E27
+502D
+5A28
+502E
+5A29
+BE29
+D7EA
+90D8
+3627
+3628
+3629
+2E2A
+D7F8
+D7C8
+0E7F
+6E2A
+0EFF
+6E29
+6E28
+6E27
+0012
+0E7F
+BE21
+0EFF
+6E2A
+D002
+0E7F
+6E2A
+0E80
+6E29
+6A28
+6A27
+D7F3
+AE21
+D004
+0E80
+6E2A
+6A29
+D7F7
+6A2A
+6A29
+D7F4
+5023
+1022
+1033
+1032
+E0F8
+BE25
+D7F0
+BE23
+D00C
+5024
+1025
+E0EB
+90D8
+3632
+3633
+3622
+3623
+0624
+A0D8
+0625
+D7F2
+5025
+E1D4
+2824
+E0D2
+AE32
+D011
+0E7F
+1432
+E102
+A033
+D00C
+2A33
+6AE8
+2222
+2223
+E307
+80D8
+3223
+3222
+3233
+2A24
+2824
+E0BF
+5024
+E0C9
+C033
+F027
+C022
+F028
+3423
+6E29
+3024
+6E2A
+3229
+9E2A
+BE21
+8E2A
+EF36
+F06F
+3629
+362A
+E302
+8421
+7E21
+E106
+8021
+6A2A
+6A29
+6A28
+6A27
+0012
+282A
+E003
+80D8
+3229
+0012
+90D8
+3229
+E102
+8221
+0012
+8621
+0012
+362E
+362F
+E302
+8C21
+7E21
+E106
+8821
+6A2F
+6A2E
+6A2D
+6A2C
+0012
+282F
+E003
+80D8
+322E
+0012
+90D8
+322E
+E1EA
+8A21
+0012
+CFD9
+FFE6
+CFDA
+FFE6
+CFE1
+FFD9
+CFE2
+FFDA
+0E0C
+24E1
+E302
+68E1
+52E6
+6EE1
+50D9
+0FFA
+6EE9
+0EFF
+20DA
+6EEA
+0E01
+CFEE
+FFDB
+0E02
+CFEE
+FFDB
+0E03
+CFEE
+FFDB
+0E04
+CFEE
+FFDB
+D863
+50D9
+0F01
+6EE9
+0E00
+20DA
+6EEA
+CFEE
+FFE6
+CFEE
+FFE6
+CFEE
+FFE6
+CFEF
+FFE6
+EC72
+F080
+6E00
+0E06
+5CE1
+E202
+6AE1
+52E5
+6EE1
+5000
+6EDF
+0E85
+14DF
+E004
+D84D
+6AEE
+6AED
+D023
+0E09
+CFDB
+F000
+0E0A
+CFDB
+F001
+0E82
+2600
+0EFF
+2201
+D83F
+C000
+FFEE
+C001
+FFED
+0E7E
+6EF3
+0E09
+CFF3
+FFDB
+0E0A
+6ADB
+50D9
+0F01
+6EE6
+0E00
+20DA
+6EE6
+D826
+EC2D
+F076
+52E5
+52E5
+52E5
+52E5
+0E01
+CFDB
+F000
+0E02
+CFDB
+F001
+0E03
+CFDB
+F002
+0E04
+CFDB
+F003
+C000
+F026
+C001
+F027
+C002
+F028
+C003
+F029
+0E0C
+5CE1
+E202
+6AE1
+52E5
+6EE1
+52E5
+CFE5
+FFDA
+CFE7
+FFD9
+0012
+50D9
+0F05
+6EE6
+0E00
+20DA
+6EE6
+0012
+0EF8
+CFDB
+FFE9
+0EF9
+CFDB
+FFEA
+0012
+5026
+022B
+CFF3
+F022
+CFF4
+F023
+022C
+50F3
+2623
+0E00
+20F4
+6E24
+5026
+022D
+50F3
+2624
+0E00
+20F4
+6E25
+5026
+022E
+50F3
+2625
+5027
+022B
+50F3
+2623
+50F4
+2224
+0E00
+2225
+5027
+022C
+50F3
+2624
+50F4
+2225
+5027
+022D
+50F3
+2625
+5028
+022B
+50F3
+2624
+50F4
+2225
+5028
+022C
+50F3
+2625
+5029
+022B
+50F3
+2625
+0012
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+8009
+0000
+0000
+0000
+F06F
+0000
+0000
+0000
+E03F
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+2000
+0000
+0000
+0000
+F03A
+0000
+0000
+4B00
+A0FF
+0000
+0000
+FF5C
+0091
+0000
+6D00
+71FE
+0000
+0100
+FD7E
+0060
+0000
+8F01
+50FD
+0000
+0000
+FB9F
+0040
+0000
+0000
+30FA
+0000
+0000
+0000
+0020
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0100
+BC69
+72CA
+0000
+9F00
+DCFE
+FFDF
+00B2
+F81D
+0020
+FD05
+30FF
+30AF
+0000
+909F
+D02E
+00F8
+2C00
+00F5
+F006
+00F8
+ED04
+0030
+F005
+30AF
+B18F
+0000
+E00C
+FD1D
+00F8
+1600
+40DF
+9F00
+DCFF
+FFDE
+00C3
+0100
+BC69
+73CA
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+9002
+0000
+0000
+3001
+B00A
+0000
+0000
+F004
+602F
+0000
+0000
+F004
+97AF
+7777
+7777
+F079
+FFFF
+FFFF
+FFFF
+F0FF
+2212
+2222
+2222
+F026
+0000
+0000
+0000
+F004
+0000
+0000
+0000
+D003
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+4001
+D007
+0000
+0000
+F07F
+804F
+0000
+1C00
+F0FE
+00CC
+0000
+EF02
+F057
+00F7
+0000
+E22E
+F007
+00F8
+0100
+20DE
+F007
+10CE
+2D00
+00E2
+F007
+D64F
+FE58
+0030
+F007
+FF06
+B1FF
+0000
+F007
+1400
+0052
+0000
+8005
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0002
+2009
+0000
+0000
+507F
+406F
+0000
+0000
+D02E
+00DB
+5900
+0000
+F007
+00F8
+8E00
+0000
+F004
+00EA
+CF00
+0010
+F006
+309F
+FF07
+0090
+E01E
+FC1E
+87DF
+79FB
+50EF
+9D01
+00C6
+FF7E
+00D5
+0000
+0000
+2100
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+B02B
+0000
+0000
+0600
+E0FF
+0000
+0000
+CF02
+E069
+0000
+0000
+B17F
+E009
+0000
+2C00
+00E6
+E009
+0000
+FB07
+0010
+E009
+0000
+FCCF
+CCCC
+FDCE
+D0DD
+EEDE
+EEEE
+FEEF
+E0EE
+0000
+0000
+E009
+0000
+0000
+0000
+C008
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0012
+AB78
+EDCD
+0000
+20CE
+EDFF
+FACC
+0000
+B05F
+00F9
+F006
+0000
+F008
+00F9
+B00A
+0000
+F004
+00F9
+C00A
+0000
+F004
+00F9
+F308
+0000
+F00B
+00F9
+FE01
+1362
+90BF
+00F9
+4E00
+FFFF
+00FB
+0011
+0100
+A96A
+0040
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+5603
+3065
+0000
+4B00
+FFFF
+FFFF
+00A2
+FE08
+8F96
+6A95
+30FF
+906F
+F801
+0000
+D03E
+00EC
+F008
+0000
+F006
+00F6
+E00A
+0000
+F004
+00F7
+F307
+0000
+F009
+10CD
+EF01
+1372
+90AF
+204D
+2D00
+FFFF
+00F9
+0000
+0000
+8647
+0010
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0011
+0000
+0000
+0000
+00FA
+0000
+0000
+0000
+00FA
+0000
+0000
+9004
+00FA
+0000
+3900
+F0EF
+00FA
+0100
+FF7D
+40E9
+00FA
+BF05
+94FF
+0000
+18FA
+FBEF
+0050
+0000
+FFFE
+10D7
+0000
+0000
+B4FF
+0000
+0000
+0000
+0052
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+7802
+0050
+AD03
+00B4
+FF7F
+00FC
+FC3F
+66FF
+43FA
+A0AF
+10CD
+FE1C
+0070
+F00B
+00F5
+FE01
+0000
+F005
+00F5
+BF00
+0010
+F004
+00EC
+FF07
+00B0
+F00A
+D96F
+78CF
+32FB
+909F
+EF07
+00E6
+FF9F
+00FB
+0100
+0000
+8803
+0050
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0300
+2055
+0000
+0000
+DF04
+FBFF
+0010
+600B
+D74F
+9F45
+00D0
+E01C
+00DD
+0500
+00F5
+F005
+00F7
+0000
+00F8
+F004
+00F8
+0000
+00F7
+F008
+20BE
+0600
+00F2
+A05F
+F92E
+7F54
+7C94
+00FC
+AF02
+FFFF
+FEFF
+0070
+0100
+7746
+3075
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+A106
+0000
+8009
+0000
+F91F
+0000
+F06F
+0000
+F50D
+0000
+E03F
+0000
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0030
+0000
+0000
+AEBA
+00F0
+0000
+0000
+E9FF
+0030
+0000
+0000
+0053
+0000
+0000
+0000
+0000
+0010
+0000
+0000
+8C97
+00F0
+0000
+0000
+FBFF
+0050
+0000
+0000
+1075
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+6A75
+00E0
+0000
+0000
+FDFF
+0070
+0000
+0000
+30A8
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+FF2C
+00A0
+0000
+0000
+78DD
+00FA
+0000
+0000
+00F2
+005F
+0000
+0000
+00F0
+104F
+0000
+0000
+23EA
+00DC
+0000
+0000
+FF4F
+00E2
+0000
+0000
+5401
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1111
+1111
+1011
+0000
+FFFF
+FFFF
+F0FF
+0000
+A79F
+7777
+7077
+0000
+00D6
+0000
+0000
+0200
+00F3
+0000
+0000
+0100
+CBFF
+BBBB
+B0BB
+0000
+FE4F
+EEEE
+E0EE
+0000
+20AB
+0000
+0000
+0100
+00F1
+0000
+0000
+0200
+55FA
+5555
+5055
+0000
+FFAF
+FFFF
+F0FF
+0000
+4402
+4444
+4044
+CFD9
+FFE6
+CFDA
+FFE6
+CFE1
+FFD9
+CFE2
+FFDA
+0E26
+24E1
+E302
+68E1
+52E6
+6EE1
+50D9
+0F05
+D9E1
+EC72
+F080
+6E00
+0E06
+5CE1
+E202
+6AE1
+52E5
+6EE1
+5000
+6EDF
+0E80
+5CDF
+E005
+0E0B
+50DB
+E012
+04DF
+E010
+0E21
+0104
+6F7C
+6B7D
+0E01
+68DB
+0E02
+68DB
+0E03
+68DB
+0E7F
+6EF3
+0E04
+CFF3
+FFDB
+D18F
+0E04
+5CDF
+E10E
+DA3E
+0E01
+CFEE
+FFDB
+0E02
+CFEE
+FFDB
+0E03
+CFEE
+FFDB
+0E04
+CFEE
+FFDB
+D17E
+04DF
+E110
+0E21
+0104
+6F7C
+6B7D
+0E01
+6ADB
+0E02
+6ADB
+0E80
+6EF3
+0E03
+CFF3
+FFDB
+0E04
+68DB
+D16C
+50D9
+0F0C
+D998
+ECB6
+F06F
+6E00
+0E06
+5CE1
+E202
+6AE1
+52E5
+6EE1
+5000
+0EFA
+C026
+FFDB
+0EFB
+C027
+FFDB
+0EFC
+C028
+FFDB
+0EFD
+C029
+FFDB
+D9A6
+0EF3
+6E2C
+0E04
+6E2D
+0E35
+6E2E
+0E3F
+D987
+ECC9
+F06E
+0A01
+E109
+D9B3
+D984
+ECF7
+F06C
+D967
+D9ED
+D984
+D9AC
+D016
+0E0C
+06DB
+0E0D
+E201
+06DB
+D98B
+6A2C
+6A2D
+6A2E
+0E3F
+D96F
+D976
+0E16
+CFDB
+F004
+0E17
+CFDB
+F005
+0E18
+CFDB
+F006
+0E19
+D966
+ECE1
+F06D
+D949
+D9CF
+ECF8
+F06C
+0E1A
+C027
+FFDB
+0E1B
+C028
+FFDB
+0E1C
+C029
+FFDB
+0E1D
+C02A
+FFDB
+0E16
+CFDB
+F027
+0E17
+CFDB
+F028
+0E18
+CFDB
+F029
+0E19
+CFDB
+F02A
+0E1A
+CFDB
+F02C
+0E1B
+CFDB
+F02D
+0E1C
+CFDB
+F02E
+0E1D
+CFDB
+F02F
+EC8E
+F06D
+D91F
+0E12
+C027
+FFDB
+0E13
+C028
+FFDB
+0E14
+C029
+FFDB
+0E15
+C02A
+FFDB
+D94D
+0E12
+CFDB
+F02C
+0E13
+CFDB
+F02D
+0E14
+CFDB
+F02E
+0E15
+D962
+0E0E
+C027
+FFDB
+0E0F
+C028
+FFDB
+0E10
+C029
+FFDB
+0E11
+C02A
+FFDB
+0E3D
+6EF3
+0E1E
+CFF3
+FFDB
+0E7E
+6EF3
+0E1F
+CFF3
+FFDB
+0E0D
+6EF3
+0E20
+CFF3
+FFDB
+0EBF
+6EF3
+0E21
+CFF3
+FFDB
+0E0E
+CFDB
+F000
+0E0F
+CFDB
+F001
+0E10
+CFDB
+F002
+0E11
+CFDB
+F003
+0E3A
+6E2C
+0E3F
+6E2D
+0ED4
+6E2E
+0EC0
+D8EA
+ECF8
+F06C
+0E22
+C027
+FFDB
+0E23
+C028
+FFDB
+0E24
+C029
+FFDB
+0E25
+C02A
+FFDB
+0E0E
+CFDB
+F027
+0E0F
+CFDB
+F028
+0E10
+CFDB
+F029
+0E11
+CFDB
+F02A
+0E1E
+CFDB
+F02C
+0E1F
+CFDB
+F02D
+0E20
+CFDB
+F02E
+0E21
+D909
+0E22
+CFDB
+F02C
+0E23
+CFDB
+F02D
+0E24
+CFDB
+F02E
+0E25
+CFDB
+F02F
+EC8E
+F06D
+D907
+0E12
+CFDB
+F000
+0E13
+CFDB
+F001
+0E14
+CFDB
+F002
+0E15
+CFDB
+F003
+D8CD
+0E01
+CFDB
+F02C
+0E02
+CFDB
+F02D
+0E03
+CFDB
+F02E
+0E04
+D8E2
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+D878
+6A04
+0E80
+6E05
+0E31
+6E06
+0E3F
+6E07
+D8C9
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+D8CC
+D8E1
+ECE1
+F06D
+D869
+0E83
+6E14
+0E80
+6E15
+0E5E
+6E16
+0EB9
+6E17
+D8B3
+C027
+F018
+C028
+F019
+C029
+F01A
+C02A
+F01B
+D8B6
+C014
+F027
+C015
+F028
+C016
+F029
+C017
+F02A
+ECE1
+F06D
+C027
+F010
+C028
+F011
+C029
+F012
+C02A
+F013
+0E01
+CFDB
+F01C
+0E02
+CFDB
+F01D
+0E03
+CFDB
+F01E
+0E04
+CFDB
+F01F
+C01C
+F02C
+C01D
+F02D
+C01E
+F02E
+C01F
+F02F
+ECF8
+F06C
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+D820
+0E01
+CFDB
+F000
+0E02
+CFDB
+F001
+0E03
+CFDB
+F002
+0E04
+CFDB
+F003
+C000
+F026
+C001
+F027
+C002
+F028
+C003
+F029
+0E26
+5CE1
+E202
+6AE1
+52E5
+6EE1
+52E5
+CFE5
+FFDA
+CFE7
+FFD9
+0012
+D864
+D882
+ECF8
+F06C
+EF01
+F076
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0012
+6EE6
+0E00
+20DA
+6EE6
+D87F
+CFEE
+FFE6
+CFEE
+FFE6
+CFEE
+FFE6
+CFEF
+FFE6
+0012
+6E2F
+EF17
+F076
+CFDB
+F007
+D86A
+EF0E
+F076
+ECF7
+F06C
+0E16
+C027
+FFDB
+0E17
+C028
+FFDB
+0E18
+C029
+FFDB
+0E19
+C02A
+FFDB
+0012
+0EFA
+CFDB
+F000
+0EFB
+CFDB
+F001
+0EFC
+CFDB
+F002
+0EFD
+CFDB
+F003
+0012
+0E12
+CFDB
+F027
+0E13
+CFDB
+F028
+0E14
+CFDB
+F029
+0E15
+CFDB
+F02A
+0012
+0EFA
+CFDB
+F004
+0EFB
+CFDB
+F005
+0EFC
+CFDB
+F006
+0EFD
+0012
+0E0C
+CFDB
+F028
+0E0D
+CFDB
+F029
+EFE4
+F06C
+CFDB
+F02F
+EFE1
+F06D
+C027
+F02C
+C028
+F02D
+C029
+F02E
+C02A
+F02F
+0012
+0E01
+C027
+FFDB
+0E02
+C028
+FFDB
+0E03
+C029
+FFDB
+0E04
+C02A
+FFDB
+0012
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+0012
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+0012
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+0012
+50D9
+0FFA
+6EE9
+0EFF
+20DA
+6EEA
+0012
+CFD9
+FFE6
+CFDA
+FFE6
+CFE1
+FFD9
+CFE2
+FFDA
+D85B
+3401
+E211
+5000
+08FE
+0E00
+5401
+E20C
+D876
+E005
+D86C
+0E80
+6EEE
+68EE
+D047
+D867
+0E80
+6EEE
+0E7F
+D00E
+D847
+90D8
+5001
+E604
+0E01
+5C00
+0E00
+5801
+E20B
+D861
+E005
+D857
+6AEE
+0E80
+6EEE
+D032
+D852
+6AEE
+6AEE
+D02E
+D847
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+D832
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+D821
+5000
+0B01
+E005
+D825
+0E02
+D83A
+8EEF
+D004
+D820
+0E02
+D835
+9EEF
+D814
+90D8
+3201
+3200
+D818
+0E03
+D82D
+C000
+FFEF
+D81A
+E004
+D811
+0E03
+D826
+8EEF
+52E5
+CFE5
+FFDA
+CFE7
+FFD9
+0012
+D813
+0E04
+D81C
+CFEE
+F000
+CFEF
+F001
+0012
+0EFA
+CFDB
+FFE9
+0EFB
+CFDB
+FFEA
+0012
+D804
+0E06
+D80D
+50EF
+0012
+0EFC
+CFDB
+FFE9
+0EFD
+CFDB
+FFEA
+0012
+DFEC
+6AEE
+6AEE
+0012
+26E9
+0E00
+22EA
+0012
+0E22
+0104
+6F7C
+6B7D
+EFA0
+F076
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0300
+CD7A
+DCEE
+40A8
+0000
+0000
+0000
+DF18
+FFFF
+FFFF
+FEFF
+0092
+0000
+0700
+FFEF
+DCFF
+CEBB
+FFFF
+91FF
+0000
+BF00
+C7FF
+4365
+3322
+BF57
+FDFF
+0020
+FF0B
+00C4
+0000
+0000
+2400
+FF6E
+00D1
+FA7F
+0000
+0000
+0000
+0000
+BF01
+00FA
+C0EF
+0000
+0000
+0000
+0000
+0D00
+20FF
+60FF
+0000
+0000
+0000
+0000
+0500
+60FF
+40FF
+0000
+0000
+0000
+0000
+0300
+70FF
+80FF
+0000
+0000
+0000
+0000
+0600
+50FF
+F3CF
+0000
+0000
+0000
+0000
+1D00
+10FF
+FE4F
+0030
+0000
+0000
+0000
+CF01
+00F8
+FF07
+10D7
+0000
+0000
+0100
+FF7E
+00B0
+5E00
+FBFF
+5498
+3433
+BF58
+FAFF
+0000
+0100
+FF9F
+FFFF
+FFFF
+FFFF
+50FD
+0000
+0000
+7B01
+FFFF
+FFFF
+E9FF
+0040
+0000
+0000
+0000
+4602
+6577
+0041
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+0000
+0000
+0000
+1F00
+00A0
+0000
+0000
+0000
+0100
+0044
+9F00
+0090
+0000
+0000
+0000
+0400
+00FF
+FF02
+0050
+0000
+0000
+0000
+0400
+00FF
+FF0A
+0010
+0000
+0000
+0000
+0400
+00FF
+FC3F
+0000
+0000
+0000
+0000
+0400
+00FF
+FCBF
+7777
+7777
+7777
+7777
+7977
+00FF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+00FF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+00FF
+3333
+3333
+3333
+3333
+3333
+3633
+00FF
+0000
+0000
+0000
+0000
+0000
+0400
+00FF
+0000
+0000
+0000
+0000
+0000
+0400
+00FF
+0000
+0000
+0000
+0000
+0000
+0400
+00FF
+0000
+0000
+0000
+0000
+0000
+0300
+00CC
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0800
+0030
+0000
+0000
+0000
+2A00
+00FF
+BF00
+00D1
+0000
+0000
+0000
+FF08
+00FF
+FF0A
+00B3
+0000
+0000
+0300
+FFDF
+00FF
+FA4F
+0000
+0000
+0000
+6F00
+DBFF
+00FF
+E0CF
+0000
+0000
+0000
+FF08
+08F8
+00FF
+80FF
+0000
+0000
+0000
+FE9F
+0840
+00FF
+40FF
+0000
+0000
+0900
+D2FF
+0800
+00FF
+40FF
+0000
+0000
+9F00
+10FD
+0800
+00FF
+80FF
+0000
+0000
+FF08
+00D1
+0800
+00FF
+E0FF
+0000
+0000
+FE8F
+0020
+0800
+00FF
+FA9F
+0000
+1A00
+E2FF
+0000
+0800
+00FF
+FF2E
+21D6
+EF38
+20FD
+0000
+0800
+00FF
+FF04
+FFFF
+FFFF
+00C1
+0000
+0800
+00FF
+3D00
+FFFF
+E7FF
+0000
+0000
+0800
+00FF
+0000
+BB59
+0095
+0000
+0000
+0B00
+00FF
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+2000
+0000
+0000
+0000
+0000
+5E00
+0030
+F804
+0000
+0000
+0000
+0000
+FF08
+00D0
+FE1E
+0020
+0000
+0000
+0000
+DF04
+00F8
+F57F
+0000
+0000
+0000
+0000
+2F00
+00FE
+C0DF
+0000
+0700
+0095
+0000
+0900
+30FF
+70FF
+0000
+0C00
+00F7
+0000
+0400
+60FF
+50FF
+0000
+0E00
+00F8
+0000
+0300
+70FF
+60FF
+0000
+2F00
+00FA
+0000
+0400
+60FF
+B0FF
+0000
+7F00
+00FE
+0000
+0900
+30FF
+F4BF
+0000
+EF02
+70FF
+0000
+2F00
+00FE
+FE4F
+0060
+FD5E
+F5BF
+0000
+EF03
+00F7
+FF09
+DFFF
+F3FF
+FF2F
+56B6
+FFBF
+00C0
+8F00
+FFFF
+40FE
+FF04
+FFFF
+FCFF
+0010
+0200
+DB8C
+0071
+2B00
+FFFF
+80FE
+0000
+0000
+0000
+0000
+0000
+6615
+0030
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0400
+C0EF
+0000
+0000
+0000
+0000
+0000
+AF01
+C0FF
+0000
+0000
+0000
+0000
+0000
+FF5E
+C0FF
+0000
+0000
+0000
+0000
+1B00
+D4FF
+C0CF
+0000
+0000
+0000
+0000
+EF06
+00F8
+C0CF
+0000
+0000
+0000
+0200
+FCBF
+0030
+C0CF
+0000
+0000
+0000
+7F00
+70FF
+0000
+C0CF
+0000
+0000
+0000
+FF2C
+00B2
+0000
+C0CF
+0000
+0000
+0700
+E6FF
+0000
+0000
+C0CF
+0000
+0000
+CF03
+10FA
+0000
+0000
+C0CF
+0000
+0000
+FF8F
+AAEA
+AAAA
+AAAA
+EAEF
+AAAA
+00AA
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+00FF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+00FF
+4444
+4444
+4444
+4444
+D4DF
+4444
+0044
+0000
+0000
+0000
+0000
+C0CF
+0000
+0000
+0000
+0000
+0000
+0000
+C0CF
+0000
+0000
+0000
+0000
+0000
+0000
+7079
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+2000
+0000
+0000
+1200
+5634
+0072
+0000
+F803
+0000
+CDAB
+FFEF
+FFFF
+00F8
+0000
+FF1E
+0080
+FFFF
+FFFF
+FFFF
+00F9
+0000
+FF28
+00F3
+DAFF
+87A9
+FF67
+00B0
+0000
+7F00
+00FB
+70FF
+0000
+FF06
+0010
+0000
+0C00
+10FF
+70FF
+0000
+FA0B
+0000
+0000
+0500
+50FF
+70FF
+0000
+F70D
+0000
+0000
+0200
+70FF
+70FF
+0000
+F70E
+0000
+0000
+0200
+70FF
+70FF
+0000
+FA0E
+0000
+0000
+0400
+60FF
+70FF
+0000
+FE0B
+0010
+0000
+0A00
+30FF
+70FF
+0000
+FF06
+00B0
+0000
+6F00
+00FD
+70FF
+0000
+DF00
+40FD
+0000
+FF29
+00F5
+70FF
+0000
+3F00
+FEFF
+BDBA
+FFFF
+0090
+70FF
+0000
+0300
+FFDF
+FFFF
+F8FF
+0000
+2055
+0000
+0000
+DF07
+FFFF
+30EA
+0000
+0000
+0000
+0000
+0100
+4234
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1200
+3333
+0021
+0000
+0000
+0000
+4900
+FFCE
+FFFF
+EBFF
+0071
+0000
+0000
+FF7E
+FFFF
+FFFF
+FFFF
+90FF
+0000
+3D00
+FFFF
+BAFC
+FBFF
+EFAB
+FDFF
+0020
+FF04
+83FE
+1C00
+20FD
+0200
+FF8E
+00D1
+FF1E
+0090
+BF00
+00E1
+0000
+CF01
+00F9
+F7AF
+0000
+FF05
+0050
+0000
+1D00
+10FF
+B0FF
+0000
+FE0A
+0000
+0000
+0600
+50FF
+50FF
+0000
+FB0D
+0000
+0000
+0200
+70FF
+20FF
+0000
+FC0D
+0000
+0000
+0300
+60FF
+30FF
+0000
+FF0A
+0020
+0000
+0800
+30FF
+70FF
+0000
+FF05
+00C1
+0000
+4F00
+00FD
+E1EF
+0000
+CF00
+50FD
+0000
+FF28
+00F4
+FD7F
+0000
+2D00
+FFFF
+CDDB
+FFFF
+0070
+D20C
+0000
+0100
+FFBF
+FFFF
+E5FF
+0000
+1001
+0000
+0000
+9D03
+FEFF
+00B6
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+70CC
+0000
+0000
+0000
+0000
+0000
+0000
+90FF
+0000
+0000
+0000
+0000
+0000
+0000
+90FF
+0000
+0000
+0000
+0000
+0000
+0004
+90FF
+0000
+0000
+0000
+0000
+4900
+00EF
+90FF
+0000
+0000
+0000
+0400
+FF9E
+00FF
+90FF
+0000
+0000
+0000
+DF38
+FFFF
+00FE
+90FF
+0000
+0000
+7D01
+FFFF
+D9FF
+0040
+90FF
+0000
+0500
+FFBF
+FDFF
+0083
+0000
+90FF
+0000
+EF39
+FFFF
+30E8
+0000
+0000
+90FF
+6C00
+FFFF
+94FE
+0000
+0000
+0000
+92FF
+FF8E
+FBFF
+0050
+0000
+0000
+0000
+EFFF
+FFFF
+10D7
+0000
+0000
+0000
+0000
+FFFF
+A4FF
+0000
+0000
+0000
+0000
+0000
+FDFF
+0071
+0000
+0000
+0000
+0000
+0000
+40BA
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+6703
+0062
+0000
+0000
+4224
+0000
+0400
+FFDF
+B2FF
+0000
+3C00
+FFFF
+00C4
+8F00
+FFFF
+FEFF
+0030
+FF05
+FFFF
+70FF
+FF08
+77FB
+FFAF
+00E1
+FF3F
+8DA7
+F6FF
+FC4F
+0020
+DF02
+00F9
+E3BF
+0000
+FE8F
+B0DF
+0000
+2E00
+00FF
+60FF
+0000
+FF08
+10FE
+0000
+0800
+40FF
+10FF
+0000
+CF00
+00F7
+0000
+0400
+60FF
+00FF
+0000
+3F00
+00F9
+0000
+0300
+60FF
+20FF
+0000
+5F00
+10FF
+0000
+0500
+50FF
+80FF
+0000
+EF03
+A0FF
+0000
+0A00
+20FF
+F6DF
+0000
+FC5E
+F8CF
+0000
+4F00
+00FD
+FF4F
+9DC8
+F3FF
+FF3F
+00A2
+FF06
+00F5
+FF07
+FFFF
+40FE
+FF06
+DCFF
+FFEF
+00A0
+4C00
+FFFF
+0091
+5E00
+FFFF
+FAFF
+0000
+0000
+3024
+0000
+0100
+FF8E
+40FB
+0000
+0000
+0000
+0000
+0000
+1100
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0200
+0021
+0000
+0000
+0000
+0000
+0100
+FF7D
+EAFF
+0030
+0000
+0400
+0040
+6E00
+FFFF
+FFFF
+00FA
+0000
+6F00
+00E2
+FF08
+B9FF
+EF9B
+C0FF
+0000
+BF00
+00FA
+FF4F
+0070
+0500
+F8EF
+0000
+0C00
+10FF
+F3DF
+0000
+0000
+FF1E
+0010
+0600
+50FF
+80FF
+0000
+0000
+FF06
+0050
+0400
+60FF
+40FF
+0000
+0000
+FF01
+0070
+0400
+60FF
+30FF
+0000
+0000
+FF01
+0070
+0700
+40FF
+70FF
+0000
+0000
+FF04
+0040
+0D00
+00FE
+E2EF
+0000
+0000
+FD0B
+0000
+9F00
+00F8
+FD7F
+0030
+0000
+F47F
+0000
+FF1A
+00D1
+FF0B
+52FB
+0800
+60FF
+6A13
+FEFF
+0020
+AF00
+FFFF
+FFFF
+EFFF
+FFFF
+C2FF
+0000
+0400
+FFBF
+FFFF
+FFFF
+FFFF
+00C5
+0000
+0000
+6902
+EFCD
+EDFF
+62B9
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+ECD7
+F085
+0105
+6920
+6921
+0012
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+ECEA
+F084
+EF57
+F0A4
+FFFF
+FFFF
+FFFF
+FFFF
+EFC6
+F0AF
+EF6E
+F0B5
+EFBF
+F0B5
+0000
+FFFF
+EC80
+F083
+0105
+6B1E
+0012
+FFFF
+FFFF
+FFFF
+EFCE
+F0AF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+EF57
+F0A4
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+ECC8
+F0A8
+0105
+0E03
+6F23
+EF57
+F0A4
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+0012
+EE00
+F000
+0E0D
+6AEE
+62EA
+D7FD
+0012
+EF66
+F06A
+EF76
+F06A
+FFFF
+FFFF
+FFFF
+FFFF
+EF13
+F0A3
+EF1A
+F0B6
+EF46
+F0B6
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+EF2F
+F0AE
+CFD9
+FFE6
+CFDA
+FFE6
+CFE1
+FFD9
+CFE2
+FFDA
+52E6
+6800
+6801
+0E7F
+6E02
+6A03
+50D9
+0FFA
+6EE9
+0EFF
+20DA
+6EEA
+50EE
+1600
+50EE
+1601
+50EE
+1602
+50EE
+1603
+D86A
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0EFD
+50DB
+0B80
+E002
+0E01
+D001
+0E00
+6EE6
+D859
+0E06
+26E9
+0E00
+22EA
+52E5
+50E7
+6EEF
+0EFC
+CFDB
+F000
+0EFD
+CFDB
+F001
+90D8
+3600
+3601
+0EFC
+C000
+FFDB
+0EFD
+C001
+FFDB
+50DB
+6EE6
+D840
+0E04
+26E9
+0E00
+22EA
+52E5
+50E7
+6EEE
+6AED
+0EFD
+50DB
+6E00
+6A01
+0EFF
+1800
+E118
+5001
+E116
+D82E
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5000
+1001
+1002
+1003
+E006
+0E21
+0104
+6F7C
+6B7D
+0E80
+D00B
+0E04
+D009
+0EFD
+50DB
+E108
+D815
+6AEE
+6AEE
+6AEE
+6AEE
+0E01
+6EDF
+D006
+0E02
+6EDF
+D80B
+52EE
+52EE
+8EEE
+50DF
+52E5
+52E5
+CFE5
+FFDA
+CFE7
+FFD9
+0012
+0EF8
+CFDB
+FFE9
+0EF9
+CFDB
+FFEA
+0012
+07BB
+BC3B
+D0FF
+3C3B
+F80C
+F23A
+4997
+A33A
+E93A
+603A
+0418
+1E3A
+9009
+DF39
+014C
+9D39
+E53E
+5E39
+3AED
+2539
+338D
+0139
+C6BA
+CA38
+82DC
+9E38
+844D
+7838
+9F9D
+4238
+34AC
+1838
+A3C9
+783C
+45BD
+F93B
+CC02
+A03B
+3E44
+583B
+6223
+143B
+31FA
+D03A
+A46D
+933A
+DDFB
+4F3A
+03F8
+123A
+8D71
+DB39
+AB55
+AB39
+7712
+8639
+EA1E
+5239
+2C54
+2439
+37B2
+0039
+DADB
+C938
+6744
+A13F
+0000
+803F
+ED9E
+5C3F
+5396
+413F
+52B8
+1E3F
+CE19
+013F
+C1CA
+E13E
+CDCC
+CC3E
+0000
+C03E
+3333
+B33E
+39B4
+A83E
+91ED
+9C3E
+E926
+913E
+CBA1
+853E
+B6F3
+7D3E
+E948
+6E3E
+F706
+DF3F
+2506
+B13F
+2E90
+983F
+C7DC
+853F
+3108
+6C3F
+4A0C
+523F
+0C02
+3B3F
+8273
+263F
+EC51
+183F
+B6F3
+0D3F
+5986
+083F
+A1D6
+043F
+34A2
+043F
+6F81
+043F
+3867
+043F
+E10B
+033F
+AE47
+013F
+27C2
+263F
+19E2
+383F
+EC51
+483F
+8E06
+503F
+10E9
+573F
+728A
+5E3F
+9318
+643F
+55C1
+683F
+4D15
+6C3F
+0091
+6E3F
+80B7
+703F
+789C
+723F
+8F53
+743F
+ABCF
+753F
+E71D
+773F
+1058
+D93E
+8A1F
+133F
+5917
+273F
+A7E8
+383F
+6519
+423F
+FFB2
+4B3F
+41F1
+533F
+F1F4
+5A3F
+E02D
+603F
+B3EA
+633F
+BD52
+663F
+D044
+683F
+F085
+693F
+11C7
+6A3F
+88F4
+6B3F
+363C
+6D3F
+3BAA
+B8C0
+3BAA
+38C1
+FE44
+90C1
+D484
+D5C1
+A2CF
+1BC2
+5805
+5DC2
+3BAD
+9CC2
+CF2C
+DEC2
+F640
+1DC3
+2BA2
+52C3
+59E4
+86C3
+ED66
+ACC3
+D002
+DCC3
+ABA9
+0CC4
+939D
+33C4
+2007
+65C4
+0B6C
+0BC0
+0B6C
+8BC0
+98E7
+D9C0
+DC59
+21C1
+BDAD
+6BC1
+2E1F
+A7C1
+BFF2
+ECC1
+C7FC
+27C2
+93C1
+6DC2
+A33E
+9FC2
+DEF7
+CBC2
+4455
+02C3
+0C54
+26C3
+9EAE
+54C3
+55C9
+87C3
+2225
+ADC3
+0EEC
+223E
+C9F9
+A93D
+A8F2
+5C3D
+8AA0
+163D
+23A1
+CF3C
+89EC
+923C
+9AD0
+4F3C
+52D3
+123C
+26B7
+CF3B
+3A33
+9B3B
+7B78
+723B
+C0CA
+3D3B
+D7C4
+143B
+58BF
+E83A
+A54E
+B63A
+0AFF
+8E3A
+BE78
+BC3E
+9001
+523E
+71DB
+0B3E
+3757
+C13D
+186C
+863D
+2274
+3F3D
+BAFB
+073D
+1AC2
+C03C
+44AB
+883C
+107C
+4C3C
+0EDE
+1F3C
+9174
+FA3B
+BB6A
+C43B
+6CB5
+993B
+57E0
+703B
+8FFA
+3C3B
+0000
+8040
+0000
+0041
+0000
+4841
+0000
+9441
+0000
+D841
+3333
+1942
+3333
+5942
+0000
+9A42
+0000
+DA42
+0000
+1243
+0000
+3B43
+0000
+6F43
+0080
+9843
+0000
+C343
+0000
+F943
+00C0
+1E44
+AE47
+C13F
+AE47
+4140
+3D0A
+9740
+14AE
+DF40
+295C
+2341
+14AE
+6741
+713D
+A441
+48E1
+E841
+CDCC
+2442
+8FC2
+5C42
+4861
+8D42
+14AE
+B442
+7B94
+E642
+856B
+1343
+713D
+3C43
+AE07
+7043
+BEBE
+523F
+855D
+143F
+EEEE
+D93E
+4CFE
+9F3E
+99D9
+673E
+2785
+293E
+AD6E
+F53D
+044E
+B03D
+8D5C
+7C3D
+CDEA
+3D3D
+B00B
+153D
+232C
+EA3C
+9612
+B83C
+6E4F
+903C
+8276
+623C
+9FDE
+313C
+E066
+7D3F
+C635
+663F
+7C0D
+453F
+EA07
+213F
+0953
+FC3E
+B5C4
+C23E
+1CB5
+923E
+A5F8
+583E
+BC90
+1E3E
+9EB7
+F13D
+C348
+BF3D
+4942
+973D
+D400
+6F3D
+6921
+3C3D
+F514
+143D
+982E
+E93C
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+292E
+43C9
+A2D8
+7C01
+3D36
+54A1
+ECF0
+0613
+62A7
+05F3
+C0C7
+738C
+9893
+2BD9
+BC4C
+82CA
+1E9B
+573C
+FDD4
+E016
+6742
+6F18
+8A17
+E512
+BE4E
+C4D6
+DA9E
+DE49
+A0FB
+F58E
+BB2F
+EE7A
+A968
+7991
+15B2
+073F
+94C2
+1089
+0B22
+5F21
+807F
+5D9A
+5A90
+3227
+353E
+CCE7
+BFF7
+9703
+FF19
+30B3
+48A5
+B5D1
+D75E
+922A
+AC56
+AAC6
+4FB8
+38D2
+96A4
+7DB6
+76FC
+6BE2
+9C74
+04F1
+459D
+7059
+6471
+8720
+865B
+CF65
+E62D
+A802
+1B60
+25AD
+AEB0
+B9F6
+1C46
+6169
+3440
+7E0F
+5547
+A323
+DD51
+AF3A
+C35C
+F9CE
+BAC5
+EA26
+2C53
+0D6E
+8528
+8409
+D3DF
+CDF4
+4181
+4D52
+6ADC
+37C8
+6CC1
+ABFA
+24E1
+7B08
+0CBD
+B14A
+7888
+958B
+E363
+E86D
+E9CB
+D5FE
+3B00
+1D39
+F2EF
+B70E
+6658
+D0E4
+A677
+72F8
+EB75
+4B0A
+3144
+50B4
+8FED
+1F1A
+DB99
+8D33
+9F11
+8314
+0109
+6BBD
+0109
+6B30
+6B31
+0109
+6B32
+6B33
+0109
+6B34
+6B35
+0109
+6B36
+6B37
+0109
+6938
+EE13
+F000
+0E01
+6EF8
+0104
+0E8C
+6F34
+0E4A
+6F35
+0E4A
+6F36
+0E3F
+6F37
+C500
+F028
+C501
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F408
+C028
+F409
+C029
+F40A
+C02A
+F40B
+0104
+6B00
+0E10
+0104
+5D00
+E301
+D0FA
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E02
+6EF7
+0104
+5100
+2500
+2500
+2500
+0F80
+6EF6
+0009
+CFF5
+F441
+0009
+CFF5
+F440
+0009
+CFF5
+F443
+0008
+CFF5
+F442
+0F80
+6EF6
+2AF7
+0009
+CFF5
+F449
+0009
+CFF5
+F448
+0009
+CFF5
+F44B
+0008
+CFF5
+F44A
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C440
+F02C
+C441
+F02D
+C442
+F02E
+C443
+F02F
+C008
+F027
+C009
+F028
+C00A
+F029
+C00B
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C448
+F02C
+C449
+F02D
+C44A
+F02E
+C44B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E10F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+2B00
+D701
+0104
+0E10
+6F00
+0E20
+0104
+5D00
+E212
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+2B00
+D7EA
+EC13
+F0A0
+0105
+6B23
+0105
+6B22
+0105
+6B31
+0105
+6B32
+0105
+6B66
+0012
+EE13
+F000
+0104
+0E8C
+6F34
+0E4A
+6F35
+0E4A
+6F36
+0E3F
+6F37
+C500
+F028
+C501
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F408
+C028
+F409
+C029
+F40A
+C02A
+F40B
+C502
+F028
+C503
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F40C
+C028
+F40D
+C029
+F40E
+C02A
+F40F
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0104
+6B28
+6B29
+6B2A
+6B2B
+C40C
+F430
+C40D
+F431
+C40E
+F432
+C40F
+F433
+C513
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F97B
+C028
+F97C
+C029
+F97D
+C02A
+F97E
+C512
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F977
+C028
+F978
+C029
+F979
+C02A
+F97A
+ECBC
+F08F
+EC13
+F0A0
+0105
+6B23
+0105
+6B22
+0105
+6B31
+ECC0
+F0A0
+0012
+D84F
+0109
+51BD
+E105
+0E01
+6FBD
+EC00
+F060
+D002
+ECF3
+F064
+DB4D
+ECC0
+F0A0
+0105
+5123
+0A03
+E027
+0A02
+E01D
+0A01
+E012
+EC93
+F096
+EC13
+F0A0
+ECE3
+F069
+0103
+0E01
+6F06
+EC07
+F08D
+0105
+5123
+080F
+E224
+0E02
+6F23
+D023
+EC93
+F096
+EC4D
+F094
+EC16
+F063
+0105
+6923
+D01B
+0E03
+5D23
+E101
+D017
+6B23
+EC2D
+F08B
+D013
+EC13
+F0A0
+ECE3
+F069
+ECC2
+F069
+0102
+6BC7
+6B92
+EC93
+F096
+ECFC
+F064
+0105
+6B23
+D003
+EC2D
+F08B
+D000
+ECE5
+F095
+EFF7
+F064
+C500
+F028
+C501
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F408
+C028
+F409
+C029
+F40A
+C02A
+F40B
+C502
+F028
+C503
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F40C
+C028
+F40D
+C029
+F40E
+C02A
+F40F
+C510
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F434
+C028
+F435
+C029
+F436
+C02A
+F437
+C511
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F438
+C028
+F439
+C029
+F43A
+C02A
+F43B
+C51C
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F95F
+C028
+F960
+C029
+F961
+C02A
+F962
+C51D
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F963
+C028
+F964
+C029
+F965
+C02A
+F966
+C517
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F97F
+C028
+F980
+C029
+F981
+C02A
+F982
+0105
+511B
+E05B
+C51B
+F029
+ECD1
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E85
+6E2C
+0EEB
+6E2D
+0E1F
+6E2E
+0E41
+6E2F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F96F
+C028
+F970
+C029
+F971
+C02A
+F972
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C96F
+F027
+C970
+F028
+C971
+F029
+C972
+F02A
+ECF8
+F06C
+C027
+F96F
+C028
+F970
+C029
+F971
+C02A
+F972
+D005
+0109
+6B6F
+6B70
+6B71
+6B72
+C518
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5EF
+C028
+F5F0
+C029
+F5F1
+C02A
+F5F2
+C519
+F029
+ECD1
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E66
+6E2C
+0EE6
+6E2D
+0EC7
+6E2E
+0E42
+6E2F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F5F3
+C028
+F5F4
+C029
+F5F5
+C02A
+F5F6
+C97F
+F02C
+C980
+F02D
+C981
+F02E
+C982
+F02F
+C5F3
+F027
+C5F4
+F028
+C5F5
+F029
+C5F6
+F02A
+ECF8
+F06C
+C027
+F5F3
+C028
+F5F4
+C029
+F5F5
+C02A
+F5F6
+C51A
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5F7
+C028
+F5F8
+C029
+F5F9
+C02A
+F5FA
+C513
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F97B
+C028
+F97C
+C029
+F97D
+C02A
+F97E
+C512
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F977
+C028
+F978
+C029
+F979
+C02A
+F97A
+C515
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F297
+C028
+F298
+C029
+F299
+C02A
+F29A
+C514
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F29B
+C028
+F29C
+C029
+F29D
+C02A
+F29E
+C297
+F02C
+C298
+F02D
+C299
+F02E
+C29A
+F02F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECF7
+F06C
+C027
+F29F
+C028
+F2A0
+C029
+F2A1
+C02A
+F2A2
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0EF0
+6E2C
+0E85
+6E2D
+0E99
+6E2E
+0E3E
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC93
+F06E
+C028
+F404
+C029
+F405
+0104
+0E00
+5D04
+0E00
+5905
+E202
+6B04
+6B05
+0EFF
+80D8
+5504
+0E00
+5505
+E202
+6904
+6B05
+C404
+F24F
+0105
+511E
+0102
+6FC3
+6BC4
+0012
+0E01
+0102
+2590
+6F90
+0E00
+2191
+6F91
+0105
+5118
+E109
+C408
+F5E7
+C409
+F5E8
+C40A
+F5E9
+C40B
+F5EA
+D04E
+C5EF
+F02C
+C5F0
+F02D
+C5F1
+F02E
+C5F2
+F02F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5E7
+C028
+F5E8
+C029
+F5E9
+C02A
+F5EA
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C5E7
+F027
+C5E8
+F028
+C5E9
+F029
+C5EA
+F02A
+ECC9
+F06E
+0A01
+E108
+C408
+F5E7
+C409
+F5E8
+C40A
+F5E9
+C40B
+F5EA
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5E7
+F027
+C5E8
+F028
+C5E9
+F029
+C5EA
+F02A
+ECC9
+F06E
+0A01
+E001
+D097
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5E7
+F027
+C5E8
+F028
+C5E9
+F029
+C5EA
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5E7
+F027
+C5E8
+F028
+C5E9
+F029
+C5EA
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C438
+F027
+C439
+F028
+C43A
+F029
+C43B
+F02A
+ECE1
+F06D
+C027
+F428
+C028
+F429
+C029
+F42A
+C02A
+F42B
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C5E7
+F027
+C5E8
+F028
+C5E9
+F029
+C5EA
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+EC6C
+F06E
+C029
+F564
+D00B
+0104
+6B24
+6B25
+6B26
+6B27
+6B28
+6B29
+6B2A
+6B2B
+0105
+6B64
+C40C
+F430
+C40D
+F431
+C40E
+F432
+C40F
+F433
+ECBC
+F08F
+0105
+5163
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+EC93
+F06E
+C028
+F244
+C029
+F245
+0105
+5163
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+0E10
+2563
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+EC93
+F06E
+C028
+F246
+C029
+F247
+0105
+051F
+E11B
+C29B
+F02C
+C29C
+F02D
+C29D
+F02E
+C29E
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECE1
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+D008
+C430
+F410
+C431
+F411
+C432
+F412
+C433
+F413
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C470
+F027
+C471
+F028
+C472
+F029
+C473
+F02A
+ECC9
+F06E
+0A01
+E105
+0105
+5123
+E102
+6B22
+6923
+0012
+0104
+6B06
+6B07
+ECFC
+F064
+0102
+0E00
+80D8
+55BF
+0E00
+55C0
+E301
+D1B8
+0105
+5118
+E13E
+C420
+F5EB
+C421
+F5EC
+C422
+F5ED
+C423
+F5EE
+C96F
+F02C
+C970
+F02D
+C971
+F02E
+C972
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECC9
+F06E
+0A01
+E111
+C434
+F967
+C435
+F968
+C436
+F969
+C437
+F96A
+C438
+F96B
+C439
+F96C
+C43A
+F96D
+C43B
+F96E
+D010
+C95F
+F967
+C960
+F968
+C961
+F969
+C962
+F96A
+C963
+F96B
+C964
+F96C
+C965
+F96D
+C966
+F96E
+D0C1
+C434
+F967
+C435
+F968
+C436
+F969
+C437
+F96A
+C438
+F96B
+C439
+F96C
+C43A
+F96D
+C43B
+F96E
+C5F3
+F02C
+C5F4
+F02D
+C5F5
+F02E
+C5F6
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECC9
+F06E
+0A01
+E14F
+C5EF
+F02C
+C5F0
+F02D
+C5F1
+F02E
+C5F2
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+D04E
+C5F7
+F02C
+C5F8
+F02D
+C5F9
+F02E
+C5FA
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+C420
+F02C
+C421
+F02D
+C422
+F02E
+C423
+F02F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECC9
+F06E
+0A01
+E108
+C420
+F5EB
+C421
+F5EC
+C422
+F5ED
+C423
+F5EE
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECC9
+F06E
+0A01
+E169
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C967
+F027
+C968
+F028
+C969
+F029
+C96A
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C96B
+F027
+C96C
+F028
+C96D
+F029
+C96E
+F02A
+ECE1
+F06D
+C027
+F428
+C028
+F429
+C029
+F42A
+C02A
+F42B
+D009
+0104
+6B24
+6B25
+6B26
+6B27
+6B28
+6B29
+6B2A
+6B2B
+ECD0
+F097
+ECF5
+F069
+0102
+0E01
+6FC1
+EC22
+F0A0
+0105
+2923
+6F23
+0E10
+5D23
+E204
+0E01
+0104
+6F06
+6B07
+D002
+0105
+6B23
+0104
+0E01
+1906
+E101
+5107
+E101
+D632
+0105
+5123
+080F
+E203
+0E01
+6F23
+D004
+ECC2
+F069
+0105
+6B23
+0012
+EC93
+F096
+0105
+6B23
+C408
+F420
+C409
+F421
+C40A
+F422
+C40B
+F423
+0102
+0E01
+6F92
+0104
+6B06
+6B07
+6A2C
+6A2D
+0E80
+6E2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF7
+F06C
+C027
+F420
+C028
+F421
+C029
+F422
+C02A
+F423
+0105
+051F
+E109
+C2B7
+F293
+C2B8
+F294
+C2B9
+F295
+C2BA
+F296
+D008
+C474
+F293
+C475
+F294
+C476
+F295
+C477
+F296
+C293
+F02C
+C294
+F02D
+C295
+F02E
+C296
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECC9
+F06E
+0A01
+E001
+D25A
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECC9
+F06E
+0A01
+E001
+D245
+0102
+6B92
+0103
+6B06
+0105
+5118
+E164
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C96F
+F02C
+C970
+F02D
+C971
+F02E
+C972
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E111
+C434
+F967
+C435
+F968
+C436
+F969
+C437
+F96A
+C438
+F96B
+C439
+F96C
+C43A
+F96D
+C43B
+F96E
+D010
+C95F
+F967
+C960
+F968
+C961
+F969
+C962
+F96A
+C963
+F96B
+C964
+F96C
+C965
+F96D
+C966
+F96E
+D148
+C434
+F967
+C435
+F968
+C436
+F969
+C437
+F96A
+C438
+F96B
+C439
+F96C
+C43A
+F96D
+C43B
+F96E
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C5F3
+F02C
+C5F4
+F02D
+C5F5
+F02E
+C5F6
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E166
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C5EF
+F02C
+C5F0
+F02D
+C5F1
+F02E
+C5F2
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+D065
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C5F7
+F02C
+C5F8
+F02D
+C5F9
+F02E
+C5FA
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C438
+F02C
+C439
+F02D
+C43A
+F02E
+C43B
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECC9
+F06E
+0A01
+E117
+6A2C
+6A2D
+6A2E
+0E3F
+6E2F
+C420
+F027
+C421
+F028
+C422
+F029
+C423
+F02A
+ECF8
+F06C
+C027
+F5EB
+C028
+F5EC
+C029
+F5ED
+C02A
+F5EE
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECC9
+F06E
+0A01
+E169
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C967
+F027
+C968
+F028
+C969
+F029
+C96A
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C5EB
+F027
+C5EC
+F028
+C5ED
+F029
+C5EE
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C96B
+F027
+C96C
+F028
+C96D
+F029
+C96E
+F02A
+ECE1
+F06D
+C027
+F428
+C028
+F429
+C029
+F42A
+C02A
+F42B
+D009
+0104
+6B24
+6B25
+6B26
+6B27
+6B28
+6B29
+6B2A
+6B2B
+ECD0
+F097
+0105
+2923
+6F23
+0E10
+5D23
+E204
+0E01
+0104
+6F06
+6B07
+0104
+0E01
+1906
+E101
+5107
+E101
+D55B
+0012
+EE13
+F000
+0E01
+6EF8
+0105
+6963
+0104
+6B70
+6B71
+6B72
+6B73
+0104
+6B00
+0E10
+0104
+5D00
+E302
+EF4C
+F094
+0E02
+6EF7
+0104
+5100
+2500
+2500
+2500
+6EF6
+0009
+CFF5
+F459
+0009
+CFF5
+F458
+0009
+CFF5
+F45B
+0008
+CFF5
+F45A
+0F40
+6EF6
+0009
+CFF5
+F45D
+0009
+CFF5
+F45C
+0009
+CFF5
+F45F
+0008
+CFF5
+F45E
+0F40
+6EF6
+0009
+CFF5
+F441
+0009
+CFF5
+F440
+0009
+CFF5
+F443
+0008
+CFF5
+F442
+0F40
+6EF6
+0009
+CFF5
+F445
+0009
+CFF5
+F444
+0009
+CFF5
+F447
+0008
+CFF5
+F446
+0F40
+6EF6
+2AF7
+0009
+CFF5
+F449
+0009
+CFF5
+F448
+0009
+CFF5
+F44B
+0008
+CFF5
+F44A
+0F40
+6EF6
+0009
+CFF5
+F44D
+0009
+CFF5
+F44C
+0009
+CFF5
+F44F
+0008
+CFF5
+F44E
+0ED4
+6E2C
+0E40
+6E2D
+0E18
+6E2E
+0E38
+6E2F
+C458
+F027
+C459
+F028
+C45A
+F029
+C45B
+F02A
+ECD2
+F06E
+0A01
+E101
+D0DE
+0E45
+6E2C
+0E12
+6E2D
+0EBD
+6E2E
+0E3B
+6E2F
+C458
+F027
+C459
+F028
+C45A
+F029
+C45B
+F02A
+ECC9
+F06E
+0A01
+E101
+D0C9
+0E4B
+6E2C
+0E89
+6E2D
+0EC9
+6E2E
+0E38
+6E2F
+C45C
+F027
+C45D
+F028
+C45E
+F029
+C45F
+F02A
+ECD2
+F06E
+0A01
+E101
+D0B4
+0E9A
+6E2C
+0E99
+6E2D
+0E19
+6E2E
+0E3E
+6E2F
+C45C
+F027
+C45D
+F028
+C45E
+F029
+C45F
+F02A
+ECC9
+F06E
+0A01
+E101
+D09F
+0E44
+6E2C
+0E8B
+6E2D
+0E6C
+6E2E
+0E3E
+6E2F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECD2
+F06E
+0A01
+E101
+D08A
+0E5C
+6E2C
+0E8F
+6E2D
+0EA2
+6E2E
+0E3F
+6E2F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECC9
+F06E
+0A01
+E076
+0E25
+6E2C
+0E06
+6E2D
+0E01
+6E2E
+0E3F
+6E2F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECD2
+F06E
+0A01
+E062
+0EC7
+6E2C
+0E4B
+6E2D
+0E77
+6E2E
+0E3F
+6E2F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECC9
+F06E
+0A01
+E04E
+0E5C
+6E2C
+0E8F
+6E2D
+0E02
+6E2E
+0E3F
+6E2F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECD2
+F06E
+0A01
+E03A
+6A2C
+6A2D
+0EE0
+6E2E
+0E3F
+6E2F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECC9
+F06E
+0A01
+E028
+0E75
+6E2C
+0E93
+6E2D
+0ED8
+6E2E
+0E3E
+6E2F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECD2
+F06E
+0A01
+E014
+0EDF
+6E2C
+0E4F
+6E2D
+0E6D
+6E2E
+0E3F
+6E2F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECC9
+F06E
+0A01
+E102
+0109
+8B35
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C424
+F027
+C425
+F028
+C426
+F029
+C427
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C458
+F02C
+C459
+F02D
+C45A
+F02E
+C45B
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C428
+F027
+C429
+F028
+C42A
+F029
+C42B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C45C
+F02C
+C45D
+F02D
+C45E
+F02E
+C45F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F440
+C028
+F441
+C029
+F442
+C02A
+F443
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F448
+C028
+F449
+C029
+F44A
+C02A
+F44B
+C440
+F02C
+C441
+F02D
+C442
+F02E
+C443
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C448
+F02C
+C449
+F02D
+C44A
+F02E
+C44B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E10F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C470
+F02C
+C471
+F02D
+C472
+F02E
+C473
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E115
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F470
+CFEE
+F471
+CFEE
+F472
+CFEF
+F473
+C400
+F563
+0104
+2B00
+EFC9
+F08F
+0012
+0105
+6B22
+0E01
+0104
+6F04
+6B05
+D8ED
+ECF1
+F09B
+0E0A
+0105
+2522
+6F22
+0E01
+0104
+2504
+6F04
+0E00
+2105
+6F05
+0105
+051F
+E135
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+D008
+C474
+F410
+C475
+F411
+C476
+F412
+C477
+F413
+C430
+F02C
+C431
+F02D
+C432
+F02E
+C433
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECC9
+F06E
+0A01
+E103
+0104
+6904
+6B05
+0104
+0E11
+5D04
+0E00
+5905
+E395
+0EFF
+1904
+E101
+5105
+E105
+D8CF
+0E0A
+0105
+5D22
+6F22
+0E01
+0104
+6F04
+6B05
+0E3C
+0105
+5D22
+E270
+DAFF
+0105
+2922
+6F22
+0E01
+0104
+2504
+6F04
+0E00
+2105
+6F05
+0105
+051F
+E135
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C29B
+F027
+C29C
+F028
+C29D
+F029
+C29E
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+D008
+C474
+F410
+C475
+F411
+C476
+F412
+C477
+F413
+C430
+F02C
+C431
+F02D
+C432
+F02E
+C433
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECC9
+F06E
+0A01
+E103
+0104
+6904
+6B05
+0104
+0E0A
+5D04
+0E00
+5905
+E398
+0EFF
+1904
+E101
+5105
+E103
+0105
+0522
+6F22
+0012
+0104
+6B01
+0E10
+5D01
+E24C
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+2B01
+D7B1
+0012
+0104
+6B01
+0E10
+5D01
+E24C
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+2B01
+D7B1
+0012
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECC9
+F06E
+0A01
+E001
+D096
+0105
+5123
+0A01
+E049
+0A03
+E045
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E9A
+6E2C
+0E99
+6E2D
+0E19
+6E2E
+0E3F
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECD2
+F06E
+0A01
+E109
+D003
+6931
+D048
+D047
+0104
+6B10
+6B11
+6B12
+6B13
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B10
+6B11
+0E7F
+6F12
+0E43
+6F13
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC6C
+F06E
+C029
+F531
+0104
+6B00
+0E07
+5D00
+E218
+5100
+6AEA
+0F24
+6EE9
+0E05
+22EA
+50EF
+0105
+2531
+0104
+6F01
+0105
+5131
+0104
+5D01
+E203
+0105
+6931
+D002
+C401
+F531
+0104
+2B00
+D7E5
+D002
+0105
+6B31
+0012
+C470
+F474
+C471
+F475
+C472
+F476
+C473
+F477
+0105
+5163
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2563
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F2AF
+C028
+F2B0
+C029
+F2B1
+C02A
+F2B2
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C474
+F027
+C475
+F028
+C476
+F029
+C477
+F02A
+ECF7
+F06C
+C027
+F2B3
+C028
+F2B4
+C029
+F2B5
+C02A
+F2B6
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F2B7
+C028
+F2B8
+C029
+F2B9
+C02A
+F2BA
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C2B7
+F027
+C2B8
+F028
+C2B9
+F029
+C2BA
+F02A
+ECF7
+F06C
+C027
+F2BB
+C028
+F2BC
+C029
+F2BD
+C02A
+F2BE
+6A2C
+6A2D
+6A2E
+6A2F
+C2BB
+F027
+C2BC
+F028
+C2BD
+F029
+C2BE
+F02A
+ECD2
+F06E
+0A01
+E105
+0102
+6BBB
+6BBC
+6BBD
+6BBE
+C563
+F2C2
+0104
+6B01
+0E10
+5D01
+E270
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2501
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5101
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+2B01
+D78D
+0012
+0104
+6B74
+6B75
+6B76
+6B77
+0102
+69C2
+EE13
+F000
+0E01
+6EF8
+0104
+6B00
+0E10
+0104
+5D00
+E301
+D391
+0E02
+6EF7
+0104
+5100
+2500
+2500
+2500
+0F80
+6EF6
+0009
+CFF5
+F441
+0009
+CFF5
+F440
+0009
+CFF5
+F443
+0008
+CFF5
+F442
+0F40
+6EF6
+0009
+CFF5
+F445
+0009
+CFF5
+F444
+0009
+CFF5
+F447
+0008
+CFF5
+F446
+0F40
+6EF6
+2AF7
+0009
+CFF5
+F449
+0009
+CFF5
+F448
+0009
+CFF5
+F44B
+0008
+CFF5
+F44A
+0F40
+6EF6
+0009
+CFF5
+F44D
+0009
+CFF5
+F44C
+0009
+CFF5
+F44F
+0008
+CFF5
+F44E
+0FC0
+6EF6
+2AF7
+0009
+CFF5
+F461
+0009
+CFF5
+F460
+0009
+CFF5
+F463
+0008
+CFF5
+F462
+0F40
+6EF6
+0009
+CFF5
+F465
+0009
+CFF5
+F464
+0009
+CFF5
+F467
+0008
+CFF5
+F466
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C424
+F027
+C425
+F028
+C426
+F029
+C427
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C460
+F02C
+C461
+F02D
+C462
+F02E
+C463
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C428
+F027
+C429
+F028
+C42A
+F029
+C42B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C464
+F02C
+C465
+F02D
+C466
+F02E
+C467
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F440
+C028
+F441
+C029
+F442
+C02A
+F443
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F448
+C028
+F449
+C029
+F44A
+C02A
+F44B
+C440
+F02C
+C441
+F02D
+C442
+F02E
+C443
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C448
+F02C
+C449
+F02D
+C44A
+F02E
+C44B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E10F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C474
+F02C
+C475
+F02D
+C476
+F02E
+C477
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E11D
+C42C
+F2AF
+C42D
+F2B0
+C42E
+F2B1
+C42F
+F2B2
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F474
+CFEE
+F475
+CFEE
+F476
+CFEF
+F477
+C400
+F2C2
+0104
+2B00
+D46A
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C474
+F027
+C475
+F028
+C476
+F029
+C477
+F02A
+ECF7
+F06C
+C027
+F2B3
+C028
+F2B4
+C029
+F2B5
+C02A
+F2B6
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F2B7
+C028
+F2B8
+C029
+F2B9
+C02A
+F2BA
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C2B7
+F027
+C2B8
+F028
+C2B9
+F029
+C2BA
+F02A
+ECF7
+F06C
+C027
+F2BB
+C028
+F2BC
+C029
+F2BD
+C02A
+F2BE
+6A2C
+6A2D
+6A2E
+6A2F
+C2BB
+F027
+C2BC
+F028
+C2BD
+F029
+C2BE
+F02A
+ECD2
+F06E
+0A01
+E105
+0102
+6BBB
+6BBC
+6BBD
+6BBE
+0012
+0104
+6B74
+6B75
+6B76
+6B77
+0102
+69C2
+EE13
+F000
+0E01
+6EF8
+0104
+6B00
+0E10
+0104
+5D00
+E301
+D392
+0E02
+6EF7
+0104
+5100
+2500
+2500
+2500
+0F80
+6EF6
+0009
+CFF5
+F441
+0009
+CFF5
+F440
+0009
+CFF5
+F443
+0008
+CFF5
+F442
+0F40
+6EF6
+0009
+CFF5
+F445
+0009
+CFF5
+F444
+0009
+CFF5
+F447
+0008
+CFF5
+F446
+0F40
+6EF6
+2AF7
+0009
+CFF5
+F449
+0009
+CFF5
+F448
+0009
+CFF5
+F44B
+0008
+CFF5
+F44A
+0F40
+6EF6
+0009
+CFF5
+F44D
+0009
+CFF5
+F44C
+0009
+CFF5
+F44F
+0008
+CFF5
+F44E
+0FC0
+6EF6
+2AF7
+2AF7
+0009
+CFF5
+F461
+0009
+CFF5
+F460
+0009
+CFF5
+F463
+0008
+CFF5
+F462
+0F40
+6EF6
+0009
+CFF5
+F465
+0009
+CFF5
+F464
+0009
+CFF5
+F467
+0008
+CFF5
+F466
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C424
+F027
+C425
+F028
+C426
+F029
+C427
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C460
+F02C
+C461
+F02D
+C462
+F02E
+C463
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C428
+F027
+C429
+F028
+C42A
+F029
+C42B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C464
+F02C
+C465
+F02D
+C466
+F02E
+C467
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F440
+C028
+F441
+C029
+F442
+C02A
+F443
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E00
+26E9
+0E06
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F448
+C028
+F449
+C029
+F44A
+C02A
+F44B
+C440
+F02C
+C441
+F02D
+C442
+F02E
+C443
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C448
+F02C
+C449
+F02D
+C44A
+F02E
+C44B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E10F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C474
+F02C
+C475
+F02D
+C476
+F02E
+C477
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E11D
+C42C
+F2AF
+C42D
+F2B0
+C42E
+F2B1
+C42F
+F2B2
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0EA7
+26E9
+0E05
+22EA
+CFEE
+F474
+CFEE
+F475
+CFEE
+F476
+CFEF
+F477
+C400
+F2C2
+0104
+2B00
+D469
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C474
+F027
+C475
+F028
+C476
+F029
+C477
+F02A
+ECF7
+F06C
+C027
+F2B3
+C028
+F2B4
+C029
+F2B5
+C02A
+F2B6
+C2B3
+F02C
+C2B4
+F02D
+C2B5
+F02E
+C2B6
+F02F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C2AF
+F02C
+C2B0
+F02D
+C2B1
+F02E
+C2B2
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F2B7
+C028
+F2B8
+C029
+F2B9
+C02A
+F2BA
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C2B7
+F027
+C2B8
+F028
+C2B9
+F029
+C2BA
+F02A
+ECF7
+F06C
+C027
+F2BB
+C028
+F2BC
+C029
+F2BD
+C02A
+F2BE
+6A2C
+6A2D
+6A2E
+6A2F
+C2BB
+F027
+C2BC
+F028
+C2BD
+F029
+C2BE
+F02A
+ECD2
+F06E
+0A01
+E105
+0102
+6BBB
+6BBC
+6BBD
+6BBE
+0012
+0105
+6B2B
+6B2C
+6B2D
+6B2E
+6B2F
+6B30
+6B24
+6B25
+6B26
+6B27
+6B28
+6B29
+6B2A
+0012
+0104
+6B01
+5101
+6AEA
+0F2B
+6EE9
+0E05
+22EA
+50EF
+6E00
+6A01
+0102
+51BF
+1800
+E102
+51C0
+1801
+E128
+0104
+5101
+6AEA
+0F24
+6EE9
+0E05
+22EA
+50EF
+0102
+25C1
+0104
+6F04
+6B05
+0E00
+5D04
+0E00
+5905
+E202
+6B04
+6B05
+0EF0
+80D8
+5504
+0E00
+5505
+E203
+0EF0
+6F04
+6B05
+5101
+6AEA
+0F24
+6EE9
+0E05
+22EA
+C404
+FFEF
+0E0A
+6F01
+D049
+0104
+5101
+6AEA
+0F2B
+6EE9
+0E05
+22EA
+50EF
+E13F
+0102
+0EFF
+80D8
+55BF
+0E00
+55C0
+E209
+0104
+5101
+6AEA
+0F2B
+6EE9
+0E05
+22EA
+68EF
+D009
+0104
+5101
+6AEA
+0F2B
+6EE9
+0E05
+22EA
+C2BF
+FFEF
+5101
+6AEA
+0F24
+6EE9
+0E05
+22EA
+50EF
+0102
+25C1
+0104
+6F04
+6B05
+0EF0
+80D8
+5504
+0E00
+5505
+E209
+5101
+6AEA
+0F24
+6EE9
+0E05
+22EA
+0EF0
+6EEF
+D008
+5101
+6AEA
+0F24
+6EE9
+0E05
+22EA
+C404
+FFEF
+0E0A
+6F01
+D001
+2B01
+0E06
+5D01
+E201
+D77B
+0E06
+5D01
+E113
+0105
+512A
+0102
+25C1
+0104
+6F04
+6B05
+0EDC
+80D8
+5504
+0E00
+5505
+E204
+0105
+0EDC
+6F2A
+D002
+C404
+F52A
+0012
+0105
+5163
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2563
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0105
+5163
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B14
+6B15
+6B16
+6B17
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B14
+6B15
+0E7F
+6F16
+0E43
+6F17
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECD2
+F06E
+0A01
+E103
+0105
+6B32
+D00C
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC6C
+F06E
+C029
+F532
+C414
+F418
+C415
+F419
+C416
+F41A
+C417
+F41B
+0105
+051F
+E001
+D13E
+C2C5
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E96
+6E2C
+0EB2
+6E2D
+0ECC
+6E2E
+0E3D
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+C40C
+F02C
+C40D
+F02D
+C40E
+F02E
+C40F
+F02F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E009
+C29B
+F410
+C29C
+F411
+C29D
+F412
+C29E
+F413
+D085
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E009
+C297
+F410
+C298
+F411
+C299
+F412
+C29A
+F413
+D068
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECF7
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C008
+F027
+C009
+F028
+C00A
+F029
+C00B
+F02A
+EC8E
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C29F
+F02C
+C2A0
+F02D
+C2A1
+F02E
+C2A2
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C297
+F027
+C298
+F028
+C299
+F029
+C29A
+F02A
+ECF8
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0102
+51C5
+E108
+C29B
+F410
+C29C
+F411
+C29D
+F412
+C29E
+F413
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B14
+6B15
+6B16
+6B17
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B14
+6B15
+0E7F
+6F16
+0E43
+6F17
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC6C
+F06E
+C029
+F566
+D002
+C532
+F566
+0012
+C500
+F028
+C501
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F408
+C028
+F409
+C029
+F40A
+C02A
+F40B
+0104
+6B00
+0E10
+5D00
+E301
+D117
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+0E48
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B14
+6B15
+6B16
+6B17
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B14
+6B15
+0E7F
+6F16
+0E43
+6F17
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECD2
+F06E
+0A01
+E109
+0104
+5100
+6AEA
+0F53
+6EE9
+0E05
+22EA
+6AEF
+D016
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC6C
+F06E
+5029
+6EE6
+0104
+5100
+6AEA
+0F53
+6EE9
+0E05
+22EA
+52E5
+50E7
+6EEF
+2B00
+D6E5
+0012
+EE13
+F000
+0E01
+6EF8
+0104
+0E8C
+6F34
+0E4A
+6F35
+0E4A
+6F36
+0E3F
+6F37
+C502
+F028
+C503
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F40C
+C028
+F40D
+C029
+F40E
+C02A
+F40F
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C40C
+F027
+C40D
+F028
+C40E
+F029
+C40F
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0105
+6B20
+6B21
+C513
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E0E
+6E2E
+0E43
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F97B
+C028
+F97C
+C029
+F97D
+C02A
+F97E
+0104
+6B00
+0E10
+0104
+5D00
+E301
+D3DB
+0E04
+6EF7
+0104
+5100
+2500
+2500
+2500
+0F80
+6EF6
+0009
+CFF5
+F469
+0009
+CFF5
+F468
+0009
+CFF5
+F46B
+0008
+CFF5
+F46A
+0F40
+6EF6
+0009
+CFF5
+F46D
+0009
+CFF5
+F46C
+0009
+CFF5
+F46F
+0008
+CFF5
+F46E
+0E66
+6E00
+0E66
+6E01
+0E86
+6E02
+0E3F
+6E03
+C424
+F02C
+C425
+F02D
+C426
+F02E
+C427
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECF7
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C424
+F027
+C425
+F028
+C426
+F029
+C427
+F02A
+ECF7
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E00B
+0104
+6B10
+6B11
+6B12
+6B13
+0104
+6B14
+6B15
+6B16
+6B17
+D01A
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECC9
+F06E
+0A01
+E001
+D084
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+FFE6
+C001
+FFE6
+C002
+FFE6
+C003
+FFE6
+ECB0
+F073
+52E5
+52E5
+52E5
+52E5
+C026
+F410
+C027
+F411
+C028
+F412
+C029
+F413
+6A2C
+0E6F
+6E2D
+0E31
+6E2E
+0EBF
+6E2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+C410
+F02C
+C411
+F02D
+C412
+F02E
+C413
+F02F
+C468
+F027
+C469
+F028
+C46A
+F029
+C46B
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C97B
+F02C
+C97C
+F02D
+C97D
+F02E
+C97E
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+D00A
+0104
+6B10
+6B11
+6B12
+6B13
+0104
+6B14
+6B15
+6B16
+6B17
+0ECD
+6E00
+0ECC
+6E01
+0ECC
+6E02
+0E3D
+6E03
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF7
+F06C
+C027
+F418
+C028
+F419
+C029
+F41A
+C02A
+F41B
+6A2C
+6A2D
+6A2E
+6A2F
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+ECD2
+F06E
+0A01
+E00B
+0104
+6B18
+6B19
+6B1A
+6B1B
+0104
+6B1C
+6B1D
+6B1E
+6B1F
+D04E
+6A04
+6A05
+0E80
+6E06
+0EBF
+6E07
+C418
+F02C
+C419
+F02D
+C41A
+F02E
+C41B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F418
+C028
+F419
+C029
+F41A
+C02A
+F41B
+6A2C
+6A2D
+6A2E
+6A2F
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+ECC9
+F06E
+0A01
+E001
+D084
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+C418
+F02C
+C419
+F02D
+C41A
+F02E
+C41B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+FFE6
+C001
+FFE6
+C002
+FFE6
+C003
+FFE6
+ECB0
+F073
+52E5
+52E5
+52E5
+52E5
+C026
+F418
+C027
+F419
+C028
+F41A
+C029
+F41B
+6A2C
+0E6F
+6E2D
+0E31
+6E2E
+0EBF
+6E2F
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+EC8E
+F06D
+C027
+F418
+C028
+F419
+C029
+F41A
+C02A
+F41B
+C418
+F02C
+C419
+F02D
+C41A
+F02E
+C41B
+F02F
+C46C
+F027
+C46D
+F028
+C46E
+F029
+C46F
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C97B
+F02C
+C97C
+F02D
+C97D
+F02E
+C97E
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F41C
+C028
+F41D
+C029
+F41E
+C02A
+F41F
+D00A
+0104
+6B18
+6B19
+6B1A
+6B1B
+0104
+6B1C
+6B1D
+6B1E
+6B1F
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+ECC9
+F06E
+0A01
+E10F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+EC93
+F06E
+C028
+F404
+C029
+F405
+D00E
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC93
+F06E
+C028
+F404
+C029
+F405
+0104
+5104
+0105
+5D20
+0104
+5105
+0105
+5921
+E204
+C404
+F520
+C405
+F521
+6A2C
+6A2D
+0EA0
+6E2E
+0E41
+6E2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+0EA0
+6E2E
+0E42
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECF8
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B14
+6B15
+6B16
+6B17
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B14
+6B15
+0E7F
+6F16
+0E43
+6F17
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC6C
+F06E
+5029
+6EE6
+0104
+5100
+6AEA
+0F33
+6EE9
+0E05
+22EA
+52E5
+50E7
+6EEF
+6A2C
+6A2D
+0EA0
+6E2E
+0E41
+6E2F
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+ECE1
+F06D
+C027
+F41C
+C028
+F41D
+C029
+F41E
+C02A
+F41F
+6A2C
+6A2D
+0EA0
+6E2E
+0E42
+6E2F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+ECF8
+F06C
+C027
+F41C
+C028
+F41D
+C029
+F41E
+C02A
+F41F
+6A2C
+6A2D
+6A2E
+6A2F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B1C
+6B1D
+6B1E
+6B1F
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B1C
+6B1D
+0E7F
+6F1E
+0E43
+6F1F
+C41C
+F027
+C41D
+F028
+C41E
+F029
+C41F
+F02A
+EC6C
+F06E
+5029
+6EE6
+0E10
+0104
+2500
+6AEA
+0F33
+6EE9
+0E05
+22EA
+52E5
+50E7
+6EEF
+0104
+2B00
+D420
+0012
+0109
+51BD
+E004
+0109
+6BBD
+EC12
+F063
+EE13
+F000
+0104
+0E8C
+6F34
+0E4A
+6F35
+0E4A
+6F36
+0E3F
+6F37
+C500
+F028
+C501
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F408
+C028
+F409
+C029
+F40A
+C02A
+F40B
+C502
+F028
+C503
+F029
+ECE2
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E7A
+6E2E
+0E44
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F40C
+C028
+F40D
+C029
+F40E
+C02A
+F40F
+0EDC
+6E2C
+0E68
+6E2D
+0E80
+6E2E
+0E3D
+6E2F
+C408
+F027
+C409
+F028
+C40A
+F029
+C40B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C434
+F027
+C435
+F028
+C436
+F029
+C437
+F02A
+ECE1
+F06D
+C027
+F424
+C028
+F425
+C029
+F426
+C02A
+F427
+0104
+6B28
+6B29
+6B2A
+6B2B
+C40C
+F430
+C40D
+F431
+C40E
+F432
+C40F
+F433
+C513
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0E0E
+6E2E
+0E43
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F97B
+C028
+F97C
+C029
+F97D
+C02A
+F97E
+C512
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F977
+C028
+F978
+C029
+F979
+C02A
+F97A
+D80B
+EC13
+F0A0
+0105
+6B23
+0105
+6B22
+0105
+6B31
+ECC0
+F0A0
+0012
+EE13
+F000
+0E01
+6EF8
+0105
+6963
+0104
+6B70
+6B71
+6B72
+6B73
+0104
+6B00
+0E10
+0104
+5D00
+E302
+EF2E
+F0AE
+0E02
+6EF7
+0104
+5100
+2500
+2500
+2500
+0F80
+6EF6
+0009
+CFF5
+F441
+0009
+CFF5
+F440
+0009
+CFF5
+F443
+0008
+CFF5
+F442
+0F40
+6EF6
+0009
+CFF5
+F445
+0009
+CFF5
+F444
+0009
+CFF5
+F447
+0008
+CFF5
+F446
+0F40
+6EF6
+2AF7
+0009
+CFF5
+F449
+0009
+CFF5
+F448
+0009
+CFF5
+F44B
+0008
+CFF5
+F44A
+0F40
+6EF6
+0009
+CFF5
+F44D
+0009
+CFF5
+F44C
+0009
+CFF5
+F44F
+0008
+CFF5
+F44E
+0FC0
+6EF6
+2AF7
+0009
+CFF5
+F461
+0009
+CFF5
+F460
+0009
+CFF5
+F463
+0008
+CFF5
+F462
+0F40
+6EF6
+0009
+CFF5
+F465
+0009
+CFF5
+F464
+0009
+CFF5
+F467
+0008
+CFF5
+F466
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C424
+F027
+C425
+F028
+C426
+F029
+C427
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C460
+F02C
+C461
+F02D
+C462
+F02E
+C463
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C428
+F027
+C429
+F028
+C42A
+F029
+C42B
+F02A
+ECF7
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C464
+F02C
+C465
+F02D
+C466
+F02E
+C467
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+EC1C
+F06A
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F004
+CFEE
+F005
+CFEE
+F006
+CFEF
+F007
+C004
+F02C
+C005
+F02D
+C006
+F02E
+C007
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F42C
+C028
+F42D
+C029
+F42E
+C02A
+F42F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C440
+F027
+C441
+F028
+C442
+F029
+C443
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C444
+F027
+C445
+F028
+C446
+F029
+C447
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F440
+C028
+F441
+C029
+F442
+C02A
+F443
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F008
+CFEE
+F009
+CFEE
+F00A
+CFEF
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C448
+F027
+C449
+F028
+C44A
+F029
+C44B
+F02A
+ECE1
+F06D
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+0E10
+0104
+2500
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F010
+CFEE
+F011
+CFEE
+F012
+CFEF
+F013
+C010
+F02C
+C011
+F02D
+C012
+F02E
+C013
+F02F
+C44C
+F027
+C44D
+F028
+C44E
+F029
+C44F
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+C00C
+F02C
+C00D
+F02D
+C00E
+F02E
+C00F
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C42C
+F02C
+C42D
+F02D
+C42E
+F02E
+C42F
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F448
+C028
+F449
+C029
+F44A
+C02A
+F44B
+C440
+F02C
+C441
+F02D
+C442
+F02E
+C443
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F004
+C028
+F005
+C029
+F006
+C02A
+F007
+C448
+F02C
+C449
+F02D
+C44A
+F02E
+C44B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+ECE1
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+6A2C
+6A2D
+6A2E
+6A2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECD2
+F06E
+0A01
+E10F
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+6AEE
+6AEE
+6AEE
+6AEE
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C470
+F02C
+C471
+F02D
+C472
+F02E
+C473
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECC9
+F06E
+0A01
+E115
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F470
+CFEE
+F471
+CFEE
+F472
+CFEF
+F473
+C400
+F563
+C408
+F02C
+C409
+F02D
+C40A
+F02E
+C40B
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+0104
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E67
+26E9
+0E05
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+C000
+F02C
+C001
+F02D
+C002
+F02E
+C003
+F02F
+C42C
+F027
+C42D
+F028
+C42E
+F029
+C42F
+F02A
+ECF7
+F06C
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+0E48
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECE1
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+6A2C
+6A2D
+6A2E
+6A2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECD2
+F06E
+0A01
+E105
+0104
+6B14
+6B15
+6B16
+6B17
+6A2C
+6A2D
+0E7F
+6E2E
+0E43
+6E2F
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+ECC9
+F06E
+0A01
+E107
+0104
+6B14
+6B15
+0E7F
+6F16
+0E43
+6F17
+6A2C
+6A2D
+6A2E
+6A2F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECD2
+F06E
+0A01
+E109
+0104
+5100
+6AEA
+0F53
+6EE9
+0E05
+22EA
+6AEF
+D016
+C414
+F027
+C415
+F028
+C416
+F029
+C417
+F02A
+EC6C
+F06E
+5029
+6EE6
+0104
+5100
+6AEA
+0F53
+6EE9
+0E05
+22EA
+52E5
+50E7
+6EEF
+0104
+2B00
+EFC8
+F0A9
+0012
+0109
+6B5A
+0E10
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E217
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+6AEF
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E4A
+26E9
+0E09
+22EA
+6AEF
+0109
+2B5A
+D7DE
+0E01
+6EF8
+0E06
+6EF7
+0E00
+6EF6
+0109
+6B5A
+0E7F
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E211
+0009
+CFF5
+F95C
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E08
+22EA
+C95C
+FFEF
+0109
+2B5A
+D7E4
+0009
+CFF5
+F95C
+C95C
+F87F
+0109
+6B5A
+0E7F
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E215
+0009
+CFF5
+F95C
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E80
+26E9
+0E00
+22EA
+0E00
+26E9
+0E08
+22EA
+C95C
+FFEF
+0109
+2B5A
+D7E0
+0008
+CFF5
+F95C
+C95C
+F8FF
+0E00
+6EF8
+0E00
+6EF7
+0E00
+6EF6
+0109
+6B5D
+6B5E
+0109
+0EF3
+5D5D
+0E17
+595E
+E301
+D112
+0109
+6B39
+0109
+6B5A
+0E10
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E261
+0109
+0E09
+195D
+E101
+515E
+E10C
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E4A
+26E9
+0E09
+22EA
+CFEF
+F95C
+D003
+0009
+CFF5
+F95C
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E3A
+26E9
+0E09
+22EA
+C95C
+FFEF
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E3A
+26E9
+0E09
+22EA
+50EF
+6EE6
+0E10
+0109
+255A
+6EE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+52E5
+50E7
+6EEF
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+CFEF
+F000
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E3A
+26E9
+0E09
+22EA
+50EF
+1800
+6EE6
+0E20
+0109
+255A
+6EE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+52E5
+50E7
+6EEF
+0109
+2B5A
+D794
+0109
+6B5A
+0E12
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E245
+0109
+6B5B
+0E30
+0109
+6EE7
+195B
+AEE8
+D002
+34E7
+D002
+50E7
+5D5B
+E231
+C939
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E08
+22EA
+CFEF
+F000
+C95B
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+50EF
+1800
+6EE6
+C95B
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+52E5
+50E7
+6EEF
+C95B
+FFE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E09
+22EA
+CFEF
+F939
+0109
+2B5B
+D7C4
+0109
+2939
+0109
+6F39
+0109
+2B5A
+D7B0
+C959
+F939
+0109
+6B5A
+0E10
+0109
+6EE7
+195A
+AEE8
+D002
+34E7
+D002
+50E7
+5D5A
+E23C
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E3A
+26E9
+0E09
+22EA
+50EF
+0109
+1939
+6EE9
+6AEA
+BEE9
+68EA
+0E00
+26E9
+0E08
+22EA
+CFEF
+F000
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E4A
+26E9
+0E09
+22EA
+50EF
+1800
+6EE6
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E4A
+26E9
+0E09
+22EA
+52E5
+50E7
+6EEF
+C95A
+FFE9
+6AEA
+BEE9
+68EA
+0E4A
+26E9
+0E09
+22EA
+CFEF
+F939
+0109
+2B5A
+D7B9
+0109
+2B5D
+0E00
+235E
+D6E7
+0012
+0109
+6B73
+6B74
+6B75
+6B76
+0105
+6B65
+0012
+C507
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F478
+C028
+F479
+C029
+F47A
+C02A
+F47B
+0E32
+0105
+5D07
+E202
+EF11
+F0B5
+0E3C
+5D07
+E276
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EF0
+6E11
+0E52
+6E12
+0EC7
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0EF0
+6E2D
+0E52
+6E2E
+0E47
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+EF11
+F0B5
+0E46
+5D07
+E276
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EC8
+6E11
+0E2F
+6E12
+0EC7
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0ED8
+6E2D
+0E3D
+6E2E
+0E47
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+EF11
+F0B5
+0E50
+5D07
+E275
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EA0
+6E11
+0E0C
+6E12
+0EC7
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0E3C
+6E2D
+0E25
+6E2E
+0E47
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D3AF
+0E5A
+5D07
+E275
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EF0
+6E11
+0ED2
+6E12
+0EC6
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0E1C
+6E2D
+0E09
+6E2E
+0E47
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D337
+0E6E
+5D07
+E275
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EA0
+6E11
+0E8C
+6E12
+0EC6
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0EF0
+6E2D
+0ED2
+6E2E
+0E46
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D2BF
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0E96
+5C00
+0E00
+5801
+E275
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EA0
+6E11
+0E0C
+6E12
+0EC6
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0E98
+6E2D
+0E85
+6E2E
+0E46
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D23F
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EA0
+5C00
+0E00
+5801
+E275
+6A04
+6A05
+0E80
+6E06
+0E3F
+6E07
+6A10
+0EC8
+6E11
+0EAF
+6E12
+0EC6
+6E13
+C478
+F02C
+C479
+F02D
+C47A
+F02E
+C47B
+F02F
+C010
+F027
+C011
+F028
+C012
+F029
+C013
+F02A
+ECE1
+F06D
+C027
+F00C
+C028
+F00D
+C029
+F00E
+C02A
+F00F
+6A2C
+0EE6
+6E2D
+0E11
+6E2E
+0E47
+6E2F
+C00C
+F027
+C00D
+F028
+C00E
+F029
+C00F
+F02A
+ECF8
+F06C
+C027
+F008
+C028
+F009
+C029
+F00A
+C02A
+F00B
+C008
+F02C
+C009
+F02D
+C00A
+F02E
+C00B
+F02F
+C004
+F027
+C005
+F028
+C006
+F029
+C007
+F02A
+EC8E
+F06D
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D1BF
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EA5
+5C00
+0E00
+5801
+E223
+0E31
+6E00
+0EEB
+6E01
+0E45
+6E02
+0E3A
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D191
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EAA
+5C00
+0E00
+5801
+E223
+0E85
+6E00
+0EB1
+6E01
+0E85
+6E02
+0E3A
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D163
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EAF
+5C00
+0E00
+5801
+E223
+0E07
+6E00
+0E42
+6E01
+0EB2
+6E02
+0E3A
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D135
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EB4
+5C00
+0E00
+5801
+E223
+0EFA
+6E00
+0EED
+6E01
+0EEB
+6E02
+0E3A
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D107
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EB9
+5C00
+0E00
+5801
+E222
+6A00
+0E52
+6E01
+0E1B
+6E02
+0E3B
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D0DA
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EBE
+5C00
+0E00
+5801
+E223
+0E5F
+6E00
+0E29
+6E01
+0E4B
+6E02
+0E3B
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D0AC
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EC3
+5C00
+0E00
+5801
+E223
+0E51
+6E00
+0E66
+6E01
+0E83
+6E02
+0E3B
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D07E
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EC8
+5C00
+0E00
+5801
+E223
+0E1A
+6E00
+0E69
+6E01
+0EA9
+6E02
+0E3B
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D050
+5107
+6E00
+6A01
+90D8
+5001
+E604
+0EE6
+5C00
+0E00
+5801
+E223
+0E7A
+6E00
+0E36
+6E01
+0EAB
+6E02
+0E3C
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+D022
+0E5D
+6E00
+0E6D
+6E01
+0E45
+6E02
+0E3D
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECF8
+F06C
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+6A2C
+6A2D
+0E20
+6E2E
+0E40
+6E2F
+C973
+F027
+C974
+F028
+C975
+F029
+C976
+F02A
+ECC9
+F06E
+0A01
+E107
+0109
+6B73
+6B74
+0E20
+6F75
+0E40
+6F76
+6A2C
+6A2D
+6A2E
+6A2F
+C973
+F027
+C974
+F028
+C975
+F029
+C976
+F02A
+ECD2
+F06E
+0A01
+E105
+0109
+6B73
+6B74
+6B75
+6B76
+0E0A
+6E2C
+0ED7
+6E2D
+0EA3
+6E2E
+0E3B
+6E2F
+C973
+F027
+C974
+F028
+C975
+F029
+C976
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+EC6C
+F06E
+C029
+F565
+0012
+0EF5
+6E00
+0E11
+6E01
+0E64
+6E02
+0E3F
+6E03
+C973
+F02C
+C974
+F02D
+C975
+F02E
+C976
+F02F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+C027
+F973
+C028
+F974
+C029
+F975
+C02A
+F976
+0E0A
+6E2C
+0ED7
+6E2D
+0EA3
+6E2E
+0E3B
+6E2F
+C973
+F027
+C974
+F028
+C975
+F029
+C976
+F02A
+ECF8
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+ECE1
+F06D
+EC6C
+F06E
+C029
+F565
+0012
+C504
+F028
+C505
+F029
+ECE2
+F06C
+C027
+F410
+C028
+F411
+C029
+F412
+C02A
+F413
+C506
+F029
+ECD1
+F06C
+C027
+F000
+C028
+F001
+C029
+F002
+C02A
+F003
+6A2C
+6A2D
+0EC8
+6E2E
+0E42
+6E2F
+C000
+F027
+C001
+F028
+C002
+F029
+C003
+F02A
+EC8E
+F06D
+C027
+F414
+C028
+F415
+C029
+F416
+C02A
+F417
+C414
+F02C
+C415
+F02D
+C416
+F02E
+C417
+F02F
+C410
+F027
+C411
+F028
+C412
+F029
+C413
+F02A
+ECE1
+F06D
+C027
+F418
+C028
+F419
+C029
+F41A
+C02A
+F41B
+C418
+F027
+C419
+F028
+C41A
+F029
+C41B
+F02A
+EC93
+F06E
+C028
+F504
+C029
+F505
+0012
+0104
+6B00
+0E20
+5D00
+E226
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E03
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+2B00
+D7D7
+0012
+0104
+6B00
+0E20
+5D00
+E226
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E03
+22EA
+CFEE
+F000
+CFEE
+F001
+CFEE
+F002
+CFEF
+F003
+5100
+0D04
+CFF3
+FFE9
+CFF4
+FFEA
+0E80
+26E9
+0E04
+22EA
+C000
+FFEE
+C001
+FFEE
+C002
+FFEE
+C003
+FFEE
+2B00
+D7D7
+0012
+FFFF
+FFFF
+FFFF
+FFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/ostc_part3_wordprocessor_NEW_CURSOR_9A00_to_B960_jump_in_B410.MCH	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,4017 @@
+9BAF
+AFAF
+AFAF
+AFD1
+05B2
+07B0
+08B0
+09AF
+09AF
+09AF
+09AF
+08B1
+07B2
+049B
+9F9F
+9F9F
+9FAE
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+8FFF
+FF82
+04AC
+14A1
+1A9B
+2096
+2492
+288F
+0E8A
+108C
+0B94
+0C8A
+0996
+0F87
+0896
+1285
+0797
+0783
+0785
+0697
+0785
+0783
+0696
+0887
+0782
+0596
+078A
+0681
+0596
+078C
+0581
+0594
+088E
+0580
+0494
+0790
+0580
+0493
+0791
+0580
+0491
+0892
+0580
+0490
+0794
+0580
+058E
+0795
+0580
+058C
+0896
+0580
+068A
+0896
+0582
+0688
+0797
+0682
+0785
+0897
+0684
+0783
+0897
+0785
+0880
+0798
+0787
+0F97
+0889
+0D95
+0A8B
+108C
+0E8E
+2891
+2694
+2299
+1CA0
+15AA
+0797
+FFFF
+FFD7
+01B7
+03B4
+04B4
+03B4
+04B4
+04B3
+04B3
+05B3
+05B2
+06B2
+05B2
+06B2
+3681
+3781
+3781
+3781
+3781
+37FF
+FFFF
+FFFF
+FFAC
+FFFF
+FF90
+0389
+00A8
+0587
+03A5
+0786
+05A3
+0885
+07A0
+0A84
+089F
+0B84
+069F
+0D83
+069F
+0E82
+069F
+0881
+0482
+059E
+0883
+0482
+049E
+0884
+0481
+059D
+0885
+0481
+059C
+0787
+0481
+049C
+0788
+0481
+049B
+0789
+0481
+049A
+078A
+0481
+0499
+078B
+0481
+0498
+078C
+0481
+0596
+078D
+0481
+0595
+078E
+0481
+0594
+078F
+0481
+0692
+0790
+0482
+0690
+0791
+0482
+078E
+0792
+0483
+078B
+0893
+0483
+0986
+0A94
+0484
+1995
+0485
+1796
+0486
+1498
+0487
+1299
+0489
+0E9B
+048C
+089D
+05B3
+05BA
+FFFF
+FF8E
+00B7
+028A
+01A8
+0488
+03A5
+0786
+05A3
+0886
+05A5
+0784
+05A7
+0684
+05A8
+0682
+05AA
+0582
+05AA
+0581
+0591
+0495
+0580
+0591
+0495
+0580
+0591
+0495
+0580
+0492
+0495
+0580
+0492
+0495
+0580
+0492
+0495
+0580
+0492
+0594
+0580
+0590
+0694
+0580
+0590
+0694
+0580
+058F
+0892
+0582
+058E
+0892
+0582
+068C
+0A90
+0682
+078A
+0C8E
+0684
+0787
+0681
+068C
+0785
+1581
+0789
+0887
+1383
+1889
+1185
+168B
+0F87
+148D
+0C8A
+1291
+078E
+0EAC
+0AFF
+B8FF
+FF8B
+05B2
+06B0
+08AF
+09AD
+0BAC
+0CAA
+0EA9
+0781
+05A7
+0882
+05A6
+0784
+05A4
+0786
+05A3
+0787
+05A1
+0789
+059F
+088A
+059E
+078C
+059C
+088D
+059B
+078F
+0599
+0890
+0598
+0792
+0596
+0794
+0595
+0795
+0593
+0797
+0592
+3581
+3781
+3781
+3781
+3781
+3781
+37A4
+05B3
+05B3
+05B3
+05B3
+05B3
+05B3
+058F
+FFFF
+FF8C
+01A2
+0092
+0392
+1090
+0585
+1C8F
+0784
+1D8E
+0883
+1D8E
+0883
+1C91
+0782
+1B93
+0682
+058E
+0595
+0681
+058E
+0497
+0581
+058E
+0497
+0581
+058D
+0598
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0499
+0580
+058D
+0597
+0581
+058D
+0597
+0581
+058E
+0595
+0681
+058E
+0693
+0682
+058E
+0791
+0782
+058F
+088D
+0883
+0590
+0A87
+0B83
+0591
+1C84
+0592
+1A85
+0593
+1886
+0594
+15A5
+11AA
+0CC5
+FFFF
+F111
+A21B
+9A21
+9426
+9029
+8E2B
+8C0D
+8505
+850E
+880B
+8805
+8B09
+8808
+8906
+8E08
+8607
+8B05
+9107
+8407
+8B05
+9306
+8306
+8C05
+9506
+8205
+8D05
+9605
+8106
+8D04
+9706
+8005
+8D05
+9805
+8005
+8D05
+9805
+8004
+8E04
+990B
+8E04
+990B
+8E05
+980B
+8E05
+980B
+8E05
+9805
+8004
+8E06
+9605
+8104
+8F05
+9605
+8105
+8E06
+9405
+8205
+8F07
+9007
+8305
+8E09
+8C08
+8407
+8D0B
+860A
+8507
+8E1B
+8705
+9019
+8903
+9217
+8B00
+9613
+A70F
+AD07
+C8FF
+FFFF
+9605
+B305
+B305
+B305
+B305
+B305
+AF01
+8105
+AC04
+8105
+A907
+8105
+A60A
+8105
+A40C
+8105
+A10F
+8105
+9E12
+8105
+9B13
+8305
+9813
+8605
+9612
+8905
+9312
+8C05
+9012
+8F05
+8E11
+9205
+8B11
+9505
+8910
+9805
+8610
+9B05
+840F
+9E05
+8110
+A015
+A312
+A610
+A80D
+AB0B
+AD09
+AF06
+B204
+FFA7
+FFFF
+CA03
+B10B
+AB0F
+9007
+8F11
+8D0C
+8A14
+8A0F
+8816
+8811
+8618
+8614
+8407
+8708
+8515
+8306
+8B07
+8406
+8608
+8106
+8D06
+8306
+8907
+8004
+9006
+8205
+8B0C
+9105
+8105
+8D0A
+9205
+8104
+8F08
+9405
+8004
+9006
+9505
+8004
+9006
+950B
+9105
+950B
+9105
+950B
+9205
+940B
+9106
+9405
+8004
+9107
+9305
+8005
+8F08
+9304
+8105
+8E0A
+9105
+8106
+8C0C
+8F06
+8206
+8906
+8106
+8E05
+8308
+8508
+8107
+8C06
+8415
+8308
+8807
+8613
+850A
+820A
+8711
+8716
+890F
+8914
+8B0C
+8C12
+8F06
+9010
+AA0C
+AF06
+C5FF
+FFE9
+09AC
+0F98
+008D
+1395
+028A
+1792
+0488
+1990
+0686
+1B8E
+0785
+0988
+0A8F
+0683
+088D
+0790
+0582
+0790
+078F
+0582
+0693
+0590
+0580
+0694
+068F
+0580
+0596
+058F
+0580
+0597
+048F
+0580
+0498
+048F
+0580
+0498
+058E
+0B98
+058E
+0B98
+048F
+0580
+0498
+048E
+0581
+0597
+048E
+0581
+0596
+058D
+0681
+0695
+048E
+0583
+0594
+058D
+0683
+0693
+048D
+0685
+0790
+058B
+0786
+098D
+058A
+0888
+0B88
+0687
+0C89
+2D8C
+2B8F
+2793
+2496
+1F9D
+17A9
+07D3
+FF00
+FFFF
+FFFF
+0000
+0022
+0035
+00D2
+0100
+01A8
+0243
+02AC
+0354
+03ED
+0454
+04FF
+059A
+EE00
+F000
+0E0D
+6AEE
+62EA
+D7FD
+0012
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+0000
+000F
+0016
+006B
+0083
+00DC
+012D
+0166
+01C1
+0216
+024C
+02AB
+0302
+031B
+032A
+0344
+036F
+0375
+9F9F
+BA03
+9A04
+9A05
+9904
+9B03
+9F9F
+C09F
+9FBF
+7F9F
+9FBF
+CD03
+960E
+8E12
+8A16
+8704
+8B07
+8503
+8C03
+8004
+8303
+8B04
+8204
+8202
+8B04
+8403
+8102
+8B03
+8702
+8102
+8A03
+8802
+8102
+8804
+8903
+8002
+8703
+8B02
+8103
+8503
+8C02
+8203
+8204
+8C03
+8303
+8004
+8C03
+8506
+8C04
+8716
+8913
+8E0E
+9503
+CDFF
+8400
+9E01
+9C02
+9B02
+9C02
+9B03
+9B02
+9B1D
+811D
+811D
+FFFF
+C0FC
+0185
+0094
+0384
+0291
+0583
+0390
+0682
+0390
+0782
+0290
+0381
+0281
+028F
+0482
+0281
+028E
+0483
+0281
+028D
+0484
+0281
+028D
+0385
+0281
+028C
+0386
+0281
+038A
+0387
+0282
+0288
+0488
+0282
+0386
+0489
+0283
+0D8A
+0284
+0A8C
+0285
+088D
+0287
+0390
+02E0
+FF9A
+0185
+0292
+0483
+0393
+0482
+0295
+0382
+0296
+0281
+0289
+028A
+0281
+0289
+028A
+0281
+0289
+028A
+0281
+0289
+028A
+0281
+0288
+038A
+0282
+0287
+0489
+0282
+0385
+0687
+0383
+0A81
+0384
+0484
+0A81
+0C87
+0684
+0A8A
+0288
+07FF
+84D3
+029A
+0499
+0597
+0796
+0381
+0294
+0482
+0293
+0384
+0291
+0485
+0290
+0387
+028E
+0488
+028D
+038A
+028B
+048B
+028A
+1C81
+1D81
+1D81
+1D94
+029C
+029C
+029C
+02C8
+FA00
+8D06
+8802
+830F
+8704
+820F
+8803
+8209
+8102
+8A03
+8102
+8702
+8C02
+8102
+8702
+8C02
+8102
+8701
+8D02
+8102
+8701
+8E02
+8002
+8701
+8D03
+8002
+8702
+8C02
+8102
+8702
+8C02
+8102
+8703
+8A03
+8102
+8803
+8804
+8102
+8805
+8405
+8202
+890E
+8302
+8A0C
+9408
+E5EC
+0891
+118B
+1588
+1785
+0584
+0286
+0584
+0385
+0289
+0383
+0386
+028A
+0381
+0386
+028C
+0281
+0287
+028C
+0281
+0287
+028D
+0280
+0287
+028C
+0281
+0287
+028C
+0281
+0287
+038B
+0281
+0288
+0389
+0283
+0287
+0584
+0583
+0387
+0E85
+008A
+0C95
+06E6
+FF80
+029C
+029C
+029C
+0297
+0281
+0294
+0581
+0291
+0881
+028F
+0982
+028C
+0985
+0289
+0988
+0287
+088B
+0284
+098D
+0282
+0890
+0B93
+0995
+0698
+049A
+01FC
+F405
+8A03
+8808
+8707
+850A
+8509
+8304
+8105
+830B
+8103
+8504
+8202
+8506
+8803
+8102
+8705
+8902
+8102
+8803
+8A02
+8102
+8803
+8A02
+8102
+8902
+8A02
+8102
+8803
+8A02
+8102
+8804
+8902
+8103
+8606
+8802
+8203
+8303
+8103
+8602
+830B
+8105
+8204
+8408
+840B
+8705
+8609
+9705
+E5E7
+0498
+098B
+0086
+0C89
+0284
+0E88
+0382
+0388
+0388
+0282
+028A
+0387
+0281
+028C
+0287
+0281
+028C
+0287
+0380
+028C
+0287
+0281
+028C
+0287
+0281
+028C
+0287
+0281
+038A
+0287
+0382
+0389
+0286
+0383
+0487
+0285
+0485
+0781
+0381
+0887
+168A
+128F
+0CE9
+9F9F
+AB03
+8A03
+8B04
+8904
+8B04
+8905
+8A04
+8904
+8C02
+8B03
+9F9F
+C09F
+9FC8
+0194
+0A94
+0A94
+0896
+059F
+9FB9
+FFA9
+009B
+0394
+0A94
+0995
+0698
+03FF
+8302
+940A
+940A
+9407
+9704
+FFBA
+C815
+8915
+8915
+8B02
+9B01
+9C01
+9D01
+9D02
+9C04
+9A15
+8A14
+8B13
+8A02
+9B02
+9C01
+9D01
+9D02
+9C15
+8915
+8A14
+8D11
+A0FF
+FFFF
+FFFF
+FF00
+0000
+000E
+001B
+0048
+007D
+00B4
+00E7
+00F0
+010D
+012A
+014B
+0164
+0170
+0185
+018E
+01A3
+01D6
+01E2
+0215
+0246
+0267
+029C
+02CB
+02EA
+0321
+0352
+0360
+0371
+039C
+03CD
+03F8
+041B
+045C
+047D
+04B8
+04E5
+050E
+0541
+0564
+0597
+05AC
+05CD
+05EA
+060F
+0624
+063D
+0656
+067F
+06A4
+06D5
+0700
+0739
+0752
+076B
+0784
+079D
+07C6
+07DF
+0818
+0837
+084C
+086B
+087C
+0895
+08A1
+08D4
+08F9
+0920
+0945
+097A
+099B
+09E4
+09F9
+0A14
+0A33
+0A54
+0A71
+0A8A
+0A9F
+0AC8
+0AED
+0B12
+0B27
+0B5A
+0B77
+0B8C
+0BA5
+0BBE
+0BE3
+0C04
+0C39
+0C5C
+0C63
+0C86
+0C9F
+0CAD
+0CD6
+0D05
+0D2A
+0D61
+0D6C
+0DAB
+0DB8
+0E05
+0E3C
+0E5D
+0E70
+0E73
+0EBA
+0ECB
+0EE4
+0F15
+0F3C
+0F61
+0F6B
+0F86
+0F8A
+0FDB
+0FE2
+F803
+8A01
+850C
+8202
+850A
+8302
+FF94
+CD00
+9105
+9103
+C701
+9105
+9103
+DA9D
+0183
+018F
+0183
+018F
+0183
+0688
+0D87
+0781
+018F
+0183
+018F
+0183
+018F
+0182
+0786
+0D89
+0583
+018F
+0183
+018F
+0183
+00A2
+B402
+8601
+8A04
+8601
+8801
+8102
+8501
+8800
+8301
+8600
+8702
+8202
+8501
+8512
+8501
+8402
+8401
+8700
+8501
+8301
+8801
+8402
+8201
+8901
+8405
+9203
+9F9A
+0392
+0588
+0185
+0183
+0185
+0286
+0183
+0084
+0289
+0582
+038B
+0382
+0292
+0282
+028C
+0283
+0489
+0284
+0182
+0186
+0385
+0183
+0086
+0187
+0182
+0191
+049D
+A403
+9106
+8804
+8102
+8202
+8608
+8501
+8600
+8402
+8501
+8600
+8403
+8401
+8601
+8205
+8301
+8606
+8202
+8001
+8803
+8503
+9402
+9206
+9001
+8200
+9DFF
+9401
+9006
+9102
+FF8B
+E707
+8C0C
+8903
+8703
+8602
+8B02
+8401
+8E02
+8201
+9101
+8101
+9102
+8000
+9300
+B0B0
+0093
+0081
+0191
+0181
+028F
+0282
+028D
+0284
+028B
+0286
+0387
+0389
+0B8D
+07E7
+9F00
+9601
+9501
+8202
+9000
+8102
+9104
+8D07
+8F07
+9404
+9200
+8102
+9001
+8301
+8F01
+9500
+A6A0
+0195
+0195
+0195
+0195
+0191
+0A8B
+0B90
+0195
+0195
+0195
+0195
+01A4
+FF88
+0182
+018F
+0690
+0494
+00FC
+B801
+9501
+9501
+9501
+9501
+9501
+9501
+9501
+9501
+9501
+BCFF
+8701
+9502
+9402
+FF94
+C101
+9303
+9004
+9004
+9004
+9003
+9103
+9103
+9103
+9301
+C4A0
+0290
+0A8B
+0285
+0389
+0186
+0587
+0186
+0183
+0186
+0086
+0184
+0186
+0084
+0285
+0186
+0182
+0286
+0186
+0280
+0187
+0188
+0484
+038B
+0A90
+02A3
+CA01
+9501
+9401
+9510
+8610
+FF94
+B300
+8B01
+8701
+8903
+8601
+8904
+8601
+8802
+8001
+8600
+8801
+8201
+8600
+8701
+8301
+8601
+8501
+8401
+8602
+8301
+8501
+8706
+8601
+8804
+8701
+B4BF
+0188
+008B
+0187
+018C
+0186
+0085
+0185
+0186
+0085
+0185
+0186
+0085
+0185
+0186
+0183
+0285
+0186
+0281
+0180
+0183
+0188
+0482
+0592
+03B7
+A400
+9402
+9204
+9102
+8001
+8F02
+8201
+8E02
+8301
+8C02
+8501
+8B10
+8610
+9002
+9401
+9600
+A1B7
+0185
+0088
+0883
+0287
+0282
+0185
+0187
+0084
+0087
+0186
+0084
+0087
+0186
+0084
+0087
+0186
+0084
+0186
+0186
+0084
+0185
+0187
+0085
+0887
+0086
+06B6
+B508
+8C0C
+8902
+8201
+8302
+8701
+8301
+8601
+8601
+8301
+8601
+8600
+8400
+8701
+8600
+8401
+8601
+8601
+8302
+8401
+8701
+8408
+8F05
+B7B1
+0096
+0096
+008D
+0186
+008A
+0486
+0087
+0588
+0085
+048B
+0082
+058D
+0690
+0393
+01C3
+BB04
+8904
+8206
+8702
+8002
+8001
+8301
+8701
+8302
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8601
+8302
+8501
+8602
+8101
+8001
+8301
+8805
+8106
+8902
+8404
+B6B3
+0586
+0088
+0784
+0187
+0284
+0184
+0186
+0186
+0084
+0186
+0087
+0183
+0186
+0087
+0084
+0186
+0185
+0183
+0187
+0284
+0182
+0288
+0D8B
+09B8
+FE01
+8601
+8C02
+8502
+8B02
+8502
+FF94
+FF01
+8601
+8201
+8602
+8506
+8702
+8504
+9400
+FCA0
+0195
+0293
+0393
+0081
+0191
+0181
+0190
+0183
+018F
+0184
+018D
+0185
+018D
+0186
+018B
+0187
+018B
+0188
+0189
+0189
+019E
+9E00
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+9000
+8400
+A19A
+0189
+018A
+0188
+018A
+0187
+018C
+0186
+018C
+0185
+018E
+0184
+018E
+0183
+0190
+0181
+0192
+0081
+0192
+0394
+0294
+01A4
+B101
+9501
+9401
+9501
+9401
+8801
+8202
+8401
+8604
+8102
+8501
+8402
+8401
+8602
+8202
+8F06
+9104
+BF9D
+078D
+0481
+048A
+0287
+0288
+018B
+0187
+0184
+0383
+0087
+0084
+0582
+0186
+0083
+0182
+0182
+0186
+0083
+0084
+0082
+0186
+0182
+0084
+0082
+0186
+0281
+0083
+0182
+0187
+0A82
+008A
+08A1
+A702
+9104
+8F04
+8F06
+8D04
+8201
+8B03
+8501
+8C04
+8301
+8F04
+8001
+9105
+9404
+9504
+9402
+9C99
+1086
+1086
+0085
+0185
+0186
+0085
+0086
+0186
+0085
+0086
+0186
+0085
+0086
+0186
+0085
+0185
+0186
+0183
+0285
+0186
+0183
+0284
+0287
+0580
+0281
+0289
+0382
+0593
+029F
+9E06
+8E0A
+8A03
+8503
+8901
+8902
+8701
+8B02
+8600
+8D01
+8600
+8D01
+8600
+8D01
+8601
+8C01
+8601
+8B01
+8802
+8802
+8900
+8A00
+9E99
+1086
+1086
+008D
+0186
+008D
+0186
+008D
+0186
+008D
+0186
+018C
+0186
+018C
+0186
+028A
+0188
+0386
+028B
+0A8E
+05A2
+B110
+8610
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8D01
+B4B1
+1086
+1086
+0085
+018E
+0085
+008F
+0085
+008F
+0085
+008F
+0085
+008F
+0085
+008F
+0085
+008F
+00C4
+9E06
+8D0B
+8A02
+8702
+8802
+8A01
+8701
+8C01
+8600
+8D01
+8600
+8D01
+8600
+8700
+8401
+8601
+8600
+8401
+8601
+8600
+8400
+8802
+8406
+8900
+8505
+9EB1
+1086
+108D
+0195
+0195
+0195
+0195
+0195
+018E
+1086
+10B4
+B100
+8E00
+8600
+8D01
+8600
+8D01
+8600
+8D01
+8610
+8610
+8600
+8D01
+8600
+8D01
+8600
+8D01
+CCBF
+0196
+0195
+0186
+008D
+0186
+008D
+0186
+008C
+0187
+0F87
+0D89
+0096
+0096
+00AC
+9910
+8610
+8D02
+9302
+9304
+9102
+8002
+8F02
+8202
+8D01
+8503
+8A01
+8802
+8801
+8A03
+8600
+8D01
+9600
+9CB1
+1086
+1095
+0195
+0195
+0195
+0195
+0195
+0195
+0195
+01B4
+9910
+8610
+8703
+9503
+9503
+9503
+9302
+9202
+9203
+9103
+9210
+8610
+9C99
+1086
+1086
+0395
+0295
+0395
+0395
+0395
+0395
+0295
+0387
+1086
+109C
+9D08
+8C0C
+8902
+8703
+8701
+8B01
+8701
+8C01
+8600
+8D01
+8600
+8D01
+8601
+8C01
+8601
+8B01
+8802
+8802
+890C
+8C08
+A0B1
+1086
+1086
+0086
+008E
+0086
+008E
+0086
+008E
+0086
+008E
+0184
+018E
+0184
+018E
+0282
+028F
+0692
+02A7
+9D08
+8C0C
+8902
+8802
+8701
+8B02
+8601
+8C01
+8600
+8E02
+8400
+8E04
+8201
+8C01
+8101
+8201
+8C01
+8101
+8302
+8802
+8201
+840C
+8301
+8608
+A0B1
+1086
+1086
+0086
+008E
+0086
+008E
+0086
+008E
+0086
+018D
+0184
+048B
+0184
+0180
+0389
+0783
+0388
+0586
+028A
+008A
+009C
+B303
+8602
+8805
+8601
+8701
+8202
+8601
+8601
+8301
+8601
+8600
+8501
+8501
+8600
+8501
+8501
+8600
+8501
+8501
+8601
+8501
+8302
+8602
+8402
+8102
+8801
+8505
+9301
+A099
+0096
+0096
+0096
+0096
+0096
+1086
+1086
+0096
+0096
+0096
+0096
+00AC
+990C
+8A0E
+9502
+9501
+9601
+9501
+9501
+9501
+9401
+9402
+870E
+880C
+A099
+0195
+0494
+0594
+0594
+0594
+0592
+048F
+048F
+048F
+048F
+0492
+01AB
+9905
+920A
+9209
+9004
+8E05
+8E04
+9005
+9406
+9406
+9206
+8909
+8A06
+A6A9
+0086
+018B
+0286
+0388
+0388
+0384
+038B
+0381
+038F
+0591
+058F
+0381
+038C
+0285
+0388
+0387
+0387
+018B
+0296
+009C
+9900
+9602
+9503
+9503
+9503
+940A
+8D09
+8B04
+9004
+9003
+9202
+9400
+ACA9
+0086
+008C
+0286
+008A
+0486
+0089
+0280
+0186
+0087
+0381
+0186
+0085
+0383
+0186
+0084
+0285
+0186
+0082
+0386
+0186
+0080
+0388
+0186
+038A
+0186
+028B
+0195
+019C
+DF15
+8101
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8200
+9100
+B2B0
+0195
+0395
+0395
+0395
+0395
+0494
+0495
+0395
+0395
+01B3
+B000
+9100
+8201
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8101
+9101
+8115
+E1CE
+0194
+0292
+0292
+0294
+0296
+0295
+0395
+01D6
+AB00
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+9AE0
+0195
+0395
+0295
+0295
+00FF
+89A6
+0193
+048C
+0183
+0180
+028B
+0083
+0182
+018A
+0183
+0084
+008A
+0183
+0084
+008A
+0183
+0084
+008A
+0183
+0083
+008C
+0182
+0082
+018C
+0B8C
+0AB4
+AF12
+8411
+8C01
+8601
+8C00
+8801
+8A01
+8801
+8A01
+8801
+8A01
+8801
+8B01
+8602
+8B03
+8302
+8D08
+9004
+A0B8
+068F
+088D
+0284
+028C
+0186
+028A
+0188
+018A
+0188
+018A
+0188
+018A
+0188
+018B
+0186
+018C
+0285
+018D
+00A6
+A104
+9008
+8D02
+8402
+8C01
+8602
+8A01
+8801
+8A01
+8801
+8A01
+8801
+8B00
+8800
+8C01
+8601
+8611
+8412
+B4A2
+0292
+078E
+0480
+038C
+0181
+0182
+018B
+0182
+0183
+018A
+0182
+0183
+018A
+0182
+0183
+018A
+0182
+0183
+018B
+0181
+0183
+018B
+0582
+018D
+0483
+00B5
+B601
+9501
+9501
+9010
+8503
+8101
+8F01
+8301
+8F00
+8401
+8E01
+8401
+8E01
+8400
+9001
+9502
+ABAA
+0289
+0481
+0180
+0487
+0B81
+0186
+0183
+0181
+0183
+0086
+0085
+0082
+0083
+0185
+0085
+0082
+0083
+0185
+0085
+0082
+0083
+0185
+0183
+0182
+0083
+0186
+0583
+0083
+0086
+0584
+0181
+0186
+0089
+0487
+008B
+019A
+AF12
+8412
+8C01
+9401
+9500
+9501
+9501
+9502
+950B
+8C0A
+B4CD
+0188
+018A
+0188
+018A
+0188
+0185
+0182
+0C85
+0182
+0C95
+0195
+0195
+01CC
+C401
+9601
+8501
+8D01
+8501
+8D01
+8501
+8D01
+8501
+8C01
+8101
+8210
+8102
+810F
+8201
+DCAF
+1284
+128F
+0294
+0194
+0392
+0180
+0290
+0182
+028E
+0184
+028C
+0186
+038A
+0089
+0196
+009C
+B000
+8E01
+8401
+8E01
+8401
+8E01
+8401
+8E01
+8412
+8412
+9501
+9501
+9501
+9600
+B49D
+0C8A
+0C8B
+0095
+0195
+0195
+0C8B
+0B8B
+0194
+0195
+0195
+0C8B
+0B9C
+B50C
+8A0C
+8C01
+9401
+9500
+9501
+9501
+9502
+950B
+8C0A
+B4A1
+0491
+078E
+0282
+038C
+0186
+018B
+0188
+018A
+0188
+018A
+0188
+018A
+0188
+018B
+0186
+018C
+0383
+028D
+0890
+04A0
+B511
+8510
+8701
+8601
+8C00
+8800
+8B01
+8801
+8A01
+8801
+8A01
+8801
+8B01
+8602
+8B02
+8402
+8D08
+9004
+A0A1
+0490
+088D
+0283
+038C
+0087
+028A
+0188
+018A
+0188
+018A
+0188
+018B
+0088
+008C
+0186
+018C
+0F86
+11AF
+CD0C
+8A0C
+8C01
+9401
+9500
+9501
+9501
+9501
+9601
+9500
+A7B8
+0085
+018C
+0483
+018C
+0484
+018A
+0182
+0183
+018A
+0182
+0183
+018A
+0182
+0183
+018A
+0183
+0182
+018B
+0083
+0182
+018B
+0182
+058D
+0083
+03B6
+B501
+9501
+9501
+920E
+880F
+8A01
+8801
+8A01
+8801
+8A01
+8801
+8A01
+8801
+9401
+B5B5
+0A8C
+0B95
+0295
+0196
+0096
+0095
+0095
+018B
+0C8A
+0CB4
+9D00
+9603
+9404
+9504
+9404
+9404
+9303
+9103
+9103
+9004
+9003
+9300
+A89D
+0593
+0893
+0593
+038F
+048F
+0492
+0395
+0594
+0593
+038C
+098B
+06A2
+B501
+8801
+8A02
+8602
+8C02
+8203
+8E02
+8002
+9104
+9204
+9102
+8002
+8E02
+8303
+8B02
+8602
+8A00
+8901
+B4AC
+0186
+028C
+0185
+0589
+0188
+0487
+018A
+0484
+018E
+0791
+048F
+0490
+048F
+0490
+0393
+01A7
+A900
+8A01
+8702
+8A01
+8603
+8A01
+8504
+8A01
+8402
+8001
+8A01
+8202
+8201
+8A01
+8102
+8301
+8A01
+8002
+8401
+8A04
+8501
+8A02
+8701
+8A01
+8801
+9501
+9CA2
+0096
+0195
+0193
+0581
+0286
+0781
+0883
+068A
+0281
+0191
+0181
+0192
+0081
+0192
+0081
+0192
+00C8
+FF90
+1581
+15FF
+90C8
+0192
+0081
+0192
+0081
+0192
+0081
+0191
+0182
+0685
+0181
+0383
+0781
+088A
+0581
+018F
+0195
+01BA
+9F00
+9501
+9501
+9401
+9501
+9601
+9502
+9501
+9501
+9501
+9401
+9501
+A6F8
+0189
+0485
+0381
+0C85
+0283
+0AFF
+94A1
+0291
+078E
+0382
+038C
+0186
+018B
+0188
+018A
+0086
+0786
+0E86
+0884
+0187
+0081
+0188
+018A
+0187
+028B
+0186
+01B6
+A900
+8C01
+8601
+8904
+8502
+870E
+8702
+8206
+8001
+8701
+8301
+8600
+8700
+8401
+8601
+8600
+8D01
+8601
+8D00
+8601
+8D00
+9501
+9501
+9CB4
+0086
+008E
+088F
+0182
+018F
+0184
+008F
+0184
+018E
+0184
+018E
+0184
+0090
+0182
+018F
+088E
+0086
+00B9
+B101
+8700
+8100
+8903
+8401
+8100
+8B03
+8201
+8100
+8D02
+8101
+8100
+8F0A
+8C0A
+8A03
+8001
+8100
+8B03
+8201
+8100
+8903
+8401
+8100
+8901
+8601
+8100
+8900
+ACFF
+9009
+8208
+8109
+8208
+FF90
+B802
+8500
+8604
+8004
+8302
+8407
+8101
+8401
+8401
+8201
+8301
+8401
+8201
+8301
+8301
+8401
+8201
+8401
+8201
+8401
+8300
+8401
+8301
+8201
+8401
+8402
+8007
+8501
+8304
+8004
+8E01
+BBC8
+0194
+0295
+01C5
+0194
+0295
+01DC
+8902
+9107
+8E01
+8502
+8B01
+8202
+8200
+8B00
+8105
+8200
+8901
+8100
+8301
+8100
+8900
+8101
+8401
+8000
+8900
+8101
+8401
+8000
+8901
+8001
+8400
+8100
+8A00
+8101
+8201
+8100
+8A01
+8100
+8501
+8B01
+8601
+8D02
+8202
+9004
+89BC
+018F
+0381
+018A
+0181
+0481
+018A
+0082
+0181
+0180
+018A
+0082
+0082
+0180
+018A
+0082
+0082
+0180
+018A
+0181
+0081
+0181
+018A
+0881
+018B
+0781
+0195
+01B8
+BA01
+9403
+9202
+8001
+9002
+8201
+8F01
+8401
+9101
+9403
+9202
+8001
+9002
+8201
+8F01
+8401
+B6D0
+0195
+0190
+0C8B
+0A8D
+088F
+0691
+0493
+0295
+00BC
+FFFF
+CF89
+0291
+078E
+0185
+028B
+0188
+008B
+0080
+0781
+0089
+0180
+0781
+0089
+0081
+0082
+0084
+0089
+0081
+0082
+0084
+0089
+0180
+0180
+0382
+008A
+0081
+0281
+0181
+008A
+0188
+018B
+0186
+018D
+0282
+0290
+0489
+C900
+9600
+9600
+9600
+9600
+9600
+9600
+9600
+DCCB
+0193
+0591
+0181
+0190
+0183
+018F
+0183
+018F
+0183
+0091
+0592
+03D8
+9F00
+8700
+8D00
+8701
+8C00
+8701
+8C00
+8701
+8C00
+8701
+870B
+8101
+870B
+8101
+8C00
+8701
+8C00
+8701
+8C00
+8701
+8C00
+8701
+8C00
+8700
+9DCA
+0086
+008D
+0184
+028C
+0184
+038C
+0184
+0080
+018C
+0183
+0180
+018C
+0182
+0181
+018D
+0482
+018E
+0283
+01D3
+D100
+8E01
+8401
+8D01
+8601
+8C01
+8200
+8201
+8C01
+8200
+8201
+8C01
+8101
+8201
+8D05
+8001
+8F01
+8103
+D4FF
+9101
+9303
+9301
+9500
+F69D
+1185
+0B95
+0196
+0195
+0195
+0195
+0094
+028B
+0B95
+0295
+0195
+0195
+0085
+FFFF
+CE80
+9501
+9402
+9203
+9104
+8600
+8904
+8603
+8705
+8602
+8506
+8604
+8207
+8704
+8009
+860F
+8707
+8007
+8706
+8006
+8807
+8005
+8708
+8103
+8807
+8001
+8101
+8806
+8005
+8905
+8007
+8804
+800A
+8603
+800C
+8502
+800C
+8601
+800B
+880C
+8B08
+8B8F
+FFFF
+FFFF
+EC90
+F05B
+0012
+0000
+9084
+C083
+FF83
+9480
+8480
+0012
+C085
+F000
+6A01
+C000
+F086
+C084
+F087
+8084
+C086
+FF83
+9480
+8480
+C087
+FF83
+9480
+8480
+0012
+C08E
+FF83
+9480
+8480
+9480
+8480
+0012
+C07A
+FF83
+9480
+8480
+C07B
+FF83
+9480
+8480
+0012
+0100
+0E35
+6F83
+DFD5
+0100
+517D
+0100
+6F84
+6B85
+0100
+90D8
+3784
+3785
+DFD1
+0100
+0E36
+6F83
+DFC7
+0100
+0E3F
+6F84
+0E01
+6F85
+DFC7
+0100
+0E37
+6F83
+DFBD
+0100
+517C
+0100
+6F84
+6B85
+0E02
+0100
+5D7E
+E107
+0E3A
+0100
+2784
+0E00
+0100
+2385
+D010
+0100
+057E
+E107
+0E20
+0100
+2784
+0E00
+0100
+2385
+D006
+0E18
+0100
+2784
+0E00
+0100
+2385
+0100
+0784
+0E00
+5B85
+0100
+0EEF
+80D8
+5584
+0E00
+5585
+E204
+0EEF
+0100
+6F84
+6B85
+C07C
+F000
+C000
+F001
+6A00
+5000
+0100
+1384
+5001
+0100
+1385
+DF88
+0100
+0E20
+6F83
+DF7E
+0100
+517C
+0100
+6F84
+6B85
+DF7E
+0100
+0E21
+6F83
+DF74
+0100
+517D
+0100
+6F84
+6B85
+0100
+90D8
+3784
+3785
+DF70
+0012
+0E20
+0100
+5D82
+E103
+0100
+0EB6
+6F82
+0100
+5182
+087E
+E203
+0E22
+0100
+5F82
+0E21
+0100
+5D82
+E304
+0100
+5182
+08A3
+E203
+0100
+0E82
+6F82
+0E21
+0100
+5D82
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0E9A
+26F6
+0EA3
+22F7
+0009
+CFF5
+F088
+000A
+CFF5
+F089
+0100
+2982
+0FDF
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0E9A
+26F6
+0EA3
+22F7
+0009
+CFF5
+F08A
+000A
+CFF5
+F08B
+0012
+0E27
+0100
+5D82
+E103
+0100
+0E3B
+6F82
+0E22
+0100
+5D82
+E103
+0100
+0E3C
+6F82
+0E6D
+0100
+5D82
+E103
+0100
+0E3D
+6F82
+0E20
+0100
+5D82
+E103
+0100
+0E3E
+6F82
+0E2E
+0100
+5D82
+E304
+0100
+5182
+083E
+E203
+0100
+0E3E
+6F82
+0E2E
+0100
+5D82
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0E00
+26F6
+0EA0
+22F7
+0009
+CFF5
+F088
+000A
+CFF5
+F089
+0100
+2982
+0FD2
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0E00
+26F6
+0EA0
+22F7
+0009
+CFF5
+F08A
+000A
+CFF5
+F08B
+0012
+0E20
+0100
+5D82
+E103
+0100
+0E2F
+6F82
+0E2E
+0100
+5D82
+E304
+0100
+5182
+0839
+E203
+0100
+0E2F
+6F82
+0E2E
+0100
+5D82
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0EA0
+26F6
+0E9F
+22F7
+0009
+CFF5
+F088
+000A
+CFF5
+F089
+0100
+2982
+0FD2
+6EF6
+6AF7
+90D8
+36F6
+36F7
+0EA0
+26F6
+0E9F
+22F7
+0009
+CFF5
+F08A
+000A
+CFF5
+F08B
+0012
+0100
+517C
+6E00
+6A01
+3401
+E204
+5000
+08E6
+0E00
+5401
+E203
+0100
+0EE6
+6F7C
+0100
+517D
+6E00
+6A01
+3401
+E204
+5000
+089B
+0E00
+5401
+E203
+0100
+0E9B
+6F7D
+DEB2
+0100
+0E22
+6F83
+DE87
+8084
+0100
+6B81
+0100
+5181
+6AEA
+0F60
+6EE9
+0E00
+22EA
+CFEF
+F082
+0100
+5182
+E106
+0100
+0E3A
+6F82
+0100
+0E19
+6F81
+6AF8
+0100
+5182
+E101
+D0DC
+0E1A
+0100
+5D81
+E301
+D0D7
+0E02
+0100
+5D7E
+E102
+DF84
+D006
+0100
+057E
+E102
+DF33
+D001
+DEF3
+0100
+6B8E
+C088
+F08C
+C089
+F08D
+0100
+518A
+0100
+5D8C
+0100
+518B
+0100
+598D
+E301
+D0AF
+0E02
+0100
+5D7E
+E11D
+C08C
+FFF6
+C08D
+FFF7
+0E01
+0B0F
+E005
+90D8
+32F7
+32F6
+06E8
+E1FB
+0E01
+90D8
+36F6
+36F7
+06E8
+E1FB
+0E00
+26F6
+0E9A
+22F7
+0009
+CFF5
+F084
+000A
+CFF5
+F085
+D03C
+0100
+057E
+E11D
+C08C
+FFF6
+C08D
+FFF7
+0E01
+0B0F
+E005
+90D8
+32F7
+32F6
+06E8
+E1FB
+0E01
+90D8
+36F6
+36F7
+06E8
+E1FB
+0E24
+26F6
+0EA0
+22F7
+0009
+CFF5
+F084
+000A
+CFF5
+F085
+D01C
+C08C
+FFF6
+C08D
+FFF7
+0E01
+0B0F
+E005
+90D8
+32F7
+32F6
+06E8
+E1FB
+0E01
+90D8
+36F6
+36F7
+06E8
+E1FB
+0E88
+26F6
+0EA4
+22F7
+0009
+CFF5
+F084
+000A
+CFF5
+F085
+0100
+518C
+0B01
+E005
+0100
+5184
+0100
+6F80
+D005
+C085
+F000
+6A01
+C000
+F080
+0100
+5180
+6E00
+6A01
+5000
+0B80
+E01D
+0E7F
+0100
+5F80
+0100
+517F
+E009
+0100
+5180
+0800
+E204
+0100
+0780
+DDEB
+D7F8
+D00D
+C08E
+FF83
+0100
+5180
+0800
+E207
+0100
+0780
+9480
+8480
+9480
+8480
+D7F5
+D01B
+0100
+2B80
+0100
+517F
+E00E
+C08E
+FF83
+0100
+5180
+0800
+E207
+0100
+0780
+9480
+8480
+9480
+8480
+D7F5
+D008
+0100
+5180
+0800
+E204
+0100
+0780
+DDC1
+D7F8
+0100
+2B8C
+0E00
+238D
+D747
+0100
+2B81
+0100
+5181
+6AEA
+0F60
+6EE9
+0E00
+22EA
+CFEF
+F082
+D720
+0100
+6B83
+DD8E
+0012
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
+FFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/pled_outputs.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3287 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; routines for display outputs
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 15/01/05
+; last updated: 06/06/08
+; known bugs:
+; ToDo:	More comments
+
+ostc_debug	macro debug_temp
+	movlw	debug_temp
+	call	ostc_debug1
+	endm
+
+ostc_debug1:
+	movwf	debug_temp
+
+	movff	debug_char+4,debug_char+5		; Save for background debugger
+	movff	debug_char+3,debug_char+4
+	movff	debug_char+2,debug_char+3
+	movff	debug_char+1,debug_char+2
+	movff	debug_char+0,debug_char+1
+	movff	debug_temp,debug_char+0
+
+	btfss	debug_mode				; Are we in debugmode?
+	return							; No, return!
+
+	WIN_TOP		.200
+	WIN_LEFT	.100
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movf	debug_char+0,W
+	movwf 	POSTINC2
+	movf	debug_char+1,W
+	movwf 	POSTINC2
+	movf	debug_char+2,W
+	movwf 	POSTINC2
+	movf	debug_char+3,W
+	movwf 	POSTINC2
+	movf	debug_char+4,W
+	movwf 	POSTINC2
+	movf	debug_char+5,W
+	movwf 	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+
+PLED_resetdebugger:
+	call	set_LEDr
+	call	clear_LEDnofly		
+	call	PLED_boot				; PLED boot
+	call	PLED_ClearScreen		; clean up OLED
+
+	WIN_COLOR	color_white
+
+	DISPLAYTEXT	.133
+	DISPLAYTEXT	.134
+	DISPLAYTEXT	.135
+	DISPLAYTEXT	.136				; Display Debug intro
+	
+	WIN_TOP		.100
+	WIN_LEFT	.10
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movf	debug_char+0,W
+	movwf 	POSTINC2
+	movf	debug_char+1,W
+	movwf 	POSTINC2
+	movf	debug_char+2,W
+	movwf 	POSTINC2
+	movf	debug_char+3,W
+	movwf 	POSTINC2
+	movf	debug_char+4,W
+	movwf 	POSTINC2
+	movf	debug_char+5,W
+	movwf 	POSTINC2
+	movlw	'.'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag1,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag2,lo
+	output_8		
+	call	word_processor
+
+	WIN_TOP		.125
+	WIN_LEFT	.10
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	lfsr	FSR2,letter
+	movff	flag3,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag4,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag5,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag6,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag7,lo
+	output_8		
+	call	word_processor
+
+	WIN_TOP		.150
+	WIN_LEFT	.10
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	lfsr	FSR2,letter
+	movff	flag8,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag9,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag10,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag11,lo
+	output_8		
+	movlw	' '
+	movwf	POSTINC2
+	movff	flag12,lo
+	output_8		
+	call	word_processor
+
+PLED_resetdebugger_loop:
+	btfss	switch_left
+	bra		PLED_resetdebugger_loop		; Loop
+	call	clear_LEDy					
+	return
+
+PLED_divemode_mask:					; Displays mask in Dive-Mode
+	WIN_COLOR	color_red
+	DISPLAYTEXTH	.267		; Max Depth
+	DISPLAYTEXT		.86			; Divetime
+	DISPLAYTEXT		.87			; Depth
+	WIN_COLOR	color_white
+	return
+
+PLED_clear_decoarea:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.60
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.239
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.090
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	call	PLED_temp_divemode					; redraw temperature
+	call	PLED_active_gas_divemode			; redraw active Gas
+	return
+
+PLED_display_ndl_mask:
+	; Clear Dekostop and Dekosum
+	rcall	PLED_clear_decoarea	
+
+	WIN_COLOR	color_red
+	DISPLAYTEXT		d'84'			; NoStop
+	WIN_COLOR	color_white
+
+PLED_display_ndl_mask2:
+	; Clears Gradient Factor
+	movlw	d'8'
+	movwf	temp1
+	WIN_TOP		.145
+	WIN_LEFT	.0
+	call	PLED_display_clear_common_y1	
+	return
+
+PLED_display_ndl:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	ostc_debug	'z'		; Sends debug-information to screen if debugmode active
+	
+	WIN_TOP		.185
+	WIN_LEFT	.119
+	WIN_FONT 	FT_MEDIUM
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	char_O_nullzeit,lo				; NDL in minutes
+	output_8
+	movlw	0x27			; "'"
+	movwf	POSTINC2
+	call	word_processor
+	WIN_FONT 	FT_SMALL
+	return
+
+PLED_display_deko_mask:
+	rcall	PLED_clear_decoarea	
+; total deco time word
+	WIN_COLOR	color_red
+	DISPLAYTEXT	d'85'			; DECOSUM
+	WIN_COLOR	color_white
+	return
+
+PLED_display_deko:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	btfsc	menubit					; Divemode menu active?
+	bra		PLED_display_deko1		; Yes, do not display dekostop
+
+	ostc_debug	'y'		; Sends debug-information to screen if debugmode active
+; deco stop word
+	WIN_COLOR	color_red
+	DISPLAYTEXT	d'82'			; DEKOSTOP
+	WIN_COLOR	color_white
+
+	WIN_TOP		.118
+	WIN_LEFT	.94
+	WIN_FONT 	FT_MEDIUM
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	char_O_array_decodepth+0,lo		; Ceiling in m
+	output_99
+	movlw	'm'		;	"m"
+	movwf	POSTINC2
+	movff	char_O_array_decotime,lo		; length of first stop in m
+	output_99
+	movlw	0x27				; "'"
+	movwf	POSTINC2
+	call	word_processor
+	WIN_FONT 	FT_SMALL
+	
+PLED_display_deko1:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	ostc_debug	'x'		; Sends debug-information to screen if debugmode active
+	
+	WIN_TOP		.185
+	WIN_LEFT	.119
+	WIN_FONT 	FT_MEDIUM
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	char_O_ascenttime,lo		; complete ascend time
+	movlw	d'199'							; limit display of total ascend time to 99mins....
+	cpfslt	lo								; skip if 199 (WREG) > lo
+	movwf	lo
+	bcf		leftbind
+	output_8
+	movlw	0x27			; "'"
+	movwf	POSTINC2
+	call	word_processor
+
+	movff	char_O_gradient_factor,lo		; gradient factor
+	GETCUSTOM8	d'8'		; threshold for display
+	cpfslt	lo				; show value?
+	bra		PLED_display_deko2	; Yes
+	; No
+	bra		PLED_display_ndl_mask2	; Clear gradient factor
+
+PLED_display_deko2:
+	ostc_debug	'w'		; Sends debug-information to screen if debugmode active
+;GF
+	WIN_TOP		.145
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'G'
+	movwf	POSTINC2
+	movlw	'F'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movff	char_O_gradient_factor,lo		; gradient factor
+	output_8
+	movlw	'%'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_simulator_data:
+	WIN_TOP		.65
+	WIN_LEFT	.105
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	logbook_temp1,lo
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	'i'
+	movwf	POSTINC2
+	movlw	'n'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor	
+
+	WIN_TOP		.95
+	WIN_LEFT	.100
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	logbook_temp2,lo
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor	
+	return
+
+PLED_display_velocity:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return							; Yes, No update and return!
+
+	ostc_debug	'v'		; Sends debug-information to screen if debugmode active
+	WIN_TOP		.90
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'-'
+	btfsc	neg_flag
+	movlw	'+'
+	movwf	POSTINC2
+	movff	divA+0,lo
+	output_99
+	OUTPUTTEXT	d'83'			; m/min
+	call	word_processor
+	bsf		pled_velocity_display
+	return
+
+PLED_display_velocity_clear:
+	movlw	d'8'
+	movwf	temp1
+	WIN_TOP		.90
+	WIN_LEFT	.0
+	bcf		pled_velocity_display
+	bra		PLED_display_clear_common_y1
+
+PLED_display_wait_clear
+	movlw	d'6'
+	movwf	temp1
+	WIN_TOP		.2
+	WIN_LEFT	.115
+	bra		PLED_display_clear_common_y1
+
+PLED_display_clear_common_y2:				; Clears with y-scale=2
+	WIN_FONT 	FT_MEDIUM
+	bra		PLED_display_clear_common1
+
+PLED_display_clear_common_y1:				; Clears with y-scale=1
+	WIN_FONT 	FT_SMALL
+PLED_display_clear_common1:
+	lfsr	FSR2,letter
+PLED_display_clear_common2:
+	movlw	' '
+	movwf	POSTINC2
+	decfsz	temp1,F
+	bra 	PLED_display_clear_common2
+	call	word_processor
+	WIN_FONT 	FT_SMALL
+	return
+
+PLED_clock:
+	ostc_debug	'c'
+	
+	;If > 0 display surface_interval:2 and clock changing every 5 seconds
+	;use timeout_counter for this
+	WIN_TOP		.50
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+
+	movff	surface_interval+0,lo
+	tstfsz	lo
+	bra		PLED_clock0				; Not Zero, switch between Interval and clock
+	movff	surface_interval+1,lo
+	tstfsz	lo
+	bra		PLED_clock0				; Not Zero, switch between Interval and clock
+	bra		PLED_clock3				; surface_interval=0, always display clock!
+
+PLED_clock0:
+	btfss	show_interval			; Show Interval?
+	bra		PLED_clock2				; No, display clock and reset counter
+
+PLED_clock1:
+	decfsz	timeout_counter,F		; =0?
+	bra		PLED_clock1a			; No...
+	bra		PLED_clock3				; Yes, display clock and reset counter
+
+PLED_clock1a:
+	bsf		show_interval
+	movlw	d'6'
+	cpfslt	timeout_counter			; f < w? -> timeout_counter>5?
+	rcall	PLED_clock_reload_timer	; No, reload counter
+
+	movff	surface_interval+0,lo
+	movff	surface_interval+1,hi
+	call	convert_time			; lo=mins, hi=hours
+
+	movf	hi,W
+	movff	lo,hi
+	movwf	lo					; exchange lo and hi
+
+	movlw	'I'
+	movwf	POSTINC2
+	movlw	'n'
+	movwf	POSTINC2
+	movlw	't'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	hi,lo
+	output_99x
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_clock_reload_timer:
+	bcf		show_interval
+	movlw	d'5'
+	movwf	timeout_counter
+	return
+
+PLED_interval_reload_timer:
+	bsf		show_interval
+	movlw	d'5'
+	movwf	timeout_counter
+	return
+
+PLED_clock2:
+	decfsz	timeout_counter,F		; =0?
+	bra		PLED_clock3				; No...
+	bra		PLED_clock1a			; Yes, display interval and reset counter
+
+PLED_clock3:
+	bcf		show_interval
+	movlw	d'6'
+	cpfslt	timeout_counter			; f < w? -> timeout_counter>5?
+	rcall	PLED_interval_reload_timer; No, reload counter
+
+	movff	hours,lo
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	mins,lo
+	output_99x
+	movlw	':'
+	movwf	POSTINC2
+	movff	secs,lo
+	output_99x
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_logbook_cursor:
+
+PLED_menu_cursor:
+	WIN_TOP		.35
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.65
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.95
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.125
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.155
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_TOP		.185
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	movff	menupos,temp1
+	dcfsnz	temp1,F
+	movlw	d'35'
+	dcfsnz	temp1,F
+	movlw	d'65'
+	dcfsnz	temp1,F
+	movlw	d'95'
+	dcfsnz	temp1,F
+	movlw	d'125'
+	dcfsnz	temp1,F
+	movlw	d'155'
+	dcfsnz	temp1,F
+	movlw	d'185'
+	
+	movff	WREG,win_top
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB7
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_menu_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor
+	DISPLAYTEXT	.5			; Menu:
+	WIN_INVERT	.0	; Init new Wordprocessor
+	DISPLAYTEXT .6			; Logbook
+	DISPLAYTEXT .7			; Gas Setup
+	DISPLAYTEXT .9			; Reset all
+	DISPLAYTEXT .10			; Setup...
+	DISPLAYTEXT	.142		; More...
+	DISPLAYTEXT .11			; Exit
+	return	
+
+PLED_setup_menu_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.98			; Setup Menu:
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXT .99			; Custom FunctionsI
+	DISPLAYTEXT	.153		; Custom FunctionsII
+	DISPLAYTEXTH	.276	; Salinity:
+	DISPLAYTEXT .100		; Decotype:
+	DISPLAYTEXT	.142		; More...
+	DISPLAYTEXT .11			; Exit
+	return	
+
+PLED_more_setup_menu_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXTH	.258	; Setup Menu 2:
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXTH	.257	; Date format:
+	DISPLAYTEXT		.129	; Debug: 
+	
+	
+	DISPLAYTEXT .11			; Exit
+	return	
+
+PLED_more_menu_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor
+	DISPLAYTEXT	.144		; Menu 2:
+	WIN_INVERT	.0	; Init new Wordprocessor
+	DISPLAYTEXT .8			; Set Time
+	DISPLAYTEXT	.110		; Const. ppO2 Setup
+	DISPLAYTEXT	.113		; Battery Info
+	DISPLAYTEXT	.247		; Simulator
+
+	DISPLAYTEXT .11			; Exit
+	return
+
+PLED_reset_menu_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.28				; Reset Menu
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXT	.21				; Cancel Reset
+	DISPLAYTEXT	.245			; Reset CF,Gases & Deco
+	DISPLAYTEXTH .284			; Reset Logbook
+	DISPLAYTEXTH .285			; Reboot OSTC
+	DISPLAYTEXTH .286			; Reset Decodata
+	DISPLAYTEXT .11			; Exit
+	return
+
+PLED_simulator_mask:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXT	.248		; OSTC Simulator
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXT	.249		; Start Dive
+	DISPLAYTEXTH	.277	; Bottom Time:
+	DISPLAYTEXTH	.278	; Max. Depth:
+	DISPLAYTEXTH	.279	; Calculate Deco
+	DISPLAYTEXTH	.280	; Show Decoplan
+	DISPLAYTEXT .11			; Exit
+	return
+	
+
+
+
+PLED_temp_surfmode:
+	ostc_debug	'e'
+	movff	temperature+0,last_temperature+0
+	movff	temperature+1,last_temperature+1
+	WIN_TOP		.100
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'-'
+	btfsc	neg_temp			; Show "-"?
+	movwf	POSTINC2			; Yes
+	movff	temperature+0,lo
+	movff	temperature+1,hi
+	movlw	d'3'
+	movwf	ignore_digits
+	bsf		leftbind			; left orientated output
+	output_16dp	d'2'
+	bcf		leftbind
+	movlw	'°'
+	movwf	POSTINC2
+	movlw	'C'
+	movwf	POSTINC2
+	movlw	' '						
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_temp_divemode:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	ostc_debug	'u'		; Sends debug-information to screen if debugmode active
+
+; temperature
+	movff	temperature+0,last_temperature+0
+	movff	temperature+1,last_temperature+1
+
+	WIN_TOP		.216
+	WIN_LEFT	.65
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'-'
+	btfsc	neg_temp			; Show "-"?
+	movwf	POSTINC2			; Yes
+	movff	temperature+0,lo
+	movff	temperature+1,hi
+	movlw	d'3'
+	movwf	ignore_digits
+	bsf		leftbind			; left orientated output
+	output_16dp	d'2'
+	bcf		leftbind
+	movlw	'°'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_show_ppO2:					; Show ppO2
+	ostc_debug	't'		; Sends debug-information to screen if debugmode active
+	WIN_TOP		.120
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'p'
+	movwf	POSTINC2
+	movlw	'p'
+	movwf	POSTINC2
+	movlw	'O'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movff	xC+0,lo
+	movff	xC+1,hi
+	bsf		ignore_digit4
+	output_16dp	d'1'
+	bcf		ignore_digit4
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_show_ppO2_clear:					; Clear ppO2
+	movlw	d'10'
+	movwf	temp1
+	WIN_TOP		.120
+	WIN_LEFT	.0
+	call	PLED_display_clear_common_y1
+	return
+
+PLED_active_gas_clear:					; clears active gas!
+	WIN_TOP		.192
+	WIN_LEFT	.65
+	movlw	d'5'
+	movwf	temp1
+	bra		PLED_display_clear_common_y1; also returns!
+
+PLED_active_gas_divemode:				; Displays current gas (e.g. 40/20) if a) He>0 or b) O2>Custom9
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	return
+
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	ostc_debug	's'		; Sends debug-information to screen if debugmode active
+; gas
+	WIN_TOP		.192
+	WIN_LEFT	.65
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	movlw	d'100'						; 100% in the tank
+	movff	char_I_N2_ratio,lo			; minus N2
+	bsf		STATUS,C					; set borrow bit
+	subfwb	lo,W
+	movff	char_I_He_ratio,lo			; minus He
+	bsf		STATUS,C					; set borrow bit
+	subfwb	lo,F						; =% O2
+	GETCUSTOM8		d'9'				; get oxygen treshold
+	movff	char_I_He_ratio,hi			; He ratio
+	cpfsgt	lo
+	bra		PLED_active_gas_divemode2		; Check He
+	bra		PLED_active_gas_divemode3		; Skip He check, display gas
+	
+PLED_active_gas_divemode2:
+	tstfsz	hi							; He = 0 %
+	bra		PLED_active_gas_divemode3	; display gas
+										; O2 below treshold, He=0 -> Skip display!
+	movlw	d'5'
+	movwf	temp1
+	bra		PLED_display_clear_common_y1		; also returns!
+
+PLED_active_gas_divemode3:
+	movlw	d'21'
+	cpfseq	lo				; Air? (O2=21%)
+	bra		PLED_active_gas_divemode4 ; No!
+	tstfsz	hi				; Air? (He=0%)
+	bra		PLED_active_gas_divemode4 ; No!
+	
+							; Yes, display "Air" instead of 21/0
+	lfsr	FSR2,letter
+	OUTPUTTEXTH		d'264'			;"Air  "
+	call	word_processor
+	return
+
+PLED_active_gas_divemode4:
+	lfsr	FSR2,letter
+	bsf		leftbind			; left orientated output
+	output_8					; O2 ratio is still in "lo"
+	movlw	'/'
+	movwf	POSTINC2
+	movff	char_I_He_ratio,lo		; copy He ratio into lo
+	output_8
+	movlw	' '
+	movwf	POSTINC2
+	bcf		leftbind
+	call	word_processor
+	return
+
+PLED_display_decotype_surface:
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	clrf	EEADRH
+	read_int_eeprom d'34'		; Read deco data	
+	tstfsz	EEDATA
+	bra		show_decotype_surface2
+
+;ZH-L16
+	WIN_TOP		.125
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter		
+	movlw	'O'
+	movwf	POSTINC2
+	call	word_processor
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_TOP		.150
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter		
+	movlw	'C'
+	movwf	POSTINC2
+	call	word_processor
+	return		
+show_decotype_surface2:
+	decf	EEDATA,F
+	tstfsz	EEDATA
+	bra		show_decotype_surface3
+; Gauge
+	return
+	
+show_decotype_surface3:
+	decf	EEDATA,F
+	tstfsz	EEDATA
+	bra	show_decotype_surface4
+	; const. ppO2
+	WIN_TOP		.125
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter		
+	movlw	'C'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	call	word_processor
+	WIN_TOP		.150
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter		
+	movlw	'C'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	call	word_processor
+	return
+show_decotype_surface4:
+	decf	EEDATA,F
+	tstfsz	EEDATA
+	bra		show_decotype_surface5
+; Apnoe
+	return
+show_decotype_surface5:
+	decf	EEDATA,F
+	tstfsz	EEDATA
+	bra		show_decotype_surface6
+	; Multi-GF OC
+	WIN_TOP		.125
+	lfsr	FSR2,letter		
+	movlw	'G'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	call	word_processor
+	WIN_TOP		.150
+	lfsr	FSR2,letter		
+	movlw	'F'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	call	word_processor
+	return
+
+show_decotype_surface6:
+	; Multi-GF CC
+	WIN_TOP		.125
+	lfsr	FSR2,letter		
+	movlw	'G'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	call	word_processor
+	WIN_TOP		.150
+	lfsr	FSR2,letter		
+	movlw	'F'
+	movwf	POSTINC2
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	call	word_processor
+	return
+
+
+PLED_active_gas_surfmode:				; Displays start gas/SP 1
+	ostc_debug	'q'		; Sends debug-information to screen if debugmode active
+		
+	btfsc	FLAG_apnoe_mode				; In Apnoe mode?
+	return								; Yes, return
+
+	btfsc	gauge_mode					; In Gauge mode?
+	return								; Yes, return
+
+	btfss	FLAG_const_ppO2_mode	; are we in const. ppO2 mode?	
+	bra		PLED_active_gas_surfmode2	; No, display gases
+
+; In CC Mode
+	WIN_TOP		.135
+	WIN_LEFT	.90
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter		
+	read_int_eeprom	d'36'
+	movff	EEDATA,lo				; copy to lo
+	clrf	hi
+	output_16dp	d'3'		; outputs into Postinc2!
+	movlw	'B'
+	movwf	POSTINC2
+	movlw	'a'
+	movwf	POSTINC2
+	movlw	'r'
+	movwf	POSTINC2
+	bcf		leftbind
+	call	word_processor
+	bra		PLED_active_gas_surfmode_exit
+
+PLED_active_gas_surfmode2:
+	WIN_TOP		.130
+	WIN_LEFT	.100
+	WIN_FONT 	FT_MEDIUM
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	read_int_eeprom 	d'33'			; Read byte (stored in EEDATA)
+	movff	EEDATA,active_gas			; Read start gas (1-5)
+
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'7'						; = address for He ratio
+	movwf	EEADR
+	call	read_eeprom					; Read He ratio
+	movff	EEDATA,char_I_He_ratio		; And copy into hold register
+
+	decf	active_gas,W				; Gas 0-4
+	mullw	d'4'
+	movf	PRODL,W			
+	addlw	d'6'						; = address for O2 ratio
+	movwf	EEADR
+	call	read_eeprom					; Read O2 ratio
+	movff	EEDATA, char_I_O2_ratio		; O2 ratio
+	movff	char_I_He_ratio, wait_temp	; copy into bank1 register
+	bsf		STATUS,C					; Borrow bit
+	movlw	d'100'						; 100%
+	subfwb	wait_temp,W					; minus He
+	bsf		STATUS,C					; Borrow bit
+	subfwb	EEDATA,F					; minus O2
+	movff	EEDATA, char_I_N2_ratio		; = N2!
+
+	movlw	d'100'						; 100% in the tank
+	movff	char_I_N2_ratio,lo			; minus N2
+	bsf		STATUS,C					; set borrow bit
+	subfwb	lo,W
+	movff	char_I_He_ratio,lo			; minus He
+	bsf		STATUS,C					; set borrow bit
+	subfwb	lo,F						; =% O2
+
+	movff	char_I_He_ratio,hi			; Copy into Bank1 register
+
+	movlw	d'21'
+	cpfseq	lo				; Air? (O2=21%)
+	bra		PLED_active_gas_surfmode4 ; No!
+	tstfsz	hi							; Air? (He=0%)
+	bra		PLED_active_gas_surfmode4 ; No!
+	
+							; Yes, display "Air" instead of 21/0
+	DISPLAYTEXTH		d'265'		;"Air  ", y-scale=2
+	bra		PLED_active_gas_surfmode_exit
+
+PLED_active_gas_surfmode4:
+	lfsr	FSR2,letter
+	bsf		leftbind			; left orientated output
+	output_8					; O2 ratio is still in "lo"
+	movlw	'/'
+	movwf	POSTINC2
+	movff	char_I_He_ratio,lo		; copy He ratio into lo
+	output_8
+	bcf		leftbind
+	call	word_processor
+	bra		PLED_active_gas_surfmode_exit
+
+PLED_active_gas_surfmode_exit:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.122
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.175
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.82
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame
+	return
+
+PLED_confirmbox:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.68
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.146
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.34
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.101
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.70
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.144
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.35
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.100
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame
+	DISPLAYTEXT	.143			; Confirm:
+	DISPLAYTEXT	.145			; Cancel
+	DISPLAYTEXT	.146			; OK!
+
+	movlw		d'1'
+	movwf		menupos
+
+PLED_confirmbox2:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.96
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.143
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.39
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.51
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+
+	movff	menupos,temp1
+	movlw	d'96'
+	dcfsnz	temp1,F
+	movlw	d'96'
+	dcfsnz	temp1,F
+	movlw	d'120'
+	movff	WREG,win_top
+	WIN_LEFT	.39
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB7			; Arrow for menu
+	movwf	POSTINC2
+	call	word_processor
+
+	bcf			sleepmode					; clear some flags
+	bcf			menubit2
+	bcf			menubit3
+	bcf			switch_right
+	bcf			switch_left
+	clrf		timeout_counter2
+	WAITMS		d'100'
+
+PLED_confirmbox_loop:
+	call		check_switches_logbook
+	
+	btfsc		menubit3					; SET/MENU?
+	bra			PLED_confirmbox_move_cursor; Move Cursor
+	btfsc		menubit2					; ENTER?
+	bra			PLED_confirmbox_menu_do		; Do task
+
+	btfsc		onesecupdate
+	call		timeout_surfmode			; timeout
+
+	btfsc		onesecupdate
+	call		set_dive_modes				; check, if divemode must be entered
+	bcf			onesecupdate				; one second update
+
+	btfsc		sleepmode					; Timeout?
+	bra			PLED_confirmbox_cancel		; back with cancel
+	btfsc		divemode
+	bra			PLED_confirmbox_cancel		; back with cancel
+
+	bra			PLED_confirmbox_loop		; wait for something to do
+
+PLED_confirmbox_cancel:
+	retlw	.0
+PLED_confirmbox_ok:
+	retlw	.1
+
+PLED_confirmbox_menu_do:
+	dcfsnz	menupos,F
+	bra		PLED_confirmbox_cancel
+	dcfsnz	menupos,F
+	bra		PLED_confirmbox_ok
+	bra		PLED_confirmbox_cancel
+
+PLED_confirmbox_move_cursor:
+	incf	menupos,F
+	movlw	d'3'						; number of menu options+1
+	cpfseq	menupos						; =limit?
+	bra		PLED_confirmbox_move_cursor2	; No!
+	movlw	d'1'							; Yes, reset to position 1!
+	movwf	menupos
+PLED_confirmbox_move_cursor2:
+	bra		PLED_confirmbox2		; Return to Profile Menu, also updates cursor
+
+
+PLED_depth:
+	ostc_debug	'r'		; Sends debug-information to screen if debugmode active
+	movff	rel_pressure+1,hi
+	movff	rel_pressure+0,lo
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+
+	movlw	.039
+	cpfslt	hi
+		bra	depth_greater_99_84mtr
+
+	btfsc	depth_greater_100m			; Was depth>100m during last call
+	call	PLED_clear_depth			; Yes, clear depth area
+	bcf		depth_greater_100m			; Do this once only...
+
+	lfsr	FSR2,letter
+
+	movlw	HIGH	d'1000'
+	movwf	sub_a+1
+	movlw	LOW		d'1000'
+	movwf	sub_a+0
+	movff	hi,sub_b+1
+	movff	lo,sub_b+0
+	incf	sub_b+0,F
+	movlw	d'0'
+	addwfc	sub_b+1,F		; Add 1mBar offset
+	call	sub16					; sub_c = sub_a - sub_b
+	btfss	neg_flag				; Depth lower then 10m?
+	rcall	depth_less_10mtr		; Yes, add extra space
+
+	WIN_TOP		.24
+	WIN_LEFT	.0
+	WIN_FONT 	FT_LARGE
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	movlw	HIGH	d'99'
+	movwf	sub_a+1
+	movlw	LOW		d'99'
+	movwf	sub_a+0
+	movff	hi,sub_b+1
+	movff	lo,sub_b+0
+	call	sub16					; sub_c = sub_a - sub_b
+	btfss	neg_flag				; Depth lower then 1m?
+	bra		pled_depth2				; Yes, display manual Zero
+
+	bsf		leftbind
+	bsf		ignore_digit4
+	output_16		; Full meters in Big font
+	bcf		leftbind
+	bra		pled_depth3
+
+pled_depth2:
+	movlw	'0'
+	movwf	POSTINC2
+pled_depth3:
+	call	word_processor
+	bcf		ignore_digit4
+
+	WIN_FONT 	FT_MEDIUM
+	WIN_TOP		.50
+	WIN_LEFT	.40
+	WIN_COLOR	color_white
+
+	movff	rel_pressure+1,hi
+	movff	rel_pressure+0,lo
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+	lfsr	FSR2,letter
+	movlw	'.'
+	movwf	POSTINC2
+
+	movlw	HIGH	d'9'
+	movwf	sub_a+1
+	movlw	LOW		d'9'
+	movwf	sub_a+0
+	movff	hi,sub_b+1
+	movff	lo,sub_b+0
+	call	sub16					; sub_c = sub_a - sub_b
+	btfss	neg_flag				; Depth lower then 0.1m?
+	bra		pled_depth4				; Yes, display manual Zero
+
+	movlw	d'4'
+	movwf	ignore_digits
+	bsf		ignore_digit5
+	output_16dp	d'0'
+	bra		pled_depth5
+
+pled_depth4:
+	movlw	'0'
+	movwf	POSTINC2
+
+pled_depth5:
+	call	word_processor			; decimeters in medium font
+	bcf		ignore_digit5
+	WIN_FONT 	FT_SMALL
+	return
+
+depth_greater_99_84mtr:			; Display only in full meters
+	btfss	depth_greater_100m			; Is depth>100m already?
+	call	PLED_clear_depth			; No, clear depth area and set flag
+	; Depth is already in hi:lo
+	; Show depth in Full meters
+	; That means ignore figure 4 and 5
+	lfsr	FSR2,letter
+	WIN_TOP		.24
+	WIN_LEFT	.0
+	WIN_FONT 	FT_LARGE
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	bsf		ignore_digit4
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	call	word_processor
+	bcf		ignore_digit4
+	WIN_FONT 	FT_SMALL
+	return
+	
+depth_less_10mtr:
+	movlw	' '
+	movwf	POSTINC2
+	return
+
+PLED_clear_depth			; No, clear depth area and set flag
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.24
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.90
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.0
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.90
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	bsf		depth_greater_100m			; Set Flag
+	return
+
+
+PLED_desaturation_time:	
+	ostc_debug	'h'
+	WIN_TOP		.150
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'14'				; Desat
+	movlw		' '
+	movwf		POSTINC2
+	movff		int_O_desaturation_time+0,lo			; divide by 60...
+	movff		int_O_desaturation_time+1,hi
+	call		convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	bsf			leftbind
+	movf		lo,W
+	movff		hi,lo
+	movwf		hi							; exchange lo and hi...
+	output_8								; Hours
+	movlw		':'
+	movwf		POSTINC2
+	movff		hi,lo					; Minutes
+	output_99x
+	bcf		leftbind
+	call	word_processor
+	return
+
+PLED_nofly_time:	
+	ostc_debug	'g'
+	WIN_TOP		.125
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	OUTPUTTEXT	d'35'				; NoFly
+	movlw		' '
+	movwf		POSTINC2
+	movff		nofly_time+0,lo			; divide by 60...
+	movff		nofly_time+1,hi
+	call		convert_time				; converts hi:lo in minutes to hours (hi) and minutes (lo)
+	bsf			leftbind
+	movf		lo,W
+	movff		hi,lo
+	movwf		hi							; exchange lo and hi...
+	output_8								; Hours
+	movlw		':'
+	movwf		POSTINC2
+	movff		hi,lo					; Minutes
+	decf		lo,F
+	btfsc		lo,7					; keep Nofly time
+	clrf		lo
+	output_99x
+	bcf		leftbind
+	call	word_processor
+	return
+
+
+update_surf_press:
+	btfsc	premenu		; Do not update when "Menu?" is displayed!
+	return
+
+	ostc_debug	'b'		; Sends debug-information to screen if debugmode active
+	WIN_TOP		.25
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	amb_pressure+0,lo
+	movff	amb_pressure+1,hi
+	bsf		leftbind
+	output_16
+	bcf		leftbind
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	'b'
+	movwf	POSTINC2
+	movlw	'a'
+	movwf	POSTINC2
+	movlw	'r'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+update_batt_voltage_divemode:
+
+update_batt_voltage:
+	ostc_debug	'f'
+
+	GETCUSTOM8	d'31'			; =1 if battery voltage should be visible
+	movwf	lo
+	movlw	d'1'
+	cpfseq	lo					; =1?
+	bra		update_batt_voltage2	; No, show symbol
+
+	WIN_TOP		.175
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	batt_voltage+0,lo
+	movff	batt_voltage+1,hi
+	movlw	d'1'
+	movwf	ignore_digits
+	bsf		ignore_digit5		; do not display mV
+	bsf		leftbind
+	output_16dp	d'2'			; e.g. 3.45V
+	bcf		leftbind
+	movlw	'V'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+	
+update_batt_voltage2:
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.174
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.194
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.0
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.31
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame
+
+; 3600-Vbatt
+	movlw	LOW		d'3600'
+	movwf	sub_a+0
+	movlw	HIGH	d'3600'
+	movwf	sub_a+1
+	movff	batt_voltage+0,sub_b+0
+	movff	batt_voltage+1,sub_b+1
+	call	sub16				;  sub_c = sub_a - sub_b
+; Battery full (>3600mV?
+	btfsc	neg_flag
+	bra		update_batt_voltage2_full
+
+; Vbatt-3000
+	movlw	LOW		d'3000'
+	movwf	sub_b+0
+	movlw	HIGH	d'3000'
+	movwf	sub_b+1
+	movff	batt_voltage+0,sub_a+0
+	movff	batt_voltage+1,sub_a+1
+	call	sub16				;  sub_c = sub_a - sub_b
+; Battery lower then 3000mV?
+	btfsc	neg_flag
+	bra		update_batt_voltage2_empty
+
+; Battery is between 3000 and 3600mV
+; sub_c:2 is between 0 and 600	
+	movff	sub_c+0,xA+0
+	movff	sub_c+1,xA+1
+	movlw	d'20'
+	movwf	xB+0
+	clrf	xB+1
+	call	div16x16					;xA/xB=xC with xA as remainder 	
+; xC is between 0 and 30
+	movff	xC+0,wait_temp				;save value
+
+	movlw	d'2'
+	cpfsgt	wait_temp
+	movwf	wait_temp					; Minimum = 2
+
+
+update_batt_voltage2a:
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.181
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.187
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.31
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.33
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame			; Empty cap
+
+update_batt_voltage3:
+	GETCUSTOM8	d'34'		; Color battery
+	movff	WREG,box_temp+0		; Color Data
+	movlw	.175
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.193
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.1
+	movff	WREG,box_temp+3		; column left (0-159)
+	movff	wait_temp,box_temp+4		; column right (0-159)
+	call	PLED_box
+
+	WIN_COLOR	color_white		; Reset Color
+	return
+		
+update_batt_voltage2_empty:
+	movlw	d'1'
+	movwf	wait_temp
+	bra		update_batt_voltage2a
+
+update_batt_voltage2_full:
+	movlw	d'30'
+	movwf	wait_temp
+
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.181
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.187
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.31
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.33
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box			; Full Cap
+	bra		update_batt_voltage3
+
+PLED_convert_date:	; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2
+	read_int_eeprom d'91'			; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
+	tstfsz	EEDATA
+	bra		PLED_convert_date1
+
+; Use MMDDYY
+	movff	convert_value_temp+0,lo			;month
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+1,lo			;day
+	bra 	PLED_convert_date1_common		;year
+
+PLED_convert_date1:
+	read_int_eeprom d'91'			; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
+	decfsz	EEDATA,F
+	bra		PLED_convert_date2
+
+; Use DDMMYY
+	movff	convert_value_temp+1,lo			;day
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+0,lo			;month
+
+PLED_convert_date1_common:
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+2,lo			;year
+	bsf		leftbind
+	output_99x
+	return
+
+PLED_convert_date2:
+; Use YYMMDD
+	movff	convert_value_temp+2,lo			;year
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+0,lo			;month
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+1,lo			;day
+	bsf		leftbind
+	output_99x
+	return
+
+PLED_convert_date_short:	; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2
+	read_int_eeprom d'91'			; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
+	tstfsz	EEDATA
+	bra		PLED_convert_date_short1
+
+; Use MMDDYY
+PLED_convert_date_short_common:
+	movff	convert_value_temp+0,lo			;month
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+1,lo			;day
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	return
+
+PLED_convert_date_short1:
+	read_int_eeprom d'91'			; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
+	decfsz	EEDATA,F
+	bra		PLED_convert_date_short_common	; Use YYMMDD
+
+; Use DDMMYY
+	movff	convert_value_temp+1,lo			;day
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	movlw	'/'
+	movwf	POSTINC2
+	movff	convert_value_temp+0,lo			;month
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	return
+
+update_date:
+	ostc_debug	'd'
+	WIN_TOP		.75
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white		
+	lfsr	FSR2,letter
+
+	movff	month,convert_value_temp+0
+	movff	day,convert_value_temp+1
+	movff	year,convert_value_temp+2
+	call	PLED_convert_date		; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2	
+	call	word_processor
+	return
+
+PLED_menu_clear:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.0
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.26
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.65
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.100	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	return
+
+PLED_max_pressure:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	ostc_debug	'p'		; Sends debug-information to screen if debugmode active
+
+	WIN_TOP		.184
+	WIN_LEFT	.0
+	WIN_FONT 	FT_MEDIUM
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	max_pressure+0,lo
+	movff	max_pressure+1,hi
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+	bsf		leftbind
+	bsf		ignore_digit5		; do not display 1cm depth
+	output_16dp	d'3'
+	bcf		leftbind
+	bcf		show_last3
+	call	word_processor
+	WIN_FONT 	FT_SMALL
+	return
+
+PLED_divemins:
+	btfsc	menubit					; Divemode menu active?
+	return							; Yes, do not update divetime
+
+	ostc_debug	'A'		; Sends debug-information to screen if debugmode active
+
+	btfsc	gauge_mode				; different display in gauge mode
+	bra		PLED_divemins_gauge
+
+	btfsc	FLAG_apnoe_mode			; different display in apnoe mode
+	bra		PLED_divemins_apnoe
+
+	GETCUSTOM8	d'38'		; Show seconds (=1?)
+	movwf	lo
+	movlw	d'1'
+	cpfseq	lo					; =1?
+	bra		PLED_divemins2		; No, minutes only
+	bra		PLED_divemins_gauge	; Yes, use Gauge routine
+	
+PLED_divemins2:
+	movff	divemins+0,lo
+	movff	divemins+1,hi
+	bcf		leftbind
+	lfsr	FSR2,letter
+	output_16_3	; displays only last three figures from a 16Bit value (0-999)
+	WIN_TOP		.20
+	WIN_LEFT	.120
+	WIN_FONT	FT_MEDIUM
+	WIN_COLOR	color_white
+	call	word_processor
+	WIN_FONT	FT_SMALL
+	return
+
+PLED_display_apnoe_surface:
+	btfsc	menubit					; Divemode menu active?
+	return							; Yes, do not display surface mode timeout
+
+	WIN_COLOR	color_red
+	DISPLAYTEXT	d'140'			; "SURFACE"
+	WIN_COLOR	color_white
+
+	WIN_TOP		.85
+	WIN_LEFT	.90
+	WIN_FONT	FT_MEDIUM
+	WIN_COLOR	color_white
+
+	movff	apnoe_surface_mins,lo
+	bcf		leftbind
+	lfsr	FSR2,letter
+	output_8
+	movlw	':'
+	movwf	POSTINC2
+	movff	apnoe_surface_secs,lo
+	output_99x
+	call	word_processor
+	WIN_FONT	FT_SMALL
+	return
+
+PLED_apnoe_clear_surface:
+	; Clear Surface timer....
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.60
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.119
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.90
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	return
+
+
+PLED_display_apnoe_descent:
+	WIN_COLOR	color_red
+	DISPLAYTEXT		d'139'			; "Descent"
+	WIN_COLOR	color_white
+
+	WIN_TOP		.145
+	WIN_LEFT	.90
+	WIN_FONT	FT_MEDIUM
+	WIN_COLOR	color_white
+
+	movff	apnoe_mins,lo
+	lfsr	FSR2,letter
+	output_8
+	movlw	':'
+	movwf	POSTINC2
+	movff	apnoe_secs,lo
+	output_99x
+	call	word_processor
+	WIN_FONT	FT_SMALL
+	return
+	
+PLED_divemins_apnoe:
+
+PLED_divemins_gauge:
+	movff	divemins+0,lo
+	movff	divemins+1,hi
+	bcf		leftbind
+	bsf		show_last3
+	lfsr	FSR2,letter
+	output_16_3					;Displays only 0...999
+	movlw	':'
+	movwf	POSTINC2
+	movff	divesecs,lo
+	output_99x
+	WIN_TOP		.20
+	WIN_LEFT	.90
+	WIN_FONT	FT_MEDIUM
+	WIN_COLOR	color_white
+	call	word_processor
+	bcf		show_last3
+	WIN_FONT	FT_SMALL
+	return
+
+PLED_stopwatch_remove:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.54
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.102
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.062
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	return
+	
+
+PLED_stopwatch_show:
+	btfsc	menubit						; Divemode menu active?
+	return								; Yes, No update and return!
+
+	ostc_debug	'V'		; Sends debug-information to screen if debugmode active
+	; Stopwatch
+
+	WIN_COLOR	color_red
+	DISPLAYTEXTH	d'283'			; Counter
+	WIN_COLOR	color_white
+
+	WIN_TOP		.80
+	WIN_LEFT	.110
+	WIN_FONT	FT_SMALL
+	WIN_COLOR	color_white
+
+
+
+	lfsr	FSR2,letter
+	movff	average_divesecs+0,lo				; Stopwatch
+	movff	average_divesecs+1,hi				; Stopwatch
+	movlw	d'2'
+	subwf	lo,F
+	movlw	d'0'
+	subwfb	hi,F						; Subtract 2 seconds
+
+	call	convert_time				; converts hi:lo in seconds to mins (hi) and secs (lo)
+
+	movff	lo,wait_temp
+	movff	hi,lo
+	clrf	hi	
+
+	movlw	d'0'
+	bcf		leftbind
+	bsf		show_last3
+	output_16_3					;Displays only 0...999
+	movlw	':'
+	movwf	POSTINC2
+	movff	wait_temp,lo
+	output_99x
+	bcf		leftbind
+	call	word_processor
+
+	ostc_debug	'U'				; Sends debug-information to screen if debugmode active
+
+	WIN_TOP		.80
+	WIN_LEFT	.62
+	WIN_FONT	FT_SMALL
+	WIN_COLOR	color_white
+
+	lfsr	FSR2,letter
+	movff	avr_rel_pressure+0,lo
+	movff	avr_rel_pressure+1,hi
+	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+	bsf		leftbind
+	bsf		ignore_digit5		; do not display 1cm depth
+	output_16dp	d'3'
+	bcf		leftbind
+	movlw	'm'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+
+PLED_serial:			; Writes OSTC #Serial and Firmware version in surfacemode
+	ostc_debug	'a'		; Sends debug-information to screen if debugmode active
+	WIN_TOP		.0
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+
+	lfsr	FSR2,letter
+	OUTPUTTEXTH		d'262'			; "OSTC "
+	clrf	EEADRH
+	clrf	EEADR				; Get Serial number LOW
+	call	read_eeprom					; read byte
+	movff	EEDATA,lo
+	incf	EEADR,F				; Get Serial number HIGH
+	call	read_eeprom					; read byte
+	movff	EEDATA,hi
+
+	bsf		leftbind
+	output_16
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'V'
+	movwf	POSTINC2
+	movlw	softwareversion_x
+	movwf	lo
+	bsf		leftbind
+	output_8
+	movlw	'.'
+	movwf	POSTINC2
+	movlw	softwareversion_y
+	movwf	lo
+	bsf		leftbind
+	output_99x
+	bcf		leftbind
+	call	word_processor
+	return
+
+PLED_divemode_menu_mask_first:			; Write Divemode menu1 mask
+	ostc_debug	'o'		; Sends debug-information to screen if debugmode active
+	call	PLED_menu_clear			; clear "Menu?"
+	DISPLAYTEXT	.31					;"Show Deco"
+
+	btfsc	FLAG_const_ppO2_mode	; are we in ppO2 mode?
+	bra		PLED_divemode_menu_mask_first2
+; in OC Mode
+	DISPLAYTEXT	.32					;"Gaslist"
+	DISPLAYTEXT	.122				; "Set Gas"
+	bra		PLED_divemode_menu_mask_first3
+
+PLED_divemode_menu_mask_first2:
+; in CC Mode
+	DISPLAYTEXT	.238				; "SetPoint"
+	DISPLAYTEXT	.137				; "Bailout"
+
+PLED_divemode_menu_mask_first3:
+; In all modes
+	DISPLAYTEXT	.33					;"More"
+	DISPLAYTEXT	.34					;"Exit"
+	return							
+
+PLED_divemode_menu_mask_second:			; Write Divemode menu1 mask
+	ostc_debug	'o'		; Sends debug-information to screen if debugmode active
+	DISPLAYTEXT	.240				;"Graphs"
+	DISPLAYTEXT	.241				;"Display"
+	DISPLAYTEXTH .281				;"L. Tissue"
+	DISPLAYTEXT	.147				;"Stopwat."
+	DISPLAYTEXT	.244				;"Exit"
+	return
+
+PLED_divemode_set_xgas:				; Displayes the "Set Gas" menu
+	WIN_LEFT	.100
+	WIN_TOP		.0
+	WIN_FONT	FT_SMALL
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter	
+	movlw	'S'
+	movwf	POSTINC2
+	movlw	'e'
+	movwf	POSTINC2
+	movlw	'l'
+	movwf	POSTINC2
+	read_int_eeprom	d'24'			; Get Gas6 %O2
+	movff	EEDATA,lo
+	bcf		leftbind
+	output_99					; outputs into Postinc2!
+	movlw	'/'
+	movwf	POSTINC2
+	read_int_eeprom	d'25'			; Get Gas6 %He
+	movff	EEDATA,lo
+	output_99					; outputs into Postinc2!
+	call	word_processor
+	DISPLAYTEXT	.123			; O2 +
+	DISPLAYTEXT	.124			; O2 -
+	DISPLAYTEXT	.125			; He +
+	DISPLAYTEXT	.126			; He -
+	return
+
+PLED_divemode_simulator_mask:
+	DISPLAYTEXT	.254			; EXIT
+	DISPLAYTEXT	.250			; + 1m
+	DISPLAYTEXT	.251			; - 1m
+	DISPLAYTEXT	.252			; +10m
+	DISPLAYTEXT	.253			; -10m
+	return
+
+PLED_decoplan_bargraph:
+	movlw	.255
+	movff	WREG,box_temp+0			; Data
+	movff	win_top,box_temp+1		; row top (0-239)
+	movff	win_top,box_temp+2		; 
+	movlw	d'20'
+	addwf	box_temp+2,F			; row bottom (0-239)
+	movlw	.122
+	movff	WREG,box_temp+3			; column left (0-159)
+	addwf	lo,F					; Add time offset
+	decf	lo,F					; minus one
+	movlw	d'138'					; Limit length (16min)
+	cpfslt	lo
+	movwf	lo					
+	movff	lo,box_temp+4			; column right (0-159)
+	call	PLED_box
+	
+	movlw	.0
+	movff	WREG,box_temp+0			; Data
+	movff	win_top,box_temp+1		; row top (0-239)
+	movff	win_top,box_temp+2		; 
+	movlw	d'20'
+	addwf	box_temp+2,F			; row bottom (0-239)
+	movff	lo,box_temp+3			; 
+	incf	box_temp+3,F			; column left (0-159)
+	movlw	.139
+	movff	WREG,box_temp+4			; column right (0-159)
+	call	PLED_box
+	return
+
+PLED_decoplan_delete:			; Delete unused rows
+	movlw	.0
+	movff	WREG,box_temp+0	; data 00, x0, 0y, xy clear, links, rechts, beide
+
+	movff	hi,box_temp+1	; row top (0-63)
+	movlw	.125
+	movff	WREG,box_temp+2	; row bottom (0-63)
+	movlw	.100
+	movff	WREG,box_temp+3	; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4	; column right (0-159)
+	call	PLED_box				
+	return
+
+PLED_decoplan:				; display the Decoplan
+	ostc_debug	'n'		; Sends debug-information to screen if debugmode active
+
+	movff	char_O_array_decodepth+0,lo		; Get Depth
+	tstfsz	lo
+	bra		PLED_decoplan1
+	; No Deco, show "no Deco"
+	call	PLED_clear_divemode_menu		; Clear Deco area
+	DISPLAYTEXT	d'239'						;"No Deco"
+	return
+
+PLED_decoplan1:
+	bsf		leftbind
+	WIN_LEFT	.100
+	movlw	.000
+	movff	WREG,win_top
+	movwf	hi								; copy for PLED_decoplan_bargraph
+	call	PLED_SetRow						; Set Row
+	lfsr	FSR2,letter		
+	movff	char_O_array_decodepth+0,lo		; Get Depth
+	movf	lo,w
+	btfsc	STATUS,Z						; =0
+	goto	PLED_decoplan_delete			; Yes, quit display		
+	output_8								; outputs into Postinc2!
+	movlw	'm'
+	movwf	POSTINC2
+	call	word_processor	
+	WIN_LEFT	.140
+	movlw	.000
+	movff	WREG,win_top
+	lfsr	FSR2,letter		
+	movff	char_O_array_decotime+0,lo		; Get length for this stop
+	output_99x								; outputs into Postinc2!
+	movlw	d'39'							;"'"
+	movwf	POSTINC2
+	call	word_processor	
+	call	PLED_decoplan_bargraph			; draws a box representing the decotime (stored in lo...) for this depth
+
+	WIN_LEFT	.100
+	movlw	.025
+	movff	WREG,win_top
+	movwf	hi								; copy for PLED_decoplan_bargraph
+	call	PLED_SetRow						; Set Row
+	lfsr	FSR2,letter		
+	movff	char_O_array_decodepth+1,lo		; Get Depth
+	movf	lo,w
+	btfsc	STATUS,Z						; =0
+	goto	PLED_decoplan_delete			; Yes, quit display		
+	output_8								; outputs into Postinc2!
+	movlw	'm'
+	movwf	POSTINC2
+	call	word_processor	
+	WIN_LEFT	.140
+	movlw	.025
+	movff	WREG,win_top
+	lfsr	FSR2,letter		
+	movff	char_O_array_decotime+1,lo		; Get length for this stop
+	output_99x								; outputs into Postinc2!
+	movlw	d'39'							;"'"
+	movwf	POSTINC2
+	call	word_processor	
+	call	PLED_decoplan_bargraph			; draws a box representing the decotime (stored in lo...) for this depth
+	
+	WIN_LEFT	.100
+	movlw	.050
+	movff	WREG,win_top
+	movwf	hi								; copy for PLED_decoplan_bargraph
+	call	PLED_SetRow						; Set Row
+	lfsr	FSR2,letter		
+	movff	char_O_array_decodepth+2,lo		; Get Depth
+	movf	lo,w
+	btfsc	STATUS,Z						; =0
+	goto	PLED_decoplan_delete			; Yes, quit display		
+	output_8								; outputs into Postinc2!
+	movlw	'm'
+	movwf	POSTINC2
+	call	word_processor	
+	WIN_LEFT	.140
+	movlw	.050
+	movff	WREG,win_top
+	lfsr	FSR2,letter		
+	movff	char_O_array_decotime+2,lo		; Get length for this stop
+	output_99x								; outputs into Postinc2!
+	movlw	d'39'							;"'"
+	movwf	POSTINC2
+	call	word_processor	
+	call	PLED_decoplan_bargraph			; draws a box representing the decotime (stored in lo...) for this depth
+
+	WIN_LEFT	.100
+	movlw	.075
+	movff	WREG,win_top
+	movwf	hi								; copy for PLED_decoplan_bargraph
+	call	PLED_SetRow						; Set Row
+	lfsr	FSR2,letter		
+	movff	char_O_array_decodepth+3,lo		; Get Depth
+	movf	lo,w
+	btfsc	STATUS,Z						; =0
+	goto	PLED_decoplan_delete			; Yes, quit display		
+	output_8								; outputs into Postinc2!
+	movlw	'm'
+	movwf	POSTINC2
+	call	word_processor	
+	WIN_LEFT	.140
+	movlw	.075
+	movff	WREG,win_top
+	lfsr	FSR2,letter		
+	movff	char_O_array_decotime+3,lo		; Get length for this stop
+	output_99x								; outputs into Postinc2!
+	movlw	d'39'							;"'"
+	movwf	POSTINC2
+	call	word_processor	
+	call	PLED_decoplan_bargraph			; draws a box representing the decotime (stored in lo...) for this depth
+
+	WIN_LEFT	.100
+	movlw	.100
+	movff	WREG,win_top
+	movwf	hi								; copy for PLED_decoplan_bargraph
+	call	PLED_SetRow						; Set Row
+	lfsr	FSR2,letter		
+	movff	char_O_array_decodepth+4,lo		; Get Depth
+	movf	lo,w
+	btfsc	STATUS,Z						; =0
+	goto	PLED_decoplan_delete			; Yes, quit display		
+	output_8								; outputs into Postinc2!
+	movlw	'm'
+	movwf	POSTINC2
+	call	word_processor	
+	WIN_LEFT	.140
+	movlw	.100
+	movff	WREG,win_top
+	lfsr	FSR2,letter		
+	movff	char_O_array_decotime+4,lo		; Get length for this stop
+	output_99x								; outputs into Postinc2!
+	movlw	d'39'							;"'"
+	movwf	POSTINC2
+	call	word_processor	
+	call	PLED_decoplan_bargraph			; draws a box representing the decotime (stored in lo...) for this depth
+	return
+
+PLED_gas_list:
+	ostc_debug	'm'		; Sends debug-information to screen if debugmode active
+
+	WIN_LEFT	.100
+	WIN_FONT	FT_SMALL
+	bsf		leftbind
+	
+	movlw	d'2'
+	movwf	wait_temp			; here: stores eeprom address for gas list
+	movlw	d'231'
+	movwf	waitms_temp		; here: stores row for gas list
+	clrf	hi					; here: Gas counter
+
+PLED_gas_list_loop:
+	incf	hi,F				; Increase Gas
+	movlw	d'4'
+	addwf	wait_temp,F			; Increase eeprom address for gas list
+	movlw	d'25'
+	addwf	waitms_temp,F		; Increase row
+	WIN_LEFT	.100
+	movff	waitms_temp,win_top ; Set Row
+	
+	lfsr	FSR2,letter		
+	movlw	'G'
+	movwf	POSTINC2
+	movff	hi,lo			; copy gas number
+	output_8				; display gas number
+	movlw	':'
+	movwf	POSTINC2
+	movff	wait_temp, EEADR; Gas #hi: %O2 - Set address in internal EEPROM
+	call	read_eeprom		; get byte (stored in EEDATA)
+	movff	EEDATA,lo		; copy to lo
+	output_8				; outputs into Postinc2!
+	movlw	'/'
+	movwf	POSTINC2
+	incf	EEADR,F			; Gas #hi: %He - Set address in internal EEPROM
+	call	read_eeprom		; get byte (stored in EEDATA)
+	movff	EEDATA,lo		; copy to lo
+	output_8				; outputs into Postinc2!
+	
+	
+	read_int_eeprom		d'27'	; read flag register
+	movff	hi,lo			; copy gas number
+PLED_gas_list_loop1:
+	rrcf	EEDATA			; roll flags into carry
+	decfsz	lo,F			; max. 5 times...
+	bra		PLED_gas_list_loop1
+	
+	movlw	.015	
+	btfss	STATUS,C		; test carry
+	movlw	.010
+	movwf	grayvalue		; grey out inactive gases!
+	
+	call	word_processor	
+	movlw	.015	
+	movwf	grayvalue		; reset grey value for compatibility
+
+	movlw	d'5'			; list all five gases
+	cpfseq	hi				; All gases shown?
+	bra		PLED_gas_list_loop	; No
+	
+	return							; No, return (OC mode)
+
+PLED_splist_start:	
+	WIN_LEFT	.100
+	WIN_FONT	FT_SMALL
+	bsf		leftbind
+
+	; list three SP in Gaslist
+	movlw	d'35'				; 36 = current SP position in EEPROM
+	movwf	wait_temp			; here: stores eeprom address for gas list
+	movlw	d'231'
+	movwf	waitms_temp			; here: stores row for gas list
+	clrf 	temp5				; here: SP counter
+
+PLED_splist_loop:
+	incf	wait_temp,F			; EEPROM address
+	incf	temp5,F			; Increase SP
+
+	movlw	d'25'
+	addwf	waitms_temp,F		; Increase row
+	movff	waitms_temp,win_top ; Set Row
+	WIN_LEFT	.100
+	
+	lfsr	FSR2,letter		
+	movlw	'S'
+	movwf	POSTINC2
+	movlw	'P'
+	movwf	POSTINC2
+	movff	temp5,lo		; copy gas number
+	output_8				; display gas number
+	movlw	':'
+	movwf	POSTINC2
+	movff	wait_temp, EEADR; SP #hi position
+	call	read_eeprom		; get byte (stored in EEDATA)
+	movff	EEDATA,lo		; copy to lo
+	clrf	hi
+	output_16dp	d'3'		; outputs into Postinc2!
+	call	word_processor	
+
+	movlw	d'3'		; list all three SP
+	cpfseq	temp5		; All gases shown?
+	bra		PLED_splist_loop	; No
+
+	bcf		leftbind
+	return						; no, return
+
+PLED_clear_divemode_menu:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.0
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.125
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.082
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	return
+
+PLED_divemenu_cursor:
+	ostc_debug	'l'		; Sends debug-information to screen if debugmode active
+	WIN_TOP		.0
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+	WIN_TOP		.25
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+	WIN_TOP		.50
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+	WIN_TOP		.75
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+	WIN_TOP		.100
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB8
+	movwf	POSTINC2
+	call	word_processor
+
+	movff	menupos,temp1
+	movlw	d'0'
+	dcfsnz	temp1,F
+	movlw	d'0'
+	dcfsnz	temp1,F
+	movlw	d'25'
+	dcfsnz	temp1,F
+	movlw	d'50'
+	dcfsnz	temp1,F
+	movlw	d'75'
+	dcfsnz	temp1,F
+	movlw	d'100'
+	movff	WREG,win_top
+	WIN_LEFT	.85
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	0xB7			; Arrow for menu
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_profileview_menu:
+	DISPLAYTEXT	.127					;"Exit"
+	DISPLAYTEXT	.128					;"Delete"
+	DISPLAYTEXT	.132					;"Format"
+	return
+
+custom_warn_surfmode:
+	movlw	.0
+	movff	WREG,box_temp+0		; Data
+	movlw	.56
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.88
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.69
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.115
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.58
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.86
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.70
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.114
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame
+	; warning text
+
+	WIN_TOP		.60
+	WIN_LEFT	.71
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.1					; Init new Wordprocessor
+	WIN_COLOR	color_red
+ 	lfsr	FSR2,letter
+	movlw	'C'
+	movwf	POSTINC2
+	movlw	'F'
+	movwf	POSTINC2
+	movff	temp1,lo
+	output_8
+	movlw	'!'
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	return
+
+PLED_saturation_graph_divemode:
+	ostc_debug	'h'		; Sends debug-information to screen if debugmode active
+PLED_tissue_saturation_graph:
+	ostc_debug	'i'		; Sends debug-information to screen if debugmode active
+; with dd_font2display
+
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.25
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.120
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.82
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_frame
+
+	lfsr	FSR2, char_O_tissue_saturation+.000	; N2
+	movlw	d'16'
+	movwf	wait_temp		; 16 tissues
+	clrf	waitms_temp		; Row offset
+PLED_tissue_saturation_graph3:
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.28
+	addwf	waitms_temp,W
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.28
+	addwf	waitms_temp,W
+	movff	WREG,box_temp+2		; row bottom (0-239)
+
+	incf	waitms_temp,F
+	incf	waitms_temp,F
+
+	movlw	.100
+	movff	WREG,box_temp+3		; column left (0-159)
+
+	movff	POSTINC2,box_temp+4
+	bcf		STATUS,C
+	rrcf	box_temp+4,F
+	bcf		STATUS,C
+	rrcf	box_temp+4,F		
+	movlw	.100
+	addwf	box_temp+4,F		; column right (0-159)
+
+	movlw	d'157'							; limit display 
+	cpfslt	box_temp+4						; skip if 157 (WREG) < box_temp+4
+	movwf	box_temp+4
+
+	call	PLED_box	
+
+	decfsz	wait_temp,F
+	bra		PLED_tissue_saturation_graph3
+
+	lfsr	FSR2, char_O_tissue_saturation+.016	; He
+	movlw	d'16'
+	movwf	wait_temp		; 16 tissues
+	clrf	waitms_temp		; Row offset
+PLED_tissue_saturation_graph2:
+	movlw	.255
+	movff	WREG,box_temp+0		; Data
+	movlw	.86
+	addwf	waitms_temp,W
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.86
+	addwf	waitms_temp,W
+	movff	WREG,box_temp+2		; row bottom (0-239)
+
+	incf	waitms_temp,F
+	incf	waitms_temp,F
+
+	movlw	.100
+	movff	WREG,box_temp+3		; column left (0-159)
+
+	movff	POSTINC2,box_temp+4
+	bcf		STATUS,C
+	rrcf	box_temp+4,F
+	bcf		STATUS,C
+	rrcf	box_temp+4,F		
+	movlw	.100
+	addwf	box_temp+4,F		; column right (0-159)
+
+	movlw	d'157'							; limit display 
+	cpfslt	box_temp+4						; skip if 157 (WREG) < box_temp+4
+	movwf	box_temp+4
+
+	call	PLED_box	
+
+	decfsz	wait_temp,F
+	bra		PLED_tissue_saturation_graph2
+
+	WIN_LEFT	.84
+	WIN_TOP		.32
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'N'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	call	word_processor
+
+	WIN_LEFT	.84
+	WIN_TOP		.90
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movlw	'H'
+	movwf	POSTINC2
+	movlw	'e'
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+
+PLED_startupscreen1:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor
+	DISPLAYTEXT d'3'			; "HeinrichsWeikamp"
+	WIN_INVERT	.0	; Init new Wordprocessor
+	DISPLAYTEXT	.68				; Licence 1/2
+	DISPLAYTEXT	.69
+	DISPLAYTEXT	.70
+	DISPLAYTEXT	.71
+	DISPLAYTEXT	.72
+	DISPLAYTEXT	.73
+	DISPLAYTEXT	.74
+	return
+
+PLED_startupscreen2:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor
+	DISPLAYTEXT d'3'			; "HeinrichsWeikamp"
+	WIN_INVERT	.0	; Init new Wordprocessor
+	DISPLAYTEXT	.75				; Licence 2/2
+	DISPLAYTEXT	.76
+	DISPLAYTEXT	.77
+	DISPLAYTEXT	.78
+	DISPLAYTEXT	.79
+	DISPLAYTEXT	.80
+	DISPLAYTEXT	.81
+	return
+
+PLED_new_cf_warning:
+	call	PLED_topline_box
+	WIN_INVERT	.1	; Init new Wordprocessor	
+	DISPLAYTEXTH	.271		; New CF added!
+	WIN_INVERT	.0	; Init new Wordprocessor	
+	DISPLAYTEXTH .272		; New CustomFunctions
+	DISPLAYTEXTH .273		; were added! Check
+	DISPLAYTEXTH .274		; CF I and CF II Menu
+	DISPLAYTEXTH .275		; for Details!
+	return
+
+PLED_const_ppO2_value:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+	btfsc	menubit						; Divemode menu active?
+	return								; Yes, No update and return!
+	btfsc	premenu						; Showing "Menu?"?
+	return								; Yes, do not display ppO2/"Bail"
+
+	ostc_debug	'j'		; Sends debug-information to screen if debugmode active
+	
+	WIN_TOP		.168
+	WIN_LEFT 	.65
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	lfsr	FSR2,letter
+	movff	char_I_const_ppO2,lo
+	
+	tstfsz	lo						; In Bailout mode (char_I_const_ppO2=0)?
+	bra		PLED_const_ppO2_value2	; No, display Setpoint
+
+; Yes, Display "Bail"
+	OUTPUTTEXTH		d'263'			;"Bail"
+	call	word_processor
+	return
+
+PLED_const_ppO2_value2:				; Display SetPoint
+;Show fixed SP value
+	clrf	hi
+	bsf		leftbind
+	output_16dp	d'3'
+	bcf		leftbind
+	call	word_processor
+	return
+
+PLED_show_leading_tissue:
+	call	deco_main_calc_desaturation_time	; calculate desaturation time
+	movlb	b'00000001'						; select ram bank 1
+
+	DISPLAYTEXTH	.282		; L. Tissue:
+	lfsr	FSR2,letter
+	movlw	'#'
+	movwf	POSTINC2
+	movff	char_O_gtissue_no,lo
+	movff	char_O_gtissue_no,wait_temp			; used as temp
+	bsf		leftbind
+	output_8
+	movlw	' '
+	movwf	POSTINC2
+	movlw	'('
+	movwf	POSTINC2
+	
+	movlw	d'16'
+	cpfslt	wait_temp
+	bra		PLED_show_leading_tissue_he
+	movlw	'N'
+	movwf	POSTINC2
+	movlw	'2'
+	movwf	POSTINC2
+	bra		PLED_show_leading_tissue2
+PLED_show_leading_tissue_he:	
+	movlw	'H'
+	movwf	POSTINC2
+	movlw	'e'
+	movwf	POSTINC2
+PLED_show_leading_tissue2:	
+	movlw	')'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	WIN_LEFT	.100
+	WIN_TOP		.25
+	WIN_FONT	FT_SMALL
+	WIN_COLOR	color_white
+	call	word_processor
+
+	lfsr	FSR2,letter
+	lfsr	FSR1,char_O_tissue_saturation+0
+	incf	wait_temp,F			; make 1-16 of 0-15
+PLED_show_leading_tissue3:		; point to leading tissue...
+	movff	POSTINC1,lo			; copy/overwrite to lo register
+	decfsz	wait_temp,F			; count until zero
+	bra		PLED_show_leading_tissue3	;loop
+	output_8
+	movlw	'%'
+	movwf	POSTINC2
+	movlw	' '
+	movwf	POSTINC2
+	WIN_LEFT	.100
+	WIN_TOP		.50
+	WIN_FONT	FT_SMALL
+	WIN_COLOR	color_white
+	call	word_processor
+	bcf		leftbind
+	return
+
+PLED_topline_box_clear:			; Writes an empty box
+	movlw	.0
+	bra		PLED_topline_box2
+PLED_topline_box:				; Writes a filled box
+	movlw	.255
+PLED_topline_box2:
+	movff	WREG,box_temp+0		; Data
+	movlw	.000
+	movff	WREG,box_temp+1		; row top (0-239)
+	movlw	.026
+	movff	WREG,box_temp+2		; row bottom (0-239)
+	movlw	.000
+	movff	WREG,box_temp+3		; column left (0-159)
+	movlw	.159	
+	movff	WREG,box_temp+4		; column right (0-159)
+	call	PLED_box
+	return
+
+PLED_display_cns:
+	btfsc	multi_gf_display			; Is the Multi-GF Table displayed?
+	return								; Yes, No update and return!
+
+	btfsc	gauge_mode			; Do not display in gauge mode
+	 return
+
+	btfsc	FLAG_apnoe_mode		; Do not display in apnoe mode
+	 return
+
+	btfsc	pled_velocity_display	; Is velocity displayed?`
+	 return							; Yes, do not overwrite until pled_velocity_clear was called
+
+	ostc_debug	'k'				; Sends debug-information to screen if debugmode active
+
+	WIN_TOP		.090
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_COLOR	color_white
+	
+ 	lfsr	FSR2,letter
+	movlw	'C'
+	movwf	POSTINC2
+	movlw	'N'
+	movwf	POSTINC2
+	movlw	'S'
+	movwf	POSTINC2
+	movlw	':'
+	movwf	POSTINC2
+	movff	char_O_CNS_fraction,lo
+	bsf		leftbind
+	output_8
+	bcf		leftbind
+	movlw	'%'
+	movwf	POSTINC2
+	call	word_processor
+	return
+
+PLED_custom_text:
+	read_int_eeprom	d'64'
+	movlw	d'1'
+	cpfseq	EEDATA						; Custom text active?
+	bra		PLED_clear_custom_text		; No, Delete row
+	WIN_TOP		.200
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_red
+
+	lfsr	FSR2,letter	
+	movlw	d'64'
+	movwf	lo
+	movlw	d'24'
+	movwf	hi					; counter
+
+PLED_custom_text1:
+	incf	lo,F
+	call	PLED_get_custom_letter			; Get one letter for the custom text
+	movlw	'}'							; End marker found?
+	cpfseq	EEDATA
+	bra		PLED_custom_text2			; No
+	bra		PLED_custom_text3
+PLED_custom_text2:
+	movff	EEDATA,POSTINC2				; Copy into Postinc
+
+	decfsz	hi,F				; Max. numbers?
+	bra		PLED_custom_text1			; No, get next letters
+
+PLED_custom_text3:
+	call	word_processor
+	WIN_COLOR	color_white
+	return
+
+PLED_get_custom_letter:
+	movff	lo,EEADR			; Address for next custom text letter
+	call	read_eeprom					; Read letter
+	return
+
+PLED_clear_custom_text:
+	movlw		d'24'
+	movwf		temp1
+	WIN_TOP		.200
+	WIN_LEFT	.0
+	call		PLED_display_clear_common_y1
+	return
+
+
+;PLED_const_ppO2_DEBUG:
+;	movlw	.007
+;	call	PLED_SetColumn
+;	movlw	.032
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_O_diluent,lo
+;	output_8
+;	movlw	.001
+;	movwf	scaleY
+;	call	word_processor
+;	movlw	.007
+;	call	PLED_SetColumn
+;	movlw	.024
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	last_diluent,lo
+;	output_8
+;	movlw	.001
+;	movwf	scaleY
+;	call	word_processor
+;	movlw	.007
+;	call	PLED_SetColumn
+;	movlw	.016
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_O_deco_status,lo
+;	output_8
+;	movlw	.001
+;	movwf	scaleY
+;	call	word_processor
+;	return
+;
+
+;PLED_gaschange_DEBUG:
+;	movlw	.008
+;	call	PLED_SetColumn
+;	movlw	.016
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_I_deco_He_ratio,lo
+;	output_8
+;	call	word_processor
+;
+;	movlw	.024
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_I_deco_N2_ratio,lo
+;	output_8
+;	call	word_processor
+;
+;	movlw	.032
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_I_deco_gas_change,lo
+;	output_8
+;	call	word_processor
+;
+;	movlw	.040
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	hi,lo
+;	output_8
+;	call	word_processor
+;	return
+
+
+PLED_MultiGF_deco_mask:
+;	movlw	0x30
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+1	; row
+;	movlw	0xAA
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+0	; color
+;	goto	DD_hline			; returns
+return
+	
+PLED_MultiGF_deco_all:
+return
+;	movff	char_O_actual_pointer,wait_temp
+;	movff	char_O_GF_low_pointer,waitms_temp
+;	movf	waitms_temp,F
+;		bz		PLED_MultiGF_no_deco
+;	movf	waitms_temp,W
+;	cpfsgt	wait_temp
+;		bra	PLED_MultiGF_actual_in_deco
+;	call	PLED_MultiGF_clear_behind_depth
+;	movff	char_O_GF_low_pointer,wait_temp
+;	incf	wait_temp,F
+;	bra		PLED_MultiGF_complete_list_only	; input wait_temp
+;PLED_MultiGF_actual_in_deco:
+;	call	PLED_MultiGF_gradient
+;	call	PLED_MultiGF_time_at_deco
+;	call	PLED_MultiGF_deco_depth_actual
+;	movff	char_O_actual_pointer,wait_temp		
+;PLED_MultiGF_complete_list_only:
+;	call	PLED_MultiGF_table				; input wait_temp
+;	return
+
+;PLED_MultiGF_table:
+;	movlw	.043
+;	movwf	temp5
+;	movlw	.48	+ .8
+;	movwf	temp6
+;	movff	char_O_GF_low_pointer,wait_temp
+;PLED_MultiGF_loop:
+;	decfsz	wait_temp,F
+;	bra		PLED_MulitGF_nextentry
+;
+;;	bra		PLED_MultiGF_calc_tissue_counter
+;;PLED_MGF_lp_calc_tis_counter:
+;
+;PLED_MGF_lp_clear_rem_space:
+;	lfsr	FSR2,letter	
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.8
+;	subwf	temp6,F
+;	bnz		PLED_MultiGF_column_ok_space
+;	movlw	.21
+;	subwf	temp5,F
+;	bc		PLED_MultiGF_new_row_space
+;		return
+;PLED_MultiGF_new_row_space:
+;	movlw	.48
+;	movwf	temp6
+;PLED_MultiGF_column_ok_space:
+;	movf	temp5,W
+;	call	PLED_SetColumn
+;	movlw	.8
+;	subwf	temp6,W
+;	call	PLED_SetRow
+;	call	word_processor
+;	bra		PLED_MGF_lp_clear_rem_space
+;
+;PLED_MulitGF_nextentry:
+;	lfsr	FSR2,letter	
+;	movff	wait_temp,lo				; pointer to meter
+;	movf	lo,W
+;	rlncf	lo,F
+;	addwf	lo,F
+;	decfsz	wait_temp,W
+;		bra		PLED_MGF_skip_last_deco2 	
+;	movff	char_I_depth_last_deco,lo
+;PLED_MGF_skip_last_deco2:
+;	output_99
+;	movlw	0x02
+;	movwf	POSTINC2
+;	movlw	':'
+;	movwf	POSTINC2
+;	movlw	0x02
+;	movwf	POSTINC2
+;	lfsr	FSR0,0x250
+;	movf	wait_temp,W
+;	movff	PLUSW0,lo
+;	movlw	d'10'			; gray code
+;	tstfsz	lo
+;	movlw	 b'00001111'	; gray code
+;	movwf	grayvalue
+;	bsf		leftbind
+;	output_99
+;	bcf		leftbind
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.8
+;	subwf	temp6,F
+;	bnz		PLED_MultiGF_column_ok
+;	movlw	.21
+;	subwf	temp5,F
+;	bc		PLED_MultiGF_new_row
+;		return
+;PLED_MultiGF_new_row:
+;	movlw	.48
+;	movwf	temp6
+;PLED_MultiGF_column_ok:
+;	movf	temp5,W
+;	call	PLED_SetColumn
+;	movlw	.8
+;	subwf	temp6,W
+;	call	PLED_SetRow
+;	call	word_processor
+;	movlw	 b'00001111'	; gray code
+;	movwf	grayvalue
+;	bra		PLED_MultiGF_loop
+;
+;PLED_MultiGF_no_deco:
+;	DISPLAYTEXT	d'242'			;"no deco"
+;	return
+;
+;PLED_MultiGF_depth:
+;	lfsr	FSR2,letter
+;	movff	rel_pressure+0,lo
+;	movff	rel_pressure+1,hi
+;	call	adjust_depth_with_salinity			; computes salinity setting into lo:hi [mBar]
+;	bsf		leftbind
+;	bsf		ignore_digit5		; do not display 1cm depth
+;	output_16dp	d'3'
+;	bcf		leftbind
+;	movlw	.004
+;	movwf	wait_temp
+;	movff	wait_temp,0x086	; left
+;	movlw	.049
+;	movwf	wait_temp
+;	movff	wait_temp,0x087	; top
+;	movlw	.015
+;	movwf	wait_temp
+;	movff	wait_temp,0x088	; heightmax
+;	movff	dd_oled_brightness_offset,wait_temp
+;	movff	wait_temp,0x089	; oled_brightness_offset_const
+;	call	main_DD2_write_incon24
+;	movlb	b'00000001'				; Back to Bank1
+;	return
+;
+;PLED_MultiGF_deco_depth_actual:
+;	lfsr	FSR2,letter	
+;	movff	char_O_actual_pointer,lo				; pointer to meter
+;	movf	lo,W
+;	rlncf	lo,F
+;	addwf	lo,F
+;	movff	char_O_actual_pointer,wait_temp			; test last_deco
+;	decfsz	wait_temp,F
+;		bra		PLED_MGF_skip_last_deco_depth 	
+;	movff	char_I_depth_last_deco,lo
+;PLED_MGF_skip_last_deco_depth:
+;	output_99
+;	movlw	'm'
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.23
+;	call	PLED_SetColumn
+;	movlw	.57
+;	call	PLED_SetRow
+;	goto	word_processor
+;	
+;PLED_MultiGF_gradient:
+;	lfsr	FSR2,letter
+;	movff	char_O_gradient_factor,lo
+;	bsf		leftbind
+;	output_99
+;	bcf		leftbind
+;	movlw	'%'
+;	movwf	POSTINC2
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.23
+;	call	PLED_SetColumn
+;	movlw	.49
+;	call	PLED_SetRow
+;	goto	word_processor
+;
+;PLED_MultiGF_time_at_deco:
+;	movlw	.045
+;	movwf	wait_temp
+;	movff	wait_temp,0x086	; left
+;	movlw	.050
+;	movwf	wait_temp
+;	movff	wait_temp,0x087	; top
+;	movlw	.015
+;	movwf	wait_temp
+;	movff	wait_temp,0x088	; heightmax
+;	movff	dd_oled_brightness_offset,wait_temp
+;	movff	wait_temp,0x089	; oled_brightness_offset_const
+;	lfsr	FSR2,letter
+;	lfsr	FSR0,0x250
+;	movff	char_O_actual_pointer,lo
+;	movf	lo,W
+;	movff	PLUSW0,lo
+;	bsf		leftbind
+;	output_99
+;	movlw	'<'				; Textmapping to "'"!
+;	movwf	POSTINC2
+;	call	main_DD2_write_incon24
+;	movlb	b'00000001'				; Back to Bank1
+;	return
+;
+;PLED_MultiGF_clear_behind_depth:
+;	movlw	0x01
+;	movwf	wait_temp
+;	movff	wait_temp,width	; font select left side before decpoint
+;	movff	wait_temp,box_temp+5	; font select right side decpoint and after
+;	movlw	.063
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+1	; bottom row 
+;	movlw	.020
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+2	; start column
+;	movlw	.063
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+3	; end column
+;	movlw	.051	
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+4	; start column dec point
+;	lfsr	FSR2,letter
+;;	call	DD_Main
+;	return
+;;	movlw	0x31
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+1	; row
+;	movlw	0x00
+;	movwf	wait_temp
+;	movff	wait_temp,box_temp+0	; color
+;	call	DD_hline
+;	return
+;
+
+;PLED_MulitGF_nextentry_tissues:
+;	lfsr	FSR2,letter
+;	lfsr	FSR0,0x200
+;	rlncf	wait_temp,W
+;	movff	PLUSW0,lo
+;	addlw	.001
+;	movff	PLUSW0,hi
+;	output_16
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.8
+;	subwf	temp6,F
+;	bnz		PLED_MultiGF_column_ok_tissues
+;	movlw	 b'00001111'	; gray code
+;	movwf	grayvalue
+;	movlw	.21
+;	subwf	temp5,F
+;	bc		PLED_MultiGF_new_row_tissues
+;		return
+;PLED_MultiGF_new_row_tissues:
+;	movlw	.48
+;	movwf	temp6
+;PLED_MultiGF_column_ok_tissues:
+;	movf	temp5,W
+;	call	PLED_SetColumn
+;	movlw	.8
+;	subwf	temp6,W
+;	call	PLED_SetRow
+;	call	word_processor
+;	bra		PLED_MultiGF_loop_tissues
+;
+
+;PLED_MultiGF_uart_out:
+;	call	rs232_wait_tx
+;; header ff ff
+;	movlw	0xff
+;	movwf	wait_temp
+;	movff	wait_temp,TXREG
+;	call	rs232_wait_tx
+;	movff	wait_temp,TXREG
+;	call	rs232_wait_tx
+;; 2sec counter
+;	movff	0x290,TXREG
+;	call	rs232_wait_tx
+;	movff	0x291,TXREG
+;	call	rs232_wait_tx
+;;	movff	,TXREG
+;; pres_respiration
+;	movff	amb_pressure,TXREG
+;	call	rs232_wait_tx
+;	movff	amb_pressure+1,TXREG
+;	call	rs232_wait_tx
+;; pres_surface
+;	movff	last_surfpressure,TXREG
+;	call	rs232_wait_tx
+;	movff	last_surfpressure+1,TXREG
+;	call	rs232_wait_tx
+;; tissue pres
+;	lfsr	FSR0,0x200
+;	movlw	.64
+;	movwf	wait_temp
+;pled_multigraf_tissue_uart_loop:
+;	movff	POSTINC0,TXREG
+;	call	rs232_wait_tx
+;	decfsz	wait_temp
+;		bra	pled_multigraf_tissue_uart_loop
+;; movff	,TXREG
+;; call	rs232_wait_tx
+;	return
+
+;PLED_MulitGF_nextentry_debug:
+;	lfsr	FSR2,letter
+;	movff	wait_temp,lo		
+;	output_99
+;	movlw	0x02
+;	movwf	POSTINC2
+;	movlw	':'
+;	movwf	POSTINC2
+;	movlw	0x02
+;	movwf	POSTINC2
+;	lfsr	FSR0,0x300
+;	movf	wait_temp,W			
+;	movff	PLUSW0,lo
+;	output_99
+;	movlw	' '
+;	movwf	POSTINC2
+;	movlw	.8
+;	subwf	temp6,F
+;	bnz		PLED_MultiGF_column_ok_debug
+;	movlw	 b'00001111'	; gray code
+;	movwf	grayvalue
+;	movlw	.21
+;	subwf	temp5,F
+;	bc		PLED_MultiGF_new_row_debug
+;		return
+;PLED_MultiGF_new_row_debug:
+;	movlw	.48
+;	movwf	temp6
+;PLED_MultiGF_column_ok_debug:
+;	movf	temp5,W
+;	call	PLED_SetColumn
+;	movlw	.8
+;	subwf	temp6,W
+;	call	PLED_SetRow
+;	call	word_processor
+;	bra		PLED_MultiGF_loop_debug
+
+;PLED_MultiGF_calc_tissue_counter:
+;	movlw	d'8'	; gray code
+;	movwf	grayvalue
+;	movff	0x290,lo		
+;	movff	0x291,hi		
+;	movlw	'('
+;	movwf	POSTINC2
+;	output_16
+;	movlw	')'
+;	movwf	POSTINC2
+;	movlw	.8
+;	subwf	temp6,F
+;	bnz		PLED_MGF_ok_col_calc_tis_cter
+;	movlw	 b'00001111'	; gray code
+;	movwf	grayvalue
+;	movlw	.21
+;	subwf	temp5,F
+;	bc		PLED_MGF_n_row_calc_tis_cter
+;		return
+;PLED_MGF_n_row_calc_tis_cter:
+;	movlw	.48
+;	movwf	temp6
+;PLED_MGF_ok_col_calc_tis_cter:
+;	movf	temp5,W
+;	call	PLED_SetColumn
+;	movlw	.8
+;	subwf	temp6,W
+;	call	PLED_SetRow
+;	call	word_processor
+;	bra		PLED_MGF_lp_calc_tis_counter
+;
+
+;PLED_debug_deko:
+;	movlw	.009
+;	call	PLED_SetColumn
+;	movlw	.008
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_O_deco_status,lo
+;	output_8
+;	call	word_processor
+;
+;	movlw	.009
+;	call	PLED_SetColumn
+;	movlw	.016
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_O_array_decodepth+0,lo
+;	output_8
+;	call	word_processor
+;	return
+;
+
+
+
+adjust_depth_with_salinity:			; computes salinity setting into lo:hi [mBar]
+
+	btfsc	simulatormode_active	; Do apply salinity in Simulatormode
+	return
+
+	read_int_eeprom	d'26'			; Read Salinity from EEPROM
+	movff	EEDATA, wait_temp		; salinity
+	
+	movlw	d'105'					; 105% ?
+	cpfslt	wait_temp				; Salinity higher limit
+	return							; Out of limit, do not adjust lo:hi
+	
+	movlw	d'99'					; 99% ?
+	cpfsgt	wait_temp				; Salinity lower limit
+	return							; Out of limit, do not adjust lo:hi
+
+	movff	lo,xA+0
+	movff	hi,xA+1
+
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	
+	call	mult16x16				;xA*xB=xC (lo:hi * 100)
+	
+	movff	wait_temp,xB+0			; Salinity
+	clrf	xB+1
+							
+	call	div32x16  				; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder
+
+	movff	xC+0,lo
+	movff	xC+1,hi					; restore lo and hi with updated value
+	
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/simulator.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,310 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; menu "Simulator"
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 081210
+; last updated: 081210
+; known bugs:
+; ToDo: 
+
+menu_simulator:
+	movlw	d'1'
+	movwf	logbook_temp1		; Bottom time
+	movlw	d'15'
+	movwf	logbook_temp2		; Max. Depth
+	movlw	d'1'
+	movwf	menupos
+
+menu_simulator1:
+	clrf	timeout_counter2
+	bsf		menubit
+	bsf		cursor
+	call	PLED_ClearScreen
+	call	PLED_simulator_mask
+
+menu_simulator2:
+	bcf		switch_left
+	bcf		switch_right
+	bcf		menubit2
+	bcf		menubit3
+	call	PLED_simulator_data
+	call	PLED_menu_cursor
+
+menu_simulator_loop:
+	call	check_switches_menu
+menu_simulator_loop2:
+	btfss	onesecupdate
+	bra		menu_simulator_loop3
+
+	call	timeout_surfmode
+	call	set_dive_modes
+	call	test_charger				; check if charger IC is active
+	call	get_battery_voltage			; get battery voltage
+	
+	bcf		onesecupdate				; End of one second tasks
+
+menu_simulator_loop3:
+	btfsc	menubit2
+	goto	menu_simulator_do			; call submenu
+
+	btfss	menubit
+	goto	menu						; exit setup menu and return to main menu
+
+	btfsc	sleepmode
+	goto	more_menu
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		menu_simulator_loop
+
+menu_simulator_do:						; calls submenu
+	dcfsnz	menupos,F
+	bra		simulator_startdive
+	dcfsnz	menupos,F
+	bra		simulator_inc_bottomtime
+	dcfsnz	menupos,F
+	bra		simulator_inc_maxdepth
+	dcfsnz	menupos,F
+	bra		simulator_calc_deco
+	dcfsnz	menupos,F
+	bra		simulator_show_decoplan
+	movlw	d'4'
+	movwf	menupos
+	goto	more_menu2						; exit...
+
+simulator_inc_bottomtime:
+	movlw	d'2'
+	addwf	logbook_temp1,F				; Here: Bottomtime in m
+	movlw	d'199'
+	cpfslt	logbook_temp1
+	movwf	logbook_temp1
+	movlw	d'2'
+	movwf	menupos
+	bra		menu_simulator2
+
+simulator_inc_maxdepth:
+	movlw	d'3'
+	addwf	logbook_temp2,F				; Here: Maxdepth in m
+	movlw	d'99'
+	cpfslt	logbook_temp2
+	movwf	logbook_temp2
+	movlw	d'3'
+	movwf	menupos
+	bra		menu_simulator2
+
+simulator_startdive:
+	; Descent to -3m depth
+	; Set standalone_simulator flag (Displays Simulator menu during simulation by pressing ENTER button)
+	; Clear standalone_simulator after (any) dive
+	bsf		simulatormode_active			; normal simulator mode
+	bsf		standalone_simulator			; Standalone Simulator active
+	
+	movff	logbook_temp2,xA+0
+	clrf	xA+1
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	mult16x16	;xA*xB=xC			; Depth in m*100
+
+	movlw	LOW		d'1000'
+	addwf	xC+0,F
+	movlw	HIGH	d'1000'
+	addwfc	xC+1,F							; Add 1000mBar
+	
+	movff	xC+0,sim_pressure+0
+	movff	xC+1,sim_pressure+1
+	
+	movff	sim_pressure+0,amb_pressure+0	; override readings with simulator values
+	movff	sim_pressure+1,amb_pressure+1
+
+	bcf		menubit2
+	bcf		menubit3
+	bcf		menubit
+	bcf		switch_left
+	bcf		switch_right
+
+	call	simulator_save_tissue_data		; Stores 32 floats "pre_tissue" into bank3
+
+	bsf		divemode						; Set divemode flag
+	ostc_debug	'P'							; Sends debug-information to screen if debugmode active
+	goto	diveloop						; Start Divemode
+
+simulator_save_tissue_data:
+	bsf		restore_deco_data		; Set restore flag
+	ostc_debug	'S'							; Sends debug-information to screen if debugmode active
+	call	main_push_tissues_to_vault
+	movlb	0x01							; Back to RAM Bank1
+	ostc_debug	'T'							; Sends debug-information to screen if debugmode active
+	return
+
+simulator_restore_tissue_data:
+	bcf		restore_deco_data		; clear restore flag
+	ostc_debug	'S'							; Sends debug-information to screen if debugmode active
+	call	main_pull_tissues_from_vault
+	movlb	0x01						; Back to RAM Bank1
+	ostc_debug	'T'							; Sends debug-information to screen if debugmode active
+
+	ostc_debug	'G'		; Sends debug-information to screen if debugmode active
+	call	deco_main_calc_desaturation_time	; calculate desaturation time
+	movlb	b'00000001'						; select ram bank 1
+	call	calculate_noflytime				; Calc NoFly time
+	ostc_debug	'H'		; Sends debug-information to screen if debugmode active
+	return
+	
+simulator_show_decoplan:
+	call	PLED_ClearScreen
+	call	divemenu_see_decoplan
+	
+	bcf		switch_left
+	bcf		switch_right
+
+simulator_show_decoplan2:
+	btfss	onesecupdate
+	bra		simulator_show_decoplan3
+
+	call	timeout_surfmode
+	call	set_dive_modes
+	call	test_charger				; check if charger IC is active
+	call	get_battery_voltage			; get battery voltage
+	
+	bcf		onesecupdate				; End of one second tasks
+
+simulator_show_decoplan3:
+	btfsc	switch_left
+	bra		simulator_show_decoplan4	; Quit display
+
+	btfsc	switch_right
+	bra		simulator_show_decoplan4	; Quit display
+
+	btfsc	sleepmode
+	goto	more_menu
+
+	btfsc	divemode
+	goto	restart						; exit menu, restart and enter divemode
+
+	bra		simulator_show_decoplan2
+
+simulator_show_decoplan4:
+	movlw	d'5'
+	movwf	menupos
+	bra		menu_simulator1
+	
+	
+simulator_calc_deco:
+	call	diveloop_boot					; configure gases, etc.
+
+	bsf		simulatormode_active			; normal simulator mode
+	bsf		standalone_simulator			; Standalone Simulator active
+
+
+	movff	logbook_temp2,xA+0
+	clrf	xA+1
+	movlw	d'100'
+	movwf	xB+0
+	clrf	xB+1
+	call	mult16x16	;xA*xB=xC			; Depth in m*100
+
+	movlw	LOW		d'1000'
+	addwf	xC+0,F
+	movlw	HIGH	d'1000'
+	addwfc	xC+1,F							; Add 1000mBar
+	
+	movff	xC+0,sim_pressure+0
+	movff	xC+1,sim_pressure+1
+
+	movff	sim_pressure+0,amb_pressure+0	; override readings with simulator values
+	movff	sim_pressure+1,amb_pressure+1
+
+	call	simulator_save_tissue_data		; Stores 32 floats "pre_tissue" into bank3
+
+	WIN_INVERT	.1
+	DISPLAYTEXT	.12							;" Wait.."
+	WIN_INVERT	.0
+
+simulator_calc_deco_loop1:
+	movlw	d'30'
+	movwf	logbook_temp3					; 30x/Minute
+	call	PLED_simulator_data
+	
+;	movlw	.011
+;	call	PLED_SetColumn
+;	movlw	.009
+;	call	PLED_SetRow
+;	lfsr	FSR2,letter
+;	movff	char_O_array_decodepth+0,lo		; Get Depth
+;	bsf		leftbind
+;	output_8
+;	bcf		leftbind
+;	movlw	' '
+;	movwf	POSTINC2
+;call	word_processor	
+
+	
+simulator_calc_deco_loop2:
+	call	toggle_LEDr
+
+	call	divemode_check_decogases			; Checks for decogases and sets the gases
+	call	divemode_prepare_flags_for_deco
+
+	call	deco_main_calc_hauptroutine		; calc_tissue
+	movlb	b'00000001'						; rambank 1 selected
+	ostc_debug	'C'		; Sends debug-information to screen if debugmode active
+	
+	decfsz	logbook_temp3,F
+	bra		simulator_calc_deco_loop2
+	decfsz	logbook_temp1,F
+	bra		simulator_calc_deco_loop1
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	bra		simulator_calc_deco2				; Not finished
+
+simulator_calc_deco3:
+	call	set_LEDr
+	
+	call	simulator_restore_tissue_data	; Restore 32 floats "pre_tissue" from bank3
+
+	bcf		simulatormode_active			; normal simulator mode
+	bcf		standalone_simulator			; Standalone Simulator active
+
+	WAITMS	d'250'
+	WAITMS	d'250'
+	WAITMS	d'250'							; Wait for Pressure Sensor to get real pressure again...
+
+	call	clear_LEDr
+	
+	movlw	d'1'
+	movwf	logbook_temp1					; Bottom time>0!
+
+	movlw	d'5'							; Pre-Set Cursor to "Show Decoplan"
+	movwf	menupos
+	bra		menu_simulator1					; Done.
+
+simulator_calc_deco2:
+	call	divemode_check_decogases			; Checks for decogases and sets the gases
+	call	divemode_prepare_flags_for_deco
+
+	call	deco_main_calc_hauptroutine		; calc_tissue
+	movlb	b'00000001'						; rambank 1 selected
+
+	movff	char_O_deco_status,deco_status		; 
+	tstfsz	deco_status							; deco_status=0 if decompression calculation done
+	bra		simulator_calc_deco2				; Not finished
+	bra		simulator_calc_deco3				; finished!
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/sleepmode.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,233 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+; Routines for sleepmode
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 050520
+; last updated: 090507
+; known bugs:
+; ToDo: 
+sleeploop:							; enter sleepmode!
+; first check if the 16 hash char are=0
+	lfsr	FSR2, char_O_hash
+	movlw	d'16'
+	movwf	temp1
+sleeploop1:
+	tstfsz	POSTINC2		; Test hash values
+	bra		sleeploop2		; At least one char is not zero -> Do not build hash
+	decfsz	temp1,F
+	bra		sleeploop1
+ 	; build hash  (about 90sek @ 16MHz)
+	call	PLED_ClearScreen		; clear
+	DISPLAYTEXT	.1					; "Building MD2 hash"
+	DISPLAYTEXT	.2					; "Please wait..."
+	call	deco_main_hash			; calculate MD2 hash
+	movlb	b'00000001'				; Back to Bank1
+sleeploop2:
+	call	PLED_DisplayOff			; display off
+	call	disable_rs232			; disable UART module
+	clrf	divemins+0
+	clrf	divemins+1
+	bcf		TRISB,6
+	bcf		TRISB,7
+	bcf		PORTB,6
+	bcf		PORTB,7					; Disable UART
+sleeploop_loop:
+	btfsc	oneminupdate			; one minute in sleep?
+	rcall	onemin_sleep			; do oneminute tasks, e.g. calculate desaturation
+
+	btfsc	onesecupdate			; one second in sleep?
+	rcall	onesec_sleep			; check switches, check pressure sensor, etc.
+
+	btfss	sleepmode				; wake up? (This bit will be set in other routines)
+	goto	restart					; yes
+	nop
+	sleep							; Sleep until Timer1 will wake up the device
+	nop	
+	bra		sleeploop_loop			; do loop until someting happens
+
+
+onemin_sleep:
+	call	get_battery_voltage		; get battery voltage
+	btfsc	enter_error_sleep		; Enter Fatal Error Routine?
+	goto	fatal_error_sleep		; Yes (In Sleepmode_vxx.asm!)
+	
+	call	calc_surface_interval	; Increases Surface-Interval time
+	call	nofly_timeout60			; check for no fly time
+									; adjust airpressure compensation any 15 minutes
+	incf	divemins+1,F			; counts to 14...
+	movlw	d'14'
+	cpfsgt	divemins+1
+	bra		onemin_sleep2			; 15 minutes not done!
+
+	rcall	pressuretest_sleep_fast	; Gets pressure without averaging (faster!)
+
+	call	check_temp_extrema		; Check for temperature extremas
+
+	call	main_calc_CNS_decrease_15min		; compute CNS decay in sleep only
+	movlb	b'00000001'
+	movff	last_surfpressure_15min+0,last_surfpressure_30min+0	; save older airpressure
+	movff	last_surfpressure_15min+1,last_surfpressure_30min+1	; save older airpressure	
+	movff	amb_pressure+0,last_surfpressure_15min+0			; save new airpressure
+	movff	amb_pressure+1,last_surfpressure_15min+1			; save new airpressure
+
+	clrf	divemins+1				; reset counter
+	GETCUSTOM15	d'7'				; loads max_sufpressure into lo, hi
+	movff	lo,sub_a+0				; max. "allowed" airpressure in mBar
+	movff	hi,sub_a+1				
+	movff	last_surfpressure_15min+0,sub_b+0
+	movff	last_surfpressure_15min+1,sub_b+1
+	call	sub16					; sub_c = sub_a - sub_b
+	btfsc	neg_flag
+	bra		onemin_sleep1
+	bra		onemin_sleep2			; current airpressure is lower then "allowed" airpressure, ok!
+onemin_sleep1:						; not ok! Overwrite with max. "allowed" airpressure
+	GETCUSTOM15	d'7'				; loads max_sufpressure into lo, hi
+	movff	lo,last_surfpressure_15min+0	; max. "allowed" airpressure in mBar
+	movff	hi,last_surfpressure_15min+1	; max. "allowed" airpressure in mBar
+
+onemin_sleep2:
+;calc_deko_sleepmode:
+	movff	amb_pressure+0,int_I_pres_respiration+0		; LOW copy pressure to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		; HIGH
+	GETCUSTOM8	d'11'				; Saturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_saturation_multiplier
+	GETCUSTOM8	d'12'				; Desaturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_desaturation_multiplier
+	call	deco_main_calc_wo_deco_step_1_m				; "calc_tissue_sleep"
+	movlb	b'00000001'									; RAM Bank1 selected
+
+	bcf		oneminupdate			; all done
+	return
+
+onesec_sleep:
+	call	test_charger			; charger on?
+	
+	btfss	nofly_active
+	bra		onesec_sleep_nonofly
+	
+	call	set_LEDnofly			; Set nofly LED
+	
+	nop
+	sleep
+	nop
+
+onesec_sleep_nonofly:
+	call	clear_LEDnofly			; Clear	nofly LED
+	incf	divemins+0,F 			; counts to #test_pressure_in_sleep (5)
+	movlw	d'5'
+	cpfsgt	divemins+0				; here: temp variable
+	bra		onesec_sleep1			; #test_pressure_in_sleep not done yet
+	rcall	pressuretest_sleep_fast	; Gets pressure without averaging (faster!)
+
+									; compare current ambient pressure with threshold
+	GETCUSTOM15	d'6'				; loads pressure threshold into lo,hi
+	movff	lo,sub_a+0				; power on if ambient pressure is greater threshold
+	movff	hi,sub_a+1	
+	movff	amb_pressure+0,sub_b+0
+	movff	amb_pressure+1,sub_b+1
+	call	sub16					; sub_c = sub_a - sub_b
+	bsf		sleepmode
+	btfsc	neg_flag				; Wake up from Sleep?
+	bcf		sleepmode				; amb_pressure>pressure_offset_divemode: wake up!
+	clrf	divemins+0				
+onesec_sleep1:
+	bcf		onesecupdate			; all done.
+	btfsc	switch_left
+	bra		onesec_sleep1a
+	btfsc	switch_right
+	bra		onesec_sleep1a
+; No button pressed
+	bcf		INTCON,INT0IF				; Clear flag
+	bcf		INTCON3,INT1IF				; Clear flag
+	bcf		switch_right_isr
+	bcf		switch_left_isr
+	bcf		switch_right
+	bcf		switch_left
+	bcf		T0CON,TMR0ON				; Stop Timer 0
+	return
+onesec_sleep1a:	; At least one button pressed....
+	bcf		INTCON,INT0IF				; Clear flag
+	bcf		INTCON3,INT1IF				; Clear flag
+	bcf		switch_right_isr
+	bcf		switch_left_isr
+	bcf		switch_right
+	bcf		switch_left
+	bcf		T0CON,TMR0ON				; Stop Timer 0
+	bcf		sleepmode				; wake up!
+	bsf		show_startup_screen		; 
+	return
+	
+pressuretest_sleep_fast:				; Get pressure without averaging (Faster to save some power in sleep mode)
+	call		get_temperature_start		; and start temperature integration (73,5us)
+	sleep
+	nop
+	sleep
+	nop
+	sleep								; Wait at least 35ms (every 16.5ms Timer1 wakeup)
+	call		get_temperature_value		; State 1: Get temperature	
+	call		get_pressure_start	 	; Start pressure integration.
+	sleep
+	nop
+	sleep
+	nop
+	sleep								; Wait at least 35ms (every 16.5ms Timer1 wakeup)
+	call		get_pressure_value		; State2: Get pressure (51us)
+	call		calculate_compensation		; calculate temperature compensated pressure (233us)
+	return
+
+fatal_error_sleep:
+	clrf	INTCON
+	clrf	INTCON2
+	clrf	INTCON3
+	bcf		ADCON0,0			; AD converter off
+	call	disable_rs232		; disable UART module
+	movlw	b'00010000'		
+	movwf	TRISA
+	clrf	PORTA				; And pulled to GND
+	clrf	TRISB				; All output
+	clrf	PORTB				; And pulled to GND
+	movlw	b'00011101'			; UART
+	movwf	TRISC
+	clrf	PORTC				; And pulled to GND
+	clrf	TRISD				; All output
+	clrf	PORTD				; And pulled to GND
+	clrf	TRISE				; All output
+	clrf	PORTE				; And pulled to GND
+	clrf 	T0CON				; Timer OFF	
+	clrf 	T1CON				; Timer OFF
+	clrf 	T2CON				; Timer OFF
+	clrf	OSCTUNE
+	movlw	b'00000010'		; 31kHz
+	movwf	OSCCON
+	bsf		WDTCON,0		; Watchdog timer on...
+fatal_error_sleep_loop:		; Device will never quit this loop!
+	movff	fatal_error_code,temp4
+	movlw	d'15'
+	movwf	temp1
+fatal_error_sleep_loop1:
+	sleep
+	nop
+	decfsz	temp1,F
+	bra		fatal_error_sleep_loop1
+fatal_error_sleep_loop2:
+	call	set_LEDy					
+	clrwdt
+	WAIT10US	d'5'
+	call	clear_LEDy					
+	sleep
+	nop
+	decfsz	temp4,F
+	bra		fatal_error_sleep_loop2
+	bra		fatal_error_sleep_loop
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/spbrgselect.inc	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,33 @@
+RoundResult SET 0				; Rounding function.  RoundResult = Round(aa/bb)
+Round	macro aa,bb
+	LOCAL rr = aa/bb
+	LOCAL d1 = aa - rr*bb
+	LOCAL d2 = (rr+1)*bb - aa
+RoundResult = rr
+	if d1 >= d2
+RoundResult++
+	endif
+	endm
+
+AbsResult SET 0
+Abs		macro nr
+	if nr>=0
+AbsResult = nr
+	else
+AbsResult = -nr
+	endif
+	endm
+		
+	Round xtal,(16*baud)
+spbrg_value EQU RoundResult-1
+
+	Round xtal,(16*(spbrg_value+1))
+baud_real EQU RoundResult
+	Abs(baud_real-baud)
+errpercent EQU AbsResult*100/baud
+	if errpercent > 4
+		ERROR big error in baudrate: #v(errpercent)%
+	endif
+	if errpercent >= 2
+		messg baudrate not exact: #v(errpercent)%
+	endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/start.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,390 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Start and init
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/13/04
+; last updated: 06/24/08
+; known bugs:
+; ToDo: 
+
+start:
+	movlb	b'00000001'				; ram bank 1 selected
+	call	init
+	btfsc	divemode				; Reset from Divemode?
+	call	PLED_resetdebugger		; Yes! Something went wrong, show reset informations
+
+	clrf	STKPTR					; Clear Stackpointer
+	lfsr	FSR0, 109h				; Clear rambank 1-9, do not delete RTC registers
+clear_rambank:
+	clrf	POSTINC0
+	movlw	0x0A
+	cpfseq	FSR0H					; Bank 9 done?
+	bra		clear_rambank			; clear...
+
+; Defaults for RTC
+	call	disable_rs232			; disable UART module
+	call	RTCinit					; reset RTC
+
+; Air pressure compensation	after reset
+	call	get_calibration_data	; Get calibration data from pressure sensor
+
+	bcf		pressure_refresh
+wait_start_pressure:
+	btfss	pressure_refresh 		; Air pressure compensation
+	bra		wait_start_pressure
+
+	clrf	rel_pressure+0
+	clrf	rel_pressure+1
+	clrf	surface_interval+0
+	clrf	surface_interval+1
+
+	bsf		sleepmode				; Routine only works in sleepmode...
+	call	pressuretest_sleep_fast	; Gets pressure without averaging (faster!)
+	bcf		sleepmode				; Normal mode again
+	
+	movff	amb_pressure+0,last_surfpressure+0
+	movff	amb_pressure+1,last_surfpressure+1
+	movff	amb_pressure+0,last_surfpressure_15min+0
+	movff	amb_pressure+1,last_surfpressure_15min+1
+	movff	amb_pressure+0,last_surfpressure_30min+0
+	movff	amb_pressure+1,last_surfpressure_30min+1	; Rests all airpressure registers
+
+; reset deco data
+	incf	nofly_time+0,F					; =1
+	clrf	wait_temp						; Use as buffer
+	movff	wait_temp,char_I_He_ratio		; No He at the Surface
+	movlw	d'79'							; 79% N2
+	movwf	wait_temp						; Use as buffer
+	movff	wait_temp,char_I_N2_ratio		; No He at the Surface
+	movff	amb_pressure+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		
+
+	call	deco_main_clear_tissue			;
+	movlb	b'00000001'						; select ram bank 1
+	call	deco_main_calc_desaturation_time; calculate desaturation time
+	movlb	b'00000001'						; select ram bank 1
+	call	main_clear_CNS_fraction			; clear CNS
+	movlb	b'00000001'						; select ram bank 1
+	call	calc_deko_surfmode				; calculate desaturation every minute
+	movlb	b'00000001'						; select ram bank 1
+	call	deco_main_calc_wo_deco_step_1_m				; calculate deco in surface mode 
+	movlb	b'00000001'									; select ram bank 1
+
+; check firmware and reset Custom Functions after an update
+	movlw	LOW		0x101
+	movwf	EEADR
+	movlw	HIGH 	0x101
+	movwf	EEADRH
+	call	read_eeprom				; read current version x
+	movff	EEDATA,temp1
+	incf	EEADR,F					; set to 0x102
+	call	read_eeprom				; read current version y
+	movff	EEDATA,temp2
+	clrf	EEADRH					; Reset EEADRH
+	
+	movlw	softwareversion_x
+	cpfseq	temp1					; compare version x
+	bra		check_firmware_new		; is not equal -> reset CF and store new version in EEPROM
+
+	movlw	softwareversion_y
+	cpfseq	temp2					; compare version y
+	bra		check_firmware_new		; is not equal -> reset CF and store new version in EEPROM
+	bra		restart					; x and y are equal -> do not reset cf
+			
+check_firmware_new:
+	movlw	LOW		0x101			; store current version in EEPROM
+	movwf	EEADR
+	movlw	HIGH 	0x101
+	movwf	EEADRH
+	movlw	softwareversion_x
+	movwf	EEDATA		
+	call	write_eeprom			; write version x
+	incf	EEADR,F					; set to 0x102
+	movlw	softwareversion_y
+	movwf	EEDATA		
+	call	write_eeprom			; write version y
+	clrf	EEADRH					; Reset EEADRH
+;	goto	reset_all_cf			; resets all custom functions bank0 and bank1 and jumps to "restart"
+;	goto	reset_all_cf_bank1		; resets all custom functions bank1 and jumps to "restart"
+			
+restart:
+	call	clear_LEDr					
+	call	clear_LEDnofly			; all LEDs off
+	call	PLED_boot				; PLED boot (Incl. Clear Screen!)
+	WIN_TOP		.0
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	movlw	0xFF
+	movwf	oled1_temp
+	movff	oled1_temp,win_color1
+	movlw	0xFF
+	movwf	oled1_temp
+	movff	oled1_temp,win_color2
+	call	I2CReset				; Just in Case any I2C device blocks the Bus
+	movff	last_surfpressure_30min+0,last_surfpressure+0		; Use 30min old airpressure 
+	movff	last_surfpressure_30min+1,last_surfpressure+1		; Use 30min old airpressure
+
+; Check if new CF were added in the last firmware version
+	clrf	EEADRH
+	read_int_eeprom	d'92'			; Read number of CF used in this firmware	
+	movlw	max_custom_number		; Defined in definitions.asm
+	cpfseq	EEDATA					; Compare with last version
+	bra		restart_01				; New CF, show warning and store new number
+	bra		restart_1				; No new CF, continue with boot
+restart_01:
+; Save new number of current CF count
+	rcall	display_new_cf_installed; Show warning
+	movlw	max_custom_number		; Defined in definitions.asm
+	movwf	EEDATA
+	write_int_eeprom	d'92'		; Store number of CF used in this firmware
+
+restart_1:
+	GETCUSTOM15	.31
+	movlw	LOW		.666
+	cpfseq	lo
+	bra		restart_2			; Not equal!
+	movlw	HIGH	.666
+	cpfseq	hi
+	bra		restart_2			; Not equal!
+	bra		restart_3			; Skip screen....
+
+restart_2:
+	btfsc	show_startup_screen			; Show start screen?
+	call	startup_screen1				;1/2
+	btfsc	show_startup_screen			; Show start screen?	
+	call	startup_screen2				;2/2
+
+restart_3:
+	clrf	flag1					; clear all flags
+	clrf	flag2
+	clrf	flag3
+	clrf	flag4
+	clrf	flag5
+	clrf	flag6
+	clrf	flag7
+	clrf	flag8
+	clrf	flag9
+	clrf	flag10
+	clrf	flag11
+	clrf	flag12
+	clrf	flag13
+	clrf	flag14
+	clrf	flag15
+
+; Set Debug mode?
+	read_int_eeprom	d'39'
+	bsf		debug_mode			
+	movlw	d'1'
+	cpfseq	EEDATA
+	bcf		debug_mode				; clear flag if <> 1
+
+	goto	surfloop				; Jump to Surfaceloop!
+	
+
+display_new_cf_installed:
+	call	PLED_new_cf_warning		; Display new CF warning screen
+	movlw	d'20'					; timeout for warning screen
+	bra		startup_screen3a		; Will RETURN after timeout or button press
+	
+restart_set_modes_and_flags:		; "Call"ed from divemode, as well!
+	bcf		gauge_mode
+	bcf		FLAG_const_ppO2_mode
+	bcf		FLAG_apnoe_mode			
+	clrf	EEADRH
+	read_int_eeprom d'34'			; Read deco data	
+	movlw	d'1'					; Gauge mode
+	cpfseq	EEDATA
+	 bra	restart_3_test_ppO2_mode; check for ppO2 mode
+	bsf		gauge_mode				; Set flag for gauge mode
+	movlw	d'0'
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_model	; Clear Flagbyte 
+	return							; start in Surfacemode
+restart_3_test_ppO2_mode:
+	movlw	d'2'					; const ppO2 mode
+	cpfseq	EEDATA
+	 bra	restart_3_test_apnoe_mode; check for apnoe mode
+	bsf		FLAG_const_ppO2_mode	; Set flag for ppO2 mode
+	movlw	d'0'
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_model	; Clear Flagbyte 
+	return							; start in Surfacemode
+restart_3_test_apnoe_mode:
+	movlw	d'3'					; Apnoe mode
+	cpfseq	EEDATA
+	 bra	restart_4_test_gf_mode	; check for GF OC mode
+	bsf		FLAG_apnoe_mode			; Set flag for Apnoe Mode
+	movlw	d'0'
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_model	; Clear Flagbyte 
+	return							; start in Surfacemode
+restart_4_test_gf_mode:
+	movlw	d'4'					; GF OC mode
+	cpfseq	EEDATA
+	bra		restart_5_test_gfO2_mode; check for GF CC mode
+	movlw	d'1'
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_model	; Set Flagbyte for GF method
+	return							; start in Surfacemode
+restart_5_test_gfO2_mode:
+	movlw	d'5'					; GF CC mode
+	cpfseq	EEDATA
+	return							; Start in Surfacemode
+	bsf		FLAG_const_ppO2_mode	; Set flag for ppO2 mode
+	movlw	d'1'
+	movwf	wait_temp
+	movff	wait_temp,char_I_deco_model	; Set Flagbyte for GF method
+	return							; start in Surfacemode
+
+startup_screen1:
+	call	PLED_ClearScreen		
+	call	PLED_startupscreen1		; show startup sreen
+startup_screen1_2:
+	movlw	d'10'					; timeout for startup screen
+	movwf	temp1			
+	WAITMS	d'200'
+	bcf		switch_left
+	bcf		switch_right
+screen1_loop:
+	btfsc	onesecupdate				; do every second tasks?
+	call	set_dive_modes				; tests if depth>threshold
+	btfsc	onesecupdate				; do every second tasks?
+	decf	temp1,F
+	bcf		onesecupdate				; every second tasks done
+
+	tstfsz	temp1						; timout occured?
+	bra		screen1_loop2				; no
+	return
+
+screen1_loop2:
+	btfsc	divemode					; Divemode active?
+	return
+	btfsc	switch_left					; Ack?
+	return
+	btfsc	switch_right				; Ack?
+	return
+	bra		screen1_loop				; loop screen
+
+startup_screen2:
+	call	PLED_ClearScreen		; Page 1
+	call	PLED_startupscreen2		; show startup sreen
+	bra		startup_screen1_2
+
+startup_screen3a:; WARNING: Also used for decodescriptions and CF Warning screen!
+	movwf	temp1			
+	WAITMS	d'200'
+	bcf		switch_left
+	bcf		switch_right
+screen3_loop:
+	btfsc	onesecupdate				; do every second tasks?
+	call	set_dive_modes				; tests if depth>threshold
+	
+	btfsc	onesecupdate				; do every second tasks?
+	decf	temp1,F
+	bcf		onesecupdate				; every second tasks done
+
+	tstfsz	temp1						; timout occured?
+	bra		screen3_loop2				; no
+	return
+screen3_loop2:
+	btfsc	switch_left					; Ack?
+	return
+	btfsc	switch_right				; Ack?
+	return
+	bra		screen3_loop				; loop screen
+
+init:						
+	movlw	b'01101100'		; 4MHz (x4 PLL)
+	movwf	OSCCON
+
+	movlw	b'00010001'		; I/O Ports
+	movwf	TRISA
+	clrf	PORTA
+	movlw	b'00000011'
+	movwf	TRISB
+	clrf	PORTB
+	movlw	b'11011101'		; UART
+	movwf	TRISC
+	clrf	PORTC
+	movlw	b'00000000'
+	movwf	TRISE
+	clrf	PORTE
+	movlw	b'00000000'
+	movwf	TRISD
+	clrf	PORTD
+
+	movlw	b'01000000'		; Bit6: PPL enable
+	movwf	OSCTUNE
+
+	movlw	b'00011111'		; Timer0
+	movwf	T0CON
+
+	movlw	b'00000111'		; Timer1
+	movwf	T1CON
+
+	movlw	b'11010000'		; Interrups
+	movwf	INTCON
+	movlw	b'00000101'
+	movwf	INTCON2
+	movlw	b'00001000'
+	movwf	INTCON3
+	movlw	b'00100001'
+	movwf	PIE1
+	movlw	b'00000000'
+	movwf	PIE2
+	clrf	RCON
+
+	movlw	b'00000000'		; A/D Converter
+	movwf	ADCON0
+	movlw	b'00001110'
+	movwf	ADCON1
+	movlw	b'10001010'		; Right justified
+	movwf	ADCON2
+
+	clrf	SSPCON1			; Set IēC Mode
+	movlw	b'00000000'
+	movwf	SSPSTAT
+	movlw	b'00101000'
+	movwf	SSPCON1
+	movlw	b'00000000'
+	movwf	SSPCON2
+	movlw	d'8'			; 400kHz I2C clock @ 16MHz Fcy
+	movwf	SSPADD
+
+	clrf	CCP1CON			; PWM Module off
+	clrf	ECCP1CON		; PWM Module off
+
+	movlw	b'00000111'		; Comperator Module off
+	movwf	CMCON
+	
+	movlw	b'00100000'
+	movwf	CANCON			; ECAN Module OFF
+
+	movlw	b'00100100'		; UART
+	movwf	TXSTA
+	movlw	b'10010000'
+	movwf	RCSTA
+	movlw	b'00001000'
+	movwf	BAUDCON
+	clrf	SPBRGH
+	movlw	d'34'
+	movwf	SPBRG
+	clrf	RCREG
+	clrf	PIR1
+	return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/surfmode.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,452 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; routines for Surface mode
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/01/05
+; last updated: 080905
+; known bugs:
+; ToDo:
+
+surfloop:
+; Boot tasks for all modes
+	call	restart_set_modes_and_flags	; Sets decomode flags
+	clrf	lo
+	movff	lo,char_I_const_ppO2			; reset to standard mode, OSTC assumes Air breathing at the surface!
+
+	call	PLED_brightness_full			;max. brightness
+	
+	call 	I2CReset
+	call	enable_rs232
+	call	PLED_boot
+	call	PLED_serial						; Show OSTC serial and firmware version
+	call	PLED_clock						; display time
+	call	update_date						; display date
+	movff	last_surfpressure_30min+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	last_surfpressure_30min+1,int_I_pres_respiration+1		; 30min old values 
+	movff	last_surfpressure_30min+0,int_I_pres_surface+0			; copy surface air pressure to deco routine
+	movff	last_surfpressure_30min+1,int_I_pres_surface+1			; 30min old values 
+
+	btfsc	gauge_mode					; Ignore in gauge mode
+	bra		surfloop1
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	bra		surfloop1
+
+; Startup tasks for decompression modes
+	call	PLED_desaturation_time			; display desaturation time
+	call	PLED_nofly_time					; display nofly time
+	call	PLED_tissue_saturation_graph	; display saturation graph
+	call	PLED_active_gas_surfmode		; Show start gas
+	call	PLED_display_decotype_surface	; Show deco mode (ZH-L16, const. ppO2 or Multi-GF)
+
+surfloop1:
+	btfss	gauge_mode					; Display only in gauge mode	
+	bra		surfloop2
+	DISPLAYTEXT	d'103'					; Gauge mode
+surfloop2:
+	btfss	FLAG_apnoe_mode				; Display only in Apnoe mode
+	bra		surfloop3
+	DISPLAYTEXT	d'116'					; Apnoe mode
+
+surfloop3:
+; Startup tasks for all modes
+	clrf	timeout_counter2				
+	clrf 	timeout_counter3
+	bcf		premenu						; clear premenu flag
+	bcf		menubit						; clear menu flag
+	bcf		pressure_refresh
+	clrf	last_pressure+0
+	clrf	last_pressure+1
+	clrf	last_temperature+0
+	clrf	last_temperature+1
+
+	movlw	d'5'
+	movwf	timeout_counter			; reload counter
+
+	call	clear_LEDusb
+	call	clear_LEDy					
+	bcf		simulatormode_active		; Quit simulator mode (if active)
+	bcf		standalone_simulator		; Quit simulator mode (if active)
+	WIN_TOP		.0
+	WIN_LEFT	.0
+	WIN_FONT 	FT_SMALL
+	WIN_INVERT	.0					; Init new Wordprocessor
+	WIN_COLOR	color_white
+	bcf		switch_left
+	bcf		switch_right
+	call	PLED_custom_text			; Displays custom text
+	movlw	d'1'						; next cf to check
+	movwf	cf_checker_counter			; 
+	ostc_debug	'G'						; Sends debug-information to screen if debugmode active
+	GETCUSTOM8	d'12'					; Desaturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_desaturation_multiplier
+	GETCUSTOM8	d'11'					; Saturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_saturation_multiplier
+	call	deco_main_calc_desaturation_time; calculate desaturation time
+	movlb	b'00000001'					; select ram bank 1
+	ostc_debug	'H'						; Sends debug-information to screen if debugmode active
+
+	call	wait_switches		; Waits until switches are released, resets flag if button stays pressed!
+
+surfloop_loop:
+	btfss	onesecupdate				; do every second tasks?
+	bra		surfloop_loop2				; no, loop
+
+	btfss	FLAG_const_ppO2_mode		; are we in const. ppO2 mode?	
+	bra		surfloop_loop1				; No
+; One Second tasks for ppO2 modes
+
+	bra		surfloop_loop1				; Do not search for sensor in CC mode
+
+
+surfloop_loop1:
+; One Second tasks for all modes
+	call	PLED_clock					; update clock
+	call	test_charger				; check if charger IC is active
+	call	timeout_surfmode			; check timeout 
+	call	get_battery_voltage			; get battery voltage
+	call	update_batt_voltage			; display battery voltage
+	call	timeout_premenu				; timeout premenu
+	call	set_leds_surfmode			; Sets Warning and No-Fly LEDs
+	call	custom_functions_check_surfmode	; Checks CF functions and displays warning symbol if something critical is wrong
+	call	PLED_active_gas_surfmode	; Show start gas / SetPoint
+	call	PLED_display_decotype_surface	; Show deco mode
+	btfsc	enter_error_sleep			; Enter Fatal Error Routine?
+	goto	fatal_error_sleep			; Yes (In Sleepmode_vxx.asm!)
+	bcf		onesecupdate				; every second tasks done
+	
+surfloop_loop2:	
+; Tasks approx. every 50ms for all modes
+	call	test_switches_surfmode		; check switches
+
+; Sensor tasks for all modes
+	btfsc	pressure_refresh			; new pressure available?
+	call	update_surf_press			; display surface pressure
+	btfsc	pressure_refresh			; new temperature available?
+	call	PLED_temp_surfmode			; Displays temperature
+	btfsc	pressure_refresh			; new pressure available?
+	call	set_dive_modes				; tests if depth>threshold
+	bcf		pressure_refresh			; until new pressure is available
+
+; One minute tasks for all modes
+	btfsc	oneminupdate				; do every minute tasks
+	call	update_surfloop60			; yes, e.g. update time and date
+
+; Mode tasks
+	btfsc	menubit						; Menu?
+	goto	menu						; Menu!
+	btfsc	divemode					; Divemode active?
+	goto	diveloop					; Yes, switch into Divemode!
+	btfsc	sleepmode					; Sleepmode active?
+	goto	sleeploop					; Yes, switch into sleepmode!
+; Check for the different UART flags
+	btfsc	dump_external_eeprom		; Start interface (dumps EEPROM BANK 0 + additional data)?
+	goto	menu_interface				; Yes!
+	btfsc	uart_settime				; Sync clock with PC?
+	goto	sync_clock					; Yes!
+	btfsc	internal_eeprom_write		; Access internal EEPROM BANK 0 via UART module
+	goto	internal_eeprom_access_b0	; Yes!
+	btfsc	internal_eeprom_write2		; Access internal EEPROM BANK 1 via UART module
+	goto	internal_eeprom_access_b1	; Yes!
+	btfsc	uart_send_hash				; Send MD2 hash values
+	goto	send_md2_hash				; Yes!
+	btfsc	uart_compensate_temp		; Enter temp. compensation routine?
+	goto	compensate_temperature		; Yes!
+	btfsc	uart_send_int_eeprom		; Send internal EEPROM BANK 0
+	goto	send_int_eeprom_b0			; Yes!
+	btfsc	uart_reset_decodata			; Reset Deco Data?
+	goto	reset_decodata				; Yes!
+	btfsc	uart_send_int_eeprom2		; Send internal EEPROM BANK 1
+	goto	send_int_eeprom_b1			; Yes!
+	btfsc	uart_store_tissue_data		; Store tissue data?`
+	goto	uart_store_tissues			; Yes!
+
+	bra		surfloop_loop				; loop surfacemode
+
+
+update_surfloop60:
+; One minute tasks for all modes
+	call	update_date					; and date in divemode
+	call	calc_deko_surfmode			; calculate desaturation every minute
+	call	check_temp_extrema			; check for new temperature extremas
+	call	PLED_custom_text			; Displays custom text
+	call	calc_surface_interval		; Increases Surface-Interval time
+
+	btfsc	gauge_mode					; Ignore in gauge mode
+	bra		update_surfloop60_2
+	btfsc	FLAG_apnoe_mode				; Ignore in Apnoe mode
+	bra		update_surfloop60_2
+
+; One Minute tasks for deco modes
+	call	PLED_nofly_time				; display nofly time
+	call	PLED_desaturation_time		; display desaturation time
+	btfss	premenu						; Not when "Menu?" is displayed!
+	call	PLED_tissue_saturation_graph; display saturation graph
+
+update_surfloop60_2:
+	call	nofly_timeout60				; checks if nofly time is > 0
+	bcf		oneminupdate				
+	return
+
+nofly_timeout60:
+	bsf		nofly_active					; Set flag
+	movlw	d'1'
+	subwf	nofly_time+0,F
+	movlw	d'0'
+	subwfb	nofly_time+1,F					; reduce by one
+	tstfsz	nofly_time+0					; =0?
+	return			
+	tstfsz	nofly_time+1					; =0?
+	return
+	bcf		nofly_active					; Clear flag
+	call	clear_LEDnofly
+	incf	nofly_time+0,F					; =1
+	return
+
+calc_surface_interval:
+	movff		int_O_desaturation_time+0,lo			; divide by 60...
+	movff		int_O_desaturation_time+1,hi
+	tstfsz		lo							;=0?
+	bra			calc_surface_interval2		; No
+	tstfsz		hi							;=0?
+	bra			calc_surface_interval2		; No
+	clrf		surface_interval+0
+	clrf		surface_interval+1			; Clear surface interval timer
+	return
+
+calc_surface_interval2:						; Increase surface interval timer 
+	movlw		d'1'
+	addwf		surface_interval+0,F
+	movlw		d'0'
+	addwfc		surface_interval+1,F
+	return
+
+set_leds_surfmode:	
+	btfsc	nofly_active
+	call	toggle_LEDnofly
+	return	
+
+calc_deko_surfmode:
+	call	set_LEDg					
+	ostc_debug	'I'		; Sends debug-information to screen if debugmode active
+
+	movff	last_surfpressure+0,int_I_pres_surface+0	; copy surface air pressure to deco routine
+	movff	last_surfpressure+1,int_I_pres_surface+1		
+	clrf	wait_temp						; Use as buffer
+	movff	wait_temp,char_I_He_ratio		; No He at the Surface
+	movlw	d'79'							; 79% N2
+	movwf	wait_temp						; Use as buffer
+	movff	wait_temp,char_I_N2_ratio		; No He at the Surface
+
+	movff	amb_pressure+0,int_I_pres_respiration+0		; copy surface air pressure to deco routine
+	movff	amb_pressure+1,int_I_pres_respiration+1		
+	GETCUSTOM8	d'11'									; Saturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_saturation_multiplier
+	GETCUSTOM8	d'12'									; Desaturation multiplier %
+	movwf	wait_temp
+	movff	wait_temp,char_I_desaturation_multiplier
+
+	call	deco_main_calc_wo_deco_step_1_m				; calculate deco in surface mode 
+	movlb	b'00000001'									; select ram bank 1
+	ostc_debug	'J'		; Sends debug-information to screen if debugmode active
+	call	clear_LEDg					
+	return
+
+
+test_charger:
+	bcf		TRISC,1						; CHRG_OUT output
+	bsf		CHRG_OUT
+	
+	bcf		cc_active					; Constant Current mode active?
+	btfss	CHRG_IN						; If CHRG_IN=0 -> CC active
+	bsf		cc_active					; Constant Current mode Active!
+	
+	bcf		CHRG_OUT		
+	bsf		TRISC,1						; CHRG_OUT high impedance
+	
+	WAIT10US	d'10'
+	
+	bcf		cv_active					; Constant Voltage mode Active?
+	btfss	CHRG_IN						; If CHRG_IN=0 -> CV active
+	bsf		cv_active					; Constant Voltage mode active!
+
+	bcf		TRISC,1						; CHRG_OUT output
+	bcf		CHRG_OUT		
+
+	btfsc	cc_active
+	bra		show_cc_active
+	btfsc	cv_active
+	bra		show_cv_active
+
+	bsf		TRISC,1						; CHRG_OUT high impedance
+
+	; Charger inactive or ready
+	btfss	charge_done					; charge done?
+	bra		test_charger2				; No, add incomplete cycle!
+	
+	; Yes, store all data for complete cycle
+	bcf		charge_started				; Clear flag
+	bcf		charge_done					; Clear flag
+	; Store incomplete/total cycles
+	read_int_eeprom 	d'50'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp1				; Low byte
+	read_int_eeprom 	d'51'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp2				; high byte
+	bcf		STATUS,C
+	movlw	d'1'
+	addwf	temp1
+	movlw	d'0'
+	addwfc	temp2				
+	movff	temp1,EEDATA
+	write_int_eeprom	d'50'			; write byte stored in EEDATA
+	movff	temp2,EEDATA
+	write_int_eeprom	d'51'			; write byte stored in EEDATA
+
+	; Store complete cycles
+	read_int_eeprom 	d'52'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp1				; Low byte
+	read_int_eeprom 	d'53'		; Read byte (stored in EEDATA)
+	movff	EEDATA,temp2				; high byte
+	bcf		STATUS,C
+	movlw	d'1'
+	addwf	temp1
+	movlw	d'0'
+	addwfc	temp2				
+	movff	temp1,EEDATA
+	write_int_eeprom	d'52'			; write byte stored in EEDATA
+	movff	temp2,EEDATA
+	write_int_eeprom	d'53'			; write byte stored in EEDATA
+	; Store date of complete cycle
+	movff	month,EEDATA
+	write_int_eeprom	d'47'
+	movff	day,EEDATA
+	write_int_eeprom	d'48'
+	movff	year,EEDATA
+	write_int_eeprom	d'49'
+
+	return
+
+test_charger2:
+	btfss	charge_started				; Did the charger ever start?
+	return								; No, quit!
+
+	bcf		charge_started				; Clear flag
+	; Store incomplete/total cycles
+	read_int_eeprom 	d'50'			; Read byte (stored in EEDATA)
+	movff	EEDATA,temp1				; Low byte
+	read_int_eeprom 	d'51'			; Read byte (stored in EEDATA)
+	movff	EEDATA,temp2				; high byte
+	bcf		STATUS,C
+	movlw	d'1'
+	addwf	temp1
+	movlw	d'0'
+	addwfc	temp2				
+	movff	temp1,EEDATA
+	write_int_eeprom	d'50'			; write byte stored in EEDATA
+	movff	temp2,EEDATA
+	write_int_eeprom	d'51'			; write byte stored in EEDATA
+	return	
+
+show_cv_active:							; CV mode
+	call	set_LEDr					
+	WAITMS	d'100'
+	call	clear_LEDr					
+	WAITMS	d'100'
+	call	set_LEDr					
+	bsf		charge_done					; Charge cycle finished
+	return
+
+show_cc_active:							; CC mode
+	call	set_LEDr					
+	bsf		charge_started				; Charger started in CC mode
+	bcf		charge_done					; Charge cycle not finished
+	return
+
+	
+timeout_premenu:
+	btfss	premenu					; is "Menu?" displayed?
+	return							; No
+	incf	timeout_counter3,F		; Yes...
+	GETCUSTOM8	d'4'				; loads premenu_timeout into WREG
+	cpfsgt	timeout_counter3		; ... longer then premenu_timeout
+	return							; No!
+	bcf		premenu					; Yes, so clear "Menu?" and clear pre_menu bit
+
+	call	PLED_topline_box_clear	; Clears Bar at the top
+
+	btfsc	gauge_mode
+	bra		timeout_premenu2		; Skip in Gauge mode
+	btfsc	FLAG_apnoe_mode
+	bra		timeout_premenu2		; Skip in Apnoe mode
+	call	PLED_tissue_saturation_graph		; rewrite graph
+timeout_premenu2:
+	call	update_surf_press		; rewrite serial number
+	call	PLED_serial				; rewrite serial number
+	clrf	timeout_counter3		; Also clear timeout
+	bcf		switch_left				; and debounce switches
+	bcf		switch_right
+	return
+
+test_switches_surfmode:		; checks switches in surfacemode
+	btfsc	switch_left
+	bra		test_switches_surfmode2
+	btfsc	switch_right
+	bra		test_switches_surfmode3		
+	
+	; No button press, reset timer0
+	bcf		T0CON,TMR0ON				; Stop Timer 0
+	bcf		INTCON,TMR0IF				; Clear flag
+	clrf	TMR0H
+	clrf	TMR0L
+	bcf		INTCON,INT0IF				; Clear flag
+	bcf		INTCON3,INT1IF				; Clear flag
+	return
+
+test_switches_surfmode3:
+	bcf		switch_right
+	call	PLED_topline_box		; Write a filled bar at the top
+	WIN_INVERT	.1					; Init new Wordprocessor
+	DISPLAYTEXT	.4			;Menu?
+	WIN_INVERT	.0					; Init new Wordprocessor
+	bsf		premenu
+	clrf	timeout_counter2
+	return
+
+test_switches_surfmode2:
+	bcf		switch_left
+	btfss	premenu
+	return
+	bsf		menubit					; Enter Menu!
+	return
+
+
+
+timeout_surfmode:
+	incf	timeout_counter2,F		; increase timeout counter
+	GETCUSTOM8	d'3'				; loads surfloop_timeout into WREG
+	addlw	d'5'					; adds five seconds in case timout=zero!
+	btfsc	STATUS,C				; > 255?
+	movlw	d'255'					; Set to 255...
+	decf	WREG,F					; Limit to 254	
+	cpfsgt	timeout_counter2		; Compare with timeout_counter2
+	return							; return, no timeout
+	bsf		sleepmode				; Set Flag
+	return							; Return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/sync_clock.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,124 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; Syncs RTC with PC
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 13/10/07
+; last updated: 08/08/31
+; known bugs:
+; ToDo: 
+
+; routine echoes the "b" command as ready signal
+; PC has to send 6 bytes
+; Byte1: hours
+; Byte2: minutes
+; Byte3: seconds
+; Byte4: month
+; Byte5: day
+; Byte6: year
+; All bytes will be checked for plausibility and the clock will be set
+; after a timeout of about 20ms, the routine ends
+
+sync_clock:
+	bcf		uart_settime				; clear flag
+	bcf		PIE1,RCIE					; no interrupt for UART
+	call	set_LEDusb			; LEDusb ON
+	bcf		PIR1,RCIF					; clear flag
+
+	movlw	"b"							; send echo
+	movwf	TXREG						
+	call	rs232_wait_tx					; wait for UART
+	
+	call	rs232_get_byte					; hours
+	movff	RCREG, hours
+
+	movlw	d'24'
+	cpfslt	hours
+	clrf	hours
+
+	call	rs232_get_byte					; minutes
+	movff	RCREG, mins
+
+	movlw	d'60'
+	cpfslt	mins
+	clrf	mins
+
+	call	rs232_get_byte					; seconds
+	movff	RCREG, secs
+
+	movlw	d'60'
+	cpfslt	secs
+	clrf	secs
+
+	call	rs232_get_byte					; month
+	movff	RCREG, month
+
+	movlw	d'12'
+	cpfsgt	month
+	bra	sync_clock0
+	movwf	month					
+
+sync_clock0:
+	call	rs232_get_byte					; day
+	movff	RCREG, day
+
+	movff	month,lo		; new month
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.28
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	dcfsnz	lo,F
+	movlw	.30
+	dcfsnz	lo,F
+	movlw	.31
+	cpfsgt	day						; day ok?
+	bra	sync_clock1				; OK
+	movlw	.1						; not OK, set to 1st
+	movwf	day
+
+sync_clock1:
+	call	rs232_get_byte					; year
+	movff	RCREG, year
+
+	movlw	d'100'
+	cpfslt	year
+	clrf	year
+
+	call	clear_LEDusb				; LEDusb OFF
+	bcf		PIR1,RCIF					; clear flag
+	bsf		oneminupdate				; set flag, so new time and date will be updated in surfacemode at once
+	bsf		PIE1,RCIE					; enable interrupt for UART
+	goto	surfloop_loop					; return to surface loop
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/temp_extrema.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,69 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; takes care of the temperature extrema routine
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 05/15/08
+; last updated: 05/15/08
+; known bugs:
+; ToDo:
+
+check_temp_extrema:			; called once every minute from Sleeploop, Surfloop and Diveloop
+	read_int_eeprom d'54'			; get lowest temperature so far
+	movff	EEDATA,sub_b+0
+	read_int_eeprom d'55'
+	movff	EEDATA,sub_b+1
+	movff	temperature+0,sub_a+0
+	movff	temperature+1,sub_a+1
+	call	sub16					; sub_c = sub_a - sub_b
+	btfss	neg_flag				; new lowest temperature ?
+	bra		check_temp_extrema_high	
+	; Yes, store new value together with the date
+	movff	temperature+0,EEDATA
+	write_int_eeprom	d'54'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'55'
+	movff	month,EEDATA
+	write_int_eeprom	d'56'
+	movff	day,EEDATA
+	write_int_eeprom	d'57'
+	movff	year,EEDATA
+	write_int_eeprom	d'58'
+	; Now check high extrema
+check_temp_extrema_high:
+	read_int_eeprom d'59'			; get highest temperature so far
+	movff	EEDATA,sub_b+0
+	read_int_eeprom d'60'
+	movff	EEDATA,sub_b+1
+	movff	temperature+0,sub_a+0
+	movff	temperature+1,sub_a+1
+	call	sub16					; sub_c = sub_a - sub_b
+	btfsc	neg_flag				; new highest temperature ?
+	return							; no, quit!
+	; Yes, store new value together with the date
+	movff	temperature+0,EEDATA
+	write_int_eeprom	d'59'
+	movff	temperature+1,EEDATA
+	write_int_eeprom	d'60'
+	movff	month,EEDATA
+	write_int_eeprom	d'61'
+	movff	day,EEDATA
+	write_int_eeprom	d'62'
+	movff	year,EEDATA
+	write_int_eeprom	d'63'
+	return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/tempcomp.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,81 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; routine for extra temperature compensation
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 01/12/08
+; last updated: 08/08/31
+; known bugs:
+; ToDo:
+
+; routine echoes the "f" command as ready signal
+; PC has to send 2 bytes containing the actual temperature in 0.1C
+; Byte1: low
+; Byte2: high
+
+
+compensate_temperature:
+	bcf		uart_compensate_temp		; clear flag
+	bcf		PIE1,RCIE					; no interrupt for UART
+	call	set_LEDusb					; LEDusb ON
+	bcf		PIR1,RCIF					; clear flag
+
+	movlw	"f"							; send echo
+	movwf	TXREG						
+	call	rs232_wait_tx				; wait for UART
+	
+	call	rs232_get_byte				; low byte
+	movff	RCREG, lo
+
+	call	rs232_get_byte				; high byte
+	movff	RCREG, hi
+
+	clrf	temperature_correction		; wait for uncompensated temperature value!
+	WAITMS	d'250'						; wait for new temperature
+	WAITMS	d'250'
+	WAITMS	d'250'
+	WAITMS	d'250'
+
+	movff	lo,sub_a+0					; calculate difference
+	movff	hi,sub_a+1
+	movff	temperature+0, sub_b+0
+	movff	temperature+1, sub_b+1
+	call	sub16						;  sub_c = sub_a - sub_b
+	
+	movf	sub_c+0,W
+	btfsc	neg_flag					; compensate negative?
+	movlw	d'0'						; use zero compensation!
+	movwf	sub_c+0
+
+	movff	sub_c+0,TXREG				; Send answer
+
+	movff	sub_c+0,EEDATA				; store low byte only!
+	movff	sub_c+0,temperature_correction	; no reboot required then...
+	movlw	0x01
+	movwf	EEADRH
+	movlw	0x00
+	movwf	EEADR
+	call	write_eeprom		; stores in internal eeprom
+
+	movlw	0x00
+	movwf	EEADRH				; reset high address byte
+
+	call	clear_LEDusb		; LEDusb OFF
+	bcf		PIR1,RCIF					; clear flag
+	bsf		PIE1,RCIE					; enable interrupt for UART
+	goto	surfloop_loop				; return to surface loop
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/text_table.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,720 @@
+
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; hold texts and parameters for the texts
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 10/13/07
+; last updated: 05/24/08
+; known bugs:
+; ToDo: 
+
+; Textlengths
+; The length table helps to find the texts much faster
+
+	ORG 	0x0100					
+	DB	.0,.18,.16,.24,.6,.6		; nu,  t1,  t2,  t3,  t4,  t5
+	DB	.8,.10,.10,.12,.6,.6		; t6,  t7,  t8,  t9,  t10, t11
+	DB	.8,.10,.6,.10,.6,.6			; t12, t13, t14, t15, t16, t17
+	DB	.8,.8,.6,.14,.6,.6			; t18, t19, t20, t21, t22, t23
+	DB	.10,.10,.8,.20,.12,.10		; t24, t25, t26, t27, t28, t29
+	DB	.6,.10,.8,.6,.6,.6			; t30, t31, t32, t33, t34, t35
+; 32 Custom funtion descriptors with length 16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+; Licence
+	DB	.16,.20,.22,.20			; t68, t69, t70, t71
+	DB	.22,.18,.12,.20			; t72, t73, t74, t75
+	DB	.14,.20,.20,.20			; t76, t77, t78, t79
+	DB	.14,.24					; t80, t81
+; end of licence
+
+	DB	.10,.6,.8,.8,.10,.6		; t82, t83, t84, t85, t86, t87
+	DB	.12,.10,.8,.8,.8,.8		; t88, t89, t90, t91, t92, t93
+	DB	.6,.6,.4,.10,.12,.18	; t94, t95, t96, t97, t98, t99
+	DB	.10,.10,.10,.6,.10,.14	;t100,t101,t102,t103,t104,t105
+	DB	.20,.8,.8,.6,.18,.20	;t106,t107,t108,t109,t110,t111
+	DB	.4,.14,.20,.8,.6,.16	;t112,t113,t114,t115,t116,117
+	DB	.14,.12,.6,.6,.8,.6		;t118,t119,t120,t121,t122,123
+	DB	.6,.6,.6,.6,.8,.8		;t124,t125,t126,t127,t128,129
+	DB	.4,.4,.10,.22,.22,.22	;t130,t131,t132,t133,134,135
+	DB	.20,.8,.10,.8,.8,.6		;t136;t137;t138;t139;t140;t141
+	DB	.6,.10,.8,.8,.4,.10		;t142;t143;t144;t145;t146;t147
+	DB	.14,.20,.10,.12,.10,.20	;t148;t149;t150;t151;t152;t153
+; 32 Custom funtion descriptors with length 16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+	DB	.16,.16,.16,.16
+; 32 Custom funtion descriptors with length 16
+	DB	.20,.16,.18,.14,.8,.8	;t186;t187;t188;t189;t190;t191
+	DB	.6,.20,.20,.20,.20,.20	;t192;t193;t194;t195;t196;t197
+	DB	.20,.20,.20,.20,.20,.20 ;t198......t203		
+	DB	.20,.20,.20,.20,.20,.20 ;t204......t209
+	DB	.20,.20,.20,.20,.20,.20 ;t210......t215
+	DB	.20,.20,.20,.20,.20,.20 ;t216......t221
+	DB	.20,.20,.20,.20,.20,.20 ;t222......t227
+	DB	.20,.20,.20,.20,.20,.20 ;t228......t233
+	DB	.20,.20,.10,.10,.10,.8	;t234;t235;t236;t237;t238;t239
+	DB	.8,.8,.8,.14,.6,.20		;t240;t241;t242;t243;t244;t245
+	DB	.16,.10,.16,.12,.6,.6	;t246;t247;t248;t249;t250;t251
+	DB	.6,.6,.6,.8				;t252;t253;t254;t255
+
+; Text Bank2 (Texts 256-511):
+	DB	.2,.14,.14,.8,.8,.8		;t256;t257;t258;t259;t260;t261
+	DB	.6,.6,.6,.6,.10,.10		;t262;t263;t264;t265;t266;t267
+	DB	.4,.8,.4,.14,.20,.18	;t268;t269;t270;t271;t272;t273
+	DB	.20,.14,.10,.14,.12,.16	;t274;t275;t276;t277;t278;t279
+	DB	.14,.10,.10,.10,.14,.12	;t280;t281;t282;t283;t284;t285
+	DB	.16						;t286
+
+; Textpositions, Y-scale and color
+; Example: DB	.4,.2,.1,.255		; COLUMN=4,ROW=2,Y-Scale=1, color=255
+
+; Textpositions pointer -4 !!
+#DEFINE	textpos_pointer_high	0x02
+#DEFINE	textpos_pointer_low		0xFC
+
+	ORG		0x0300					
+	DB	.0,.0,.1,.15			;1 
+	DB	.0,.25,.1,.15			;2 
+	DB	.0,.2,.1,.15			;3
+	DB	.65,.2,.1,.15			;4
+	DB	.65,.2,.1,.15			;5
+	DB	.20,.35,.1,.15			;6
+	DB	.20,.65,.1,.15			;7
+	DB	.20,.35,.1,.15			;8
+	DB	.20,.95,.1,.15			;9
+	DB	.20,.125,.1,.15			;10
+	DB	.20,.185,.1,.15			;11
+	DB	.115,.2,.1,.15			;12
+	DB	.0,.24,.1,.15			;13 
+	DB	.0,.0,.1,.15			;14 	
+	DB	.50,.2,.1,.15			;15
+	DB	.10,.30,.1,.15			;16
+	DB	.10,.55,.1,.15			;17
+	DB	.10,.80,.1,.15			;18
+	DB	.10,.105,.1,.15			;19
+	DB	.10,.130,.1,.15			;20
+	DB	.20,.35,.1,.15			;21
+	DB	.32,.65,.1,.15			;22
+	DB	.32,.95,.1,.15			;23
+	DB	.32,.155,.1,.15			;24
+	DB	.6,.0,.1,.15			;25
+	DB	.55,.2,.1,.15			;26
+	DB	.14,.2,.1,.15			;27
+	DB	.40,.2,.1,.15			;28
+	DB	.50,.2,.1,.15			;29
+	DB	.20,.35,.1,.15			;30
+	DB	.100,.0,.1,.15			;31
+	DB	.100,.25,.1,.15			;32
+	DB	.100,.75,.1,.15			;33
+	DB	.100,.100,.1,.15		;34
+	DB	.0,.0,.1,.15			;35
+
+; 32 Custom funtion descriptors wi.12th Column=5, row=8, Y-scale=1, greyvalue=15
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+;licence:
+	DB	.0,.35,.1,.15		;68
+	DB	.0,.65,.1,.15		;69
+	DB	.0,.95,.1,.15		;70
+	DB	.0,.125,.1,.15		;71
+	DB	.0,.155,.1,.15		;72
+	DB	.0,.185,.1,.15		;73
+	DB	.0,.215,.1,.15		;74
+	DB	.0,.35,.1,.15		;75
+	DB	.0,.65,.1,.15		;76
+	DB	.0,.95,.1,.15		;77
+	DB	.0,.125,.1,.15		;78
+	DB	.0,.155,.1,.15		;79
+	DB	.0,.185,.1,.15		;80
+	DB	.0,.215,.1,.15		;81
+; end of licence
+
+	DB	.102,.150,.1,.15	;82 Decostop
+	DB	.0,.0,.1,.15		;83
+	DB	.108,.216,.1,.15	;84	No Stop
+	DB	.108,.216,.1,.15	;85 Decosum
+	DB	.100,.0,.1,.15		;86 Divetime
+	DB	.0,.0,.1,.15		;87 Depth
+	DB	.0,.0,.1,.15		;88
+	DB	.0,.0,.1,.15		;89
+	DB	.0,.0,.1,.15		;90
+	DB	.0,.0,.1,.15		;91
+	DB	.0,.0,.1,.15		;92
+	DB	.0,.0,.1,.15		;93
+	DB	.0,.0,.1,.15		;94
+	DB	.0,.0,.1,.15		;95
+	DB	.0,.0,.1,.15		;96	
+	DB	.0,.0,.1,.15		;97	
+	DB	.40,.2,.1,.15		;98
+	DB	.20,.35,.1,.15		;99
+	DB	.20,.125,.1,.15		;100
+	DB	.85,.125,.1,.15		;101
+	DB	.85,.125,.1,.15		;102
+	DB	.85,.125,.2,.15		;103
+	DB	.85,.125,.1,.15		;104
+	DB	.0,.0,.1,.15		;105
+	DB	.10,.2,.1,.15		;106
+	DB	.0,.0,.1,.15		;107
+	DB	.0,.0,.1,.15		;108
+	DB	.20,.35,.1,.15		;109
+	DB	.20,.65,.1,.15		;110
+	DB	.14,.2,.1,.15		;111
+	DB	.0,.0,.1,.15		;112
+	DB	.20,.95,.1,.15		;113
+	DB	.10,.2,.1,.15		;114
+	DB	.0,.9,.1,.15		;115
+	DB	.85,.125,.2,.15		;116
+	DB	.0,.18,.1,.15		;117
+	DB	.0,.27,.1,.15		;118
+	DB	.0,.36,.1,.15		;119
+	DB	.0,.45,.1,.15		;120
+	DB	.0,.54,.1,.15		;121
+	DB	.100,.50,.1,.15		;122
+	DB	.100,.25,.1,.15		;123
+	DB	.100,.50,.1,.15		;124
+	DB	.100,.75,.1,.15		;125
+	DB	.100,.100,.1,.15	;126
+	DB	.100,.0,.1,.15		;127
+	DB	.100,.25,.1,.15		;128
+	DB	.20,.65,.1,.15		;129
+	DB	.65,.65,.1,.15		;130
+	DB	.65,.65,.1,.15		;131
+	DB	.100,.50,.1,.15		;132
+	DB	.10,.0,.1,.15		;133		Debug intro
+	DB	.10,.25,.1,.15		;134
+	DB	.10,.50,.1,.15		;135
+	DB	.10,.75,.1,.15		;136		/Debug Intro
+	DB	.100,.50,.1,.15		;137		Bailout
+	DB	.85,.125,.1,.15		;138
+	DB	.105,.120,.1,.15	;139		Descent
+	DB	.105,.60,.1,.15		;140		Surface
+	DB	.65,.2,.1,.15		;141
+	DB	.20,.155,.1,.15		;142
+	DB	.42,.72,.1,.15		;143		Confirm:
+	DB	.60,.2,.1,.15		;144
+	DB	.52,.96,.1,.15		;145		Cancel
+	DB	.52,.120,.1,.15		;146		OK!
+	DB	.100,.75,.1,.15		;147		Stopwatch
+	DB	.0,.0,.1,.15		;148
+	DB	.0,.8,.1,.15		;149
+	DB	.2,.39,.1,.15		;150
+	DB	.2,.48,.1,.15		;151
+	DB	.85,.125,.1,.15		;152
+	DB	.20,.65,.1,.15		;153
+; 32 Custom funtion descriptors with Column=5, row=8, Y-scale=1, greyvalue=15
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			
+	DB	.40,.35,.1,.15			;185
+; 32 Custom funtion descriptors with Column=5, row=8, Y-scale=1, greyvalue=15
+	DB	.13,.2,.1,.15			;186
+	DB	.0,.0,.0,.0				;187
+	DB	.2,.1,.1,.15			;188
+	DB	.2,.48,.1,.15			;189
+	DB	.0,.0,.1,.15			;190
+	DB	.0,.0,.1,.15			;191
+	DB	.0,.0,.1,.15			;192
+; Mode descriptions (6x)
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15	
+	
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15	
+	
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15	
+	
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15	
+	
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15	
+	
+	DB	.0,.35,.1,.15	
+	DB	.0,.65,.1,.15	
+	DB	.0,.95,.1,.15	
+	DB	.0,.125,.1,.15	
+	DB	.0,.155,.1,.15	
+	DB	.0,.185,.1,.15	
+	DB	.0,.215,.1,.15				;234
+
+	DB	.10,.2,.1,.15				;235
+	DB	.85,.125,.1,.15				;236
+	DB	.2,.12,.1,.15				;237
+	DB	.100,.25,.1,.15				;238   	SetPoint
+	DB	.100,.0,.1,.15				;239 	No Deco (non-GF)
+	DB	.100,.0,.1,.15				;240
+	DB	.100,.25,.1,.15				;241	Display
+	DB	.100,.0,.1,.15				;242	No Deco (GF)
+	DB	.2,.12,.1,.15				;243
+	DB	.100,.100,.1,.15			;244	Exit
+	DB	.20,.65,.1,.15				;245
+	DB	.2,.30,.1,.15				;246
+	DB	.20,.125,.1,.15			;247		Simulator
+	DB	.30,.2,.1,.15				;248
+	DB	.20,.35,.1,.15				;249
+	DB	.100,.25,.1,.15				;250	Divemode_Simulator_Menu
+	DB	.100,.50,.1,.15				;251
+	DB	.100,.75,.1,.15				;252
+	DB	.100,.100,.1,.15			;253
+	DB	.100,.0,.1,.15				;254    Divemode_Simulator_Menu
+	DB	.100,.50,.1,.15				;255	free
+	
+; Text Bank2 (Texts 256-511):
+	DB	.0,.0,.0,.15				;256	
+	DB	.20,.35,.1,.15				;257
+	DB	.40,.2,.1,.15				;258
+	DB	.105,.35,.1,.15				;259
+	DB	.105,.35,.1,.15				;260
+	DB	.105,.35,.1,.15				;261
+	DB	.1,.1,.1,.15				;262
+	DB	.65,.168,.1,.15				;263 	Bail
+	DB	.7,.48,.1,.11				;264
+	DB	.120,.135,.1,.15			;265
+	DB	.2,.39,.1,.15				;266
+	DB	.0,.216,.1,.15				;267
+	DB	.10,.8,.1,.15				;268
+	DB	.10,.16,.1,.15				;269
+	DB	.0,.0,.1,.15				;270
+
+	DB	.24,.2,.1,.15				;271
+	DB	.0,.35,.1,.15				;272
+	DB	.0,.65,.1,.15				;273
+	DB	.0,.125,.1,.15				;274
+	DB	.0,.155,.1,.15				;275
+	DB	.20,.95,.1,.15				;276
+
+	DB	.20,.65,.1,.15				;277
+	DB	.20,.95,.1,.15				;278
+	DB	.20,.125,.1,.15				;279
+	DB	.20,.155,.1,.15				;280
+	
+	DB	.100,.50,.1,.15				;281
+	DB	.100,.0,.1,.15				;282
+	DB	.90,.54,.1,.15				;283	Stopwatch
+	DB	.20,.95,.1,.15				;284
+	DB	.20,.125,.1,.15				;285
+
+	DB	.20,.155,.1,.15				;286
+
+; stores texts, texts must have even length and must end with "}"
+#DEFINE	text_pointer_high 	0x07
+#DEFINE	text_pointer_low	0xB0
+	
+	ORG		0x007B0
+	
+	DA	"Building MD2 Hash}"	;1 
+	DA	"Please Wait...}}"		;2 
+	DA	"HeinrichsWeikamp OSTC2}}";3
+	DA	"Menu?}"				;4		l=6
+	DA	"Menu:}"				;5
+	DA	"Logbook}"				;6
+	DA	"Gas Setup}"			;7
+	DA	"Set Time}}"			;8
+	DA	"Reset Menu}}"			;9		l=12
+	DA	"Setup}"				;10		l=6
+	DA	"Exit}}"				;11
+	DA	"Wait..}}"				;12
+	DA	"MD2 Hash:}"			;13 
+	DA	"Desat}"				;14 	l=6
+	DA	"Interface}"			;15
+	DA	"Start}"				;16
+	DA	"Data}}"				;17
+	DA	"Header}}"				;18
+	DA	"Profile}"				;19
+	DA	"Done.}"				;20
+	DA	"Cancel Reset}}"		;21		l=14
+	DA	"Time:}"				;22
+	DA	"Date:}"				;23
+	DA	"Set Hours}"			;24
+	DA	"Reset...}}"			;25
+	DA	"Logbook}"				;26
+	DA	"Custom Functions I}}"	;27		l=20
+	DA	"Reset Menu}}"			;28		l=12
+	DA	"Set Time:}"			;29
+	DA	"More}}"				;30		l=6
+	DA	"Decoplan}}"			;31
+	DA	"Gaslist}"				;32 	l=8
+	DA	"More}}"				;33		l=6
+	DA	"Exit}}"				;34
+	DA	"NoFly}"				;35		l=6
+; 32 custom function descriptors with length=16!
+	DA	"Start Dive [cm]}"		;36		l=16
+	DA	"End Dive   [cm]}"		;37
+	DA	"End Delay   [s]}"		;38
+	DA	"Power Off   [s]}"		;39
+	DA	"Pre-menu    [s]}"		;40
+	DA	"velocity[m/min]}"		;41
+	DA	"Wake-up  [mBar]}"		;42
+	DA	"max.Surf.[mBar]}"		;43
+	DA	"GF display  [%]}"		;44
+	DA	"min. O2 Dis.[%]}"		;45
+	DA	"Dive menus  [s]}"		;46
+	DA	"Saturate x  [%]}"		;47
+	DA	"Desaturate x[%]}"		;48
+	DA	"NoFly Ratio [%]}"		;49
+	DA	"GF alarm 1  [%]}"		;50
+	DA	"GF alarm 2  [%]}"		;51
+	DA	"Deco Offset[dm]}"		;52
+	DA	"ppO2 low [cBar]}"		;53
+	DA	"ppO2 high[cBar]}"		;54
+	DA	"show ppO2[cBar]}"		;55
+	DA	"sampling rate  }"		;56
+	DA	"Divisor Temp   }"		;57
+	DA	"Divisor Decodat}"		;58
+	DA	"Divisor NotUse0}"		;59
+	DA	"Divisor ppO2	}"		;60
+	DA	"Divisor Debug  }"		;61
+	DA	"Divisor NotUse2}"		;62
+	DA	"show CNS    [%]}"		;63
+	DA	"Logbook offset }"		;64
+	DA	"Last Deco at[m]}"		;65
+	DA	"End Apnoe [min]}"		;66
+	DA	"Show Vbatt [=1]}"		;67
+;licence
+	DA	"This program is}"		;68		l=16
+	DA	"distributed in the}}"	;69		l=20
+	DA	"hope that it will be}}";70		l=22
+	DA	"useful, but WITHOUT}"	;71		l=20
+	DA	"ANY WARRANTY; without}";72		l=22
+	DA	"even the implied}}" 	;73		l=18
+	DA	"warranty of}"			;74		l=12
+	DA	"MERCHANTABILITY or}}"	;75		l=20
+	DA	"FITNESS FOR A}"		;76		l=14
+	DA	"PARTICULAR PURPOSE.}"	;77		l=20
+	DA	"See the GNU General}"	;78		l=20
+	DA	"Public License for}}"	;79		l=20
+	DA	"more details:}"		;80		l=14
+	DA	"www.heinrichsweikamp.de}";81	l=24
+; end of licence
+	DA	"Decostop}}"			;82		l=10
+	DA	"m/min}"				;83		l=6
+	DA	"No Stop}"				;84		l=8
+	DA	"Decosum}"				;85		l=8
+	DA	"Divetime}}"			;86		l=10
+	DA	"Depth}"				;87		l=6
+	DA	"First Gas?}}"			;88		l=12
+	DA	"Default:}}"			;89		l=10
+	DA	"Minutes}"				;90		l=8
+	DA	"Month  }"				;91		l=8
+	DA	"Day    }"				;92		l=8
+	DA	"Year   }"				;93		l=8
+	DA	"Set }}"				;94		l=6
+	DA	"Gas# }"				;95		l=6
+	DA	"Yes}"					;96		l=4
+	DA	"Current:}}"			;97 	l=10
+	DA	"Setup Menu:}"			;98		l=12
+	DA	"Custom FunctionsI}"	;99		l=18
+	DA	"Decotype:}"			;100	l=10
+	DA	"ZH-L16 OC}"			;101	l=10
+	DA	"Gauge    }"			;102	l=10
+	DA	"Gauge}"				;103	l=6
+	DA	"ZH-L16 CC}"			;104	l=10
+	DA	"Active Gas? }}"		;105	l=14
+	DA	"Gas Setup - Gaslist}"	;106	l=20
+	DA	"Depth +}"				;107	l=8
+	DA	"Depth -}"				;108	l=8
+	DA	"Back}}"				;109	l=6
+	DA	"Const. ppO2 Setup}"	;110	l=18
+	DA	"Constant ppO2 Setup}"	;111	l=20
+	DA	"SP#}"					;112	l=4
+	DA	"Battery Info}}"		;113	l=14
+	DA	"Battery Information}"	;114	l=20
+	DA	"Cycles:}"				;115	l=8
+	DA	"Apnoe}"				;116	l=6
+	DA	"Last Complete:}}"		;117	l=16
+	DA	"Lowest Vbatt:}"		;118	l=14
+	DA	"Lowest at:}}"			;119	l=12
+	DA	"Tmin:}"				;120	l=6
+	DA	"Tmax:}"				;121	l=6
+	DA	"Set Gas}"				;122	l=8
+	DA	"O2 +}}"				;123	l=6
+	DA	"O2 -}}"				;124	l=6
+	DA	"He +}}"				;125	l=6
+	DA	"He -}}"				;126	l=6
+	DA	"Exit}}"				;127	l=6
+	DA	"Delete}}"				;128	l=8
+	DA	"Debug:}}"				;129	l=8
+	DA	"ON }"					;130	l=4
+	DA	"OFF}"					;131	l=4
+	DA	"Del. all}}"			;132	l=10
+	DA	"Unexpected reset from}";133	l=22
+	DA	"Divemode! Please help}";134	l=22
+	DA	"and report the Debug }";135	l=22
+	DA	"Information below!}}"	;136	l=20
+	DA	"Bailout}"				;137	l=8
+	DA	"Apnoe    }"			;138	l=10
+	DA	"Descent}"				;139	l=8
+	DA	"Surface}"				;140	l=8
+	DA	"Quit?}"				;141	l=6
+	DA	"More}}"				;142	l=6
+	DA	"Confirm:}}"			;143	l=10
+	DA	"Menu 2:}"				;144	l=8
+	DA	"Cancel}}"				;145	l=8
+	DA	"OK!}"					;146	l=4
+	DA	"Stopwat.}}"			;147	l=10
+	DA	"NOT USED!!!!!}"		;148	l=14
+	DA	"NOT USED!!!!!!!!!!!}"	;149	l=20
+	DA	"Not used!}"			;150	l=10
+	DA	"Not used!!!}"			;151	l=12
+	DA	"L16-GF OC}"			;152	l=10
+	DA	"Custom FunctionsII}}"	;153	l=20
+
+
+; 32 custom function descriptors with length=16!
+	DA	"GF Low      [%]}"		;154
+	DA	"GF High     [%]}"		;155
+	DA	"Color #Battery }"		;156
+	DA	"not used       }"		;157
+	DA	"not used       }"		;158
+	DA	"not used       }"		;159
+	DA	"Show secs. [=1]}"		;160
+	DA	"not used       }"		;161
+	DA	"not used       }"		;162
+	DA	"Avr. Depth [=1]}"		;163
+	DA	"not used       }"		;164
+	DA	"not used       }"		;165
+	DA	"not used       }"		;166
+	DA	"not used       }"		;167
+	DA	"not used       }"		;168
+	DA	"not used       }"		;169
+	DA	"not used       }"		;170
+	DA	"not used       }"		;171
+	DA	"not used       }"		;172
+	DA	"not used       }"		;173
+	DA	"not used       }"		;174
+	DA	"not used       }"		;175
+	DA	"not used       }"		;176
+	DA	"not used       }"		;177
+	DA	"not used       }"		;178
+	DA	"not used       }"		;179
+	DA	"not used       }"		;180
+	DA	"not used       }"		;181
+	DA	"not used       }"		;182
+	DA	"not used       }"		;183
+	DA	"not used       }"		;184
+	DA	"not used       }"		;185
+; 32 custom function descriptors with length=16!
+
+
+	DA	"Custom Functions II}"	;186		l=20
+	DA	"Not Used!!!!!!!}"		;187		l=16
+	DA	"Not Used!!!!!!!!!}"	;188		l=18
+	DA	"NOT USED!!!!!}"		;189		l=14
+	DA	"ppO2 +}}"				;190		l=8
+	DA	"ppO2 -}}"				;191		l=8
+	DA	"Dil.}}"				;192		l=6
+; ZH-L16 mode description
+	DA	"Decotype: ZH-L16 OC}"	;193		l=20
+	DA	"For Open Circuit   }"	;194		l=20
+	DA	"Divers. Supports 5 }"	;195		l=20
+	DA	"Trimix Gases.      }"	;196		l=20
+	DA	"Configure your gas }"	;197		l=20	
+	DA	"in Gassetup menu.  }"	;198		l=20		
+	DA	"Check CF11 & CF12 !}"	;199		l=20
+; Gaugemode description
+	DA	"Decotype: Gauge    }"	;200		l=20
+	DA	"Divetime will be in}"	;201		l=20
+	DA	"Minutes:Seconds.   }"	;202		l=20
+	DA	"OSTC2 will not     }"	;203		l=20
+	DA	"compute Deco, NoFly}"	;204		l=20	
+	DA	"time and Desat.-   }"	;205		l=20		
+	DA	"time at all!       }"	;206		l=20	
+; Const.ppO2 description
+	DA	"Decotype:ZH-L16 CC }"	;207		l=20
+	DA	"For (Semi-)Closed  }"	;208		l=20
+	DA	"Circuit rebreathers}"	;209		l=20
+	DA	"Configure the 3    }"	;210		l=20
+	DA	"SetPoints in ppO2- }"	;211		l=20	
+	DA	"Setup menu. 5 bail-}"	;212		l=20		
+	DA	"out are available. }"	;213		l=20	
+; Apnoemode description
+	DA	"Decotype: Apnoe    }"	;214		l=20
+	DA	"OSTC2 will display }"	;215		l=20
+	DA	"each descent separ-}"	;216		l=20
+	DA	"ately in Min:Sec.  }"	;217		l=20
+	DA	"Will temporally set}"	;218		l=20	
+	DA	"samplerate to 1 sec}"	;219		l=20		
+	DA	"No Deco calculation}"	;220		l=20		
+; Multi GF OC mode description
+	DA	"Decotype: L16-GF OC}"	;221		l=20
+	DA	"Decompression cal- }"	;222		l=20
+	DA	"culations with the }"	;223		l=20
+	DA	"GF-Method (GF_lo/GF}"	;224		l=20
+	DA	"_hi). Check CF32 & }"	;225		l=20	
+	DA	"CF33! Open Circuit }"	;226		l=20		
+	DA	"with Deep Stops.   }"	;227		l=20		
+; Multi GF CC mode description
+	DA	"Decotype: L16-GF CC}"	;228		l=20
+	DA	"Decompression cal- }"	;229		l=20
+	DA	"culations with the }"	;230		l=20
+	DA	"GF-Method (GF_lo/GF}"	;231		l=20
+	DA	"_hi). Check CF32 & }"	;232		l=20	
+	DA	"CF33!Closed Circuit}"	;233		l=20		
+	DA	"with Deep Stops.   }"	;234		l=20	
+	
+	DA	"Decomode changed!  }"	;235		l=20
+	DA	"L16-GF CC}"			;236		l=10
+	DA	"Not found}"			;237		l=10
+	DA	"SetPoint}}"			;238	 	l=10
+	DA	"No Deco}"				;239		l=8
+	DA	"Graphs}}"				;240		l=8
+	DA	"Display}"				;241		l=8
+	DA	"No deco}"				;242		l=8
+	DA	"Search module}"		;243		l=14
+	DA	"Exit}}"				;244		l=6
+	DA	"Reset CF,Gas & Deco}"	;245		l=20
+	DA	"Disable module}}"		;246		l=16
+	DA	"Simulator}"			;247		l=10
+	DA	"OSTC Simulator}}"		;248		l=16
+	DA	"Start Dive}}"			;249		l=12
+	DA	"+ 1m}}"				;250		l=6
+	DA	"- 1m}}"				;251		l=6
+	DA	"+10m}}"				;252		l=6
+	DA	"-10m}}"				;253		l=6
+	DA	"Exit}}"				;254		l=6
+	DA	"not use}"				;255		l=8
+	
+; Text Bank2 (Texts 256-511):
+	DA	"x}"					;256		l=2	
+	DA	"Date format:}}"		;257		l=14
+	DA	"Setup Menu 2:}"		;258		l=14
+	DA	"MMDDYY}}"				;259		l=8
+	DA	"DDMMYY}}"				;260		l=8
+	DA	"YYMMDD}}"				;261		l=8
+	DA	"OSTC }"				;262		l=6
+	DA	"Bail}}"				;263		l=6 
+	DA	"Air  }"				;264		l=6
+	DA	"Air  }"				;265		l=6
+	DA	"Calibrate}"			;266		l=10
+	DA	"Max Depth}"			;267		l=10
+	DA	"not}"					;268		l=4
+	DA	"found!}}"				;269		l=8
+	DA	"mV:}"					;270		l=4
+; New CFs Warning
+	DA	"New CF added!}"		;271		l=14
+	DA	"New CustomFunctions}"	;272		l=20
+	DA	"were added! Check}"	;273		l=18
+	DA	"CF I and CF II Menu}"	;274		l=20	
+	DA	"for Details!}}"		;275		l=14
+	DA  "Salinity:}"			;276		l=10
+	DA	"Bottom Time:}}"		;277		l=14
+	DA	"Max. Depth:}"			;278		l=12
+	DA	"Calculate Deco}}"		;279		l=16
+	DA	"Show Decoplan}"		;280		l=14
+	DA	"Lead Tis}}"			;281		l=10
+	DA	"Lead Tis}}"			;282		l=10
+	DA	"Stopwatch}"			;283		l=10
+	DA	"Reset Logbook}"		;284		l=14
+	DA	"Reboot OSTC}"			;285		l=12
+	DA	"Reset Decodata}}"		;286		l=16
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/valconv.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,262 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+; converts hex values to dez values
+; written by: Matthias Heinrichs, info@heinrichsweikamp.com
+; written: 13/10/07
+; last updated: 5/11/07
+; known bugs:
+; ToDo: clean up!!!
+
+
+output_16_3 macro			; displays only last three figures from a 16Bit value (0-999)
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	clrf	temp4
+	bsf		show_last3	
+	movf	temp4,W			; Temp4 stores position for decimal point
+	call 	output16
+	endm
+
+output_16dp macro temp4		; 16Bit with decimal point
+	movlw	temp4			; Temp4 stores position for decimal point
+	call 	output16		
+	endm					
+
+output_16 macro				; 16Bit Normal
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	clrf	temp4
+	movf	temp4,W			; Temp4 stores position for decimal point
+	call 	output16
+	endm
+
+output_8 macro				; 8 Bit Normal
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	clrf	temp4
+	call output8
+	endm
+
+output_99 macro				; displays only last two figures from a 8Bit value (0-99)
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	clrf	temp4
+	call 	output99
+	endm
+
+output_99x macro			; displays only last two figures from a 8Bit value with leading zero (00-99) 
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	clrf	temp4
+	call 	output99x
+	endm
+
+output99:
+	movlw	d'99'
+	cpfslt	lo
+	movwf	lo							; Limit to 99
+	movff	lo, lo_temp		
+	clrf	hi_temp
+	bcf		pre_zero_flag	; do not display leading zeros
+
+LCD_val99_2:	
+	movlw	b'00001010'	; 10
+	movwf	temp2		
+	clrf	temp3		
+	rcall	DEC2ASCII
+
+	movlw	b'00000001'	; 1
+	movwf	temp2		
+	clrf	temp3		
+	bsf		pre_zero_flag ; last figure, display zero (0)
+	rcall	DEC2ASCII
+	RETURN
+
+output99x:
+	movff	lo, lo_temp		
+	clrf	hi_temp
+	bsf		pre_zero_flag		; display leading zeros
+	bra		LCD_val99_2			
+	
+output8
+	movff	lo, lo_temp		
+	clrf	hi_temp
+	bcf		pre_zero_flag	; do not display leading zeros
+	
+	movlw	b'01100100'	; 100
+	movwf	temp2		
+	clrf	temp3		
+	rcall	DEC2ASCII
+	bra		LCD_val99_2			
+
+output16
+	bcf		all_zeros_flag	; do not display any zero from here unless there was at least one figure /zero
+
+	movwf	temp4
+	
+	bsf		leading_zeros
+	incf	temp4,1
+	decfsz	temp4,F
+	bcf		leading_zeros
+
+	bsf		DP_done2		
+	incf	temp4,1
+	decfsz	temp4,F
+	bcf		DP_done2		; decimal point not yet set
+	
+	movff	lo, lo_temp		
+	movff	hi, hi_temp		
+	bcf		pre_zero_flag	; do not display leading zeros
+	
+	movlw	b'00010000'	; 10000s
+	movwf	temp2		 
+	movlw	b'00100111'
+	movwf	temp3		 
+	btfss	show_last3		; display only last three figures?
+	rcall	DEC2ASCII
+	
+	movlw	b'11101000'	; 1000s
+	movwf	temp2		 
+	movlw	b'00000011'
+	movwf	temp3		 
+	btfsc	DP_done2			; Is there a decimal point at all?
+	bra		output16_2			; no, use normal display mode
+
+	btfsc	all_zeros_flag		; display any zero from here
+	bra		output16_1			; there was a figure /zero already
+
+	bsf		pre_zero_flag		; display figure if zero?
+	decfsz	temp4,W		
+	bcf		pre_zero_flag		; No
+
+output16_1:
+	btfsc	DP_done				; Decimal point set already?
+	bsf		pre_zero_flag		; Yes, so display the rest
+output16_2:
+	btfss	show_last3			; display only last three figures?
+	rcall	DEC2ASCII
+	bcf		show_last3			; No, so display the rest
+
+	movlw	b'01100100'	; 100s
+	movwf	temp2		 
+	clrf	temp3		
+
+	btfsc	ignore_digit3		; Ignore 3rd-5th digit?
+	bra		output16_5			; Yes, skip the rest
+
+	btfsc	DP_done2			; Is there a decimal point at all?
+	bra		output16_3			; no, use normal display mode
+
+	btfsc	all_zeros_flag		; display any zero from here
+	bra		output16_2_1		; there was a figure /zero already
+
+	bsf		pre_zero_flag		; display figure if zero?
+	decfsz	temp4,W		
+	bcf		pre_zero_flag		; No
+
+output16_2_1:
+	btfsc	DP_done				; Decimal point set already?
+	bsf		pre_zero_flag		; Yes, so display the rest
+	btfsc	DP_done2			; Is there a decimal point at all?
+	bsf		pre_zero_flag		; No, so display the rest
+output16_3:
+	rcall	DEC2ASCII
+
+	movlw	b'00001010'	; 10s
+	movwf	temp2		
+	clrf	temp3		
+	btfsc	DP_done2	
+	bra		output16_4	
+
+	btfsc	all_zeros_flag		; display any zero from here
+	bra		output16_3_1		; there was a figure /zero already
+
+	bsf		pre_zero_flag
+	decfsz	temp4,W		
+	bcf		pre_zero_flag
+
+output16_3_1:
+	btfsc	DP_done		
+	bsf		pre_zero_flag
+	btfsc	DP_done2	
+	bsf		pre_zero_flag		
+output16_4:
+	btfsc	ignore_digit4		; Ignore 4-5th digit?
+	bra		output16_5			; Yes, skip the rest
+	rcall	DEC2ASCII
+
+	movlw	b'00000001'	; 1s
+	movwf	temp2		
+	clrf	temp3		 
+	bsf		pre_zero_flag
+	btfss	ignore_digit5		; Ignore 5th digit?
+	rcall	DEC2ASCII			; No!
+	bcf		ignore_digit5		; yes, and clear flag
+output16_5:
+	bcf		ignore_digit3		; Clear flag
+	clrf	ignore_digits
+	incf	ignore_digits,F
+	bcf		DP_done
+	RETURN
+	
+DEC2ASCII	clrf	temp1		; converts into ASCII code
+DEC2ASCII_2	movf	temp3,W
+	subwf	hi_temp,0
+	btfss	STATUS,C	
+	bra		DEC2ASCII_4	
+	bnz		DEC2ASCII_3		
+
+	movf	temp2,W	
+	subwf	lo_temp,0
+	btfss	STATUS,C
+	bra		DEC2ASCII_4
+	
+DEC2ASCII_3	movf	temp3,W
+	subwf	hi_temp,1
+	movf	temp2,W
+	subwf	lo_temp,1
+	btfss	STATUS,C
+	decf	hi_temp,1
+	incf	temp1,1	
+	bsf		pre_zero_flag
+	bra		DEC2ASCII_2
+
+DEC2ASCII_4
+	decfsz	ignore_digits,F
+	return
+	incf	ignore_digits,F
+	movlw	'0'				; Offset for Ascii-value
+	addwf	temp1,0	
+	btfsc	pre_zero_flag	; is this a leading zero?
+	bra		DEC2ASCII_4_1	; no
+	btfsc	leftbind
+	bra		DEC2ASCII_6
+	movlw	' '				; instead of leading zeros a space!
+	bra		DEC2ASCII_5
+
+DEC2ASCII_4_1:
+	bsf		all_zeros_flag	; display any zero from here
+DEC2ASCII_5
+	movwf	POSTINC2
+DEC2ASCII_6	
+	decfsz	temp4,F			; Set decimal point?
+	RETURN					; No
+	movlw	"."				; Yes
+	movwf	POSTINC2
+	bsf		DP_done
+	RETURN
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_asm_part1/wait.asm	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,122 @@
+; OSTC - diving computer code
+; Copyright (C) 2008 HeinrichsWeikamp GbR
+;    This program is free software: you can redistribute it and/or modify
+;    it under the terms of the GNU General Public License as published by
+;    the Free Software Foundation, either version 3 of the License, or
+;    (at your option) any later version.
+;    This program is distributed in the hope that it will be useful,
+;    but WITHOUT ANY WARRANTY; without even the implied warranty of
+;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;    GNU General Public License for more details.
+;    You should have received a copy of the GNU General Public License
+;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+; Wait routines
+; written by: chsw, info@heinrichsweikamp.com
+; written: 01/31/04
+; last updated: 11/05/07
+; known bugs:
+; ToDo: 
+	
+; ==========================================================
+; 	WAIT 10 MICROSECONDS  -  16 MHZ
+; ==========================================================
+WAIT10US 	macro	wait_temp
+			movlw	wait_temp
+			call	WAIT10USX
+			endm
+
+WAIT10USX	movwf	wait_temp
+			goto	JumpIn10us
+WAIT10USX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpIn10us:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			decfsz	wait_temp,1
+			goto	WAIT10USX2
+			return
+; ==========================================================
+; 	WAIT 1 MILLISECOND  -  16 MHZ
+; ==========================================================
+WAITMS		macro	waitms_temp
+			movlw	waitms_temp
+			call WAITMSX
+			endm
+WAITMSX		movwf	waitms_temp
+			goto	JumpInMSX
+WAITMSX2	nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+JumpInMSX:
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			nop
+			WAIT10US d'99'
+			decfsz	waitms_temp,1
+			goto	WAITMSX2
+			return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/18f4685_ostc.lkr	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,58 @@
+
+// OSTC - diving computer code
+// Copyright (C) 2008 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// File: 18f4685.lkr
+// Sample linker script for the PIC18F4685 processor
+// modified by chsw for ostc, Nov. 2007
+
+LIBPATH .
+
+//FILES c018i.o
+FILES clib.lib
+FILES p18f4685.lib
+
+//CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
+//CODEPAGE   NAME=page       START=0x2A           END=0x17FFF
+CODEPAGE   NAME=page       START=0x0           END=0x17FFF
+CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
+CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
+CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
+CODEPAGE   NAME=eedata     START=0xF00000       END=0xF003FF       PROTECTED
+
+ACCESSBANK NAME=accessram  START=0x0            END=0x5F
+DATABANK   NAME=gpr0       START=0x60           END=0xFF
+DATABANK   NAME=gpr1       START=0x100          END=0x1FF
+DATABANK   NAME=gpr2       START=0x200          END=0x2FF
+DATABANK   NAME=gpr3       START=0x300          END=0x3FF
+DATABANK   NAME=gpr4       START=0x400          END=0x4FF
+DATABANK   NAME=gpr5       START=0x500          END=0x5FF
+DATABANK   NAME=gpr6       START=0x600          END=0x6FF
+DATABANK   NAME=gpr7       START=0x700          END=0x7FF
+DATABANK   NAME=gpr8       START=0x800          END=0x8FF
+DATABANK   NAME=gpr9       START=0x900          END=0x9FF
+DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
+DATABANK   NAME=gpr11      START=0xB00          END=0xBFF
+DATABANK   NAME=gpr12      START=0xC00          END=0xCFF
+DATABANK   NAME=sfr13      START=0xD00          END=0xDFF          PROTECTED
+DATABANK   NAME=sfr14      START=0xE00          END=0xEFF          PROTECTED
+DATABANK   NAME=sfr15      START=0xF00          END=0xF5F          PROTECTED
+ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED
+
+SECTION    NAME=CONFIG     ROM=config
+
+STACK SIZE=0x100 RAM=gpr12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/changes_log.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,20 @@
+changes for v.101_C last deco:
+
+text_table_v111.asm : line 249
+	DA	"Last Deco   [m]}"		;65 (entspricht CF29)
+
+menu_reset_v111.asm : 
+line 153
+#DEFINE	last_deco_depth				d'3'		; 8Bit		3m
+line 253f
+	movlw	LOW		last_deco_depth				
+
+divemode_v111.asm
+line 421ff
+	GETCUSTOM8	d'29'				; Depth Last Deco in meter for simulation
+	movwf	wait_temp
+	movff	wait_temp,char_I_depth_last_deco
+
+definitions_v111.asm
+line 302
+ char_I_depth_last_deco;			; 0x51E	new in v.101
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/old/changes_log.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,20 @@
+changes for v.101_C last deco:
+
+text_table_v111.asm : line 249
+	DA	"Last Deco   [m]}"		;65 (entspricht CF29)
+
+menu_reset_v111.asm : 
+line 153
+#DEFINE	last_deco_depth				d'3'		; 8Bit		3m
+line 253f
+	movlw	LOW		last_deco_depth				
+
+divemode_v111.asm
+line 421ff
+	GETCUSTOM8	d'29'				; Depth Last Deco in meter for simulation
+	movwf	wait_temp
+	movff	wait_temp,char_I_depth_last_deco
+
+definitions_v111.asm
+line 302
+ char_I_depth_last_deco;			; 0x51E	new in v.101
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/old/p2_deco_main - bigscreen.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3230 @@
+/*
+ *  p2_deco_main.c
+ *
+ *  Created on: 31.08.2009
+ *      Author: christian.w @ heinrichsweikamp.com
+ *
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+// OSTC - diving computer code
+// Copyright (C) 2009 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+
+#	define	DBG_c_gas	0b0000000000000001
+#	define	DBG_c_ppO2	0b0000000000000010
+#	define	DBG_RUN 	0b0000000000000100
+#	define	DBG_RESTART 0b0000000000001000
+
+#	define	DBG_CdeSAT 	0b0000000000010000
+#	define	DBG_C_MODE	0b0000000000100000
+#	define	DBG_C_SURF	0b0000000001000000
+#	define	DBG_HEwoHE 	0b0000000010000000
+
+#	define	DBG_C_DPPO2	0b0000000100000000
+#	define	DBG_C_DGAS 	0b0000001000000000
+#	define	DBG_C_DIST	0b0000010000000000
+#	define	DBG_C_LAST	0b0000100000000000
+
+#	define	DBG_C_GF	0b0001000000000000
+#	define	DBG_ZH16ERR	0b0010000000000000
+#	define	DBG_PHIGH	0b0100000000000000
+#	define	DBG_PLOW	0b1000000000000000
+
+
+#	define	DBS_mode	0b0000000000000001
+#	define	DBS_ppO2	0b0000000000000010
+#	define	DBS_HE_sat	0b0000000000000100
+#	define	DBS_ppO2chg 0b0000000000001000
+
+#	define	DBS_SAT2l	0b0000000000010000
+#	define	DBS_SAT2h	0b0000000000100000
+#	define	DBS_GFLOW2l	0b0000000001000000
+#	define	DBS_GFLOW2h	0b0000000010000000
+
+#	define	DBS_GFHGH2l	0b0000000100000000
+#	define	DBS_GFHGH2h	0b0000001000000000
+#	define	DBS_GASO22l	0b0000010000000000
+#	define	DBS_GASO22h	0b0000100000000000
+
+#	define	DBS_DIST2h 	0b0001000000000000
+#	define	DBS_LAST2h 	0b0010000000000000
+#	define	DBS_DECOO2l	0b0100000000000000
+#	define	DBS_DECOO2h	0b1000000000000000
+
+
+#	define	DBS2_PRES2h 0b0000000000000001
+#	define	DBS2_PRES2l 0b0000000000000010
+#	define	DBS2_SURF2l	0b0000000000000100
+#	define	DBS2_SURF2h	0b0000000000001000
+
+#	define DBS2_DESAT2l 0b0000000000010000
+#	define DBS2_DESAT2h 0b0000000000100000
+#	define	DBS2_GFDneg 0b0000000001000000
+#	define	DBS2_ 0b000000000000000
+
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+
+// NDL_at_20mtr
+
+
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#define	WP_SIZECHAR_SMALL		336
+#define	WP_SIZECHAR_MEDIUM		768
+#define	WP_FONT_SMALL_HEIGHT	 24
+#define	WP_FONT_MEDIUM_HEIGHT	 32
+
+#define oled_rw	PORTA,2,0
+#define oled_rs	PORTE,0,0
+
+#define U8 unsigned char
+#define U16 unsigned int
+
+#pragma udata bank0a=0x060
+/*
+	CBLOCK	0x060				;Bank 0
+	letter:.026					;letter buffer
+	win_color1
+	win_color2
+	win_top
+	win_leftx2
+	win_font
+	win_invert
+	win_temp
+*/
+
+volatile unsigned char wp_stringstore[26];
+volatile U8 wp_color1;
+volatile U8 wp_color2;
+volatile U8 wp_top;
+volatile U8 wp_leftx2;
+volatile U8 wp_font;
+volatile U8 wp_invert;
+volatile U8 wp_temp_U8;
+
+#pragma udata bank0b=0x081
+volatile unsigned char keep_free_bank0_1[5];
+
+#pragma udata bank0c=0x086
+U8 wp_txtptr;
+unsigned char wp_char;
+U8	wp_command;
+U16	wp_data_16bit;
+U8	wp_data_8bit_one;
+U8	wp_data_8bit_two;
+U16	wp_start;
+U16	wp_end;
+U16	wp_i;
+U8 	wp_black;
+
+#pragma udata bank0d=0x0E0
+volatile unsigned char keep_free_bank0_2[32];
+
+/*
+volatile unsigned char dd2_left;		// 1 - 64
+volatile unsigned char dd2_top;			// 1 - 64
+volatile unsigned char dd2_heightmax; 	// 1 - 37
+volatile unsigned char dd2_oled_brightness_offset; // 0 - 15 (15 is pitch black always)
+volatile unsigned char dd2_fontwidth;	//  8, 12, 21 for Incon16, Incon24, Incon42
+volatile unsigned char dd2_fontheight;	// 14, 21, 37 for "
+volatile unsigned long dd2_pointer;		// for font lut
+volatile unsigned char dd2_i;
+volatile unsigned char dd2_j;
+volatile unsigned char dd2_k;
+volatile unsigned char dd2_char;
+volatile unsigned char dd2_lowbyte;
+volatile unsigned char dd2_temp;
+volatile unsigned char dd2_data;
+volatile unsigned long dd2_base;			// for font lut
+volatile unsigned char dd2_start;			// for font lut
+volatile unsigned char dd2_end;			// for font lut
+*/
+
+ #pragma udata bank1=0x100
+ const unsigned char keep_free_bank1[256]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// ...
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ #pragma udata bank7=0x700
+ const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ #pragma udata bank9b=0x930
+// output:
+ static unsigned int	int_O_DBS_bitfield;					// 0x930	new in v.108
+ static unsigned int	int_O_DBS2_bitfield;				// 0x932	new in v.108
+ static unsigned int	int_O_DBG_pre_bitfield;				// 0x934	new in v.108
+ static unsigned int	int_O_DBG_post_bitfield;			// 0x936	new in v.108
+ static char			char_O_NDL_at_20mtr;				// 0x938	new in v.108 // 0xFF == undefined, max. 254
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+// internal, dbg:
+ static unsigned char	DBG_char_I_deco_model;				// new in v.108
+ static unsigned char	DBG_char_I_depth_last_deco;			// new in v.108
+ static float			DBG_pres_surface;					// new in v.108
+ static float			DBG_GF_low;							// new in v.108
+ static float			DBG_GF_high;						// new in v.108
+ static float			DBG_const_ppO2;						// new in v.108
+ static float			DBG_deco_ppO2_change;				// new in v.108
+ static float			DBG_deco_ppO2;						// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_deco_gas_change;				// new in v.108
+ static float			DBG_float_saturation_multiplier;	// new in v.108
+ static float			DBG_float_desaturation_multiplier;	// new in v.108
+ static float			DBG_float_deco_distance;			// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_N2_ratio;						// new in v.108
+ static float			DBG_He_ratio;						// new in v.108
+ static char			flag_in_divemode;					// new in v.108
+ static	int 			int_dbg_i;							// new in v.108
+ unsigned int 			temp_DBS;
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);
+void DD2_set_column(void);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);
+void DD2_print_column(void);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+void wordprocessor(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+#if 1
+// new main to test DR-5
+
+wp_top = 10;
+wp_leftx2 = 10;
+wp_color1 = 255;
+wp_color2 = 255;
+wp_font   = 0;
+wp_invert = 0;
+wp_stringstore[0] = '°';
+wp_stringstore[1] = '1';
+wp_stringstore[2] = 'a';
+wp_stringstore[3] = ':';
+wp_stringstore[4] = 0;
+wordprocessor();
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+/*
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+*/
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***************
+// ***************
+// ** THE FONTS **
+// ***************
+// ***************
+// all new for bigscreen
+
+#pragma romdata font_table_medium = 0x0A000
+rom const rom U16 wp_medium_table[] =
+{
+#include "ostc48.tbl.txt"
+};
+
+#pragma romdata font_data_medium = 0x0A020
+rom const rom U16 wp_medium_data[] =
+{
+#include "ostc48.drx.txt"
+};
+
+#pragma romdata font_table_small = 0x0A3B0
+rom const rom U16 wp_small_table[] =
+{
+#include "ostc28.tbl.txt"
+};
+
+#pragma romdata font_data_small = 0x0A544
+rom const rom U16 wp_small_data[] =
+{
+#include "ostc28.drx.txt"
+};
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+
+#pragma code subroutines2 = 0x0C000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------------
+// DBS - debug on start of dive //
+// -------------------------------
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & DBG_RUN)
+		int_O_DBG_pre_bitfield = DBG_RESTART;
+	else
+		int_O_DBG_pre_bitfield = DBG_RUN;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= DBS_mode;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= DBS_ppO2;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= DBS_HE_sat;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= DBS_ppO2chg;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= DBS_SAT2l;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= DBS_SAT2h;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= DBS_GFLOW2l;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= DBS_GFLOW2h;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= DBS_GFHGH2l;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= DBS_GFHGH2h;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= DBS_GASO22l;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= DBS_GASO22h;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= DBS_DIST2h;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= DBS_LAST2h;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= DBS_DECOO2l;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= DBS_DECOO2h;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= DBS2_PRES2h;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= DBS2_PRES2l;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= DBS2_SURF2l;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= DBS2_SURF2h;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= DBS2_DESAT2l;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= DBS2_DESAT2h;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= DBS2_GFDneg;
+}
+
+// -------------------------------
+// DBG - set DBG to end_of_dive //
+// -------------------------------
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~DBG_RUN);
+	int_O_DBG_post_bitfield &= (~DBG_RUN);
+}
+
+// -------------------------------
+// DBG - NDL at first 20 m. hit //
+// -------------------------------
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+// -------------------------------
+// DBG - multi main during dive //
+// -------------------------------
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= DBG_c_gas;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= DBG_c_ppO2;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= DBG_CdeSAT;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= DBG_C_MODE;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= DBG_C_SURF;
+	if((!DBS_HE_sat) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= DBG_HEwoHE;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= DBG_C_DPPO2;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= DBG_C_DGAS;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= DBG_C_DIST;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= DBG_C_LAST;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= DBG_C_GF;
+	if(pres_respiration > 13.0)
+		temp_DBS |= DBG_PHIGH;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= DBG_PLOW;
+/*
+	if()
+		temp_DBS |= ;
+	if()
+		temp_DBS |= ;
+ */
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+// -------------------------------
+// DBG - prior to calc. of dive //
+// -------------------------------
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+// -------------------------------
+// DBG - after decocalc of dive //
+// -------------------------------
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// -----------
+// dd2 OLD  //
+// -----------
+void DD2_write(void)
+{
+	_asm
+	nop
+	_endasm
+}
+void DD2_write_incon42(void)
+{
+	DD2_write();
+}
+
+void DD2_write_incon24(void)
+{
+	DD2_write();
+}
+void DD2_get_pointer_to_char(void)
+{
+	DD2_write();
+}
+void DD2_set_column(void)
+{
+	DD2_write();
+}
+void DD2_load_background(void)
+{
+	DD2_write();
+}
+void DD2_build_one_line_of_char(void)
+{
+	DD2_write();
+}
+void DD2_print_column(void)
+{
+	DD2_write();
+}
+void DD2_CmdWrite(void)
+{
+	DD2_write();
+}
+void DD2_DataWrite(void)
+{
+	DD2_write();
+}
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	DD2_write_incon42();
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	DD2_write_incon24();
+}
+
+#pragma code main_wordprocessor = 0x100B8
+void main_wordprocessor(void)
+{
+	wordprocessor();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
+void wp_write_command(void)
+{
+	_asm
+		bcf		oled_rs
+		movff	wp_command,PORTD
+		bcf		oled_rw
+		bsf		oled_rw
+	_endasm
+}
+
+void wp_write_data(void)
+{
+	wp_data_8bit_one = wp_data_16bit >> 8;
+	wp_data_8bit_two = wp_data_16bit;
+_asm
+	bsf		oled_rs
+	movff	wp_data_8bit_one,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_data_8bit_two,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_black(void)
+{
+_asm
+	movff	wp_black,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_color(void)
+{
+_asm
+	movff	wp_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_set_window(void)
+{
+	// x axis start ( 0 - 319)
+	wp_command = 0x35;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+	// x axis end ( 0 - 319)
+	wp_command = 0x36;
+	wp_write_command();
+	wp_data_16bit = 319;
+	wp_write_data();
+	// y axis start + end ( 0 - 239 )
+	wp_command = 0x37;
+	wp_write_command();
+	// the bottom part
+	wp_data_16bit = wp_top;
+	if(wp_font & 1)
+	{
+		wp_data_16bit += WP_FONT_MEDIUM_HEIGHT;
+		if(wp_font & 2)
+			wp_data_16bit += WP_FONT_MEDIUM_HEIGHT;
+	}
+	else
+	{
+		wp_data_16bit += WP_FONT_SMALL_HEIGHT;
+		if(wp_font & 2)
+			wp_data_16bit += WP_FONT_SMALL_HEIGHT;
+	}
+	wp_data_16bit--;
+	if(wp_data_16bit > 239)
+		wp_data_16bit = 239;
+	// the top part
+	wp_data_16bit |= ((U16)wp_top) << 8;
+	// all together in one 16bit transfer
+	wp_write_data();
+
+	// start
+	wp_command = 0x20;
+	wp_write_command();
+	wp_data_16bit = wp_top;
+	wp_write_data();
+
+	wp_command = 0x21;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+}
+
+void wp_set_char_font_small(void)
+{
+	if (wp_char > 0x7E)
+		wp_char -= 34;
+	if ((wp_char >= 1) && (wp_char <= 5)) // battery
+		wp_char += 160;
+	if((wp_char < '!') || (wp_char > 166)) // limit to end of battery at the moment
+		wp_char = ' ';
+	if(wp_char != ' ')
+	{
+		wp_start = wp_small_table[wp_char - '!'];
+		wp_end = wp_small_table[1 + wp_char - '!'];
+	}
+}
+
+void wp_set_char_font_medium(void)
+{
+	if (wp_char == 0x27) // 0x27 == '
+		wp_char = 0x3B;
+	if (wp_char == '"')
+		wp_char = 0x3C;
+	if (wp_char == 'm')
+		wp_char = 0x3D;
+	if((wp_char < '.') || (wp_char > 0x3D))
+		wp_char = ' ';
+	if(wp_char != ' ')
+	{
+		wp_start = wp_medium_table[wp_char - '.'];
+		wp_end = wp_medium_table[1 + wp_char - '.'];
+	}
+}
+
+void wordprocessor(void)
+{
+	wp_data_8bit_one = 0;
+	_asm
+		movff	wp_data_8bit_one,POSTINC2
+	_endasm
+
+	wp_set_window();
+
+	// access to GRAM
+	wp_command = 0x22;
+	wp_write_command();
+	_asm
+		bsf		oled_rs
+	_endasm
+
+	wp_txtptr = 0;
+	wp_char = wp_stringstore[wp_txtptr];
+	while(wp_char)
+	{
+		if(wp_font & 1)
+			wp_set_char_font_medium();
+		else
+			wp_set_char_font_small();
+
+		wp_black = 0;
+		if(wp_char == ' ')
+		{
+			_asm
+				movff	wp_black,PORTD
+			_endasm
+			if(wp_font & 1)
+				for(wp_i =0; wp_i<WP_SIZECHAR_MEDIUM;wp_i++)
+				{
+					_asm
+						bcf		oled_rw
+						bsf		oled_rw
+						bcf		oled_rw
+						bsf		oled_rw
+					_endasm
+				}
+			else
+				for(wp_i =0; wp_i<WP_SIZECHAR_SMALL;wp_i++)
+				{
+					_asm
+						bcf		oled_rw
+						bsf		oled_rw
+						bcf		oled_rw
+						bsf		oled_rw
+					_endasm
+				}
+		}
+		else
+		{
+			for(wp_i = wp_start; wp_i<wp_end;wp_i++)
+			{
+				if(wp_font & 1)
+					wp_data_16bit = wp_medium_data[wp_i / 2];
+				else
+					wp_data_16bit = wp_small_data[wp_i / 2];
+				if(wp_i & 1)
+					wp_temp_U8 = wp_data_16bit & 0xFF;
+				else
+					wp_temp_U8 = wp_data_16bit >> 8;
+				if((wp_temp_U8 & 128))
+				{
+					wp_temp_U8 -= 127;
+					if(wp_invert)
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+					else
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+				}
+				else
+				{
+					wp_temp_U8++;
+					if(wp_invert)
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+					else
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+				}
+			}
+		}
+		wp_txtptr++;
+		wp_char = wp_stringstore[wp_txtptr];
+	}
+	wp_command = 0x00;
+	wp_write_command();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/old/p2_deco_main_old_v107.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3453 @@
+/*
+ * p2_deco_main_c_v107.c
+ *
+ *  Created on: 31.03.2009
+ *      Author: chsw
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+
+// OSTC - diving computer code
+// Copyright (C) 2008 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+#define oled_clk			PORTD, 0,0
+#define oled_data			PORTD, 1,0
+#define oled_en				PORTE, 0,0
+#define oled_rs				PORTE, 1,0
+#define flag5				0x29	// in Bank1
+//#define	no_sensor_int		flag5,7,1	// ; block any further access to pressure sensor
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#pragma udata bank0a=0x060
+volatile unsigned char dd2_stringstore[17];
+#pragma udata bank0b=0x071
+volatile unsigned char keep_free_bank0[21];
+
+#pragma udata bank0c=0x086
+volatile unsigned char dd2_left;		// 1 - 64
+volatile unsigned char dd2_top;			// 1 - 64
+volatile unsigned char dd2_heightmax; 	// 1 - 37
+volatile unsigned char dd2_oled_brightness_offset; // 0 - 15 (15 is pitch black always)
+volatile unsigned char dd2_fontwidth;	//  8, 12, 21 for Incon16, Incon24, Incon42
+volatile unsigned char dd2_fontheight;	// 14, 21, 37 for "
+volatile unsigned long dd2_pointer;		// for font lut
+volatile unsigned char dd2_i;
+volatile unsigned char dd2_j;
+volatile unsigned char dd2_k;
+volatile unsigned char dd2_char;
+volatile unsigned char dd2_lowbyte;
+volatile unsigned char dd2_temp;
+volatile unsigned char dd2_data;
+volatile unsigned long dd2_base;			// for font lut
+volatile unsigned char dd2_start;			// for font lut
+volatile unsigned char dd2_end;			// for font lut
+
+
+ #pragma udata bank1=0x100
+ const unsigned char keep_free_bank1[256]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// ...
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+
+
+
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ #pragma udata bank7=0x700
+ const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! has to be at the beginning of bank 9 for the asm code!!!
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+
+
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+//void debug(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+//void build_debug_output(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);//dd2_char, &dd2_pointer);
+void DD2_set_column(void);//top, dd2_k);void DD2_load_background(void);//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+void DD2_print_column(void);//&dd2_columnstore, dd2_heightmax);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+#if 1
+// new main to test DR-5
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+
+#pragma code subroutines2 = 0x0D000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// ---------------------
+// dd2_write_incon42  //
+// ---------------------
+void DD2_write_incon42(void)
+{
+//dd2_fontwidth	= 21;
+//dd2_fontheight  = 30;
+dd2_fontwidth	= 19;
+dd2_fontheight  = 28;
+dd2_base = 0x0F500;
+dd2_start = '0';
+dd2_end = '9';
+DD2_write();
+}
+
+// ---------------------
+// dd2_write_incon24  //
+// ---------------------
+void DD2_write_incon24(void)
+{
+dd2_fontwidth	= 12;
+dd2_fontheight  = 16;
+dd2_base = 0x0E100;
+dd2_start = '.';
+dd2_end = '9' + 5;
+DD2_write();
+}
+
+
+void DD2_write(void)
+{
+	dd2_i = 0;
+_asm
+	movff	dd2_i, POSTINC2 // write 0x00 at the end of dd2_strinstore[]
+	bsf		oled_rs
+_endasm
+	dd2_stringstore[16] = 0;	// safety if more than 16 letters (max at font incon16) are written, the other space is used by font remap
+	if (dd2_top == 0) dd2_top = 1;
+	if (dd2_left == 0) dd2_left = 1;
+	if (dd2_heightmax > dd2_fontheight) dd2_heightmax = dd2_fontheight;
+	if ((dd2_top + dd2_heightmax) > 65) dd2_heightmax = 65 - dd2_top;
+
+	dd2_k = dd2_left;
+	dd2_j = 0;
+	dd2_char = dd2_stringstore[dd2_j++];
+	DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+	dd2_i = 0;
+	dd2_lowbyte = 1;
+
+while (dd2_char != 0)
+{
+		if (dd2_lowbyte == 1)	DD2_load_background();//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+		DD2_build_one_line_of_char();	//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte); 	// dd2_heightmax
+		dd2_lowbyte = dd2_lowbyte ^ 1;
+		if (dd2_lowbyte == 1)
+		{
+			DD2_set_column();//top, dd2_k); 				//
+			if(dd2_k < 64) dd2_k++;
+			DD2_print_column();//&dd2_columnstore, dd2_heightmax);				// dd2_column_store, dd2_heightmax
+		}
+		dd2_i++;
+		if ((dd2_i >= dd2_fontwidth) | (((dd2_char == '.') |(dd2_char == ':') | (dd2_char == '<')) & (dd2_i >= 4)))
+		{
+			dd2_char = dd2_stringstore[dd2_j++];
+			DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+			dd2_i = 0;
+		}
+}
+}		// void dd2_write(void)
+
+void DD2_get_pointer_to_char(void)//dd2_char, &dd2_pointer);
+{
+		if((dd2_char < dd2_start) | (dd2_char > dd2_end))
+		{
+			dd2_pointer = 0;
+			dd2_temp = 0;
+		}
+		else
+		{
+			dd2_pointer = dd2_char - dd2_start;
+			dd2_pointer = dd2_pointer * ((dd2_fontheight+1)/2);
+			dd2_pointer = dd2_pointer * dd2_fontwidth;
+			dd2_pointer += dd2_base;
+			if((dd2_char == '.') | (dd2_char == ':') | (dd2_char == '<'))
+			{
+				dd2_pointer += 2 * dd2_fontheight;
+			}
+
+		}
+}		// void DD2_get_pointer_to_char(void)
+
+void DD2_set_column(void)//top, dd2_k);
+{
+	dd2_data = 0x75;
+	DD2_CmdWrite();
+	dd2_data = dd2_top - 1;
+	DD2_CmdWrite();
+	dd2_data = 0x3f;
+	DD2_CmdWrite();
+
+	dd2_data = 0x15;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+}		// DD2_set_column()
+
+void DD2_load_background(void)//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+{
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+		md_pi_subst[dd2_temp] = 0x00;
+}		// void DD2_load_background()
+
+void DD2_build_one_line_of_char(void)//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+{
+	if (dd2_pointer != 0)
+	{
+		dd2_temp = (char)(dd2_pointer & 255);
+_asm
+		movff	dd2_temp,TBLPTRL
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 8) & 255);
+_asm
+		movff	dd2_temp,TBLPTRH
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 16)& 255);
+_asm
+		movff	dd2_temp,TBLPTRU
+_endasm
+
+		for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp += 2)
+		{
+_asm
+			TBLRDPOSTINC
+			movff	TABLAT,dd2_data
+_endasm
+			if (dd2_oled_brightness_offset != 0)
+			{
+				if ((dd2_oled_brightness_offset << 4) < (dd2_data & 0xF0))
+					dd2_data = dd2_data - (dd2_oled_brightness_offset << 4);
+				if ((dd2_oled_brightness_offset) < (dd2_data & 0x0F))
+					dd2_data = dd2_data - dd2_oled_brightness_offset;
+			}
+			if (dd2_lowbyte == 1)
+			{
+				md_pi_subst[dd2_temp]   = dd2_data & 0xF0;
+				md_pi_subst[dd2_temp+1] = (dd2_data << 4) & 0xF0;
+			}
+			else
+			{
+				md_pi_subst[dd2_temp]   = (md_pi_subst[dd2_temp] & 0xF0) | ((dd2_data >> 4) & 0x0F);
+				md_pi_subst[dd2_temp+1] = (md_pi_subst[dd2_temp+1] & 0xF0) | (dd2_data & 0x0F);
+			}
+		}//for
+		dd2_pointer += (dd2_fontheight+1)/2;
+	}//if
+}		//
+
+void DD2_print_column(void)//&dd2_columnstore, dd2_heightmax);
+{
+_asm
+		bsf	oled_rs
+_endasm
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+	{
+		dd2_data = md_pi_subst[dd2_temp];
+		DD2_DataWrite();
+	}
+}		// void DD2_print_column(void)
+
+//; -----------------------------
+//; DD Write Cmd via W
+//; two jump_ins:
+//;  DD_CmdWrite and DD_CmdWrite2
+//; -----------------------------
+void DD2_CmdWrite(void)
+{
+_asm
+	bcf		oled_rs
+_endasm
+	DD2_DataWrite();
+}
+
+void DD2_DataWrite(void)
+{
+_asm
+	movlb	1
+//	bsf		no_sensor_int					// flag5, no_sensor_int
+	bcf		oled_en
+	movlb	0
+	bcf		oled_clk				//; CLK=0
+	btfsc	dd2_data,7,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,7,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,6,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,6,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,5,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,5,1
+	bcf		oled_data				//;
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,4,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,4,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,3,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,3,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,2,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,2,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,1,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,1,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,0,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,0,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	bsf		oled_en					//; CS#=1
+	movlb	1
+//	bcf		no_sensor_int					// flag5, no_sensor_int
+	movlb	0
+_endasm
+	dd2_data	= 0; // to be sure that C knows we are in Bank0
+}
+#pragma romdata font_incon_24h15 = 0x0E100
+ rom const rom unsigned char incon24h15[] =
+ {
+		  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xff, 0xa0
+		 ,0x00, 0x00, 0x00, 0x00, 0x5c, 0xff, 0x91, 0x00
+		 ,0x00, 0x00, 0x00, 0x6d, 0xfe, 0x71, 0x00, 0x00
+		 ,0x00, 0x01, 0x7e, 0xfd, 0x60, 0x00, 0x00, 0x00
+		 ,0x01, 0x8f, 0xfd, 0x50, 0x00, 0x00, 0x00, 0x00
+		 ,0x9f, 0xfb, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x72, 0x00, 0x00
+		 ,0x00, 0x9f, 0xfe, 0xdc, 0xdf, 0xff, 0xb2, 0x00
+		 ,0x1d, 0xf8, 0x20, 0x00, 0x05, 0xfd, 0xff, 0x30
+		 ,0xaf, 0x30, 0x00, 0x00, 0x9f, 0x90, 0x2e, 0xd0
+		 ,0xf8, 0x00, 0x00, 0x2c, 0xf5, 0x00, 0x06, 0xf0
+		 ,0xf8, 0x00, 0x04, 0xed, 0x30, 0x00, 0x05, 0xf0
+		 ,0xaf, 0x30, 0x8f, 0xb1, 0x00, 0x00, 0x0c, 0xe0
+		 ,0x1d, 0xfd, 0xf8, 0x00, 0x00, 0x16, 0xdf, 0x40
+		 ,0x00, 0x9f, 0xff, 0xdc, 0xde, 0xff, 0xc3, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x73, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x02, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30
+		 ,0x0a, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x2f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0xaf, 0x97, 0x77, 0x77, 0x77, 0x77, 0x79, 0xf0
+		 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x26, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40
+		 ,0x07, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0
+		 ,0x4f, 0x80, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0xf0
+		 ,0xcc, 0x00, 0x00, 0x00, 0x02, 0xef, 0x57, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0x2e, 0xe2, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x01, 0xde, 0x20, 0x07, 0xf0
+		 ,0xce, 0x10, 0x00, 0x2d, 0xe2, 0x00, 0x07, 0xf0
+		 ,0x4f, 0xd6, 0x58, 0xfe, 0x30, 0x00, 0x07, 0xf0
+		 ,0x06, 0xff, 0xff, 0xb1, 0x00, 0x00, 0x07, 0xf0
+		 ,0x00, 0x14, 0x52, 0x00, 0x00, 0x00, 0x05, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
+		 ,0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x50
+		 ,0x6f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xd0
+		 ,0xdb, 0x00, 0x00, 0x59, 0x00, 0x00, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x04, 0xf0
+		 ,0xea, 0x00, 0x00, 0xcf, 0x10, 0x00, 0x06, 0xf0
+		 ,0x9f, 0x30, 0x07, 0xff, 0x90, 0x00, 0x1e, 0xe0
+		 ,0x1e, 0xfc, 0xdf, 0x87, 0xfb, 0x79, 0xef, 0x50
+		 ,0x01, 0x9d, 0xc6, 0x00, 0x7e, 0xff, 0xd5, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x06, 0xff, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x02, 0xcf, 0x69, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x7f, 0xb1, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x2c, 0xe6, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x07, 0xfb, 0x10, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0xcf, 0xfc, 0xcc, 0xcc, 0xce, 0xfd, 0xdd, 0xd0
+		 ,0xde, 0xee, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00
+		 ,0x78, 0xab, 0xcd, 0xed, 0x00, 0x00, 0xce, 0x20
+		 ,0xff, 0xed, 0xcc, 0xfa, 0x00, 0x00, 0x5f, 0xb0
+		 ,0xf9, 0x00, 0x06, 0xf0, 0x00, 0x00, 0x08, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xb0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x08, 0xf3, 0x00, 0x00, 0x0b, 0xf0
+		 ,0xf9, 0x00, 0x01, 0xfe, 0x62, 0x13, 0xbf, 0x90
+		 ,0xf9, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xfb, 0x00
+		 ,0x11, 0x00, 0x00, 0x01, 0x6a, 0xa9, 0x40, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x03, 0x56, 0x65, 0x30, 0x00, 0x00
+		 ,0x00, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x00
+		 ,0x08, 0xfe, 0x96, 0x8f, 0x95, 0x6a, 0xff, 0x30
+		 ,0x6f, 0x90, 0x01, 0xf8, 0x00, 0x00, 0x3e, 0xd0
+		 ,0xec, 0x00, 0x08, 0xf0, 0x00, 0x00, 0x06, 0xf0
+		 ,0xf6, 0x00, 0x0a, 0xe0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf7, 0x00, 0x07, 0xf3, 0x00, 0x00, 0x09, 0xf0
+		 ,0xcd, 0x10, 0x01, 0xef, 0x72, 0x13, 0xaf, 0x90
+		 ,0x4d, 0x20, 0x00, 0x2d, 0xff, 0xff, 0xf9, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x47, 0x86, 0x10, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x39, 0xef, 0xf0
+		 ,0xfa, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xe9, 0x40
+		 ,0xfa, 0x00, 0x05, 0xbf, 0xff, 0x94, 0x00, 0x00
+		 ,0xfa, 0x18, 0xef, 0xfb, 0x50, 0x00, 0x00, 0x00
+		 ,0xfe, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x78, 0x50, 0x00
+		 ,0x03, 0xad, 0xb4, 0x00, 0x7f, 0xff, 0xfc, 0x00
+		 ,0x3f, 0xfc, 0xff, 0x66, 0xfa, 0x43, 0xaf, 0xa0
+		 ,0xcd, 0x10, 0x1c, 0xfe, 0x70, 0x00, 0x0b, 0xf0
+		 ,0xf5, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x05, 0xf0
+		 ,0xf5, 0x00, 0x00, 0xbf, 0x10, 0x00, 0x04, 0xf0
+		 ,0xec, 0x00, 0x07, 0xff, 0xb0, 0x00, 0x0a, 0xf0
+		 ,0x6f, 0xd9, 0xcf, 0x78, 0xfb, 0x32, 0x9f, 0x90
+		 ,0x07, 0xef, 0xe6, 0x00, 0x9f, 0xff, 0xfb, 0x00
+		 ,0x00, 0x01, 0x00, 0x00, 0x03, 0x88, 0x50, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x03, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x04, 0xdf, 0xff, 0xfb, 0x10, 0x00, 0x0b, 0x60
+		 ,0x4f, 0xd7, 0x45, 0x9f, 0xd0, 0x00, 0x1c, 0xe0
+		 ,0xdd, 0x00, 0x00, 0x05, 0xf5, 0x00, 0x05, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x04, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x08, 0xf0
+		 ,0xbe, 0x20, 0x00, 0x06, 0xf2, 0x00, 0x5f, 0xa0
+		 ,0x2e, 0xf9, 0x54, 0x7f, 0x94, 0x7c, 0xfc, 0x00
+		 ,0x02, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0x70, 0x00
+		 ,0x00, 0x01, 0x46, 0x77, 0x75, 0x30, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x06, 0xa1, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x1f, 0xf9, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x0d, 0xf5, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xba, 0xae, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xe9, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x97, 0x8c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x6a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfd, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xa8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x2c, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xdd, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf2, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf0, 0x00, 0x4f, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xea, 0x23, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x4f, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10
+		 ,0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x9f, 0xa7, 0x77, 0x77, 0x77, 0x70
+		 ,0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xff, 0xcb, 0xbb, 0xbb, 0xbb, 0xb0
+		 ,0x00, 0x00, 0x4f, 0xfe, 0xee, 0xee, 0xee, 0xe0
+		 ,0x00, 0x00, 0xab, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xfa, 0x55, 0x55, 0x55, 0x55, 0x50
+		 ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x02, 0x44, 0x44, 0x44, 0x44, 0x40
+ };
+
+#pragma romdata font_incon_42 = 0x0F500
+ rom const rom unsigned char incon42[] =
+ {
+	 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+	  ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+	  ,0x00, 0xbf, 0xff, 0xc7, 0x65, 0x43, 0x22, 0x33, 0x57, 0xbf, 0xff, 0xfd, 0x20, 0x00
+	  ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6e, 0xff, 0xd1, 0x00
+	  ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xfa, 0x00
+	  ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0x20
+	  ,0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x60
+	  ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+	  ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+	  ,0xcf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+	  ,0x4f, 0xfe, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+	  ,0x07, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+	  ,0x00, 0x5e, 0xff, 0xfb, 0x98, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+	  ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+	  ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+#if 0
+// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+#endif
+//
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+#if 0
+#pragma romdata font_incon_42 = 0x0E000
+ rom const rom unsigned char incon42[] =
+ {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x00, 0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0x00, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x02, 0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x00, 0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x00, 0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x00, 0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x00, 0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0x00, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x00, 0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x00, 0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x01, 0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x03, 0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x00, 0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x00, 0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0x01, 0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0x02, 0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x01, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x00, 0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0x00, 0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x04, 0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0x03, 0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x00, 0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x00, 0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x00, 0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0x00, 0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0x01, 0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0x05, 0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0x00, 0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x00, 0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x00, 0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x00, 0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x05, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0x04, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0x00, 0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x00, 0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x00, 0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+#endif
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	DD2_write_incon42();
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	DD2_write_incon24();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+ deco_gas_change = deco_gas_change + float_deco_distance;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = (float)char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = (float)char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/old/p2_deco_main_old_v108_pre OSTC2.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3753 @@
+/*
+ * p2_deco_main_c_v108.c
+ *
+ *  Created on: 12.05.2009
+ *      Author: chsw
+ *
+ * Changes: debug / plausibiliy output
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+
+// OSTC - diving computer code
+// Copyright (C) 2008 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+#define oled_clk			PORTD, 0,0
+#define oled_data			PORTD, 1,0
+#define oled_en				PORTE, 0,0
+#define oled_rs				PORTE, 1,0
+#define flag5				0x29	// in Bank1
+//#define	no_sensor_int		flag5,7,1	// ; block any further access to pressure sensor
+
+#	define	DBG_c_gas	0b0000000000000001
+#	define	DBG_c_ppO2	0b0000000000000010
+#	define	DBG_RUN 	0b0000000000000100
+#	define	DBG_RESTART 0b0000000000001000
+
+#	define	DBG_CdeSAT 	0b0000000000010000
+#	define	DBG_C_MODE	0b0000000000100000
+#	define	DBG_C_SURF	0b0000000001000000
+#	define	DBG_HEwoHE 	0b0000000010000000
+
+#	define	DBG_C_DPPO2	0b0000000100000000
+#	define	DBG_C_DGAS 	0b0000001000000000
+#	define	DBG_C_DIST	0b0000010000000000
+#	define	DBG_C_LAST	0b0000100000000000
+
+#	define	DBG_C_GF	0b0001000000000000
+#	define	DBG_ZH16ERR	0b0010000000000000
+#	define	DBG_PHIGH	0b0100000000000000
+#	define	DBG_PLOW	0b1000000000000000
+
+
+#	define	DBS_mode	0b0000000000000001
+#	define	DBS_ppO2	0b0000000000000010
+#	define	DBS_HE_sat	0b0000000000000100
+#	define	DBS_ppO2chg 0b0000000000001000
+
+#	define	DBS_SAT2l	0b0000000000010000
+#	define	DBS_SAT2h	0b0000000000100000
+#	define	DBS_GFLOW2l	0b0000000001000000
+#	define	DBS_GFLOW2h	0b0000000010000000
+
+#	define	DBS_GFHGH2l	0b0000000100000000
+#	define	DBS_GFHGH2h	0b0000001000000000
+#	define	DBS_GASO22l	0b0000010000000000
+#	define	DBS_GASO22h	0b0000100000000000
+
+#	define	DBS_DIST2h 	0b0001000000000000
+#	define	DBS_LAST2h 	0b0010000000000000
+#	define	DBS_DECOO2l	0b0100000000000000
+#	define	DBS_DECOO2h	0b1000000000000000
+
+
+#	define	DBS2_PRES2h 0b0000000000000001
+#	define	DBS2_PRES2l 0b0000000000000010
+#	define	DBS2_SURF2l	0b0000000000000100
+#	define	DBS2_SURF2h	0b0000000000001000
+
+#	define DBS2_DESAT2l 0b0000000000010000
+#	define DBS2_DESAT2h 0b0000000000100000
+#	define	DBS2_GFDneg 0b0000000001000000
+#	define	DBS2_ 0b000000000000000
+
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+
+// NDL_at_20mtr
+
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#pragma udata bank0a=0x060
+volatile unsigned char dd2_stringstore[17];
+#pragma udata bank0b=0x071
+volatile unsigned char keep_free_bank0[21];
+
+#pragma udata bank0c=0x086
+volatile unsigned char dd2_left;		// 1 - 64
+volatile unsigned char dd2_top;			// 1 - 64
+volatile unsigned char dd2_heightmax; 	// 1 - 37
+volatile unsigned char dd2_oled_brightness_offset; // 0 - 15 (15 is pitch black always)
+volatile unsigned char dd2_fontwidth;	//  8, 12, 21 for Incon16, Incon24, Incon42
+volatile unsigned char dd2_fontheight;	// 14, 21, 37 for "
+volatile unsigned long dd2_pointer;		// for font lut
+volatile unsigned char dd2_i;
+volatile unsigned char dd2_j;
+volatile unsigned char dd2_k;
+volatile unsigned char dd2_char;
+volatile unsigned char dd2_lowbyte;
+volatile unsigned char dd2_temp;
+volatile unsigned char dd2_data;
+volatile unsigned long dd2_base;			// for font lut
+volatile unsigned char dd2_start;			// for font lut
+volatile unsigned char dd2_end;			// for font lut
+
+
+ #pragma udata bank1=0x100
+ const unsigned char keep_free_bank1[256]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// ...
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ #pragma udata bank7=0x700
+ const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ #pragma udata bank9b=0x930
+// output:
+ static unsigned int	int_O_DBS_bitfield;					// 0x930	new in v.108
+ static unsigned int	int_O_DBS2_bitfield;				// 0x932	new in v.108
+ static unsigned int	int_O_DBG_pre_bitfield;				// 0x934	new in v.108
+ static unsigned int	int_O_DBG_post_bitfield;			// 0x936	new in v.108
+ static char			char_O_NDL_at_20mtr;				// 0x938	new in v.108 // 0xFF == undefined, max. 254
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+// internal, dbg:
+ static unsigned char	DBG_char_I_deco_model;				// new in v.108
+ static unsigned char	DBG_char_I_depth_last_deco;			// new in v.108
+ static float			DBG_pres_surface;					// new in v.108
+ static float			DBG_GF_low;							// new in v.108
+ static float			DBG_GF_high;						// new in v.108
+ static float			DBG_const_ppO2;						// new in v.108
+ static float			DBG_deco_ppO2_change;				// new in v.108
+ static float			DBG_deco_ppO2;						// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_deco_gas_change;				// new in v.108
+ static float			DBG_float_saturation_multiplier;	// new in v.108
+ static float			DBG_float_desaturation_multiplier;	// new in v.108
+ static float			DBG_float_deco_distance;			// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_N2_ratio;						// new in v.108
+ static float			DBG_He_ratio;						// new in v.108
+ static char			flag_in_divemode;					// new in v.108
+ static	int 			int_dbg_i;							// new in v.108
+ unsigned int 			temp_DBS;
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+//void debug(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+//void build_debug_output(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);//dd2_char, &dd2_pointer);
+void DD2_set_column(void);//top, dd2_k);void DD2_load_background(void);//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+void DD2_print_column(void);//&dd2_columnstore, dd2_heightmax);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+#if 1
+// new main to test DR-5
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+/*
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+*/
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+
+#pragma code subroutines2 = 0x0C000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------------
+// DBS - debug on start of dive //
+// -------------------------------
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & DBG_RUN)
+		int_O_DBG_pre_bitfield = DBG_RESTART;
+	else
+		int_O_DBG_pre_bitfield = DBG_RUN;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= DBS_mode;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= DBS_ppO2;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= DBS_HE_sat;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= DBS_ppO2chg;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= DBS_SAT2l;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= DBS_SAT2h;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= DBS_GFLOW2l;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= DBS_GFLOW2h;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= DBS_GFHGH2l;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= DBS_GFHGH2h;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= DBS_GASO22l;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= DBS_GASO22h;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= DBS_DIST2h;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= DBS_LAST2h;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= DBS_DECOO2l;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= DBS_DECOO2h;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= DBS2_PRES2h;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= DBS2_PRES2l;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= DBS2_SURF2l;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= DBS2_SURF2h;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= DBS2_DESAT2l;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= DBS2_DESAT2h;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= DBS2_GFDneg;
+}
+
+// -------------------------------
+// DBG - set DBG to end_of_dive //
+// -------------------------------
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~DBG_RUN);
+	int_O_DBG_post_bitfield &= (~DBG_RUN);
+}
+
+// -------------------------------
+// DBG - NDL at first 20 m. hit //
+// -------------------------------
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+// -------------------------------
+// DBG - multi main during dive //
+// -------------------------------
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= DBG_c_gas;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= DBG_c_ppO2;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= DBG_CdeSAT;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= DBG_C_MODE;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= DBG_C_SURF;
+	if((!DBS_HE_sat) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= DBG_HEwoHE;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= DBG_C_DPPO2;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= DBG_C_DGAS;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= DBG_C_DIST;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= DBG_C_LAST;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= DBG_C_GF;
+	if(pres_respiration > 13.0)
+		temp_DBS |= DBG_PHIGH;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= DBG_PLOW;
+/*
+	if()
+		temp_DBS |= ;
+	if()
+		temp_DBS |= ;
+ */
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+// -------------------------------
+// DBG - prior to calc. of dive //
+// -------------------------------
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+// -------------------------------
+// DBG - after decocalc of dive //
+// -------------------------------
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// ---------------------
+// dd2_write_incon42  //
+// ---------------------
+void DD2_write_incon42(void)
+{
+//dd2_fontwidth	= 21;
+//dd2_fontheight  = 30;
+dd2_fontwidth	= 19;
+dd2_fontheight  = 28;
+dd2_base = 0x0F500;
+dd2_start = '0';
+dd2_end = '9';
+DD2_write();
+}
+
+// ---------------------
+// dd2_write_incon24  //
+// ---------------------
+void DD2_write_incon24(void)
+{
+dd2_fontwidth	= 12;
+dd2_fontheight  = 16;
+dd2_base = 0x0E100;
+dd2_start = '.';
+dd2_end = '9' + 5;
+DD2_write();
+}
+
+
+void DD2_write(void)
+{
+	dd2_i = 0;
+_asm
+	movff	dd2_i, POSTINC2 // write 0x00 at the end of dd2_strinstore[]
+	bsf		oled_rs
+_endasm
+	dd2_stringstore[16] = 0;	// safety if more than 16 letters (max at font incon16) are written, the other space is used by font remap
+	if (dd2_top == 0) dd2_top = 1;
+	if (dd2_left == 0) dd2_left = 1;
+	if (dd2_heightmax > dd2_fontheight) dd2_heightmax = dd2_fontheight;
+	if ((dd2_top + dd2_heightmax) > 65) dd2_heightmax = 65 - dd2_top;
+
+	dd2_k = dd2_left;
+	dd2_j = 0;
+	dd2_char = dd2_stringstore[dd2_j++];
+	DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+	dd2_i = 0;
+	dd2_lowbyte = 1;
+
+while (dd2_char != 0)
+{
+		if (dd2_lowbyte == 1)	DD2_load_background();//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+		DD2_build_one_line_of_char();	//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte); 	// dd2_heightmax
+		dd2_lowbyte = dd2_lowbyte ^ 1;
+		if (dd2_lowbyte == 1)
+		{
+			DD2_set_column();//top, dd2_k); 				//
+			if(dd2_k < 64) dd2_k++;
+			DD2_print_column();//&dd2_columnstore, dd2_heightmax);				// dd2_column_store, dd2_heightmax
+		}
+		dd2_i++;
+		if ((dd2_i >= dd2_fontwidth) | (((dd2_char == '.') |(dd2_char == ':') | (dd2_char == '<')) & (dd2_i >= 4)))
+		{
+			dd2_char = dd2_stringstore[dd2_j++];
+			DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+			dd2_i = 0;
+		}
+}
+}		// void dd2_write(void)
+
+void DD2_get_pointer_to_char(void)//dd2_char, &dd2_pointer);
+{
+		if((dd2_char < dd2_start) | (dd2_char > dd2_end))
+		{
+			dd2_pointer = 0;
+			dd2_temp = 0;
+		}
+		else
+		{
+			dd2_pointer = dd2_char - dd2_start;
+			dd2_pointer = dd2_pointer * ((dd2_fontheight+1)/2);
+			dd2_pointer = dd2_pointer * dd2_fontwidth;
+			dd2_pointer += dd2_base;
+			if((dd2_char == '.') | (dd2_char == ':') | (dd2_char == '<'))
+			{
+				dd2_pointer += 2 * dd2_fontheight;
+			}
+
+		}
+}		// void DD2_get_pointer_to_char(void)
+
+void DD2_set_column(void)//top, dd2_k);
+{
+	dd2_data = 0x75;
+	DD2_CmdWrite();
+	dd2_data = dd2_top - 1;
+	DD2_CmdWrite();
+	dd2_data = 0x3f;
+	DD2_CmdWrite();
+
+	dd2_data = 0x15;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+}		// DD2_set_column()
+
+void DD2_load_background(void)//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+{
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+		md_pi_subst[dd2_temp] = 0x00;
+}		// void DD2_load_background()
+
+void DD2_build_one_line_of_char(void)//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+{
+	if (dd2_pointer != 0)
+	{
+		dd2_temp = (char)(dd2_pointer & 255);
+_asm
+		movff	dd2_temp,TBLPTRL
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 8) & 255);
+_asm
+		movff	dd2_temp,TBLPTRH
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 16)& 255);
+_asm
+		movff	dd2_temp,TBLPTRU
+_endasm
+
+		for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp += 2)
+		{
+_asm
+			TBLRDPOSTINC
+			movff	TABLAT,dd2_data
+_endasm
+			if (dd2_oled_brightness_offset != 0)
+			{
+				if ((dd2_oled_brightness_offset << 4) < (dd2_data & 0xF0))
+					dd2_data = dd2_data - (dd2_oled_brightness_offset << 4);
+				if ((dd2_oled_brightness_offset) < (dd2_data & 0x0F))
+					dd2_data = dd2_data - dd2_oled_brightness_offset;
+			}
+			if (dd2_lowbyte == 1)
+			{
+				md_pi_subst[dd2_temp]   = dd2_data & 0xF0;
+				md_pi_subst[dd2_temp+1] = (dd2_data << 4) & 0xF0;
+			}
+			else
+			{
+				md_pi_subst[dd2_temp]   = (md_pi_subst[dd2_temp] & 0xF0) | ((dd2_data >> 4) & 0x0F);
+				md_pi_subst[dd2_temp+1] = (md_pi_subst[dd2_temp+1] & 0xF0) | (dd2_data & 0x0F);
+			}
+		}//for
+		dd2_pointer += (dd2_fontheight+1)/2;
+	}//if
+}		//
+
+void DD2_print_column(void)//&dd2_columnstore, dd2_heightmax);
+{
+_asm
+		bsf	oled_rs
+_endasm
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+	{
+		dd2_data = md_pi_subst[dd2_temp];
+		DD2_DataWrite();
+	}
+}		// void DD2_print_column(void)
+
+//; -----------------------------
+//; DD Write Cmd via W
+//; two jump_ins:
+//;  DD_CmdWrite and DD_CmdWrite2
+//; -----------------------------
+void DD2_CmdWrite(void)
+{
+_asm
+	bcf		oled_rs
+_endasm
+	DD2_DataWrite();
+}
+
+void DD2_DataWrite(void)
+{
+_asm
+	movlb	1
+//	bsf		no_sensor_int					// flag5, no_sensor_int
+	bcf		oled_en
+	movlb	0
+	bcf		oled_clk				//; CLK=0
+	btfsc	dd2_data,7,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,7,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,6,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,6,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,5,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,5,1
+	bcf		oled_data				//;
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,4,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,4,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,3,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,3,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,2,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,2,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,1,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,1,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,0,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,0,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	bsf		oled_en					//; CS#=1
+	movlb	1
+//	bcf		no_sensor_int					// flag5, no_sensor_int
+	movlb	0
+_endasm
+	dd2_data	= 0; // to be sure that C knows we are in Bank0
+}
+#pragma romdata font_incon_24h15 = 0x0E100
+ rom const rom unsigned char incon24h15[] =
+ {
+		  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xff, 0xa0
+		 ,0x00, 0x00, 0x00, 0x00, 0x5c, 0xff, 0x91, 0x00
+		 ,0x00, 0x00, 0x00, 0x6d, 0xfe, 0x71, 0x00, 0x00
+		 ,0x00, 0x01, 0x7e, 0xfd, 0x60, 0x00, 0x00, 0x00
+		 ,0x01, 0x8f, 0xfd, 0x50, 0x00, 0x00, 0x00, 0x00
+		 ,0x9f, 0xfb, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x72, 0x00, 0x00
+		 ,0x00, 0x9f, 0xfe, 0xdc, 0xdf, 0xff, 0xb2, 0x00
+		 ,0x1d, 0xf8, 0x20, 0x00, 0x05, 0xfd, 0xff, 0x30
+		 ,0xaf, 0x30, 0x00, 0x00, 0x9f, 0x90, 0x2e, 0xd0
+		 ,0xf8, 0x00, 0x00, 0x2c, 0xf5, 0x00, 0x06, 0xf0
+		 ,0xf8, 0x00, 0x04, 0xed, 0x30, 0x00, 0x05, 0xf0
+		 ,0xaf, 0x30, 0x8f, 0xb1, 0x00, 0x00, 0x0c, 0xe0
+		 ,0x1d, 0xfd, 0xf8, 0x00, 0x00, 0x16, 0xdf, 0x40
+		 ,0x00, 0x9f, 0xff, 0xdc, 0xde, 0xff, 0xc3, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x73, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x02, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30
+		 ,0x0a, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x2f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0xaf, 0x97, 0x77, 0x77, 0x77, 0x77, 0x79, 0xf0
+		 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x26, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40
+		 ,0x07, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0
+		 ,0x4f, 0x80, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0xf0
+		 ,0xcc, 0x00, 0x00, 0x00, 0x02, 0xef, 0x57, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0x2e, 0xe2, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x01, 0xde, 0x20, 0x07, 0xf0
+		 ,0xce, 0x10, 0x00, 0x2d, 0xe2, 0x00, 0x07, 0xf0
+		 ,0x4f, 0xd6, 0x58, 0xfe, 0x30, 0x00, 0x07, 0xf0
+		 ,0x06, 0xff, 0xff, 0xb1, 0x00, 0x00, 0x07, 0xf0
+		 ,0x00, 0x14, 0x52, 0x00, 0x00, 0x00, 0x05, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
+		 ,0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x50
+		 ,0x6f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xd0
+		 ,0xdb, 0x00, 0x00, 0x59, 0x00, 0x00, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x04, 0xf0
+		 ,0xea, 0x00, 0x00, 0xcf, 0x10, 0x00, 0x06, 0xf0
+		 ,0x9f, 0x30, 0x07, 0xff, 0x90, 0x00, 0x1e, 0xe0
+		 ,0x1e, 0xfc, 0xdf, 0x87, 0xfb, 0x79, 0xef, 0x50
+		 ,0x01, 0x9d, 0xc6, 0x00, 0x7e, 0xff, 0xd5, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x06, 0xff, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x02, 0xcf, 0x69, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x7f, 0xb1, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x2c, 0xe6, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x07, 0xfb, 0x10, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0xcf, 0xfc, 0xcc, 0xcc, 0xce, 0xfd, 0xdd, 0xd0
+		 ,0xde, 0xee, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00
+		 ,0x78, 0xab, 0xcd, 0xed, 0x00, 0x00, 0xce, 0x20
+		 ,0xff, 0xed, 0xcc, 0xfa, 0x00, 0x00, 0x5f, 0xb0
+		 ,0xf9, 0x00, 0x06, 0xf0, 0x00, 0x00, 0x08, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xb0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x08, 0xf3, 0x00, 0x00, 0x0b, 0xf0
+		 ,0xf9, 0x00, 0x01, 0xfe, 0x62, 0x13, 0xbf, 0x90
+		 ,0xf9, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xfb, 0x00
+		 ,0x11, 0x00, 0x00, 0x01, 0x6a, 0xa9, 0x40, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x03, 0x56, 0x65, 0x30, 0x00, 0x00
+		 ,0x00, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x00
+		 ,0x08, 0xfe, 0x96, 0x8f, 0x95, 0x6a, 0xff, 0x30
+		 ,0x6f, 0x90, 0x01, 0xf8, 0x00, 0x00, 0x3e, 0xd0
+		 ,0xec, 0x00, 0x08, 0xf0, 0x00, 0x00, 0x06, 0xf0
+		 ,0xf6, 0x00, 0x0a, 0xe0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf7, 0x00, 0x07, 0xf3, 0x00, 0x00, 0x09, 0xf0
+		 ,0xcd, 0x10, 0x01, 0xef, 0x72, 0x13, 0xaf, 0x90
+		 ,0x4d, 0x20, 0x00, 0x2d, 0xff, 0xff, 0xf9, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x47, 0x86, 0x10, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x39, 0xef, 0xf0
+		 ,0xfa, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xe9, 0x40
+		 ,0xfa, 0x00, 0x05, 0xbf, 0xff, 0x94, 0x00, 0x00
+		 ,0xfa, 0x18, 0xef, 0xfb, 0x50, 0x00, 0x00, 0x00
+		 ,0xfe, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x78, 0x50, 0x00
+		 ,0x03, 0xad, 0xb4, 0x00, 0x7f, 0xff, 0xfc, 0x00
+		 ,0x3f, 0xfc, 0xff, 0x66, 0xfa, 0x43, 0xaf, 0xa0
+		 ,0xcd, 0x10, 0x1c, 0xfe, 0x70, 0x00, 0x0b, 0xf0
+		 ,0xf5, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x05, 0xf0
+		 ,0xf5, 0x00, 0x00, 0xbf, 0x10, 0x00, 0x04, 0xf0
+		 ,0xec, 0x00, 0x07, 0xff, 0xb0, 0x00, 0x0a, 0xf0
+		 ,0x6f, 0xd9, 0xcf, 0x78, 0xfb, 0x32, 0x9f, 0x90
+		 ,0x07, 0xef, 0xe6, 0x00, 0x9f, 0xff, 0xfb, 0x00
+		 ,0x00, 0x01, 0x00, 0x00, 0x03, 0x88, 0x50, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x03, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x04, 0xdf, 0xff, 0xfb, 0x10, 0x00, 0x0b, 0x60
+		 ,0x4f, 0xd7, 0x45, 0x9f, 0xd0, 0x00, 0x1c, 0xe0
+		 ,0xdd, 0x00, 0x00, 0x05, 0xf5, 0x00, 0x05, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x04, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x08, 0xf0
+		 ,0xbe, 0x20, 0x00, 0x06, 0xf2, 0x00, 0x5f, 0xa0
+		 ,0x2e, 0xf9, 0x54, 0x7f, 0x94, 0x7c, 0xfc, 0x00
+		 ,0x02, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0x70, 0x00
+		 ,0x00, 0x01, 0x46, 0x77, 0x75, 0x30, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x06, 0xa1, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x1f, 0xf9, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x0d, 0xf5, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xba, 0xae, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xe9, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x97, 0x8c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x6a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfd, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xa8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x2c, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xdd, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf2, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf0, 0x00, 0x4f, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xea, 0x23, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x4f, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10
+		 ,0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x9f, 0xa7, 0x77, 0x77, 0x77, 0x70
+		 ,0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xff, 0xcb, 0xbb, 0xbb, 0xbb, 0xb0
+		 ,0x00, 0x00, 0x4f, 0xfe, 0xee, 0xee, 0xee, 0xe0
+		 ,0x00, 0x00, 0xab, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xfa, 0x55, 0x55, 0x55, 0x55, 0x50
+		 ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x02, 0x44, 0x44, 0x44, 0x44, 0x40
+ };
+
+#pragma romdata font_incon_42 = 0x0F500
+ rom const rom unsigned char incon42[] =
+ {
+	 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+	  ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+	  ,0x00, 0xbf, 0xff, 0xc7, 0x65, 0x43, 0x22, 0x33, 0x57, 0xbf, 0xff, 0xfd, 0x20, 0x00
+	  ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6e, 0xff, 0xd1, 0x00
+	  ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xfa, 0x00
+	  ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0x20
+	  ,0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x60
+	  ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+	  ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+	  ,0xcf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+	  ,0x4f, 0xfe, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+	  ,0x07, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+	  ,0x00, 0x5e, 0xff, 0xfb, 0x98, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+	  ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+	  ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+#if 0
+// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+#endif
+//
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+#if 0
+#pragma romdata font_incon_42 = 0x0E000
+ rom const rom unsigned char incon42[] =
+ {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x00, 0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0x00, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x02, 0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x00, 0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x00, 0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x00, 0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x00, 0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0x00, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x00, 0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x00, 0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x01, 0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x03, 0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x00, 0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x00, 0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0x01, 0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0x02, 0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x01, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x00, 0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0x00, 0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x04, 0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0x03, 0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x00, 0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x00, 0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x00, 0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0x00, 0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0x01, 0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0x05, 0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0x00, 0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x00, 0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x00, 0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x00, 0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x05, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0x04, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0x00, 0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x00, 0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x00, 0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+#endif
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	DD2_write_incon42();
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	DD2_write_incon24();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc28.drx.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,2487 @@
+0xF803
+,0x8A01
+,0x850C
+,0x8202
+,0x850A
+,0x8302
+,0xFF94
+,0xCD00
+,0x9105
+,0x9103
+,0xC701
+,0x9105
+,0x9103
+,0xDA9D
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x0688
+,0x0D87
+,0x0781
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0182
+,0x0786
+,0x0D89
+,0x0583
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x00A2
+,0xB402
+,0x8601
+,0x8A04
+,0x8601
+,0x8801
+,0x8102
+,0x8501
+,0x8800
+,0x8301
+,0x8600
+,0x8702
+,0x8202
+,0x8501
+,0x8512
+,0x8501
+,0x8402
+,0x8401
+,0x8700
+,0x8501
+,0x8301
+,0x8801
+,0x8402
+,0x8201
+,0x8901
+,0x8405
+,0x9203
+,0x9F9A
+,0x0392
+,0x0588
+,0x0185
+,0x0183
+,0x0185
+,0x0286
+,0x0183
+,0x0084
+,0x0289
+,0x0582
+,0x038B
+,0x0382
+,0x0292
+,0x0282
+,0x028C
+,0x0283
+,0x0489
+,0x0284
+,0x0182
+,0x0186
+,0x0385
+,0x0183
+,0x0086
+,0x0187
+,0x0182
+,0x0191
+,0x049D
+,0xA403
+,0x9106
+,0x8804
+,0x8102
+,0x8202
+,0x8608
+,0x8501
+,0x8600
+,0x8402
+,0x8501
+,0x8600
+,0x8403
+,0x8401
+,0x8601
+,0x8205
+,0x8301
+,0x8606
+,0x8202
+,0x8001
+,0x8803
+,0x8503
+,0x9402
+,0x9206
+,0x9001
+,0x8200
+,0x9DFF
+,0x9401
+,0x9006
+,0x9102
+,0xFF8B
+,0xE707
+,0x8C0C
+,0x8903
+,0x8703
+,0x8602
+,0x8B02
+,0x8401
+,0x8E02
+,0x8201
+,0x9101
+,0x8101
+,0x9102
+,0x8000
+,0x9300
+,0xB0B0
+,0x0093
+,0x0081
+,0x0191
+,0x0181
+,0x028F
+,0x0282
+,0x028D
+,0x0284
+,0x028B
+,0x0286
+,0x0387
+,0x0389
+,0x0B8D
+,0x07E7
+,0x9F00
+,0x9601
+,0x9501
+,0x8202
+,0x9000
+,0x8102
+,0x9104
+,0x8D07
+,0x8F07
+,0x9404
+,0x9200
+,0x8102
+,0x9001
+,0x8301
+,0x8F01
+,0x9500
+,0xA6A0
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0191
+,0x0A8B
+,0x0B90
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x01A4
+,0xFF88
+,0x0182
+,0x018F
+,0x0690
+,0x0494
+,0x00FC
+,0xB801
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0xBCFF
+,0x8701
+,0x9502
+,0x9402
+,0xFF94
+,0xC101
+,0x9303
+,0x9004
+,0x9004
+,0x9004
+,0x9003
+,0x9103
+,0x9103
+,0x9103
+,0x9301
+,0xC4A0
+,0x0290
+,0x0A8B
+,0x0285
+,0x0389
+,0x0186
+,0x0587
+,0x0186
+,0x0183
+,0x0186
+,0x0086
+,0x0184
+,0x0186
+,0x0084
+,0x0285
+,0x0186
+,0x0182
+,0x0286
+,0x0186
+,0x0280
+,0x0187
+,0x0188
+,0x0484
+,0x038B
+,0x0A90
+,0x02A3
+,0xCA01
+,0x9501
+,0x9401
+,0x9510
+,0x8610
+,0xFF94
+,0xB300
+,0x8B01
+,0x8701
+,0x8903
+,0x8601
+,0x8904
+,0x8601
+,0x8802
+,0x8001
+,0x8600
+,0x8801
+,0x8201
+,0x8600
+,0x8701
+,0x8301
+,0x8601
+,0x8501
+,0x8401
+,0x8602
+,0x8301
+,0x8501
+,0x8706
+,0x8601
+,0x8804
+,0x8701
+,0xB4BF
+,0x0188
+,0x008B
+,0x0187
+,0x018C
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0183
+,0x0285
+,0x0186
+,0x0281
+,0x0180
+,0x0183
+,0x0188
+,0x0482
+,0x0592
+,0x03B7
+,0xA400
+,0x9402
+,0x9204
+,0x9102
+,0x8001
+,0x8F02
+,0x8201
+,0x8E02
+,0x8301
+,0x8C02
+,0x8501
+,0x8B10
+,0x8610
+,0x9002
+,0x9401
+,0x9600
+,0xA1B7
+,0x0185
+,0x0088
+,0x0883
+,0x0287
+,0x0282
+,0x0185
+,0x0187
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0186
+,0x0186
+,0x0084
+,0x0185
+,0x0187
+,0x0085
+,0x0887
+,0x0086
+,0x06B6
+,0xB508
+,0x8C0C
+,0x8902
+,0x8201
+,0x8302
+,0x8701
+,0x8301
+,0x8601
+,0x8601
+,0x8301
+,0x8601
+,0x8600
+,0x8400
+,0x8701
+,0x8600
+,0x8401
+,0x8601
+,0x8601
+,0x8302
+,0x8401
+,0x8701
+,0x8408
+,0x8F05
+,0xB7B1
+,0x0096
+,0x0096
+,0x008D
+,0x0186
+,0x008A
+,0x0486
+,0x0087
+,0x0588
+,0x0085
+,0x048B
+,0x0082
+,0x058D
+,0x0690
+,0x0393
+,0x01C3
+,0xBB04
+,0x8904
+,0x8206
+,0x8702
+,0x8002
+,0x8001
+,0x8301
+,0x8701
+,0x8302
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8601
+,0x8302
+,0x8501
+,0x8602
+,0x8101
+,0x8001
+,0x8301
+,0x8805
+,0x8106
+,0x8902
+,0x8404
+,0xB6B3
+,0x0586
+,0x0088
+,0x0784
+,0x0187
+,0x0284
+,0x0184
+,0x0186
+,0x0186
+,0x0084
+,0x0186
+,0x0087
+,0x0183
+,0x0186
+,0x0087
+,0x0084
+,0x0186
+,0x0185
+,0x0183
+,0x0187
+,0x0284
+,0x0182
+,0x0288
+,0x0D8B
+,0x09B8
+,0xFE01
+,0x8601
+,0x8C02
+,0x8502
+,0x8B02
+,0x8502
+,0xFF94
+,0xFF01
+,0x8601
+,0x8201
+,0x8602
+,0x8506
+,0x8702
+,0x8504
+,0x9400
+,0xFCA0
+,0x0195
+,0x0293
+,0x0393
+,0x0081
+,0x0191
+,0x0181
+,0x0190
+,0x0183
+,0x018F
+,0x0184
+,0x018D
+,0x0185
+,0x018D
+,0x0186
+,0x018B
+,0x0187
+,0x018B
+,0x0188
+,0x0189
+,0x0189
+,0x019E
+,0x9E00
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0xA19A
+,0x0189
+,0x018A
+,0x0188
+,0x018A
+,0x0187
+,0x018C
+,0x0186
+,0x018C
+,0x0185
+,0x018E
+,0x0184
+,0x018E
+,0x0183
+,0x0190
+,0x0181
+,0x0192
+,0x0081
+,0x0192
+,0x0394
+,0x0294
+,0x01A4
+,0xB101
+,0x9501
+,0x9401
+,0x9501
+,0x9401
+,0x8801
+,0x8202
+,0x8401
+,0x8604
+,0x8102
+,0x8501
+,0x8402
+,0x8401
+,0x8602
+,0x8202
+,0x8F06
+,0x9104
+,0xBF9D
+,0x078D
+,0x0481
+,0x048A
+,0x0287
+,0x0288
+,0x018B
+,0x0187
+,0x0184
+,0x0383
+,0x0087
+,0x0084
+,0x0582
+,0x0186
+,0x0083
+,0x0182
+,0x0182
+,0x0186
+,0x0083
+,0x0084
+,0x0082
+,0x0186
+,0x0182
+,0x0084
+,0x0082
+,0x0186
+,0x0281
+,0x0083
+,0x0182
+,0x0187
+,0x0A82
+,0x008A
+,0x08A1
+,0xA702
+,0x9104
+,0x8F04
+,0x8F06
+,0x8D04
+,0x8201
+,0x8B03
+,0x8501
+,0x8C04
+,0x8301
+,0x8F04
+,0x8001
+,0x9105
+,0x9404
+,0x9504
+,0x9402
+,0x9C99
+,0x1086
+,0x1086
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0183
+,0x0285
+,0x0186
+,0x0183
+,0x0284
+,0x0287
+,0x0580
+,0x0281
+,0x0289
+,0x0382
+,0x0593
+,0x029F
+,0x9E06
+,0x8E0A
+,0x8A03
+,0x8503
+,0x8901
+,0x8902
+,0x8701
+,0x8B02
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8601
+,0x8C01
+,0x8601
+,0x8B01
+,0x8802
+,0x8802
+,0x8900
+,0x8A00
+,0x9E99
+,0x1086
+,0x1086
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x018C
+,0x0186
+,0x018C
+,0x0186
+,0x028A
+,0x0188
+,0x0386
+,0x028B
+,0x0A8E
+,0x05A2
+,0xB110
+,0x8610
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8D01
+,0xB4B1
+,0x1086
+,0x1086
+,0x0085
+,0x018E
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x00C4
+,0x9E06
+,0x8D0B
+,0x8A02
+,0x8702
+,0x8802
+,0x8A01
+,0x8701
+,0x8C01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8700
+,0x8401
+,0x8601
+,0x8600
+,0x8401
+,0x8601
+,0x8600
+,0x8400
+,0x8802
+,0x8406
+,0x8900
+,0x8505
+,0x9EB1
+,0x1086
+,0x108D
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x018E
+,0x1086
+,0x10B4
+,0xB100
+,0x8E00
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8610
+,0x8610
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0xCCBF
+,0x0196
+,0x0195
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008C
+,0x0187
+,0x0F87
+,0x0D89
+,0x0096
+,0x0096
+,0x00AC
+,0x9910
+,0x8610
+,0x8D02
+,0x9302
+,0x9304
+,0x9102
+,0x8002
+,0x8F02
+,0x8202
+,0x8D01
+,0x8503
+,0x8A01
+,0x8802
+,0x8801
+,0x8A03
+,0x8600
+,0x8D01
+,0x9600
+,0x9CB1
+,0x1086
+,0x1095
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x01B4
+,0x9910
+,0x8610
+,0x8703
+,0x9503
+,0x9503
+,0x9503
+,0x9302
+,0x9202
+,0x9203
+,0x9103
+,0x9210
+,0x8610
+,0x9C99
+,0x1086
+,0x1086
+,0x0395
+,0x0295
+,0x0395
+,0x0395
+,0x0395
+,0x0395
+,0x0295
+,0x0387
+,0x1086
+,0x109C
+,0x9D08
+,0x8C0C
+,0x8902
+,0x8703
+,0x8701
+,0x8B01
+,0x8701
+,0x8C01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8601
+,0x8C01
+,0x8601
+,0x8B01
+,0x8802
+,0x8802
+,0x890C
+,0x8C08
+,0xA0B1
+,0x1086
+,0x1086
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0184
+,0x018E
+,0x0184
+,0x018E
+,0x0282
+,0x028F
+,0x0692
+,0x02A7
+,0x9D08
+,0x8C0C
+,0x8902
+,0x8802
+,0x8701
+,0x8B02
+,0x8601
+,0x8C01
+,0x8600
+,0x8E02
+,0x8400
+,0x8E04
+,0x8201
+,0x8C01
+,0x8101
+,0x8201
+,0x8C01
+,0x8101
+,0x8302
+,0x8802
+,0x8201
+,0x840C
+,0x8301
+,0x8608
+,0xA0B1
+,0x1086
+,0x1086
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x018D
+,0x0184
+,0x048B
+,0x0184
+,0x0180
+,0x0389
+,0x0783
+,0x0388
+,0x0586
+,0x028A
+,0x008A
+,0x009C
+,0xB303
+,0x8602
+,0x8805
+,0x8601
+,0x8701
+,0x8202
+,0x8601
+,0x8601
+,0x8301
+,0x8601
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8601
+,0x8501
+,0x8302
+,0x8602
+,0x8402
+,0x8102
+,0x8801
+,0x8505
+,0x9301
+,0xA099
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x1086
+,0x1086
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x00AC
+,0x990C
+,0x8A0E
+,0x9502
+,0x9501
+,0x9601
+,0x9501
+,0x9501
+,0x9501
+,0x9401
+,0x9402
+,0x870E
+,0x880C
+,0xA099
+,0x0195
+,0x0494
+,0x0594
+,0x0594
+,0x0594
+,0x0592
+,0x048F
+,0x048F
+,0x048F
+,0x048F
+,0x0492
+,0x01AB
+,0x9905
+,0x920A
+,0x9209
+,0x9004
+,0x8E05
+,0x8E04
+,0x9005
+,0x9406
+,0x9406
+,0x9206
+,0x8909
+,0x8A06
+,0xA6A9
+,0x0086
+,0x018B
+,0x0286
+,0x0388
+,0x0388
+,0x0384
+,0x038B
+,0x0381
+,0x038F
+,0x0591
+,0x058F
+,0x0381
+,0x038C
+,0x0285
+,0x0388
+,0x0387
+,0x0387
+,0x018B
+,0x0296
+,0x009C
+,0x9900
+,0x9602
+,0x9503
+,0x9503
+,0x9503
+,0x940A
+,0x8D09
+,0x8B04
+,0x9004
+,0x9003
+,0x9202
+,0x9400
+,0xACA9
+,0x0086
+,0x008C
+,0x0286
+,0x008A
+,0x0486
+,0x0089
+,0x0280
+,0x0186
+,0x0087
+,0x0381
+,0x0186
+,0x0085
+,0x0383
+,0x0186
+,0x0084
+,0x0285
+,0x0186
+,0x0082
+,0x0386
+,0x0186
+,0x0080
+,0x0388
+,0x0186
+,0x038A
+,0x0186
+,0x028B
+,0x0195
+,0x019C
+,0xDF15
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8200
+,0x9100
+,0xB2B0
+,0x0195
+,0x0395
+,0x0395
+,0x0395
+,0x0395
+,0x0494
+,0x0495
+,0x0395
+,0x0395
+,0x01B3
+,0xB000
+,0x9100
+,0x8201
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8115
+,0xE1CE
+,0x0194
+,0x0292
+,0x0292
+,0x0294
+,0x0296
+,0x0295
+,0x0395
+,0x01D6
+,0xAB00
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9AE0
+,0x0195
+,0x0395
+,0x0295
+,0x0295
+,0x00FF
+,0x89A6
+,0x0193
+,0x048C
+,0x0183
+,0x0180
+,0x028B
+,0x0083
+,0x0182
+,0x018A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0083
+,0x008C
+,0x0182
+,0x0082
+,0x018C
+,0x0B8C
+,0x0AB4
+,0xAF12
+,0x8411
+,0x8C01
+,0x8601
+,0x8C00
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B01
+,0x8602
+,0x8B03
+,0x8302
+,0x8D08
+,0x9004
+,0xA0B8
+,0x068F
+,0x088D
+,0x0284
+,0x028C
+,0x0186
+,0x028A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0186
+,0x018C
+,0x0285
+,0x018D
+,0x00A6
+,0xA104
+,0x9008
+,0x8D02
+,0x8402
+,0x8C01
+,0x8602
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B00
+,0x8800
+,0x8C01
+,0x8601
+,0x8611
+,0x8412
+,0xB4A2
+,0x0292
+,0x078E
+,0x0480
+,0x038C
+,0x0181
+,0x0182
+,0x018B
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018B
+,0x0181
+,0x0183
+,0x018B
+,0x0582
+,0x018D
+,0x0483
+,0x00B5
+,0xB601
+,0x9501
+,0x9501
+,0x9010
+,0x8503
+,0x8101
+,0x8F01
+,0x8301
+,0x8F00
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8400
+,0x9001
+,0x9502
+,0xABAA
+,0x0289
+,0x0481
+,0x0180
+,0x0487
+,0x0B81
+,0x0186
+,0x0183
+,0x0181
+,0x0183
+,0x0086
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0183
+,0x0182
+,0x0083
+,0x0186
+,0x0583
+,0x0083
+,0x0086
+,0x0584
+,0x0181
+,0x0186
+,0x0089
+,0x0487
+,0x008B
+,0x019A
+,0xAF12
+,0x8412
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9502
+,0x950B
+,0x8C0A
+,0xB4CD
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x0185
+,0x0182
+,0x0C85
+,0x0182
+,0x0C95
+,0x0195
+,0x0195
+,0x01CC
+,0xC401
+,0x9601
+,0x8501
+,0x8D01
+,0x8501
+,0x8D01
+,0x8501
+,0x8D01
+,0x8501
+,0x8C01
+,0x8101
+,0x8210
+,0x8102
+,0x810F
+,0x8201
+,0xDCAF
+,0x1284
+,0x128F
+,0x0294
+,0x0194
+,0x0392
+,0x0180
+,0x0290
+,0x0182
+,0x028E
+,0x0184
+,0x028C
+,0x0186
+,0x038A
+,0x0089
+,0x0196
+,0x009C
+,0xB000
+,0x8E01
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8412
+,0x8412
+,0x9501
+,0x9501
+,0x9501
+,0x9600
+,0xB49D
+,0x0C8A
+,0x0C8B
+,0x0095
+,0x0195
+,0x0195
+,0x0C8B
+,0x0B8B
+,0x0194
+,0x0195
+,0x0195
+,0x0C8B
+,0x0B9C
+,0xB50C
+,0x8A0C
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9502
+,0x950B
+,0x8C0A
+,0xB4A1
+,0x0491
+,0x078E
+,0x0282
+,0x038C
+,0x0186
+,0x018B
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0186
+,0x018C
+,0x0383
+,0x028D
+,0x0890
+,0x04A0
+,0xB511
+,0x8510
+,0x8701
+,0x8601
+,0x8C00
+,0x8800
+,0x8B01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B01
+,0x8602
+,0x8B02
+,0x8402
+,0x8D08
+,0x9004
+,0xA0A1
+,0x0490
+,0x088D
+,0x0283
+,0x038C
+,0x0087
+,0x028A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0088
+,0x008C
+,0x0186
+,0x018C
+,0x0F86
+,0x11AF
+,0xCD0C
+,0x8A0C
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9501
+,0x9601
+,0x9500
+,0xA7B8
+,0x0085
+,0x018C
+,0x0483
+,0x018C
+,0x0484
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0183
+,0x0182
+,0x018B
+,0x0083
+,0x0182
+,0x018B
+,0x0182
+,0x058D
+,0x0083
+,0x03B6
+,0xB501
+,0x9501
+,0x9501
+,0x920E
+,0x880F
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x9401
+,0xB5B5
+,0x0A8C
+,0x0B95
+,0x0295
+,0x0196
+,0x0096
+,0x0095
+,0x0095
+,0x018B
+,0x0C8A
+,0x0CB4
+,0x9D00
+,0x9603
+,0x9404
+,0x9504
+,0x9404
+,0x9404
+,0x9303
+,0x9103
+,0x9103
+,0x9004
+,0x9003
+,0x9300
+,0xA89D
+,0x0593
+,0x0893
+,0x0593
+,0x038F
+,0x048F
+,0x0492
+,0x0395
+,0x0594
+,0x0593
+,0x038C
+,0x098B
+,0x06A2
+,0xB501
+,0x8801
+,0x8A02
+,0x8602
+,0x8C02
+,0x8203
+,0x8E02
+,0x8002
+,0x9104
+,0x9204
+,0x9102
+,0x8002
+,0x8E02
+,0x8303
+,0x8B02
+,0x8602
+,0x8A00
+,0x8901
+,0xB4AC
+,0x0186
+,0x028C
+,0x0185
+,0x0589
+,0x0188
+,0x0487
+,0x018A
+,0x0484
+,0x018E
+,0x0791
+,0x048F
+,0x0490
+,0x048F
+,0x0490
+,0x0393
+,0x01A7
+,0xA900
+,0x8A01
+,0x8702
+,0x8A01
+,0x8603
+,0x8A01
+,0x8504
+,0x8A01
+,0x8402
+,0x8001
+,0x8A01
+,0x8202
+,0x8201
+,0x8A01
+,0x8102
+,0x8301
+,0x8A01
+,0x8002
+,0x8401
+,0x8A04
+,0x8501
+,0x8A02
+,0x8701
+,0x8A01
+,0x8801
+,0x9501
+,0x9CA2
+,0x0096
+,0x0195
+,0x0193
+,0x0581
+,0x0286
+,0x0781
+,0x0883
+,0x068A
+,0x0281
+,0x0191
+,0x0181
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0192
+,0x00C8
+,0xFF90
+,0x1581
+,0x15FF
+,0x90C8
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0191
+,0x0182
+,0x0685
+,0x0181
+,0x0383
+,0x0781
+,0x088A
+,0x0581
+,0x018F
+,0x0195
+,0x01BA
+,0x9F00
+,0x9501
+,0x9501
+,0x9401
+,0x9501
+,0x9601
+,0x9502
+,0x9501
+,0x9501
+,0x9501
+,0x9401
+,0x9501
+,0xA6F8
+,0x0189
+,0x0485
+,0x0381
+,0x0C85
+,0x0283
+,0x0AFF
+,0x94A1
+,0x0291
+,0x078E
+,0x0382
+,0x038C
+,0x0186
+,0x018B
+,0x0188
+,0x018A
+,0x0086
+,0x0786
+,0x0E86
+,0x0884
+,0x0187
+,0x0081
+,0x0188
+,0x018A
+,0x0187
+,0x028B
+,0x0186
+,0x01B6
+,0xA900
+,0x8C01
+,0x8601
+,0x8904
+,0x8502
+,0x870E
+,0x8702
+,0x8206
+,0x8001
+,0x8701
+,0x8301
+,0x8600
+,0x8700
+,0x8401
+,0x8601
+,0x8600
+,0x8D01
+,0x8601
+,0x8D00
+,0x8601
+,0x8D00
+,0x9501
+,0x9501
+,0x9CB4
+,0x0086
+,0x008E
+,0x088F
+,0x0182
+,0x018F
+,0x0184
+,0x008F
+,0x0184
+,0x018E
+,0x0184
+,0x018E
+,0x0184
+,0x0090
+,0x0182
+,0x018F
+,0x088E
+,0x0086
+,0x00B9
+,0xB101
+,0x8700
+,0x8100
+,0x8903
+,0x8401
+,0x8100
+,0x8B03
+,0x8201
+,0x8100
+,0x8D02
+,0x8101
+,0x8100
+,0x8F0A
+,0x8C0A
+,0x8A03
+,0x8001
+,0x8100
+,0x8B03
+,0x8201
+,0x8100
+,0x8903
+,0x8401
+,0x8100
+,0x8901
+,0x8601
+,0x8100
+,0x8900
+,0xACFF
+,0x9009
+,0x8208
+,0x8109
+,0x8208
+,0xFF90
+,0xB802
+,0x8500
+,0x8604
+,0x8004
+,0x8302
+,0x8407
+,0x8101
+,0x8401
+,0x8401
+,0x8201
+,0x8301
+,0x8401
+,0x8201
+,0x8301
+,0x8301
+,0x8401
+,0x8201
+,0x8401
+,0x8201
+,0x8401
+,0x8300
+,0x8401
+,0x8301
+,0x8201
+,0x8401
+,0x8402
+,0x8007
+,0x8501
+,0x8304
+,0x8004
+,0x8E01
+,0xBBC8
+,0x0194
+,0x0295
+,0x01C5
+,0x0194
+,0x0295
+,0x01DC
+,0x8902
+,0x9107
+,0x8E01
+,0x8502
+,0x8B01
+,0x8202
+,0x8200
+,0x8B00
+,0x8105
+,0x8200
+,0x8901
+,0x8100
+,0x8301
+,0x8100
+,0x8900
+,0x8101
+,0x8401
+,0x8000
+,0x8900
+,0x8101
+,0x8401
+,0x8000
+,0x8901
+,0x8001
+,0x8400
+,0x8100
+,0x8A00
+,0x8101
+,0x8201
+,0x8100
+,0x8A01
+,0x8100
+,0x8501
+,0x8B01
+,0x8601
+,0x8D02
+,0x8202
+,0x9004
+,0x89BC
+,0x018F
+,0x0381
+,0x018A
+,0x0181
+,0x0481
+,0x018A
+,0x0082
+,0x0181
+,0x0180
+,0x018A
+,0x0082
+,0x0082
+,0x0180
+,0x018A
+,0x0082
+,0x0082
+,0x0180
+,0x018A
+,0x0181
+,0x0081
+,0x0181
+,0x018A
+,0x0881
+,0x018B
+,0x0781
+,0x0195
+,0x01B8
+,0xBA01 // double left arrows, pos 0xE3C = 3644 
+,0x9403
+,0x9202
+,0x8001
+,0x9002
+,0x8201
+,0x8F01
+,0x8401
+,0x9101
+,0x9403
+,0x9202
+,0x8001
+,0x9002
+,0x8201
+,0x8F01
+,0x8401
+,0xB6D0 // ...,  cursor
+,0x0195
+,0x0190
+,0x0C8B
+,0x0A8D
+,0x088F
+,0x0691
+,0x0493
+,0x0295
+,0x00BC // cursor 
+,0xFFFF
+,0xCF89
+,0x0291
+,0x078E
+,0x0185
+,0x028B
+,0x0188
+,0x008B
+,0x0080
+,0x0781
+,0x0089
+,0x0180
+,0x0781
+,0x0089
+,0x0081
+,0x0082
+,0x0084
+,0x0089
+,0x0081
+,0x0082
+,0x0084
+,0x0089
+,0x0180
+,0x0180
+,0x0382
+,0x008A
+,0x0081
+,0x0281
+,0x0181
+,0x008A
+,0x0188
+,0x018B
+,0x0186
+,0x018D
+,0x0282
+,0x0290
+,0x0489
+,0xC900
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0xDCCB
+,0x0193
+,0x0591
+,0x0181
+,0x0190
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x0091
+,0x0592
+,0x03D8
+,0x9F00
+,0x8700
+,0x8D00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x870B
+,0x8101
+,0x870B
+,0x8101
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8700
+,0x9DCA
+,0x0086
+,0x008D
+,0x0184
+,0x028C
+,0x0184
+,0x038C
+,0x0184
+,0x0080
+,0x018C
+,0x0183
+,0x0180
+,0x018C
+,0x0182
+,0x0181
+,0x018D
+,0x0482
+,0x018E
+,0x0283
+,0x01D3
+,0xD100
+,0x8E01
+,0x8401
+,0x8D01
+,0x8601
+,0x8C01
+,0x8200
+,0x8201
+,0x8C01
+,0x8200
+,0x8201
+,0x8C01
+,0x8101
+,0x8201
+,0x8D05
+,0x8001
+,0x8F01
+,0x8103
+,0xD4FF
+,0x9101
+,0x9303
+,0x9301
+,0x9500
+,0xF69D
+,0x1185
+,0x0B95
+,0x0196
+,0x0195
+,0x0195
+,0x0195
+,0x0094
+,0x028B
+,0x0B95
+,0x0295
+,0x0195
+,0x0195
+,0x0085
+,0xFFFF
+,0xCF00
+/*
+,0xB204
+,0x9106
+,0x8F07
+,0x8F08
+,0x8E08
+,0x8D14
+,0x8201
+,0x9501
+,0x9501
+,0x9514
+,0xB2FF
+,0x8001
+,0x9402
+,0x9402
+,0xFF9C
+,0xFF8D
+,0x0096
+,0x0192
+,0x0181
+,0x0093
+,0x0081
+,0x0093
+,0x0394
+,0x01C8
+,0xE200
+,0x9501
+,0x9501
+,0x9509
+,0xFF9B
+,0xBC01
+,0x8C05
+,0x8201
+,0x8B02
+,0x8102
+,0x8101
+,0x8A01
+,0x8501
+,0x8001
+,0x8A00
+,0x8601
+,0x8001
+,0x8A00
+,0x8601
+,0x8001
+,0x8A01
+,0x8401
+,0x8101
+,0x8B07
+,0x8101
+,0x8C04
+,0x8301
+,0x9501
+,0xB8B7
+,0x0086
+,0x008E
+,0x0183
+,0x028F
+,0x0181
+,0x0291
+,0x0493
+,0x0299
+,0x008E
+,0x0183
+,0x028F
+,0x0181
+,0x0291
+,0x0493
+,0x02B9
+,0x9800
+,0x9501
+,0x9000
+,0x8308
+,0x8603
+,0x9103
+,0x9103
+,0x9103
+,0x9102
+,0x8501
+,0x8A02
+,0x8602
+,0x8703
+,0x8601
+,0x8100
+,0x8503
+,0x8701
+,0x8101
+,0x8501
+,0x8808
+,0x9400
+,0x9C98
+,0x0095
+,0x0190
+,0x0083
+,0x0886
+,0x0391
+,0x0391
+,0x0391
+,0x0391
+,0x0292
+,0x0283
+,0x0183
+,0x0185
+,0x0385
+,0x0083
+,0x0283
+,0x0386
+,0x0182
+,0x0180
+,0x0083
+,0x0189
+,0x0081
+,0x0181
+,0x008F
+,0x0382
+,0x0090
+,0x0183
+,0x0082
+,0x9800
+,0x8301
+,0x8F00
+,0x8500
+,0x8F00
+,0x8101
+,0x8101
+,0x8702
+,0x8300
+,0x8101
+,0x8100
+,0x8602
+,0x8606
+,0x8303
+,0x8C01
+,0x8203
+,0x9103
+,0x8401
+,0x8A02
+,0x8602
+,0x8802
+,0x8601
+,0x8100
+,0x8602
+,0x8701
+,0x8101
+,0x8501
+,0x8808
+,0x9400
+,0x9CFF
+,0xFFCF
+,0xB600
+,0x9402
+,0x9302
+,0x9301
+,0x9411
+,0x8412
+,0x8502
+,0x9602
+,0x9502
+,0x9600
+,0xBFBC
+,0x0096
+,0x0295
+,0x0296
+,0x0285
+,0x1284
+,0x1194
+,0x0193
+,0x0293
+,0x0294
+,0x00B9
+,0xA803
+,0x9303
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9303
+,0x9303
+,0x9AFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+/*
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xFFCF
+,0xFFFF
+,0xCFFF
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF81F
+,0xF800
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc28.tbl.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,205 @@
+0x0000
+,0x000E
+,0x001B
+,0x0048
+,0x007D
+,0x00B4
+,0x00E7
+,0x00F0
+,0x010D
+,0x012A
+,0x014B
+,0x0164
+,0x0170
+,0x0185
+,0x018E
+,0x01A3
+,0x01D6
+,0x01E2
+,0x0215
+,0x0246
+,0x0267
+,0x029C
+,0x02CB
+,0x02EA
+,0x0321
+,0x0352
+,0x0360
+,0x0371
+,0x039C
+,0x03CD
+,0x03F8
+,0x041B
+,0x045C
+,0x047D
+,0x04B8
+,0x04E5
+,0x050E
+,0x0541
+,0x0564
+,0x0597
+,0x05AC
+,0x05CD
+,0x05EA
+,0x060F
+,0x0624
+,0x063D
+,0x0656
+,0x067F
+,0x06A4
+,0x06D5
+,0x0700
+,0x0739
+,0x0752
+,0x076B
+,0x0784
+,0x079D
+,0x07C6
+,0x07DF
+,0x0818
+,0x0837
+,0x084C
+,0x086B
+,0x087C
+,0x0895
+,0x08A1 // a
+,0x08D4
+,0x08F9
+,0x0920
+,0x0945
+,0x097A
+,0x099B
+,0x09E4
+,0x09F9
+,0x0A14
+,0x0A33
+,0x0A54
+,0x0A71
+,0x0A8A
+,0x0A9F
+,0x0AC8
+,0x0AED
+,0x0B12
+,0x0B27
+,0x0B5A
+,0x0B77
+,0x0B8C
+,0x0BA5
+,0x0BBE
+,0x0BE3
+,0x0C04
+,0x0C39
+,0x0C5C
+,0x0C63
+,0x0C86
+,0x0C9F
+,0x0CAD
+,0x0CD6
+,0x0D05
+,0x0D2A
+,0x0D61
+,0x0D6C
+,0x0DAB
+,0x0DB8
+,0x0E05
+,0x0E3C
+,0x0E5D // cursor
+,0x0E70 //
+,0x0E73 // Ū
+,0x0EBA // Ŋ
+,0x0ECB // °
+,0x0EE4 // ą
+,0x0F15 // ē
+,0x0F3C
+,0x0F61
+,0x0F6B // ĩ
+,0x0F86 // <SPACE>
+,0x0F89 //,0x0F9B
+
+/*
+,0x0FA4
+,0x0FB6
+,0x0FC0
+,0x0FEF
+,0x100E
+,0x1039
+,0x1070
+,0x10AB
+,0x10AE
+,0x10C3
+,0x10D8
+,0x10F1 // <SPACE>
+,0x10F4
+,0x10F7
+,0x10FA
+,0x10FD
+,0x1100
+,0x1103
+,0x1106
+,0x1109
+,0x110C
+,0x110F
+,0x1112
+,0x1115
+,0x1118
+,0x111B
+,0x111E
+,0x1121
+,0x1124
+,0x1127
+,0x112A
+,0x112D
+,0x1130
+,0x1133
+,0x1136
+,0x1139
+,0x113C
+,0x113F
+,0x1142
+,0x1145
+,0x1148
+,0x114B
+,0x114E
+,0x1151
+,0x1154
+,0x1157
+,0x115A
+,0x115D
+,0x1160
+,0x1163
+,0x1166
+,0x1169
+,0x116C
+,0x116F
+,0x1172
+,0x1175
+,0x1178
+,0x117B
+,0x117E
+,0x1181
+,0x1184
+,0x1187
+,0x118A
+,0x118D
+,0x1190
+,0x1193
+,0x1196
+,0x1199
+,0x119C
+,0x119F
+,0x11A2
+,0x11A5
+,0x11A8
+,0x11AB
+,0x11AE
+,0x11B1
+,0x11B4
+,0x11B7
+,0x11BA
+,0x11BD
+,0x11C0
+,0x11C3
+,0x11C6
+,0x11C9
+,0x1100
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc48.drx.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,443 @@
+0x9F9F
+,0xBA03
+,0x9A04
+,0x9A05
+,0x9904
+,0x9B03
+,0x9F9F
+,0xC09F // .. |
+,0x9FBF
+,0x7F9F
+,0x9FBF
+,0xCD03 // 0
+,0x960E
+,0x8E12
+,0x8A16
+,0x8704
+,0x8B07
+,0x8503
+,0x8C03
+,0x8004
+,0x8303
+,0x8B04
+,0x8204
+,0x8202
+,0x8B04
+,0x8403
+,0x8102
+,0x8B03
+,0x8702
+,0x8102
+,0x8A03
+,0x8802
+,0x8102
+,0x8804
+,0x8903
+,0x8002
+,0x8703
+,0x8B02
+,0x8103
+,0x8503
+,0x8C02
+,0x8203
+,0x8204
+,0x8C03
+,0x8303
+,0x8004
+,0x8C03
+,0x8506
+,0x8C04
+,0x8716
+,0x8913
+,0x8E0E
+,0x9503
+,0xCDFF // .. 1
+,0x8400
+,0x9E01
+,0x9C02
+,0x9B02
+,0x9C02
+,0x9B03
+,0x9B02
+,0x9B1D
+,0x811D
+,0x811D
+,0xFFFF
+,0xC0FC
+,0x0185
+,0x0094
+,0x0384
+,0x0291
+,0x0583
+,0x0390
+,0x0682
+,0x0390
+,0x0782
+,0x0290
+,0x0381
+,0x0281
+,0x028F
+,0x0482
+,0x0281
+,0x028E
+,0x0483
+,0x0281
+,0x028D
+,0x0484
+,0x0281
+,0x028D
+,0x0385
+,0x0281
+,0x028C
+,0x0386
+,0x0281
+,0x038A
+,0x0387
+,0x0282
+,0x0288
+,0x0488
+,0x0282
+,0x0386
+,0x0489
+,0x0283
+,0x0D8A
+,0x0284
+,0x0A8C
+,0x0285
+,0x088D
+,0x0287
+,0x0390
+,0x02E0
+,0xFF9A
+,0x0185
+,0x0292
+,0x0483
+,0x0393
+,0x0482
+,0x0295
+,0x0382
+,0x0296
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0288
+,0x038A
+,0x0282
+,0x0287
+,0x0489
+,0x0282
+,0x0385
+,0x0687
+,0x0383
+,0x0A81
+,0x0384
+,0x0484
+,0x0A81
+,0x0C87
+,0x0684
+,0x0A8A
+,0x0288
+,0x07FF
+,0x84D3
+,0x029A
+,0x0499
+,0x0597
+,0x0796
+,0x0381
+,0x0294
+,0x0482
+,0x0293
+,0x0384
+,0x0291
+,0x0485
+,0x0290
+,0x0387
+,0x028E
+,0x0488
+,0x028D
+,0x038A
+,0x028B
+,0x048B
+,0x028A
+,0x1C81
+,0x1D81
+,0x1D81
+,0x1D94
+,0x029C
+,0x029C
+,0x029C
+,0x02C8
+,0xFA00
+,0x8D06
+,0x8802
+,0x830F
+,0x8704
+,0x820F
+,0x8803
+,0x8209
+,0x8102
+,0x8A03
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8701
+,0x8D02
+,0x8102
+,0x8701
+,0x8E02
+,0x8002
+,0x8701
+,0x8D03
+,0x8002
+,0x8702
+,0x8C02
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8703
+,0x8A03
+,0x8102
+,0x8803
+,0x8804
+,0x8102
+,0x8805
+,0x8405
+,0x8202
+,0x890E
+,0x8302
+,0x8A0C
+,0x9408
+,0xE5EC
+,0x0891
+,0x118B
+,0x1588
+,0x1785
+,0x0584
+,0x0286
+,0x0584
+,0x0385
+,0x0289
+,0x0383
+,0x0386
+,0x028A
+,0x0381
+,0x0386
+,0x028C
+,0x0281
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x028D
+,0x0280
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x038B
+,0x0281
+,0x0288
+,0x0389
+,0x0283
+,0x0287
+,0x0584
+,0x0583
+,0x0387
+,0x0E85
+,0x008A
+,0x0C95
+,0x06E6
+,0xFF80
+,0x029C
+,0x029C
+,0x029C
+,0x0297
+,0x0281
+,0x0294
+,0x0581
+,0x0291
+,0x0881
+,0x028F
+,0x0982
+,0x028C
+,0x0985
+,0x0289
+,0x0988
+,0x0287
+,0x088B
+,0x0284
+,0x098D
+,0x0282
+,0x0890
+,0x0B93
+,0x0995
+,0x0698
+,0x049A
+,0x01FC
+,0xF405
+,0x8A03
+,0x8808
+,0x8707
+,0x850A
+,0x8509
+,0x8304
+,0x8105
+,0x830B
+,0x8103
+,0x8504
+,0x8202
+,0x8506
+,0x8803
+,0x8102
+,0x8705
+,0x8902
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8902
+,0x8A02
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8804
+,0x8902
+,0x8103
+,0x8606
+,0x8802
+,0x8203
+,0x8303
+,0x8103
+,0x8602
+,0x830B
+,0x8105
+,0x8204
+,0x8408
+,0x840B
+,0x8705
+,0x8609
+,0x9705
+,0xE5E7
+,0x0498
+,0x098B
+,0x0086
+,0x0C89
+,0x0284
+,0x0E88
+,0x0382
+,0x0388
+,0x0388
+,0x0282
+,0x028A
+,0x0387
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0380
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x038A
+,0x0287
+,0x0382
+,0x0389
+,0x0286
+,0x0383
+,0x0487
+,0x0285
+,0x0485
+,0x0781
+,0x0381
+,0x0887
+,0x168A
+,0x128F
+,0x0CE9
+,0x9F9F // :
+,0xAB03
+,0x8A03
+,0x8B04
+,0x8904
+,0x8B04
+,0x8905
+,0x8A04
+,0x8904
+,0x8C02 
+,0x8B03
+,0x9F9F
+,0xC09F // .. '
+,0x9FC8
+,0x0194
+,0x0A94
+,0x0A94
+,0x0896
+,0x059F
+,0x9FB9
+,0xFFA9 // "
+,0x009B
+,0x0394
+,0x0A94
+,0x0995
+,0x0698
+,0x03FF
+,0x8302
+,0x940A
+,0x940A
+,0x9407
+,0x9704
+,0xFFBA
+,0xC815 // m
+,0x8915
+,0x8915
+,0x8B02
+,0x9B01
+,0x9C01
+,0x9D01
+,0x9D02
+,0x9C04
+,0x9A15
+,0x8A14
+,0x8B13
+,0x8A02
+,0x9B02
+,0x9C01
+,0x9D01
+,0x9D02
+,0x9C15
+,0x8915
+,0x8A14
+,0x8D11
+,0xA0FF
+,0xFFFF
+,0xFFFF
+,0xFF00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc48.tbl.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,18 @@
+0x0000
+,0x000F // | bzw. /
+,0x0016 // 0
+,0x006B // 1
+,0x0083
+,0x00DC
+,0x012D
+,0x0166
+,0x01C1
+,0x0216
+,0x024C
+,0x02AB // 9
+,0x0302 // :
+,0x031B // '
+,0x032A // "
+,0x0344 // m
+,0x036F // <SPACE>
+,0x0375 // the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc90.drx.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,718 @@
+0x9BAF
+,0xAFAF
+,0xAFAF
+,0xAFD1
+,0x05B2
+,0x07B0
+,0x08B0
+,0x09AF
+,0x09AF
+,0x09AF
+,0x09AF
+,0x08B1
+,0x07B2
+,0x049B
+,0x9F9F
+,0x9F9F
+,0x9FAE
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0x8FFF
+,0xFF82
+,0x04AC
+,0x14A1
+,0x1A9B
+,0x2096
+,0x2492
+,0x288F
+,0x0E8A
+,0x108C
+,0x0B94
+,0x0C8A
+,0x0996
+,0x0F87
+,0x0896
+,0x1285
+,0x0797
+,0x0783
+,0x0785
+,0x0697
+,0x0785
+,0x0783
+,0x0696
+,0x0887
+,0x0782
+,0x0596
+,0x078A
+,0x0681
+,0x0596
+,0x078C
+,0x0581
+,0x0594
+,0x088E
+,0x0580
+,0x0494
+,0x0790
+,0x0580
+,0x0493
+,0x0791
+,0x0580
+,0x0491
+,0x0892
+,0x0580
+,0x0490
+,0x0794
+,0x0580
+,0x058E
+,0x0795
+,0x0580
+,0x058C
+,0x0896
+,0x0580
+,0x068A
+,0x0896
+,0x0582
+,0x0688
+,0x0797
+,0x0682
+,0x0785
+,0x0897
+,0x0684
+,0x0783
+,0x0897
+,0x0785
+,0x0880
+,0x0798
+,0x0787
+,0x0F97
+,0x0889
+,0x0D95
+,0x0A8B
+,0x108C
+,0x0E8E
+,0x2891
+,0x2694
+,0x2299
+,0x1CA0
+,0x15AA
+,0x0797
+,0xFFFF
+,0xFFD7
+,0x01B7
+,0x03B4
+,0x04B4
+,0x03B4
+,0x04B4
+,0x04B3
+,0x04B3
+,0x05B3
+,0x05B2
+,0x06B2
+,0x05B2
+,0x06B2
+,0x3681
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x37FF
+,0xFFFF
+,0xFFFF
+,0xFFAC
+,0xFFFF
+,0xFF90
+,0x0389
+,0x00A8
+,0x0587
+,0x03A5
+,0x0786
+,0x05A3
+,0x0885
+,0x07A0
+,0x0A84
+,0x089F
+,0x0B84
+,0x069F
+,0x0D83
+,0x069F
+,0x0E82
+,0x069F
+,0x0881
+,0x0482
+,0x059E
+,0x0883
+,0x0482
+,0x049E
+,0x0884
+,0x0481
+,0x059D
+,0x0885
+,0x0481
+,0x059C
+,0x0787
+,0x0481
+,0x049C
+,0x0788
+,0x0481
+,0x049B
+,0x0789
+,0x0481
+,0x049A
+,0x078A
+,0x0481
+,0x0499
+,0x078B
+,0x0481
+,0x0498
+,0x078C
+,0x0481
+,0x0596
+,0x078D
+,0x0481
+,0x0595
+,0x078E
+,0x0481
+,0x0594
+,0x078F
+,0x0481
+,0x0692
+,0x0790
+,0x0482
+,0x0690
+,0x0791
+,0x0482
+,0x078E
+,0x0792
+,0x0483
+,0x078B
+,0x0893
+,0x0483
+,0x0986
+,0x0A94
+,0x0484
+,0x1995
+,0x0485
+,0x1796
+,0x0486
+,0x1498
+,0x0487
+,0x1299
+,0x0489
+,0x0E9B
+,0x048C
+,0x089D
+,0x05B3
+,0x05BA
+,0xFFFF
+,0xFF8E
+,0x00B7
+,0x028A
+,0x01A8
+,0x0488
+,0x03A5
+,0x0786
+,0x05A3
+,0x0886
+,0x05A5
+,0x0784
+,0x05A7
+,0x0684
+,0x05A8
+,0x0682
+,0x05AA
+,0x0582
+,0x05AA
+,0x0581
+,0x0591
+,0x0495
+,0x0580
+,0x0591
+,0x0495
+,0x0580
+,0x0591
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0594
+,0x0580
+,0x0590
+,0x0694
+,0x0580
+,0x0590
+,0x0694
+,0x0580
+,0x058F
+,0x0892
+,0x0582
+,0x058E
+,0x0892
+,0x0582
+,0x068C
+,0x0A90
+,0x0682
+,0x078A
+,0x0C8E
+,0x0684
+,0x0787
+,0x0681
+,0x068C
+,0x0785
+,0x1581
+,0x0789
+,0x0887
+,0x1383
+,0x1889
+,0x1185
+,0x168B
+,0x0F87
+,0x148D
+,0x0C8A
+,0x1291
+,0x078E
+,0x0EAC
+,0x0AFF
+,0xB8FF
+,0xFF8B
+,0x05B2
+,0x06B0
+,0x08AF
+,0x09AD
+,0x0BAC
+,0x0CAA
+,0x0EA9
+,0x0781
+,0x05A7
+,0x0882
+,0x05A6
+,0x0784
+,0x05A4
+,0x0786
+,0x05A3
+,0x0787
+,0x05A1
+,0x0789
+,0x059F
+,0x088A
+,0x059E
+,0x078C
+,0x059C
+,0x088D
+,0x059B
+,0x078F
+,0x0599
+,0x0890
+,0x0598
+,0x0792
+,0x0596
+,0x0794
+,0x0595
+,0x0795
+,0x0593
+,0x0797
+,0x0592
+,0x3581
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x37A4
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x058F
+,0xFFFF
+,0xFF8C
+,0x01A2
+,0x0092
+,0x0392
+,0x1090
+,0x0585
+,0x1C8F
+,0x0784
+,0x1D8E
+,0x0883
+,0x1D8E
+,0x0883
+,0x1C91
+,0x0782
+,0x1B93
+,0x0682
+,0x058E
+,0x0595
+,0x0681
+,0x058E
+,0x0497
+,0x0581
+,0x058E
+,0x0497
+,0x0581
+,0x058D
+,0x0598
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0597
+,0x0581
+,0x058D
+,0x0597
+,0x0581
+,0x058E
+,0x0595
+,0x0681
+,0x058E
+,0x0693
+,0x0682
+,0x058E
+,0x0791
+,0x0782
+,0x058F
+,0x088D
+,0x0883
+,0x0590
+,0x0A87
+,0x0B83
+,0x0591
+,0x1C84
+,0x0592
+,0x1A85
+,0x0593
+,0x1886
+,0x0594
+,0x15A5
+,0x11AA
+,0x0CC5
+,0xFFFF
+,0xF111
+,0xA21B
+,0x9A21
+,0x9426
+,0x9029
+,0x8E2B
+,0x8C0D
+,0x8505
+,0x850E
+,0x880B
+,0x8805
+,0x8B09
+,0x8808
+,0x8906
+,0x8E08
+,0x8607
+,0x8B05
+,0x9107
+,0x8407
+,0x8B05
+,0x9306
+,0x8306
+,0x8C05
+,0x9506
+,0x8205
+,0x8D05
+,0x9605
+,0x8106
+,0x8D04
+,0x9706
+,0x8005
+,0x8D05
+,0x9805
+,0x8005
+,0x8D05
+,0x9805
+,0x8004
+,0x8E04
+,0x990B
+,0x8E04
+,0x990B
+,0x8E05
+,0x980B
+,0x8E05
+,0x980B
+,0x8E05
+,0x9805
+,0x8004
+,0x8E06
+,0x9605
+,0x8104
+,0x8F05
+,0x9605
+,0x8105
+,0x8E06
+,0x9405
+,0x8205
+,0x8F07
+,0x9007
+,0x8305
+,0x8E09
+,0x8C08
+,0x8407
+,0x8D0B
+,0x860A
+,0x8507
+,0x8E1B
+,0x8705
+,0x9019
+,0x8903
+,0x9217
+,0x8B00
+,0x9613
+,0xA70F
+,0xAD07
+,0xC8FF
+,0xFFFF
+,0x9605
+,0xB305
+,0xB305
+,0xB305
+,0xB305
+,0xB305
+,0xAF01
+,0x8105
+,0xAC04
+,0x8105
+,0xA907
+,0x8105
+,0xA60A
+,0x8105
+,0xA40C
+,0x8105
+,0xA10F
+,0x8105
+,0x9E12
+,0x8105
+,0x9B13
+,0x8305
+,0x9813
+,0x8605
+,0x9612
+,0x8905
+,0x9312
+,0x8C05
+,0x9012
+,0x8F05
+,0x8E11
+,0x9205
+,0x8B11
+,0x9505
+,0x8910
+,0x9805
+,0x8610
+,0x9B05
+,0x840F
+,0x9E05
+,0x8110
+,0xA015
+,0xA312
+,0xA610
+,0xA80D
+,0xAB0B
+,0xAD09
+,0xAF06
+,0xB204
+,0xFFA7
+,0xFFFF
+,0xCA03
+,0xB10B
+,0xAB0F
+,0x9007
+,0x8F11
+,0x8D0C
+,0x8A14
+,0x8A0F
+,0x8816
+,0x8811
+,0x8618
+,0x8614
+,0x8407
+,0x8708
+,0x8515
+,0x8306
+,0x8B07
+,0x8406
+,0x8608
+,0x8106
+,0x8D06
+,0x8306
+,0x8907
+,0x8004
+,0x9006
+,0x8205
+,0x8B0C
+,0x9105
+,0x8105
+,0x8D0A
+,0x9205
+,0x8104
+,0x8F08
+,0x9405
+,0x8004
+,0x9006
+,0x9505
+,0x8004
+,0x9006
+,0x950B
+,0x9105
+,0x950B
+,0x9105
+,0x950B
+,0x9205
+,0x940B
+,0x9106
+,0x9405
+,0x8004
+,0x9107
+,0x9305
+,0x8005
+,0x8F08
+,0x9304
+,0x8105
+,0x8E0A
+,0x9105
+,0x8106
+,0x8C0C
+,0x8F06
+,0x8206
+,0x8906
+,0x8106
+,0x8E05
+,0x8308
+,0x8508
+,0x8107
+,0x8C06
+,0x8415
+,0x8308
+,0x8807
+,0x8613
+,0x850A
+,0x820A
+,0x8711
+,0x8716
+,0x890F
+,0x8914
+,0x8B0C
+,0x8C12
+,0x8F06
+,0x9010
+,0xAA0C
+,0xAF06
+,0xC5FF // .., 9
+,0xFFE9
+,0x09AC
+,0x0F98
+,0x008D
+,0x1395
+,0x028A
+,0x1792
+,0x0488
+,0x1990
+,0x0686
+,0x1B8E
+,0x0785
+,0x0988
+,0x0A8F
+,0x0683
+,0x088D
+,0x0790
+,0x0582
+,0x0790
+,0x078F
+,0x0582
+,0x0693
+,0x0590
+,0x0580
+,0x0694
+,0x068F
+,0x0580
+,0x0596
+,0x058F
+,0x0580
+,0x0597
+,0x048F
+,0x0580
+,0x0498
+,0x048F
+,0x0580
+,0x0498
+,0x058E
+,0x0B98
+,0x058E
+,0x0B98
+,0x048F
+,0x0580
+,0x0498
+,0x048E
+,0x0581
+,0x0597
+,0x048E
+,0x0581
+,0x0596
+,0x058D
+,0x0681
+,0x0695
+,0x048E
+,0x0583
+,0x0594
+,0x058D
+,0x0683
+,0x0693
+,0x048D
+,0x0685
+,0x0790
+,0x058B
+,0x0786
+,0x098D
+,0x058A
+,0x0888
+,0x0B88
+,0x0687
+,0x0C89
+,0x2D8C
+,0x2B8F
+,0x2793
+,0x2496
+,0x1F9D
+,0x17A9
+,0x07D3 // end of 9
+,0xFF00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc90.tbl.txt	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,13 @@
+0x0000 // .
+,0x0022 // <SPACE>
+,0x0035 // 0
+,0x00D2
+,0x0100
+,0x01A8
+,0x0243
+,0x02AC
+,0x0354
+,0x03ED
+,0x0454
+,0x04FF // 9
+,0x059A // end
Binary file code_part1/OSTC_code_c_part2/ostc_bigscreen.cof has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc_bigscreen.hex	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,513 @@
+:020000040000FA
+:0600000000EF48F01200C1
+:1090000000010A0E7C6F00010A0E7D6F00017A6973
+:1090100000017B6900017E6B00017F6B0001200E67
+:10902000606F0001210E616F0001220E626F00016E
+:0E9030003A0E636F0001646B90EC5BF012006F
+:109A0000AF9BAFAFAFAFD1AFB205B007B008AF09F2
+:109A1000AF09AF09AF09B108B2079B049F9F9F9F91
+:109A2000AE9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7
+:109A3000FFFFFFFFFF8F82FFAC04A1149B1A96204B
+:109A400092248F288A0E8C10940B8A0C9609870F0B
+:109A5000960885129707830785079706850783076A
+:109A600096068708820796058A07810696058C0761
+:109A7000810594058E088005940490078005930461
+:109A80009107800591049208800590049407800551
+:109A90008E05950780058C05960880058A06960830
+:109AA000820588069707820685079708840683073C
+:109AB00097088507800898078707970F8908950DED
+:109AC0008B0A8C108E0E912894269922A01CAA1520
+:109AD0009707FFFFD7FFB701B403B404B403B4047E
+:109AE000B304B304B305B205B206B205B2068136BB
+:109AF0008137813781378137FF37FFFFFFFFACFFA9
+:109B0000FFFF90FF8903A8008705A5038607A3052B
+:109B10008508A007840A9F08840B9F06830D9F0673
+:109B2000820E9F06810882049E05830882049E049B
+:109B3000840881049D05850881049C0587078104AC
+:109B40009C04880781049B04890781049A048A077E
+:109B5000810499048B07810498048C07810496057D
+:109B60008D07810495058E07810494058F07810474
+:109B70009206900782049006910782048E0792074E
+:109B800083048B07930883048609940A8404951937
+:109B900085049617860498148704991289049B0EED
+:109BA0008C049D08B305BA05FFFF8EFFB7008A023B
+:109BB000A8018804A5038607A3058608A5058407D0
+:109BC000A7058406A8058206AA058205AA058105BF
+:109BD00091059504800591059504800591059504EE
+:109BE00080059204950480059204950480059204F2
+:109BF00095048005920494058005900594068005DF
+:109C00009005940680058F05920882058E059208BE
+:109C100082058C06900A82068A078E0C84068707C6
+:109C200081068C06850781158907870883138918A3
+:109C300085118B16870F8D148A0C91128E07AC0E2E
+:109C4000FF0AFFB88BFFB205B006AF08AD09AC0B39
+:109C5000AA0CA90E8107A7058208A6058407A405FA
+:109C60008607A3058707A10589079F058A089E0522
+:109C70008C079C058D089B058F0799059008980512
+:109C80009207960594079505950793059707920502
+:109C9000813581378137813781378137A437B305E3
+:109CA000B305B305B305B305B3058F05FFFF8CFFFF
+:109CB000A20192009203901085058F1C84078E1DCF
+:109CC00083088E1D8308911C8207931B82068E05D4
+:109CD000950581068E05970481058E0597048105FB
+:109CE0008D05980580058D05990480058D059904DD
+:109CF00080058D05990480058D05990480058D05E5
+:109D0000990480058D05990480058D0599048005C9
+:109D10008D05990480058D05970581058D059705AD
+:109D200081058E05950581068E05930682068E05B2
+:109D3000910782078F058D0883089005870A830B9A
+:109D40009105841C9205851A930586189405A5151E
+:109D5000AA11C50CFFFF11F11BA2219A269429908C
+:109D60002B8E0D8C05850E850B880588098B088840
+:109D70000689088E0786058B07910784058B069355
+:109D80000683058C06950582058D05960681048D52
+:109D900006970580058D05980580058D059804803A
+:109DA000048E0B99048E0B99058E0B98058E0B98DB
+:109DB000058E05980480068E05960481058F05960C
+:109DC0000581068E05940582078F07900583098E0D
+:109DD000088C07840B8D0A8607851B8E05871990D2
+:109DE00003891792008B13960FA707ADFFC8FFFFDB
+:109DF000059605B305B305B305B305B301AF0581FA
+:109E000004AC058107A905810AA605810CA405817A
+:109E10000FA10581129E0581139B0583139805866A
+:109E2000129605891293058C1290058F118E05925A
+:109E3000118B0595108905981086059B0F84059E4A
+:109E4000108115A012A310A60DA80BAB09AD06AF8B
+:109E500004B2A7FFFFFF03CA0BB10FAB0790118F2E
+:109E60000C8D148A0F8A1688118818861486078428
+:109E7000088715850683078B068408860681068D6C
+:109E8000068307890480069005820C8B0591058165
+:109E90000A8D05920481088F05940480069005952B
+:109EA000048006900B9505910B9505910B950592F5
+:109EB0000B94069105940480079105930580088F03
+:109EC000049305810A8E059106810C8C068F06820B
+:109ED00006890681058E088308850781068C15840E
+:109EE0000883078813860A850A82118716870F89D7
+:109EF00014890C8B128C068F10900CAA06AFFFC52C
+:109F0000E9FFAC09980F8D0095138A029217880417
+:109F1000901986068E1B850788098F0A83068D088F
+:109F20009007820590078F078205930690058005AC
+:109F300094068F06800596058F05800597058F048A
+:109F4000800598048F04800598048E05980B8E0573
+:109F5000980B8F04800598048E04810597058E0464
+:109F6000810596058D05810695068E048305940569
+:109F70008D05830693068D04850690078B0586075D
+:109F80008D098A058808880B8706890C8C2D8F2BF4
+:0C9F9000932796249D1FA917D30700FFFC
+:109FA000000022003500D2000001A8014302AC02EB
+:0A9FB0005403ED035404FF049A0566
+:069FBA0000EE00F00D0EA8
+:089FC000EE6AEA62FDD712000F
+:10A0000000000F0016006B008300DC002D016601CC
+:10A01000C10116024C02AB0202031B032A034403D4
+:04A020006F03750352
+:0CA024009F9F03BA049A059A0499039BBD
+:10A030009F9F9FC0BF9F9F7FBF9F03CD0E96128E95
+:10A04000168A0487078B0385038C04800383048BA3
+:10A0500004820282048B03840281038B02870281C3
+:10A06000038A028802810488038902800387028BA5
+:10A0700003810385028C03820482038C03830480A2
+:10A08000038C0685048C168713890E8E0395FFCDED
+:10A090000084019E029C029B029C039B029B1D9BD1
+:10A0A0001D811D81FFFFFCC0850194008403910286
+:10A0B0008305900382069003820790028103810248
+:10A0C0008F02820481028E02830481028D02840445
+:10A0D00081028D02850381028C02860381028A033C
+:10A0E000870382028802880482028603890483022D
+:10A0F0008A0D84028C0A85028D0887029003E00293
+:10A100009AFF8501920283049303820495028203DD
+:10A110009602810289028A02810289028A028102F0
+:10A1200089028A02810289028A02810288028A03E4
+:10A130008202870289048202850387068303810ADB
+:10A1400084038404810A870C84068A0A8802FF0734
+:10A15000D3849A0299049705960781039402820496
+:10A160009302840391028504900287038E0288047F
+:10A170008D028A038B028B048A02811C811D811D42
+:10A18000941D9C029C029C02C80200FA068D028863
+:10A190000F8304870F82038809820281038A028168
+:10A1A0000287028C02810287028C02810187028D64
+:10A1B00002810187028E02800187038D028002875F
+:10A1C000028C02810287028C02810387038A02814A
+:10A1D0000388048802810588058402820E8902832F
+:10A1E0000C8A0894ECE591088B1188158517840575
+:10A1F0008602840585038902830386038A0281031C
+:10A2000086038C02810287028C02810287028D0202
+:10A21000800287028C02810287028C0281028702FF
+:10A220008B038102880289038302870284058305E8
+:10A230008703850E8A00950CE60680FF9C029C022F
+:10A240009C029702810294028105910281088F028B
+:10A2500082098C0285098902880987028B08840299
+:10A260008D0982029008930B950998069A04FC01C7
+:10A2700005F4038A088807870A8509850483058110
+:10A280000B8303810485028206850388028105878A
+:10A29000028902810388028A02810388028A02817C
+:10A2A0000289028A02810388028A02810488028963
+:10A2B00003810686028803820383038102860B835F
+:10A2C0000581048208840B84058709860597E7E5E4
+:10A2D00098048B098600890C8402880E8203880307
+:10A2E000880382028A02870381028C02870281022C
+:10A2F0008C02870280038C02870281028C02870213
+:10A3000081028C02870281028A0387028203890309
+:10A3100086028303870485028504810781038708F9
+:10A320008A168F12E90C9F9F03AB038A048B048962
+:10A33000048B0589048A0489028C038B9F9F9FC02C
+:10A34000C89F9401940A940A96089F05B99FA9FF93
+:10A350009B009403940A95099806FF0302830A94CC
+:10A360000A9407940497BAFF15C815891589028BBA
+:10A37000019B019C019D029D049C159A148A138BDC
+:10A38000028A029B019C019D029D159C1589148ADD
+:0AA39000118DFFA0FFFFFFFF00FF8B
+:06A39A0000000E001B0094
+:10A3A00048007D00B400E700F0000D012A014B01D8
+:10A3B0006401700185018E01A301D601E20115023D
+:10A3C000460267029C02CB02EA02210352036003A9
+:10A3D00071039C03CD03F8031B045C047D04B804E3
+:10A3E000E5040E05410564059705AC05CD05EA05B4
+:10A3F0000F0624063D0656067F06A406D50600076E
+:10A40000390752076B0784079D07C607DF0718083F
+:10A4100037084C086B087C089508A108D408F9088F
+:10A42000200945097A099B09E409F909140A330A44
+:10A43000540A710A8A0A9F0AC80AED0A120B270BEE
+:10A440005A0B770B8C0BA50BBE0BE30B040C390CD2
+:10A450005C0C630C860C9F0CAD0CD60C050D2A0D04
+:10A46000610D6C0DAB0DB80D050E3C0E5D0E700E42
+:10A47000730EBA0ECB0EE40E150F3C0F610F6B0F6F
+:04A48000860F890FAB
+:08A4880003F8018A0C85028231
+:10A490000A85028394FF00CD0591039101C70591C0
+:10A4A00003919DDA83018F0183018F018301880667
+:10A4B000870D81078F0183018F0183018F01820145
+:10A4C0008607890D83058F0183018F018301A20017
+:10A4D00002B40186048A0186018802810185008810
+:10A4E000018300860287028201851285018502842C
+:10A4F000018400870185018301880284018201892A
+:10A50000058403929A9F9203880585018301850142
+:10A51000860283018400890282058B0382039202F2
+:10A5200082028C02830289048402820186018503EF
+:10A53000830186008701820191019D0403A4069195
+:10A5400004880281028208860185008602840185D2
+:10A5500000860384018401860582018306860282C7
+:10A560000180038803850294069201900082FF9D7A
+:10A570000194069002918BFF07E70C8C03890387F7
+:10A580000286028B0184028E018201910181029177
+:10A5900000800093B0B093008100910181018F028F
+:10A5A00082028D0284028B028602870389038D0B4F
+:10A5B000E707009F019601950282009002810491B5
+:10A5C000078D078F04940092028101900183018F0F
+:10A5D0000095A0A6950195019501950191018B0A21
+:10A5E000900B9501950195019501A40188FF8201C9
+:10A5F0008F0190069404FC0001B801950195019526
+:10A60000019501950195019501950195FFBC018783
+:10A610000295029494FF01C1039304900490049066
+:10A6200003900391039103910193A0C490028B0ABC
+:10A6300085028903860187058601830186018600DC
+:10A6400084018601840085028601820186028601DA
+:10A6500080028701880184048B03900AA30201CA47
+:10A66000019501941095108694FF00B3018B01872A
+:10A670000389018604890186028801800086018899
+:10A68000018200860187018301860185018402869B
+:10A69000018301850687018604880187BFB488018C
+:10A6A0008B0087018C01860185008501860185006C
+:10A6B0008501860185008501860183018502860169
+:10A6C000810280018301880182049205B70300A4FE
+:10A6D0000294049202910180028F0182028E018312
+:10A6E000028C0185108B1086029001940096B7A110
+:10A6F0008501880083088702820285018701840022
+:10A700008700860184008700860184008700860117
+:10A710008400860186018400850187018500870801
+:10A720008600B60608B50C8C028901820283018777
+:10A7300001830186018601830186008600840187EA
+:10A7400000860184018601860283018401870884D2
+:10A75000058FB1B7960096008D0086018A008604A9
+:10A760008700880585008B0482008D059006930381
+:10A77000C30104BB04890682028702800180018331
+:10A780000187028301850086018501850086018598
+:10A790000185018602830185028601810180018392
+:10A7A0000588068102890484B3B68605880084077B
+:10A7B0008701840284018601860184008601870066
+:10A7C000830186018700840086018501830187015A
+:10A7D0008402820188028B0DB80901FE0186028C79
+:10A7E0000285028B028594FF01FF018601820286A9
+:10A7F0000685028704850094A0FC950193029303CB
+:10A80000810091018101900183018F0184018D01FB
+:10A8100085018D0186018B0187018B0188018901EA
+:10A8200089019E01009E00840090008400900084B5
+:10A8300000900084009000840090008400900084C8
+:10A8400000900084009000840090008400900084B8
+:10A85000009000849AA189018A0188018A018701F8
+:10A860008C0186018C0185018E0184018E0183019A
+:10A870009001810192018100920194039402A4014C
+:10A8800001B101950194019501940188028201842E
+:10A890000486028101850284018402860282068F79
+:10A8A00004919DBF8D0781048A04870288028B0171
+:10A8B0008701840183038700840082058601830069
+:10A8C0008201820186018300840082008601820168
+:10A8D0008400820086018102830082018701820A4E
+:10A8E0008A00A10802A70491048F068F048D0182BB
+:10A8F000038B0185048C0183048F018005910494EE
+:10A9000004950294999C8610861085008501860125
+:10A910008500860086018500860086018500860008
+:10A9200086018500850186018301850286018301F8
+:10A9300084028702800581028902820393059F02B7
+:10A94000069E0A8E038A0385018902890187028B8C
+:10A950000086018D0086018D0086018D0186018CA7
+:10A960000186018B028802880089008A999E8610E0
+:10A9700086108D0086018D0086018D0086018D0078
+:10A9800086018C0186018C0186018A02880186037A
+:10A990008B028E0AA20510B1108600860185018502
+:10A9A0000086018501850086018501850086018577
+:10A9B0000185008601850185008601850185008667
+:10A9C000018501850086018DB1B486108610850051
+:10A9D0008E0185008F0085008F0085008F00850027
+:10A9E0008F0085008F0085008F00C400069E0B8DB0
+:10A9F000028A02870288018A0187018C0086018D04
+:10AA00000086018D0086008701840186008601840E
+:10AA10000186008600840288068400890585B19E2F
+:10AA200086108D10950195019501950195018E0176
+:10AA30008610B41000B1008E0086018D0086018D55
+:10AA40000086018D108610860086018D0086018D9E
+:10AA50000086018DBFCC9601950186018D0086018F
+:10AA60008D0086018C008701870F890D9600960066
+:10AA7000AC0010991086028D02930493029102801B
+:10AA8000028F0282018D0385018A02880188038A70
+:10AA90000086018D0096B19C861095109501950158
+:10AAA00095019501950195019501B40110991086C4
+:10AAB00003870395039503950293029203920391F2
+:10AAC00010921086999C8610861095039502950326
+:10AAD0009503950395039502870386109C10089DA6
+:10AAE0000C8C028903870187018B0187018C00860A
+:10AAF000018D0086018D0186018C0186018B028803
+:10AB000002880C89088CB1A08610861086008E0001
+:10AB100086008E0086008E0086008E0084018E01E5
+:10AB200084018E0182028F029206A702089D0C8C7E
+:10AB3000028902880187028B0186018C0086028EC1
+:10AB40000084048E0182018C01810182018C0181CB
+:10AB50000283028801820C8401830886B1A08610DA
+:10AB6000861086008E0086008E0086008E0086008D
+:10AB70008D0184018B04840180018903830788038C
+:10AB800086058A028A009C0003B302860588018636
+:10AB90000187028201860186018301860086018584
+:10ABA0000185008601850185008601850185018674
+:10ABB0000185028302860284028101880585019352
+:10ABC00099A0960096009600960096008610861032
+:10ABD0009600960096009600AC000C990E8A02959D
+:10ABE00001950196019501950195019402940E87B6
+:10ABF0000C8899A0950194049405940594059205F8
+:10AC00008F048F048F048F049204AB0105990A927C
+:10AC100009920490058E048E05900694069406927F
+:10AC20000989068AA9A686008B0186028803880303
+:10AC300084038B0381038F0391058F0581038C03AC
+:10AC400085028803870387038B0196029C00009985
+:10AC500002960395039503950A94098D048B04903D
+:10AC6000039002920094A9AC86008C0086028A00B0
+:10AC700086048900800286018700810386018500A1
+:10AC80008303860184008502860182008603860193
+:10AC90008000880386018A0386018B0295019C014E
+:10ACA00015DF0181019101810191018101910181F2
+:10ACB0000191018101910181019100820091B0B265
+:10ACC00095019503950395039503940495049503C5
+:10ACD0009503B30100B000910182019101810191BE
+:10ACE0000181019101810191018101910181019114
+:10ACF0001581CEE19401920292029402960295028D
+:10AD00009503D60100AB009600960096009600963B
+:10AD1000009600960096009600960096E09A95019F
+:10AD2000950395029502FF00A68993018C04830187
+:10AD300080018B02830082018A01830184008A00E2
+:10AD4000830184008A00830184008A0083018300D8
+:10AD50008C00820182008C018C0BB40A12AF11842A
+:10AD6000018C0186008C0188018A0188018A018892
+:10AD7000018A0188018B0286038B0283088D04906F
+:10AD8000B8A08F068D0884028C0286018A02880191
+:10AD90008A0188018A0188018A0188018B01860164
+:10ADA0008C0185028D01A60004A10890028D028409
+:10ADB000018C0286018A0188018A0188018A018842
+:10ADC000008B0088018C018611861284A2B4920245
+:10ADD0008E0780048C03810182018B018201830133
+:10ADE0008A01820183018A01820183018A01820131
+:10ADF00083018B01810183018B0182058D01830415
+:10AE0000B50001B601950195109003850181018F70
+:10AE10000183008F0184018E0184018E00840190E2
+:10AE20000295AAAB8902810480018704810B860107
+:10AE300083018101830186008500820083008501F2
+:10AE400085008200830085018500820083008501E2
+:10AE500083018201830086018305830086008405C7
+:10AE600081018601890087048B009A0112AF128448
+:10AE7000018C019400950195019502950B950A8C22
+:10AE8000CDB488018A0188018A0188018501820187
+:10AE9000850C8201950C95019501CC0101C40196A8
+:10AEA0000185018D0185018D0185018D0185018C53
+:10AEB0000181108202810F810182AFDC84128F1226
+:10AEC0009402940192038001900282018E02840117
+:10AED0008C0286018A03890096019C0000B0018ED5
+:10AEE0000184018E0184018E0184018E12841284FA
+:10AEF00001950195019500969DB48A0C8B0C9500E7
+:10AF0000950195018B0C8B0B9401950195018B0C90
+:10AF10009C0B0CB50C8A018C019400950195019550
+:10AF200002950B950A8CA1B491048E0782028C03C2
+:10AF300086018B0188018A0188018A0188018A01C2
+:10AF400088018B0186018C0183038D029008A00487
+:10AF500011B5108501870186008C0088018B01885E
+:10AF6000018A0188018A0188018B0286028B028492
+:10AF7000088D0490A1A090048D0883028C038700A3
+:10AF80008A0288018A0188018A0188018B01880070
+:10AF90008C0086018C01860FAF110CCD0C8A018CC0
+:10AFA0000194009501950195019501960095B8A72A
+:10AFB00085008C0183048C0184048A018201830151
+:10AFC0008A01820183018A01820183018A0183014E
+:10AFD00082018B01830082018B0182018D05830038
+:10AFE000B60301B5019501950E920F88018A01887B
+:10AFF000018A0188018A0188018A01880194B5B516
+:10B000008C0A950B950296019600950095008B0190
+:10B010008A0CB40C009D0396049404950494049443
+:10B020000393039103910490039000939DA89305CB
+:10B03000930893058F038F04920495039405930559
+:10B040008C038B09A20601B50188028A0286028C54
+:10B050000382028E02800491049202910280028E89
+:10B060000383028B0286008A0189ACB486018C02BC
+:10B0700085018905880187048A0184048E0191076E
+:10B080008F0490048F0490049303A70100A9018A00
+:10B090000287018A0386018A0485018A028401806D
+:10B0A000018A02820182018A02810183018A02806F
+:10B0B0000184048A0185028A0187018A0188019539
+:10B0C000A29C960095019301810586028107830861
+:10B0D0008A06810291018101920181009201810021
+:10B0E0009201C80090FF8115FF15C8909201810060
+:10B0F0009201810092018100910182018506810106
+:10B10000830381078A0881058F019501BA01009F99
+:10B11000019501950194019501960295019501957E
+:10B12000019501940195F8A6890185048103850C98
+:10B130008302FF0AA19491028E0782038C03860189
+:10B140008B0188018A0186008607860E84088701A4
+:10B15000810088018A0187018B028601B60100A95E
+:10B16000018C0186048902850E8702870682018090
+:10B170000187018300860087018401860086018D96
+:10B180000186008D0186008D01950195B49C860095
+:10B190008E008F0882018F0184018F0084018E014F
+:10B1A00084018E018401900082018F018E08860047
+:10B1B000B90001B100870081038901840081038BFC
+:10B1C00001820081028D018100810A8F0A8C038A2D
+:10B1D00001800081038B0182008103890184008149
+:10B1E0000189018600810089FFAC099008820981EC
+:10B1F000088290FF02B800850486048002830784D9
+:10B20000018101840184018201830184018201831F
+:10B21000018301840182018401820184008301840D
+:10B2200001830182018402840780018504830480F4
+:10B23000018EC8BB94019502C50194019502DC0101
+:10B2400002890791018E0285018B02820082008BA8
+:10B2500005810082018900810183008100890181CB
+:10B2600001840080008901810184008001890180BE
+:10B2700000840081008A018101820081018A0081AD
+:10B280000185018B0186028D02820490BC898F01A9
+:10B2900081038A01810181048A0182008101800188
+:10B2A0008A018200820080018A018200820080017E
+:10B2B0008A018101810081018A0181088B01810756
+:10B2C0009501B80101BA03940292018002900182B3
+:10B2D000018F018401910394029201800290018206
+:10B2E000018F0184D0B6950190018B0C8D0A8F08D7
+:10B2F000910693049502BC00FFFF89CF91028E074F
+:10B3000085018B0288018B00800081078900800104
+:10B310008107890081008200840089008100820009
+:10B32000840089008001800182038A0081008102FB
+:10B3300081018A0088018B0186018D0182029002C1
+:10B34000890400C900960096009600960096009623
+:10B350000096CBDC930191058101900183018F015F
+:10B3600083018F01830191009205D803009F00871C
+:10B37000008D0187008C0187008C0187008C01877C
+:10B380000B8701810B870181008C0187008C01876D
+:10B39000008C0187008C0187008C0087CA9D860085
+:10B3A0008D0084018C0284018C03840180008C0157
+:10B3B000830180018C01820181018D0182048E0153
+:10B3C0008302D30100D1018E0184018D0186018C9D
+:10B3D00000820182018C00820182018C0181018244
+:10B3E000058D0180018F0381FFD4019103930193A7
+:10B3F00000959DF68511950B960195019501950196
+:10B4000094008B02950B9502950195018500FFFF35
+:02B4100000CF6B
+:06B4680090EC5BF0120005
+:02B46E000000DC
+:10B47000849083C083FF80948084120085C000F094
+:10B48000016A00C086F084C087F0848086C083FF94
+:10B490008094808487C083FF8094808412008EC053
+:10B4A00083FF809480848094808412007AC083FF1C
+:10B4B000809480847BC083FF80948084120000018C
+:10B4C000350E836FD5DF00017D510001846F856BE0
+:10B4D0000001D89084378537D1DF0001360E836FA5
+:10B4E000C7DF00013F0E846F010E856FC7DF0001CB
+:10B4F000370E836FBDDF00017C510001846F856BC7
+:10B50000020E00017E5D07E13A0E00018427000E65
+:10B510000001852310D000017E0507E1200E000107
+:10B520008427000E0001852306D0180E0001842711
+:10B53000000E0001852300018407000E855B0001D9
+:10B54000EF0ED8808455000E855504E2EF0E000101
+:10B55000846F856B7CC000F000C001F0006A005071
+:10B560000001841301500001851388DF0001200EC3
+:10B57000836F7EDF00017C510001846F856B7EDF6D
+:10B580000001210E836F74DF00017D510001846F83
+:10B59000856B0001D8908437853770DF1200200E4C
+:10B5A0000001825D03E10001B60E826F000182514D
+:10B5B0007E0803E2220E0001825F210E0001825DFF
+:10B5C00004E300018251A30803E20001820E826FAE
+:10B5D000210E0001825DF66EF76AD890F636F736D6
+:10B5E0009A0EF626A30EF7220900F5CF88F00A007E
+:10B5F000F5CF89F000018229DF0FF66EF76AD89047
+:10B60000F636F7369A0EF626A30EF7220900F5CF86
+:10B610008AF00A00F5CF8BF01200270E0001825D40
+:10B6200003E100013B0E826F220E0001825D03E107
+:10B6300000013C0E826F6D0E0001825D03E100018E
+:10B640003D0E826F200E0001825D03E100013E0E7F
+:10B65000826F2E0E0001825D04E3000182513E08DC
+:10B6600003E200013E0E826F2E0E0001825DF66E37
+:10B67000F76AD890F636F736000EF626A00EF722B7
+:10B680000900F5CF88F00A00F5CF89F00001822982
+:10B69000D20FF66EF76AD890F636F736000EF62619
+:10B6A000A00EF7220900F5CF8AF00A00F5CF8BF043
+:10B6B0001200200E0001825D03E100012F0E826F57
+:10B6C0002E0E0001825D04E300018251390803E27D
+:10B6D00000012F0E826F2E0E0001825DF66EF76A5A
+:10B6E000D890F636F736A00EF6269F0EF722090000
+:10B6F000F5CF88F00A00F5CF89F000018229D20F3A
+:10B70000F66EF76AD890F636F736A00EF6269F0E3C
+:10B71000F7220900F5CF8AF00A00F5CF8BF012006E
+:10B7200000017C51006E016A013404E20050E60819
+:10B73000000E015403E20001E60E7C6F00017D5112
+:10B74000006E016A013404E200509B08000E0154AF
+:10B7500003E200019B0E7D6FB2DE0001220E836FBB
+:10B7600087DE84800001816B00018151EA6A600FED
+:10B77000E96E000EEA22EFCF82F00001825106E16D
+:10B7800000013A0E826F0001190E816FF86A000104
+:10B79000825101E1DCD01A0E0001815D01E3D7D0B6
+:10B7A000020E00017E5D02E184DF06D000017E050D
+:10B7B00002E133DF01D0F3DE00018E6B88C08CF034
+:10B7C00089C08DF000018A5100018C5D00018B5110
+:10B7D00000018D5901E3AFD0020E00017E5D1DE135
+:10B7E0008CC0F6FF8DC0F7FF010E0F0B05E0D8905F
+:10B7F000F732F632E806FBE1010ED890F636F7365E
+:10B80000E806FBE1000EF6269A0EF7220900F5CFB6
+:10B8100084F00A00F5CF85F03CD000017E051DE1E3
+:10B820008CC0F6FF8DC0F7FF010E0F0B05E0D8901E
+:10B83000F732F632E806FBE1010ED890F636F7361D
+:10B84000E806FBE1240EF626A00EF7220900F5CF4C
+:10B8500084F00A00F5CF85F01CD08CC0F6FF8DC0B7
+:10B86000F7FF010E0F0B05E0D890F732F632E8062D
+:10B87000FBE1010ED890F636F736E806FBE1880EBC
+:10B88000F626A40EF7220900F5CF84F00A00F5CFC2
+:10B8900085F000018C51010B05E00001845100018D
+:10B8A000806F05D085C000F0016A00C080F0000103
+:10B8B0008051006E016A0050800B1DE07F0E000178
+:10B8C000805F00017F5109E000018051000804E21F
+:10B8D00000018007EBDDF8D70DD08EC083FF00019B
+:10B8E0008051000807E200018007809480848094E2
+:10B8F0008084F5D71BD00001802B00017F510EE022
+:10B900008EC083FF00018051000807E2000180071C
+:10B910008094808480948084F5D708D00001805181
+:10B92000000804E200018007C1DDF8D700018C2B7C
+:10B93000000E8D2347D70001812B00018151EA6A57
+:10B94000600FE96E000EEA22EFCF82F020D70001EF
+:06B95000836B8EDD120086
+:020000040030CA
+:0100010008F6
+:0100020018E5
+:010003000EEE
+:01000500807A
+:010006008079
+:00000001FF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc_bigscreen.map	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,1722 @@
+MPLINK 4.33, Linker
+Linker Map File - Created Thu Sep 24 11:19:30 2009
+
+                                 Section Info
+                  Section       Type    Address   Location Size(Bytes)
+                ---------  ---------  ---------  ---------  ---------
+                 der_code    romdata   0x000000    program   0x000000
+                der_start       code   0x000000    program   0x000006
+                     main       code   0x009000    program   0x00003e
+          font_data_large    romdata   0x009a00    program   0x00059c
+.romdata_p3_wordprocessor.o    romdata   0x009f9c    program   0x000000
+ .code_p3_wordprocessor.o       code   0x009f9c    program   0x000000
+         font_table_large    romdata   0x009fa0    program   0x00001a
+                    .code       code   0x009fba    program   0x00000e
+        font_table_medium    romdata   0x00a000    program   0x000024
+         font_data_medium    romdata   0x00a024    program   0x000376
+         font_table_small    romdata   0x00a39a    program   0x0000ea
+.idata_p3_wordprocessor.o_i    romdata   0x00a484    program   0x000000
+          font_data_small    romdata   0x00a488    program   0x000f8a
+       main_wordprocessor       code   0x00b468    program   0x000006
+                   .cinit    romdata   0x00b46e    program   0x000002
+             subroutines2       code   0x00b470    program   0x0004e6
+.config_300001_p3_wordprocessor.o    romdata   0x300001    program   0x000001
+.config_300002_p3_wordprocessor.o    romdata   0x300002    program   0x000001
+.config_300003_p3_wordprocessor.o    romdata   0x300003    program   0x000001
+.config_300005_p3_wordprocessor.o    romdata   0x300005    program   0x000001
+.config_300006_p3_wordprocessor.o    romdata   0x300006    program   0x000001
+                 .tmpdata      udata   0x000000       data   0x000002
+                MATH_DATA      udata   0x000002       data   0x000000
+                   bank0a      udata   0x000060       data   0x000030
+.udata_p3_wordprocessor.o      udata   0x000090       data   0x000000
+.idata_p3_wordprocessor.o      idata   0x000090       data   0x000000
+                   .stack      udata   0x000c00       data   0x000100
+              SFR_BANKED0      udata   0x000d60       data   0x00000c
+              SFR_BANKED1      udata   0x000d70       data   0x00000c
+              SFR_BANKED2      udata   0x000d80       data   0x00000c
+              SFR_BANKED3      udata   0x000d90       data   0x000004
+              SFR_BANKED4      udata   0x000dd4       data   0x000002
+              SFR_BANKED5      udata   0x000dd8       data   0x000001
+              SFR_BANKED6      udata   0x000de0       data   0x000008
+              SFR_BANKED7      udata   0x000df0       data   0x000004
+              SFR_BANKED8      udata   0x000df8       data   0x000001
+              SFR_BANKED9      udata   0x000dfa       data   0x000001
+             SFR_BANKED10      udata   0x000dfc       data   0x000001
+             SFR_BANKED11      udata   0x000e20       data   0x000060
+             SFR_BANKED12      udata   0x000f00       data   0x000060
+            SFR_UNBANKED0      udata   0x000f60       data   0x000018
+            SFR_UNBANKED1      udata   0x000f80       data   0x000080
+
+
+
+                              Program Memory Usage 
+                               Start         End      
+                           ---------   ---------      
+                            0x000000    0x000005      
+                            0x009000    0x00903d      
+                            0x009a00    0x009f9b      
+                            0x009fa0    0x009fc7      
+                            0x00a000    0x00a483      
+                            0x00a488    0x00b411      
+                            0x00b468    0x00b955      
+                            0x300001    0x300003      
+                            0x300005    0x300006      
+            7945 out of 99352 program addresses used, program memory utilization is 7%
+
+
+
+                              Symbols - Sorted by Name
+                     Name    Address   Location    Storage File                     
+                ---------  ---------  ---------  --------- ---------                
+         ___else_lbl00037   0x00b7b6    program     static                          
+         ___else_lbl00039   0x00b7ac    program     static                          
+         ___else_lbl00043   0x00b85a    program     static                          
+         ___else_lbl00045   0x00b81a    program     static                          
+         ___else_lbl00047   0x00b8a4    program     static                          
+         ___else_lbl00053   0x00b8da    program     static                          
+         ___else_lbl00059   0x00b91c    program     static                          
+         ___else_lbl00061   0x00b8f6    program     static                          
+          ___for_lbl00040   0x00b92c    program     static                          
+          ___for_lbl00041   0x00b936    program     static                          
+          ___for_lbl00062   0x00b7c4    program     static                          
+           ___if_lbl00030   0x00b73c    program     static                          
+           ___if_lbl00031   0x00b758    program     static                          
+           ___if_lbl00032   0x00b78c    program     static                          
+           ___if_lbl00036   0x00b7b8    program     static                          
+           ___if_lbl00038   0x00b7b8    program     static                          
+           ___if_lbl00042   0x00b892    program     static                          
+           ___if_lbl00044   0x00b892    program     static                          
+           ___if_lbl00046   0x00b8ae    program     static                          
+           ___if_lbl00052   0x00b8f4    program     static                          
+           ___if_lbl00058   0x00b92c    program     static                          
+           ___if_lbl00060   0x00b92c    program     static                          
+       ___return_lbl00000   0x000004    program     static                          
+       ___return_lbl00003   0x00b47a    program     static                          
+       ___return_lbl00004   0x00b49c    program     static                          
+       ___return_lbl00005   0x00b4aa    program     static                          
+       ___return_lbl00006   0x00b4bc    program     static                          
+       ___return_lbl00029   0x00b954    program     static                          
+        ___while_lbl00033   0x00b78e    program     static                          
+        ___while_lbl00034   0x00b94e    program     static                          
+        ___while_lbl00048   0x00b8c8    program     static                          
+        ___while_lbl00049   0x00b8d8    program     static                          
+        ___while_lbl00050   0x00b8de    program     static                          
+        ___while_lbl00051   0x00b8f4    program     static                          
+        ___while_lbl00054   0x00b904    program     static                          
+        ___while_lbl00055   0x00b91a    program     static                          
+        ___while_lbl00056   0x00b91c    program     static                          
+        ___while_lbl00057   0x00b92c    program     static                          
+               __config_0   0x300001    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_1   0x300002    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_2   0x300003    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_3   0x300005    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_4   0x300006    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __tmplbl_6   0x00b7a0    program     static                          
+               __tmplbl_7   0x00b796    program     static                          
+            __zero_memory   0x009fba    program     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               clear_loop   0x009fc0    program     static C:\MCC18\src\traditional\proc\p18F4685.asm
+                der_start   0x000000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                     main   0x009000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       main_wordprocessor   0x00b468    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wordprocessor   0x00b720    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_large_data   0x009a00    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_large_table   0x009fa0    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_medium_data   0x00a024    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+          wp_medium_table   0x00a000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+   wp_set_char_font_large   0x00b6b2    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+  wp_set_char_font_medium   0x00b61a    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+   wp_set_char_font_small   0x00b59e    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_set_window   0x00b4be    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_small_data   0x00a488    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_small_table   0x00a39a    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_write_black   0x00b49e    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_write_color   0x00b4ac    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_write_command   0x00b470    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_write_data   0x00b47c    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                   ADCON0   0x000fc2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON0bits   0x000fc2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADCON1   0x000fc1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON1bits   0x000fc1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADCON2   0x000fc0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON2bits   0x000fc0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    ADRES   0x000fc3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADRESH   0x000fc4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADRESL   0x000fc3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B0CON   0x000e20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B0CONbits   0x000e20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D0   0x000e26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D0bits   0x000e26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D1   0x000e27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D1bits   0x000e27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D2   0x000e28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D2bits   0x000e28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D3   0x000e29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D3bits   0x000e29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D4   0x000e2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D4bits   0x000e2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D5   0x000e2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D5bits   0x000e2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D6   0x000e2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D6bits   0x000e2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D7   0x000e2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D7bits   0x000e2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B0DLC   0x000e25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B0DLCbits   0x000e25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0EIDH   0x000e23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0EIDHbits   0x000e23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0EIDL   0x000e24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0EIDLbits   0x000e24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0SIDH   0x000e21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0SIDHbits   0x000e21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0SIDL   0x000e22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0SIDLbits   0x000e22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B1CON   0x000e30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B1CONbits   0x000e30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D0   0x000e36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D0bits   0x000e36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D1   0x000e37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D1bits   0x000e37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D2   0x000e38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D2bits   0x000e38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D3   0x000e39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D3bits   0x000e39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D4   0x000e3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D4bits   0x000e3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D5   0x000e3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D5bits   0x000e3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D6   0x000e3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D6bits   0x000e3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D7   0x000e3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D7bits   0x000e3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B1DLC   0x000e35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B1DLCbits   0x000e35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1EIDH   0x000e33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1EIDHbits   0x000e33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1EIDL   0x000e34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1EIDLbits   0x000e34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1SIDH   0x000e31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1SIDHbits   0x000e31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1SIDL   0x000e32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1SIDLbits   0x000e32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B2CON   0x000e40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B2CONbits   0x000e40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D0   0x000e46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D0bits   0x000e46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D1   0x000e47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D1bits   0x000e47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D2   0x000e48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D2bits   0x000e48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D3   0x000e49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D3bits   0x000e49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D4   0x000e4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D4bits   0x000e4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D5   0x000e4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D5bits   0x000e4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D6   0x000e4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D6bits   0x000e4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D7   0x000e4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D7bits   0x000e4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B2DLC   0x000e45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B2DLCbits   0x000e45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2EIDH   0x000e43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2EIDHbits   0x000e43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2EIDL   0x000e44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2EIDLbits   0x000e44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2SIDH   0x000e41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2SIDHbits   0x000e41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2SIDL   0x000e42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2SIDLbits   0x000e42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B3CON   0x000e50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B3CONbits   0x000e50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D0   0x000e56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D0bits   0x000e56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D1   0x000e57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D1bits   0x000e57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D2   0x000e58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D2bits   0x000e58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D3   0x000e59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D3bits   0x000e59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D4   0x000e5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D4bits   0x000e5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D5   0x000e5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D5bits   0x000e5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D6   0x000e5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D6bits   0x000e5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D7   0x000e5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D7bits   0x000e5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B3DLC   0x000e55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B3DLCbits   0x000e55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3EIDH   0x000e53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3EIDHbits   0x000e53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3EIDL   0x000e54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3EIDLbits   0x000e54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3SIDH   0x000e51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3SIDHbits   0x000e51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3SIDL   0x000e52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3SIDLbits   0x000e52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B4CON   0x000e60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B4CONbits   0x000e60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D0   0x000e66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D0bits   0x000e66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D1   0x000e67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D1bits   0x000e67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D2   0x000e68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D2bits   0x000e68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D3   0x000e69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D3bits   0x000e69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D4   0x000e6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D4bits   0x000e6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D5   0x000e6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D5bits   0x000e6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D6   0x000e6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D6bits   0x000e6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D7   0x000e6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D7bits   0x000e6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B4DLC   0x000e65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B4DLCbits   0x000e65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4EIDH   0x000e63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4EIDHbits   0x000e63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4EIDL   0x000e64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4EIDLbits   0x000e64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4SIDH   0x000e61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4SIDHbits   0x000e61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4SIDL   0x000e62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4SIDLbits   0x000e62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B5CON   0x000e70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B5CONbits   0x000e70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D0   0x000e76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D0bits   0x000e76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D1   0x000e77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D1bits   0x000e77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D2   0x000e78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D2bits   0x000e78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D3   0x000e79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D3bits   0x000e79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D4   0x000e7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D4bits   0x000e7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D5   0x000e7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D5bits   0x000e7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D6   0x000e7c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D6bits   0x000e7c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D7   0x000e7d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D7bits   0x000e7d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B5DLC   0x000e75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B5DLCbits   0x000e75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5EIDH   0x000e73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5EIDHbits   0x000e73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5EIDL   0x000e74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5EIDLbits   0x000e74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5SIDH   0x000e71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5SIDHbits   0x000e71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5SIDL   0x000e72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5SIDLbits   0x000e72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BAUDCON   0x000fb8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BAUDCONbits   0x000fb8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     BIE0   0x000dfa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 BIE0bits   0x000dfa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON1   0x000f70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON1bits   0x000f70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON2   0x000f71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON2bits   0x000f71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON3   0x000f72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON3bits   0x000f72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    BSEL0   0x000df8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                BSEL0bits   0x000df8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      BSR   0x000fe0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CANCON   0x000f6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO0   0x000f5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO0bits   0x000f5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO1   0x000f4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO1bits   0x000f4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO2   0x000f3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO2bits   0x000f3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO3   0x000f2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO3bits   0x000f2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO4   0x000e7f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO4bits   0x000e7f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO5   0x000e6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO5bits   0x000e6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO6   0x000e5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO6bits   0x000e5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO7   0x000e4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO7bits   0x000e4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO8   0x000e3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO8bits   0x000e3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO9   0x000e2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO9bits   0x000e2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCONbits   0x000f6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  CANSTAT   0x000f6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO0   0x000f5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO0bits   0x000f5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO1   0x000f4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO1bits   0x000f4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO2   0x000f3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO2bits   0x000f3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO3   0x000f2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO3bits   0x000f2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO4   0x000e7e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO4bits   0x000e7e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO5   0x000e6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO5bits   0x000e6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO6   0x000e5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO6bits   0x000e5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO7   0x000e4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO7bits   0x000e4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO8   0x000e3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO8bits   0x000e3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO9   0x000e2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO9bits   0x000e2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTATbits   0x000f6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  CCP1CON   0x000fbd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CCP1CONbits   0x000fbd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    CCPR1   0x000fbe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CCPR1H   0x000fbf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CCPR1L   0x000fbe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CIOCON   0x000f73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CIOCONbits   0x000f73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    CMCON   0x000fb4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                CMCONbits   0x000fb4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  COMSTAT   0x000f74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              COMSTATbits   0x000f74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CVRCON   0x000fb5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CVRCONbits   0x000fb5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRA   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRAbits   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRB   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRBbits   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRC   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRCbits   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRD   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRDbits   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRE   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDREbits   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECANCON   0x000f77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              ECANCONbits   0x000f77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCP1AS   0x000fb6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              ECCP1ASbits   0x000fb6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 ECCP1CON   0x000fba       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             ECCP1CONbits   0x000fba       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 ECCP1DEL   0x000fb7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             ECCP1DELbits   0x000fb7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ECCPR1   0x000fbb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCPR1H   0x000fbc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCPR1L   0x000fbb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    EEADR   0x000fa9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EEADRH   0x000faa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EECON1   0x000fa6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               EECON1bits   0x000fa6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EECON2   0x000fa7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EEDATA   0x000fa8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR0   0x000fe9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR0H   0x000fea       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR0L   0x000fe9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR1   0x000fe1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR1H   0x000fe2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR1L   0x000fe1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR2   0x000fd9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR2H   0x000fda       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR2L   0x000fd9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  HLVDCON   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              HLVDCONbits   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF0   0x000fef       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF1   0x000fe7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF2   0x000fdf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   INTCON   0x000ff2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  INTCON2   0x000ff1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              INTCON2bits   0x000ff1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  INTCON3   0x000ff0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              INTCON3bits   0x000ff0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               INTCONbits   0x000ff2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR1   0x000f9f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR1bits   0x000f9f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR2   0x000fa2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR2bits   0x000fa2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR3   0x000fa5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR3bits   0x000fa5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATA   0x000f89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATAbits   0x000f89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATB   0x000f8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATBbits   0x000f8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATC   0x000f8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATCbits   0x000f8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATD   0x000f8c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATDbits   0x000f8c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATE   0x000f8d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATEbits   0x000f8d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   LVDCON   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               LVDCONbits   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL0   0x000df0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL0bits   0x000df0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL1   0x000df1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL1bits   0x000df1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL2   0x000df2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL2bits   0x000df2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL3   0x000df3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL3bits   0x000df3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   OSCCON   0x000fd3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               OSCCONbits   0x000fd3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  OSCTUNE   0x000f9b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              OSCTUNEbits   0x000f9b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                       PC   0x000ff9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      PCL   0x000ff9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PCLATH   0x000ffa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PCLATU   0x000ffb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE1   0x000f9d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE1bits   0x000f9d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE2   0x000fa0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE2bits   0x000fa0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE3   0x000fa3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE3bits   0x000fa3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR1   0x000f9e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR1bits   0x000f9e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR2   0x000fa1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR2bits   0x000fa1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR3   0x000fa4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR3bits   0x000fa4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW0   0x000feb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW1   0x000fe3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW2   0x000fdb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTA   0x000f80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTAbits   0x000f80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTB   0x000f81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTBbits   0x000f81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTC   0x000f82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTCbits   0x000f82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTD   0x000f83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTDbits   0x000f83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTE   0x000f84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTEbits   0x000f84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC0   0x000fed       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC1   0x000fe5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC2   0x000fdd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC0   0x000fee       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC1   0x000fe6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC2   0x000fde       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      PR2   0x000fcb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC0   0x000fec       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC1   0x000fe4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC2   0x000fdc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PROD   0x000ff3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PRODH   0x000ff4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PRODL   0x000ff3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     RCON   0x000fd0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RCONbits   0x000fd0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    RCREG   0x000fae       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    RCSTA   0x000fab       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RCSTAbits   0x000fab       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB0CON   0x000f60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB0CONbits   0x000f60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D0   0x000f66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D0bits   0x000f66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D1   0x000f67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D1bits   0x000f67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D2   0x000f68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D2bits   0x000f68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D3   0x000f69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D3bits   0x000f69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D4   0x000f6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D4bits   0x000f6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D5   0x000f6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D5bits   0x000f6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D6   0x000f6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D6bits   0x000f6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D7   0x000f6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D7bits   0x000f6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB0DLC   0x000f65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB0DLCbits   0x000f65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0EIDH   0x000f63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0EIDHbits   0x000f63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0EIDL   0x000f64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0EIDLbits   0x000f64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0SIDH   0x000f61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0SIDHbits   0x000f61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0SIDL   0x000f62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0SIDLbits   0x000f62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB1CON   0x000f50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB1CONbits   0x000f50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D0   0x000f56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D0bits   0x000f56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D1   0x000f57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D1bits   0x000f57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D2   0x000f58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D2bits   0x000f58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D3   0x000f59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D3bits   0x000f59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D4   0x000f5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D4bits   0x000f5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D5   0x000f5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D5bits   0x000f5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D6   0x000f5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D6bits   0x000f5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D7   0x000f5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D7bits   0x000f5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB1DLC   0x000f55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB1DLCbits   0x000f55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1EIDH   0x000f53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1EIDHbits   0x000f53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1EIDL   0x000f54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1EIDLbits   0x000f54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1SIDH   0x000f51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1SIDHbits   0x000f51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1SIDL   0x000f52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1SIDLbits   0x000f52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXERRCNT   0x000f75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXERRCNTbits   0x000f75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0EIDH   0x000f02       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0EIDHbits   0x000f02       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0EIDL   0x000f03       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0EIDLbits   0x000f03       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0SIDH   0x000f00       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0SIDHbits   0x000f00       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0SIDL   0x000f01       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0SIDLbits   0x000f01       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10EIDH   0x000d76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10EIDHbits   0x000d76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10EIDL   0x000d77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10EIDLbits   0x000d77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10SIDH   0x000d74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10SIDHbits   0x000d74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10SIDL   0x000d75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10SIDLbits   0x000d75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11EIDH   0x000d7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11EIDHbits   0x000d7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11EIDL   0x000d7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11EIDLbits   0x000d7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11SIDH   0x000d78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11SIDHbits   0x000d78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11SIDL   0x000d79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11SIDLbits   0x000d79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12EIDH   0x000d82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12EIDHbits   0x000d82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12EIDL   0x000d83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12EIDLbits   0x000d83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12SIDH   0x000d80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12SIDHbits   0x000d80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12SIDL   0x000d81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12SIDLbits   0x000d81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13EIDH   0x000d86       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13EIDHbits   0x000d86       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13EIDL   0x000d87       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13EIDLbits   0x000d87       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13SIDH   0x000d84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13SIDHbits   0x000d84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13SIDL   0x000d85       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13SIDLbits   0x000d85       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14EIDH   0x000d8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14EIDHbits   0x000d8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14EIDL   0x000d8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14EIDLbits   0x000d8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14SIDH   0x000d88       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14SIDHbits   0x000d88       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14SIDL   0x000d89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14SIDLbits   0x000d89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15EIDH   0x000d92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15EIDHbits   0x000d92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15EIDL   0x000d93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15EIDLbits   0x000d93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15SIDH   0x000d90       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15SIDHbits   0x000d90       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15SIDL   0x000d91       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15SIDLbits   0x000d91       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1EIDH   0x000f06       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1EIDHbits   0x000f06       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1EIDL   0x000f07       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1EIDLbits   0x000f07       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1SIDH   0x000f04       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1SIDHbits   0x000f04       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1SIDL   0x000f05       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1SIDLbits   0x000f05       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2EIDH   0x000f0a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2EIDHbits   0x000f0a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2EIDL   0x000f0b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2EIDLbits   0x000f0b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2SIDH   0x000f08       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2SIDHbits   0x000f08       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2SIDL   0x000f09       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2SIDLbits   0x000f09       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3EIDH   0x000f0e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3EIDHbits   0x000f0e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3EIDL   0x000f0f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3EIDLbits   0x000f0f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3SIDH   0x000f0c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3SIDHbits   0x000f0c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3SIDL   0x000f0d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3SIDLbits   0x000f0d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4EIDH   0x000f12       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4EIDHbits   0x000f12       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4EIDL   0x000f13       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4EIDLbits   0x000f13       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4SIDH   0x000f10       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4SIDHbits   0x000f10       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4SIDL   0x000f11       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4SIDLbits   0x000f11       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5EIDH   0x000f16       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5EIDHbits   0x000f16       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5EIDL   0x000f17       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5EIDLbits   0x000f17       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5SIDH   0x000f14       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5SIDHbits   0x000f14       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5SIDL   0x000f15       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5SIDLbits   0x000f15       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6EIDH   0x000d62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6EIDHbits   0x000d62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6EIDL   0x000d63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6EIDLbits   0x000d63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6SIDH   0x000d60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6SIDHbits   0x000d60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6SIDL   0x000d61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6SIDLbits   0x000d61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7EIDH   0x000d66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7EIDHbits   0x000d66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7EIDL   0x000d67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7EIDLbits   0x000d67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7SIDH   0x000d64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7SIDHbits   0x000d64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7SIDL   0x000d65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7SIDLbits   0x000d65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8EIDH   0x000d6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8EIDHbits   0x000d6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8EIDL   0x000d6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8EIDLbits   0x000d6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8SIDH   0x000d68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8SIDHbits   0x000d68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8SIDL   0x000d69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8SIDLbits   0x000d69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9EIDH   0x000d72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9EIDHbits   0x000d72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9EIDL   0x000d73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9EIDLbits   0x000d73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9SIDH   0x000d70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9SIDHbits   0x000d70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9SIDL   0x000d71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9SIDLbits   0x000d71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON0   0x000de0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON0bits   0x000de0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON1   0x000de1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON1bits   0x000de1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON2   0x000de2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON2bits   0x000de2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON3   0x000de3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON3bits   0x000de3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON4   0x000de4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON4bits   0x000de4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON5   0x000de5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON5bits   0x000de5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON6   0x000de6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON6bits   0x000de6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON7   0x000de7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON7bits   0x000de7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXFCON0   0x000dd4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXFCON0bits   0x000dd4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXFCON1   0x000dd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXFCON1bits   0x000dd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0EIDH   0x000f1a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0EIDHbits   0x000f1a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0EIDL   0x000f1b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0EIDLbits   0x000f1b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0SIDH   0x000f18       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0SIDHbits   0x000f18       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0SIDL   0x000f19       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0SIDLbits   0x000f19       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1EIDH   0x000f1e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1EIDHbits   0x000f1e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1EIDL   0x000f1f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1EIDLbits   0x000f1f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1SIDH   0x000f1c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1SIDHbits   0x000f1c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1SIDL   0x000f1d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1SIDLbits   0x000f1d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    SDFLC   0x000dd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                SDFLCbits   0x000dd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    SPBRG   0x000faf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SPBRGH   0x000fb0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SSPADD   0x000fc8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SSPBUF   0x000fc9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPCON1   0x000fc6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPCON1bits   0x000fc6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPCON2   0x000fc5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPCON2bits   0x000fc5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPSTAT   0x000fc7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPSTATbits   0x000fc7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   STATUS   0x000fd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               STATUSbits   0x000fd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   STKPTR   0x000ffc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               STKPTRbits   0x000ffc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T0CON   0x000fd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T0CONbits   0x000fd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T1CON   0x000fcd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T1CONbits   0x000fcd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T2CON   0x000fca       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T2CONbits   0x000fca       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T3CON   0x000fb1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T3CONbits   0x000fb1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TABLAT   0x000ff5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TBLPTR   0x000ff6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRH   0x000ff7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRL   0x000ff6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRU   0x000ff8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR0H   0x000fd7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR0L   0x000fd6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR1H   0x000fcf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR1L   0x000fce       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TMR2   0x000fcc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR3H   0x000fb3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR3L   0x000fb2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      TOS   0x000ffd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSH   0x000ffe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSL   0x000ffd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSU   0x000fff       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISA   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISAbits   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISB   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISBbits   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISC   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISCbits   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISD   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISDbits   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISE   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISEbits   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB0CON   0x000f40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB0CONbits   0x000f40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D0   0x000f46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D0bits   0x000f46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D1   0x000f47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D1bits   0x000f47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D2   0x000f48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D2bits   0x000f48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D3   0x000f49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D3bits   0x000f49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D4   0x000f4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D4bits   0x000f4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D5   0x000f4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D5bits   0x000f4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D6   0x000f4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D6bits   0x000f4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D7   0x000f4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D7bits   0x000f4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB0DLC   0x000f45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB0DLCbits   0x000f45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0EIDH   0x000f43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0EIDHbits   0x000f43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0EIDL   0x000f44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0EIDLbits   0x000f44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0SIDH   0x000f41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0SIDHbits   0x000f41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0SIDL   0x000f42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0SIDLbits   0x000f42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB1CON   0x000f30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB1CONbits   0x000f30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D0   0x000f36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D0bits   0x000f36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D1   0x000f37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D1bits   0x000f37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D2   0x000f38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D2bits   0x000f38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D3   0x000f39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D3bits   0x000f39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D4   0x000f3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D4bits   0x000f3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D5   0x000f3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D5bits   0x000f3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D6   0x000f3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D6bits   0x000f3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D7   0x000f3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D7bits   0x000f3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB1DLC   0x000f35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB1DLCbits   0x000f35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1EIDH   0x000f33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1EIDHbits   0x000f33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1EIDL   0x000f34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1EIDLbits   0x000f34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1SIDH   0x000f31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1SIDHbits   0x000f31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1SIDL   0x000f32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1SIDLbits   0x000f32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB2CON   0x000f20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB2CONbits   0x000f20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D0   0x000f26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D0bits   0x000f26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D1   0x000f27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D1bits   0x000f27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D2   0x000f28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D2bits   0x000f28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D3   0x000f29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D3bits   0x000f29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D4   0x000f2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D4bits   0x000f2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D5   0x000f2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D5bits   0x000f2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D6   0x000f2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D6bits   0x000f2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D7   0x000f2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D7bits   0x000f2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB2DLC   0x000f25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB2DLCbits   0x000f25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2EIDH   0x000f23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2EIDHbits   0x000f23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2EIDL   0x000f24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2EIDLbits   0x000f24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2SIDH   0x000f21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2SIDHbits   0x000f21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2SIDL   0x000f22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2SIDLbits   0x000f22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXBIE   0x000dfc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TXBIEbits   0x000dfc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXERRCNT   0x000f76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXERRCNTbits   0x000f76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXREG   0x000fad       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXSTA   0x000fac       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TXSTAbits   0x000fac       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   WDTCON   0x000fd1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               WDTCONbits   0x000fd1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     WREG   0x000fe8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  __tmp_0   0x000000       data     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                 wp_black   0x00008e       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                  wp_char   0x000082       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_color1   0x00007a       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_color2   0x00007b       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               wp_command   0x000083       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_data_16bit   0x000084       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_data_8bit_one   0x000086       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_data_8bit_two   0x000087       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+              wp_debug_U8   0x00008f       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                   wp_end   0x00008a       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                  wp_font   0x00007e       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                     wp_i   0x00008c       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_invert   0x00007f       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_leftx2   0x00007d       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                 wp_start   0x000088       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_stringstore   0x000060       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               wp_temp_U8   0x000080       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                   wp_top   0x00007c       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_txtptr   0x000081       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+
+
+
+                              Symbols - Sorted by Address
+                     Name    Address   Location    Storage File                     
+                ---------  ---------  ---------  --------- ---------                
+                der_start   0x000000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       ___return_lbl00000   0x000004    program     static                          
+                     main   0x009000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_large_data   0x009a00    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_large_table   0x009fa0    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            __zero_memory   0x009fba    program     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               clear_loop   0x009fc0    program     static C:\MCC18\src\traditional\proc\p18F4685.asm
+          wp_medium_table   0x00a000    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_medium_data   0x00a024    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_small_table   0x00a39a    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_small_data   0x00a488    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       main_wordprocessor   0x00b468    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_write_command   0x00b470    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       ___return_lbl00003   0x00b47a    program     static                          
+            wp_write_data   0x00b47c    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       ___return_lbl00004   0x00b49c    program     static                          
+           wp_write_black   0x00b49e    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       ___return_lbl00005   0x00b4aa    program     static                          
+           wp_write_color   0x00b4ac    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+       ___return_lbl00006   0x00b4bc    program     static                          
+            wp_set_window   0x00b4be    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+   wp_set_char_font_small   0x00b59e    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+  wp_set_char_font_medium   0x00b61a    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+   wp_set_char_font_large   0x00b6b2    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wordprocessor   0x00b720    program     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           ___if_lbl00030   0x00b73c    program     static                          
+           ___if_lbl00031   0x00b758    program     static                          
+           ___if_lbl00032   0x00b78c    program     static                          
+        ___while_lbl00033   0x00b78e    program     static                          
+               __tmplbl_7   0x00b796    program     static                          
+               __tmplbl_6   0x00b7a0    program     static                          
+         ___else_lbl00039   0x00b7ac    program     static                          
+         ___else_lbl00037   0x00b7b6    program     static                          
+           ___if_lbl00036   0x00b7b8    program     static                          
+           ___if_lbl00038   0x00b7b8    program     static                          
+          ___for_lbl00062   0x00b7c4    program     static                          
+         ___else_lbl00045   0x00b81a    program     static                          
+         ___else_lbl00043   0x00b85a    program     static                          
+           ___if_lbl00042   0x00b892    program     static                          
+           ___if_lbl00044   0x00b892    program     static                          
+         ___else_lbl00047   0x00b8a4    program     static                          
+           ___if_lbl00046   0x00b8ae    program     static                          
+        ___while_lbl00048   0x00b8c8    program     static                          
+        ___while_lbl00049   0x00b8d8    program     static                          
+         ___else_lbl00053   0x00b8da    program     static                          
+        ___while_lbl00050   0x00b8de    program     static                          
+        ___while_lbl00051   0x00b8f4    program     static                          
+           ___if_lbl00052   0x00b8f4    program     static                          
+         ___else_lbl00061   0x00b8f6    program     static                          
+        ___while_lbl00054   0x00b904    program     static                          
+        ___while_lbl00055   0x00b91a    program     static                          
+        ___while_lbl00056   0x00b91c    program     static                          
+         ___else_lbl00059   0x00b91c    program     static                          
+          ___for_lbl00040   0x00b92c    program     static                          
+        ___while_lbl00057   0x00b92c    program     static                          
+           ___if_lbl00058   0x00b92c    program     static                          
+           ___if_lbl00060   0x00b92c    program     static                          
+          ___for_lbl00041   0x00b936    program     static                          
+        ___while_lbl00034   0x00b94e    program     static                          
+       ___return_lbl00029   0x00b954    program     static                          
+               __config_0   0x300001    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_1   0x300002    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_2   0x300003    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_3   0x300005    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               __config_4   0x300006    program     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                  __tmp_0   0x000000       data     static Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+           wp_stringstore   0x000060       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_color1   0x00007a       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_color2   0x00007b       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                   wp_top   0x00007c       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_leftx2   0x00007d       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                  wp_font   0x00007e       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_invert   0x00007f       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               wp_temp_U8   0x000080       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                wp_txtptr   0x000081       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                  wp_char   0x000082       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+               wp_command   0x000083       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+            wp_data_16bit   0x000084       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_data_8bit_one   0x000086       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+         wp_data_8bit_two   0x000087       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                 wp_start   0x000088       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                   wp_end   0x00008a       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                     wp_i   0x00008c       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+                 wp_black   0x00008e       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+              wp_debug_U8   0x00008f       data     extern Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+             RXF6SIDHbits   0x000d60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6SIDH   0x000d60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6SIDLbits   0x000d61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6SIDL   0x000d61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6EIDHbits   0x000d62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6EIDH   0x000d62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF6EIDLbits   0x000d63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF6EIDL   0x000d63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7SIDHbits   0x000d64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7SIDH   0x000d64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7SIDLbits   0x000d65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7SIDL   0x000d65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7EIDH   0x000d66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7EIDHbits   0x000d66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF7EIDLbits   0x000d67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF7EIDL   0x000d67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8SIDH   0x000d68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8SIDHbits   0x000d68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8SIDLbits   0x000d69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8SIDL   0x000d69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8EIDH   0x000d6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8EIDHbits   0x000d6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF8EIDL   0x000d6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF8EIDLbits   0x000d6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9SIDHbits   0x000d70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9SIDH   0x000d70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9SIDL   0x000d71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9SIDLbits   0x000d71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9EIDH   0x000d72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9EIDHbits   0x000d72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF9EIDL   0x000d73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF9EIDLbits   0x000d73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10SIDH   0x000d74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10SIDHbits   0x000d74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10SIDLbits   0x000d75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10SIDL   0x000d75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10EIDH   0x000d76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10EIDHbits   0x000d76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF10EIDLbits   0x000d77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF10EIDL   0x000d77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11SIDH   0x000d78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11SIDHbits   0x000d78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11SIDLbits   0x000d79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11SIDL   0x000d79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11EIDH   0x000d7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11EIDHbits   0x000d7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF11EIDL   0x000d7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF11EIDLbits   0x000d7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12SIDHbits   0x000d80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12SIDH   0x000d80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12SIDLbits   0x000d81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12SIDL   0x000d81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12EIDH   0x000d82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12EIDHbits   0x000d82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF12EIDL   0x000d83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF12EIDLbits   0x000d83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13SIDHbits   0x000d84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13SIDH   0x000d84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13SIDL   0x000d85       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13SIDLbits   0x000d85       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13EIDHbits   0x000d86       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13EIDH   0x000d86       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF13EIDL   0x000d87       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF13EIDLbits   0x000d87       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14SIDH   0x000d88       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14SIDHbits   0x000d88       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14SIDLbits   0x000d89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14SIDL   0x000d89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14EIDH   0x000d8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14EIDHbits   0x000d8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF14EIDLbits   0x000d8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF14EIDL   0x000d8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15SIDH   0x000d90       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15SIDHbits   0x000d90       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15SIDL   0x000d91       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15SIDLbits   0x000d91       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15EIDH   0x000d92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15EIDHbits   0x000d92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RXF15EIDL   0x000d93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+            RXF15EIDLbits   0x000d93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXFCON0bits   0x000dd4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXFCON0   0x000dd4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXFCON1bits   0x000dd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXFCON1   0x000dd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    SDFLC   0x000dd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                SDFLCbits   0x000dd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON0   0x000de0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON0bits   0x000de0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON1   0x000de1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON1bits   0x000de1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON2   0x000de2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON2bits   0x000de2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON3   0x000de3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON3bits   0x000de3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON4   0x000de4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON4bits   0x000de4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON5   0x000de5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON5bits   0x000de5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON6bits   0x000de6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON6   0x000de6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXFBCON7bits   0x000de7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXFBCON7   0x000de7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL0bits   0x000df0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL0   0x000df0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL1bits   0x000df1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL1   0x000df1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL2bits   0x000df2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL2   0x000df2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                MSEL3bits   0x000df3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    MSEL3   0x000df3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                BSEL0bits   0x000df8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    BSEL0   0x000df8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 BIE0bits   0x000dfa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     BIE0   0x000dfa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXBIE   0x000dfc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TXBIEbits   0x000dfc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B0CONbits   0x000e20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B0CON   0x000e20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0SIDH   0x000e21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0SIDHbits   0x000e21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0SIDL   0x000e22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0SIDLbits   0x000e22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0EIDH   0x000e23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0EIDHbits   0x000e23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B0EIDLbits   0x000e24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B0EIDL   0x000e24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B0DLC   0x000e25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B0DLCbits   0x000e25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D0bits   0x000e26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D0   0x000e26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D1   0x000e27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D1bits   0x000e27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D2   0x000e28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D2bits   0x000e28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D3bits   0x000e29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D3   0x000e29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D4   0x000e2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D4bits   0x000e2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D5   0x000e2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D5bits   0x000e2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D6   0x000e2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D6bits   0x000e2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B0D7bits   0x000e2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B0D7   0x000e2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO9bits   0x000e2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO9   0x000e2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO9   0x000e2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO9bits   0x000e2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B1CON   0x000e30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B1CONbits   0x000e30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1SIDHbits   0x000e31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1SIDH   0x000e31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1SIDLbits   0x000e32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1SIDL   0x000e32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1EIDH   0x000e33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1EIDHbits   0x000e33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B1EIDL   0x000e34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B1EIDLbits   0x000e34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B1DLCbits   0x000e35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B1DLC   0x000e35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D0bits   0x000e36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D0   0x000e36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D1bits   0x000e37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D1   0x000e37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D2bits   0x000e38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D2   0x000e38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D3bits   0x000e39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D3   0x000e39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D4bits   0x000e3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D4   0x000e3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D5   0x000e3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D5bits   0x000e3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D6   0x000e3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D6bits   0x000e3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B1D7   0x000e3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B1D7bits   0x000e3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO8   0x000e3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO8bits   0x000e3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO8bits   0x000e3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO8   0x000e3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B2CONbits   0x000e40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B2CON   0x000e40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2SIDHbits   0x000e41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2SIDH   0x000e41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2SIDLbits   0x000e42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2SIDL   0x000e42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2EIDHbits   0x000e43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2EIDH   0x000e43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B2EIDLbits   0x000e44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B2EIDL   0x000e44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B2DLC   0x000e45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B2DLCbits   0x000e45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D0   0x000e46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D0bits   0x000e46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D1   0x000e47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D1bits   0x000e47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D2   0x000e48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D2bits   0x000e48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D3bits   0x000e49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D3   0x000e49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D4bits   0x000e4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D4   0x000e4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D5bits   0x000e4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D5   0x000e4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D6bits   0x000e4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D6   0x000e4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B2D7bits   0x000e4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B2D7   0x000e4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO7   0x000e4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO7bits   0x000e4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO7bits   0x000e4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO7   0x000e4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B3CON   0x000e50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B3CONbits   0x000e50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3SIDHbits   0x000e51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3SIDH   0x000e51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3SIDLbits   0x000e52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3SIDL   0x000e52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3EIDHbits   0x000e53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3EIDH   0x000e53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B3EIDLbits   0x000e54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B3EIDL   0x000e54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B3DLCbits   0x000e55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B3DLC   0x000e55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D0bits   0x000e56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D0   0x000e56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D1   0x000e57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D1bits   0x000e57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D2   0x000e58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D2bits   0x000e58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D3   0x000e59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D3bits   0x000e59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D4   0x000e5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D4bits   0x000e5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D5   0x000e5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D5bits   0x000e5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D6   0x000e5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D6bits   0x000e5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B3D7   0x000e5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B3D7bits   0x000e5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO6   0x000e5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO6bits   0x000e5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO6   0x000e5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO6bits   0x000e5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B4CON   0x000e60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B4CONbits   0x000e60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4SIDH   0x000e61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4SIDHbits   0x000e61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4SIDL   0x000e62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4SIDLbits   0x000e62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4EIDH   0x000e63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4EIDHbits   0x000e63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B4EIDL   0x000e64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B4EIDLbits   0x000e64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B4DLCbits   0x000e65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B4DLC   0x000e65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D0   0x000e66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D0bits   0x000e66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D1bits   0x000e67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D1   0x000e67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D2bits   0x000e68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D2   0x000e68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D3bits   0x000e69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D3   0x000e69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D4   0x000e6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D4bits   0x000e6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D5   0x000e6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D5bits   0x000e6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D6   0x000e6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D6bits   0x000e6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B4D7bits   0x000e6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B4D7   0x000e6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO5bits   0x000e6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO5   0x000e6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO5   0x000e6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO5bits   0x000e6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B5CONbits   0x000e70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B5CON   0x000e70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5SIDHbits   0x000e71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5SIDH   0x000e71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5SIDLbits   0x000e72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5SIDL   0x000e72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5EIDHbits   0x000e73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5EIDH   0x000e73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   B5EIDL   0x000e74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               B5EIDLbits   0x000e74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                B5DLCbits   0x000e75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    B5DLC   0x000e75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D0   0x000e76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D0bits   0x000e76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D1   0x000e77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D1bits   0x000e77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D2bits   0x000e78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D2   0x000e78       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D3bits   0x000e79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D3   0x000e79       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D4bits   0x000e7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D4   0x000e7a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D5   0x000e7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D5bits   0x000e7b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D6   0x000e7c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D6bits   0x000e7c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     B5D7   0x000e7d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 B5D7bits   0x000e7d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO4   0x000e7e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO4bits   0x000e7e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO4   0x000e7f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO4bits   0x000e7f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0SIDHbits   0x000f00       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0SIDH   0x000f00       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0SIDLbits   0x000f01       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0SIDL   0x000f01       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0EIDHbits   0x000f02       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0EIDH   0x000f02       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF0EIDLbits   0x000f03       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF0EIDL   0x000f03       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1SIDH   0x000f04       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1SIDHbits   0x000f04       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1SIDLbits   0x000f05       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1SIDL   0x000f05       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1EIDH   0x000f06       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1EIDHbits   0x000f06       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF1EIDL   0x000f07       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF1EIDLbits   0x000f07       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2SIDHbits   0x000f08       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2SIDH   0x000f08       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2SIDLbits   0x000f09       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2SIDL   0x000f09       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2EIDHbits   0x000f0a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2EIDH   0x000f0a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF2EIDLbits   0x000f0b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF2EIDL   0x000f0b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3SIDH   0x000f0c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3SIDHbits   0x000f0c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3SIDL   0x000f0d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3SIDLbits   0x000f0d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3EIDHbits   0x000f0e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3EIDH   0x000f0e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF3EIDLbits   0x000f0f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF3EIDL   0x000f0f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4SIDH   0x000f10       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4SIDHbits   0x000f10       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4SIDL   0x000f11       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4SIDLbits   0x000f11       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4EIDHbits   0x000f12       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4EIDH   0x000f12       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF4EIDL   0x000f13       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF4EIDLbits   0x000f13       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5SIDHbits   0x000f14       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5SIDH   0x000f14       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5SIDLbits   0x000f15       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5SIDL   0x000f15       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5EIDHbits   0x000f16       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5EIDH   0x000f16       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXF5EIDLbits   0x000f17       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXF5EIDL   0x000f17       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0SIDH   0x000f18       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0SIDHbits   0x000f18       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0SIDL   0x000f19       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0SIDLbits   0x000f19       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0EIDH   0x000f1a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0EIDHbits   0x000f1a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM0EIDL   0x000f1b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM0EIDLbits   0x000f1b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1SIDHbits   0x000f1c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1SIDH   0x000f1c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1SIDLbits   0x000f1d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1SIDL   0x000f1d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1EIDHbits   0x000f1e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1EIDH   0x000f1e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXM1EIDLbits   0x000f1f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXM1EIDL   0x000f1f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB2CON   0x000f20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB2CONbits   0x000f20       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2SIDHbits   0x000f21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2SIDH   0x000f21       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2SIDLbits   0x000f22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2SIDL   0x000f22       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2EIDHbits   0x000f23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2EIDH   0x000f23       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB2EIDLbits   0x000f24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB2EIDL   0x000f24       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB2DLCbits   0x000f25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB2DLC   0x000f25       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D0   0x000f26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D0bits   0x000f26       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D1bits   0x000f27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D1   0x000f27       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D2bits   0x000f28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D2   0x000f28       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D3bits   0x000f29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D3   0x000f29       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D4bits   0x000f2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D4   0x000f2a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D5   0x000f2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D5bits   0x000f2b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D6bits   0x000f2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D6   0x000f2c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB2D7bits   0x000f2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB2D7   0x000f2d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO3bits   0x000f2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO3   0x000f2e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO3   0x000f2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO3bits   0x000f2f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB1CONbits   0x000f30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB1CON   0x000f30       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1SIDH   0x000f31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1SIDHbits   0x000f31       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1SIDL   0x000f32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1SIDLbits   0x000f32       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1EIDHbits   0x000f33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1EIDH   0x000f33       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB1EIDLbits   0x000f34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB1EIDL   0x000f34       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB1DLCbits   0x000f35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB1DLC   0x000f35       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D0   0x000f36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D0bits   0x000f36       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D1bits   0x000f37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D1   0x000f37       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D2   0x000f38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D2bits   0x000f38       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D3bits   0x000f39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D3   0x000f39       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D4bits   0x000f3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D4   0x000f3a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D5bits   0x000f3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D5   0x000f3b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D6bits   0x000f3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D6   0x000f3c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB1D7bits   0x000f3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB1D7   0x000f3d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO2   0x000f3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO2bits   0x000f3e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO2bits   0x000f3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO2   0x000f3f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB0CON   0x000f40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB0CONbits   0x000f40       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0SIDHbits   0x000f41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0SIDH   0x000f41       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0SIDLbits   0x000f42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0SIDL   0x000f42       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0EIDHbits   0x000f43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0EIDH   0x000f43       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXB0EIDLbits   0x000f44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXB0EIDL   0x000f44       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              TXB0DLCbits   0x000f45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TXB0DLC   0x000f45       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D0   0x000f46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D0bits   0x000f46       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D1bits   0x000f47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D1   0x000f47       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D2bits   0x000f48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D2   0x000f48       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D3bits   0x000f49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D3   0x000f49       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D4bits   0x000f4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D4   0x000f4a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D5bits   0x000f4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D5   0x000f4b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D6bits   0x000f4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D6   0x000f4c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               TXB0D7bits   0x000f4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TXB0D7   0x000f4d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO1bits   0x000f4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO1   0x000f4e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO1bits   0x000f4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO1   0x000f4f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB1CON   0x000f50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB1CONbits   0x000f50       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1SIDH   0x000f51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1SIDHbits   0x000f51       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1SIDLbits   0x000f52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1SIDL   0x000f52       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1EIDHbits   0x000f53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1EIDH   0x000f53       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB1EIDLbits   0x000f54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB1EIDL   0x000f54       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB1DLCbits   0x000f55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB1DLC   0x000f55       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D0bits   0x000f56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D0   0x000f56       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D1bits   0x000f57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D1   0x000f57       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D2bits   0x000f58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D2   0x000f58       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D3bits   0x000f59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D3   0x000f59       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D4   0x000f5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D4bits   0x000f5a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D5   0x000f5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D5bits   0x000f5b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D6   0x000f5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D6bits   0x000f5c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB1D7bits   0x000f5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB1D7   0x000f5d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+          CANSTAT_RO0bits   0x000f5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTAT_RO0   0x000f5e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+           CANCON_RO0bits   0x000f5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCON_RO0   0x000f5f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB0CON   0x000f60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB0CONbits   0x000f60       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0SIDH   0x000f61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0SIDHbits   0x000f61       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0SIDL   0x000f62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0SIDLbits   0x000f62       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0EIDH   0x000f63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0EIDHbits   0x000f63       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXB0EIDL   0x000f64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXB0EIDLbits   0x000f64       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              RXB0DLCbits   0x000f65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  RXB0DLC   0x000f65       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D0bits   0x000f66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D0   0x000f66       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D1bits   0x000f67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D1   0x000f67       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D2bits   0x000f68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D2   0x000f68       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D3bits   0x000f69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D3   0x000f69       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D4bits   0x000f6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D4   0x000f6a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D5bits   0x000f6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D5   0x000f6b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D6bits   0x000f6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D6   0x000f6c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               RXB0D7bits   0x000f6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   RXB0D7   0x000f6d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CANSTATbits   0x000f6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  CANSTAT   0x000f6e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CANCON   0x000f6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CANCONbits   0x000f6f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON1   0x000f70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON1bits   0x000f70       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON2   0x000f71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON2bits   0x000f71       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BRGCON3   0x000f72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BRGCON3bits   0x000f72       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CIOCONbits   0x000f73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CIOCON   0x000f73       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  COMSTAT   0x000f74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              COMSTATbits   0x000f74       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RXERRCNT   0x000f75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             RXERRCNTbits   0x000f75       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 TXERRCNT   0x000f76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             TXERRCNTbits   0x000f76       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              ECANCONbits   0x000f77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECANCON   0x000f77       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTA   0x000f80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTAbits   0x000f80       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTB   0x000f81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTBbits   0x000f81       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTC   0x000f82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTCbits   0x000f82       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTD   0x000f83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTDbits   0x000f83       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PORTE   0x000f84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                PORTEbits   0x000f84       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATAbits   0x000f89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATA   0x000f89       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATBbits   0x000f8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATB   0x000f8a       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATCbits   0x000f8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATC   0x000f8b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATDbits   0x000f8c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATD   0x000f8c       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 LATEbits   0x000f8d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     LATE   0x000f8d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISA   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISAbits   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRA   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRAbits   0x000f92       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRBbits   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRB   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISB   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISBbits   0x000f93       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRC   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRCbits   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISC   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISCbits   0x000f94       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRD   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDRDbits   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISD   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISDbits   0x000f95       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TRISE   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TRISEbits   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     DDRE   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 DDREbits   0x000f96       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              OSCTUNEbits   0x000f9b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  OSCTUNE   0x000f9b       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE1bits   0x000f9d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE1   0x000f9d       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR1   0x000f9e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR1bits   0x000f9e       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR1bits   0x000f9f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR1   0x000f9f       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE2   0x000fa0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE2bits   0x000fa0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR2   0x000fa1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR2bits   0x000fa1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR2bits   0x000fa2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR2   0x000fa2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIE3   0x000fa3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIE3bits   0x000fa3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 PIR3bits   0x000fa4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PIR3   0x000fa4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 IPR3bits   0x000fa5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     IPR3   0x000fa5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               EECON1bits   0x000fa6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EECON1   0x000fa6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EECON2   0x000fa7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EEDATA   0x000fa8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    EEADR   0x000fa9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   EEADRH   0x000faa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                RCSTAbits   0x000fab       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    RCSTA   0x000fab       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXSTA   0x000fac       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                TXSTAbits   0x000fac       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TXREG   0x000fad       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    RCREG   0x000fae       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    SPBRG   0x000faf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SPBRGH   0x000fb0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T3CONbits   0x000fb1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T3CON   0x000fb1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR3L   0x000fb2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR3H   0x000fb3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    CMCON   0x000fb4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                CMCONbits   0x000fb4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CVRCON   0x000fb5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               CVRCONbits   0x000fb5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCP1AS   0x000fb6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              ECCP1ASbits   0x000fb6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 ECCP1DEL   0x000fb7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             ECCP1DELbits   0x000fb7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  BAUDCON   0x000fb8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              BAUDCONbits   0x000fb8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 ECCP1CON   0x000fba       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+             ECCP1CONbits   0x000fba       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ECCPR1   0x000fbb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCPR1L   0x000fbb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  ECCPR1H   0x000fbc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              CCP1CONbits   0x000fbd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  CCP1CON   0x000fbd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CCPR1L   0x000fbe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    CCPR1   0x000fbe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   CCPR1H   0x000fbf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADCON2   0x000fc0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON2bits   0x000fc0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON1bits   0x000fc1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADCON1   0x000fc1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               ADCON0bits   0x000fc2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADCON0   0x000fc2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADRESL   0x000fc3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    ADRES   0x000fc3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   ADRESH   0x000fc4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPCON2bits   0x000fc5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPCON2   0x000fc5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPCON1bits   0x000fc6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPCON1   0x000fc6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              SSPSTATbits   0x000fc7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  SSPSTAT   0x000fc7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SSPADD   0x000fc8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   SSPBUF   0x000fc9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T2CON   0x000fca       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T2CONbits   0x000fca       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      PR2   0x000fcb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TMR2   0x000fcc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T1CON   0x000fcd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T1CONbits   0x000fcd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR1L   0x000fce       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR1H   0x000fcf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     RCON   0x000fd0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 RCONbits   0x000fd0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               WDTCONbits   0x000fd1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   WDTCON   0x000fd1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              HLVDCONbits   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  HLVDCON   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               LVDCONbits   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   LVDCON   0x000fd2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               OSCCONbits   0x000fd3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   OSCCON   0x000fd3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                T0CONbits   0x000fd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    T0CON   0x000fd5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR0L   0x000fd6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    TMR0H   0x000fd7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   STATUS   0x000fd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               STATUSbits   0x000fd8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR2L   0x000fd9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR2   0x000fd9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR2H   0x000fda       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW2   0x000fdb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC2   0x000fdc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC2   0x000fdd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC2   0x000fde       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF2   0x000fdf       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      BSR   0x000fe0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR1L   0x000fe1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR1   0x000fe1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR1H   0x000fe2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW1   0x000fe3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC1   0x000fe4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC1   0x000fe5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC1   0x000fe6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF1   0x000fe7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     WREG   0x000fe8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     FSR0   0x000fe9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR0L   0x000fe9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    FSR0H   0x000fea       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PLUSW0   0x000feb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  PREINC0   0x000fec       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTDEC0   0x000fed       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                 POSTINC0   0x000fee       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    INDF0   0x000fef       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              INTCON3bits   0x000ff0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  INTCON3   0x000ff0       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  INTCON2   0x000ff1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+              INTCON2bits   0x000ff1       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   INTCON   0x000ff2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               INTCONbits   0x000ff2       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     PROD   0x000ff3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PRODL   0x000ff3       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                    PRODH   0x000ff4       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TABLAT   0x000ff5       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRL   0x000ff6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   TBLPTR   0x000ff6       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRH   0x000ff7       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                  TBLPTRU   0x000ff8       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      PCL   0x000ff9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                       PC   0x000ff9       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PCLATH   0x000ffa       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   PCLATU   0x000ffb       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                   STKPTR   0x000ffc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+               STKPTRbits   0x000ffc       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSL   0x000ffd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                      TOS   0x000ffd       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSH   0x000ffe       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+                     TOSU   0x000fff       data     extern C:\MCC18\src\traditional\proc\p18F4685.asm
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc_bigscreen.mcp	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,41 @@
+[HEADER]
+magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13}
+file_version=1.0
+[PATH_INFO]
+BuildDirPolicy=BuildDirIsProjectDir
+dir_src=
+dir_bin=
+dir_tmp=
+dir_sin=
+dir_inc=C:\Users\chsw\Documents\avr32workspace\ostc_bigscreen
+dir_lib=C:\MCC18\lib
+dir_lkr=
+[CAT_FILTERS]
+filter_src=*.asm;*.c
+filter_inc=*.h;*.inc
+filter_obj=*.o
+filter_lib=*.lib
+filter_lkr=*.lkr
+[OTHER_FILES]
+file_000=no
+file_001=no
+file_002=yes
+[FILE_INFO]
+file_000=Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c
+file_001=18f4685_ostc.lkr
+file_002=p2_tables.romdata
+[SUITE_INFO]
+suite_guid={5B7D72DD-9861-47BD-9F60-2BE967BF8416}
+suite_state=
+[TOOL_SETTINGS]
+TS{DD2213A8-6310-47B1-8376-9430CDFC013F}=
+TS{BFD27FBA-4A02-4C0E-A5E5-B812F3E7707C}=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof"
+TS{C2AF05E7-1416-4625-923D-E114DB6E2B96}=-O-
+TS{ADE93A55-C7C7-4D4D-A4BA-59305F7D0391}=
+[INSTRUMENTED_TRACE]
+enable=0
+transport=0
+format=0
+[CUSTOM_BUILD]
+Pre-Build=
+Post-Build=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/ostc_bigscreen.mcs	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,58 @@
+[Header]
+MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7}
+Version=1.0
+[File000]
+Location=Q:\Data\OSTC2\code\OSTC_code_c_part2\p3_wordprocessor.o
+Folder=Intermediary
+DeviceName=PIC18F4685
+LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416}
+LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644}
+LanguageToolLocation=C:\MCC18\bin\mcc18.exe
+PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Users\chsw\Documents\avr32workspace\ostc_bigscreen||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)||
+SOLK=<src>|Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c||<obj>||<lib>||<lkr>|18f4685_ostc.lkr||
+SuiteArgsString=
+ToolArgsString=-O-
+TraceCmdString=
+DebugOptions=
+[File001]
+Location=Q:\Data\OSTC2\code\OSTC_code_c_part2\ostc_bigscreen.cof
+Folder=Output
+DeviceName=PIC18F4685
+LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416}
+LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C}
+LanguageToolLocation=C:\MCC18\bin\mplink.exe
+PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Users\chsw\Documents\avr32workspace\ostc_bigscreen||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)||
+SOLK=<src>|Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c||<obj>||<lib>||<lkr>|18f4685_ostc.lkr||
+SuiteArgsString=
+ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof"
+TraceCmdString=
+DebugOptions=
+[File002]
+Location=Q:\Data\OSTC2\code\OSTC_code_c_part2\ostc_bigscreen.hex
+Folder=Output
+DeviceName=PIC18F4685
+LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416}
+LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C}
+LanguageToolLocation=C:\MCC18\bin\mplink.exe
+PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Users\chsw\Documents\avr32workspace\ostc_bigscreen||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)||
+SOLK=<src>|Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c||<obj>||<lib>||<lkr>|18f4685_ostc.lkr||
+SuiteArgsString=
+ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof"
+TraceCmdString=
+DebugOptions=
+[File003]
+Location=Q:\Data\OSTC2\code\OSTC_code_c_part2\ostc_bigscreen.map
+Folder=Output
+DeviceName=PIC18F4685
+LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416}
+LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C}
+LanguageToolLocation=C:\MCC18\bin\mplink.exe
+PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Users\chsw\Documents\avr32workspace\ostc_bigscreen||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)||
+SOLK=<src>|Q:\Data\OSTC2\ostc_bigscreen\src\p3_wordprocessor.c||<obj>||<lib>||<lkr>|18f4685_ostc.lkr||
+SuiteArgsString=
+ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof"
+TraceCmdString=
+DebugOptions=
+[TOOL_LOC_STAMPS]
+tool_loc{96C98149-AA1B-4CF9-B967-FAE79CAB663C}=C:\MCC18\bin\mplink.exe
+tool_loc{E56A1C86-9D32-4DF6-8C34-FE0388B1B644}=C:\MCC18\bin\mcc18.exe
Binary file code_part1/OSTC_code_c_part2/ostc_bigscreen.mcw has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main - 090915a.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3202 @@
+/*
+ *  p2_deco_main.c
+ *
+ *  Created on: 31.08.2009
+ *      Author: christian.w @ heinrichsweikamp.com
+ *
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+// OSTC - diving computer code
+// Copyright (C) 2009 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+
+#	define	DBG_c_gas	0b0000000000000001
+#	define	DBG_c_ppO2	0b0000000000000010
+#	define	DBG_RUN 	0b0000000000000100
+#	define	DBG_RESTART 0b0000000000001000
+
+#	define	DBG_CdeSAT 	0b0000000000010000
+#	define	DBG_C_MODE	0b0000000000100000
+#	define	DBG_C_SURF	0b0000000001000000
+#	define	DBG_HEwoHE 	0b0000000010000000
+
+#	define	DBG_C_DPPO2	0b0000000100000000
+#	define	DBG_C_DGAS 	0b0000001000000000
+#	define	DBG_C_DIST	0b0000010000000000
+#	define	DBG_C_LAST	0b0000100000000000
+
+#	define	DBG_C_GF	0b0001000000000000
+#	define	DBG_ZH16ERR	0b0010000000000000
+#	define	DBG_PHIGH	0b0100000000000000
+#	define	DBG_PLOW	0b1000000000000000
+
+
+#	define	DBS_mode	0b0000000000000001
+#	define	DBS_ppO2	0b0000000000000010
+#	define	DBS_HE_sat	0b0000000000000100
+#	define	DBS_ppO2chg 0b0000000000001000
+
+#	define	DBS_SAT2l	0b0000000000010000
+#	define	DBS_SAT2h	0b0000000000100000
+#	define	DBS_GFLOW2l	0b0000000001000000
+#	define	DBS_GFLOW2h	0b0000000010000000
+
+#	define	DBS_GFHGH2l	0b0000000100000000
+#	define	DBS_GFHGH2h	0b0000001000000000
+#	define	DBS_GASO22l	0b0000010000000000
+#	define	DBS_GASO22h	0b0000100000000000
+
+#	define	DBS_DIST2h 	0b0001000000000000
+#	define	DBS_LAST2h 	0b0010000000000000
+#	define	DBS_DECOO2l	0b0100000000000000
+#	define	DBS_DECOO2h	0b1000000000000000
+
+
+#	define	DBS2_PRES2h 0b0000000000000001
+#	define	DBS2_PRES2l 0b0000000000000010
+#	define	DBS2_SURF2l	0b0000000000000100
+#	define	DBS2_SURF2h	0b0000000000001000
+
+#	define DBS2_DESAT2l 0b0000000000010000
+#	define DBS2_DESAT2h 0b0000000000100000
+#	define	DBS2_GFDneg 0b0000000001000000
+#	define	DBS2_ 0b000000000000000
+
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+
+// NDL_at_20mtr
+
+
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#define	WP_FONT_SMALL_HEIGHT	 24
+#define	WP_FONT_MEDIUM_HEIGHT	 32
+#define	WP_FONT_LARGE_HEIGHT	 58
+
+#define oled_rw	PORTA,2,0
+#define oled_rs	PORTE,0,0
+
+#define U8 unsigned char
+#define U16 unsigned int
+
+// IO assembler
+#pragma udata bank0a=0x060
+volatile unsigned char wp_stringstore[26];
+volatile U8 wp_color1;
+volatile U8 wp_color2;
+volatile U8 wp_top;
+volatile U8 wp_leftx2;
+volatile U8 wp_font;
+volatile U8 wp_invert;
+volatile U8 wp_temp_U8;
+// internal C
+#pragma udata bank0b=0x081
+volatile U8 wp_txtptr;
+volatile unsigned char wp_char;
+volatile U8	wp_command;
+volatile U16	wp_data_16bit;
+volatile U8	wp_data_8bit_one;
+volatile U8	wp_data_8bit_two;
+volatile U16	wp_start;
+volatile U16	wp_end;
+volatile U16	wp_i;
+volatile U8 	wp_black;
+// some spare
+volatile U8	wp_debug_U8;
+
+// asm only
+#pragma udata bank0c=0x0D0
+#define LENGTH_kf_bank0	48
+volatile unsigned char keep_free_bank0[LENGTH_kf_bank0];
+
+
+#pragma udata bank1=0x100
+#define LENGTH_kf_bank1	256
+volatile unsigned char keep_free_bank1[LENGTH_kf_bank1]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// 0x24C + 0x24D noch unbenutzt
+
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ //#pragma udata bank7=0x700
+ //const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ #pragma udata bank9b=0x930
+// output:
+ static unsigned int	int_O_DBS_bitfield;					// 0x930	new in v.108
+ static unsigned int	int_O_DBS2_bitfield;				// 0x932	new in v.108
+ static unsigned int	int_O_DBG_pre_bitfield;				// 0x934	new in v.108
+ static unsigned int	int_O_DBG_post_bitfield;			// 0x936	new in v.108
+ static char			char_O_NDL_at_20mtr;				// 0x938	new in v.108 // 0xFF == undefined, max. 254
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+// internal, dbg:
+ static unsigned char	DBG_char_I_deco_model;				// new in v.108
+ static unsigned char	DBG_char_I_depth_last_deco;			// new in v.108
+ static float			DBG_pres_surface;					// new in v.108
+ static float			DBG_GF_low;							// new in v.108
+ static float			DBG_GF_high;						// new in v.108
+ static float			DBG_const_ppO2;						// new in v.108
+ static float			DBG_deco_ppO2_change;				// new in v.108
+ static float			DBG_deco_ppO2;						// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_deco_gas_change;				// new in v.108
+ static float			DBG_float_saturation_multiplier;	// new in v.108
+ static float			DBG_float_desaturation_multiplier;	// new in v.108
+ static float			DBG_float_deco_distance;			// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_N2_ratio;						// new in v.108
+ static float			DBG_He_ratio;						// new in v.108
+ static char			flag_in_divemode;					// new in v.108
+ static	int 			int_dbg_i;							// new in v.108
+ unsigned int 			temp_DBS;
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);
+void DD2_set_column(void);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);
+void DD2_print_column(void);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+void wordprocessor(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank0 - 1;wp_temp_U8++)
+		keep_free_bank0[wp_temp_U8] = 7;
+	keep_free_bank0[LENGTH_kf_bank0 - 1] = 7;
+
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank1 - 1;wp_temp_U8++)
+		keep_free_bank1[wp_temp_U8] = 7;
+	keep_free_bank1[LENGTH_kf_bank1 - 1] = 7;
+
+#if 1
+// new main to test DR-5
+
+wp_top = 10;
+wp_leftx2 = 10;
+wp_color1 = 255;
+wp_color2 = 255;
+wp_font   = 0;
+wp_invert = 0;
+wp_stringstore[0] = ' ';
+wp_stringstore[1] = '!';
+wp_stringstore[2] = '"';
+wp_stringstore[3] = ':';
+wp_stringstore[4] = 0;
+wordprocessor();
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+/*
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+*/
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***************
+// ***************
+// ** THE FONTS **
+// ***************
+// ***************
+// all new for bigscreen
+
+#pragma romdata font_data_large = 0x09A00
+rom const rom U16 wp_large_data[] =
+{
+#include "ostc90.drx.txt"
+};
+
+#pragma romdata font_table_medium = 0x0A000
+rom const rom U16 wp_medium_table[] =
+{
+#include "ostc48.tbl.txt" // length 0x22
+};
+
+#pragma romdata font_data_medium = 0x0A024
+rom const rom U16 wp_medium_data[] =
+{
+#include "ostc48.drx.txt" // length 0x390
+};
+
+#pragma romdata font_table_small = 0x0A39A
+rom const rom U16 wp_small_table[] =
+{
+#include "ostc28.tbl.txt"
+};
+
+#pragma romdata font_data_small = 0x0A484
+rom const rom U16 wp_small_data[] =
+{
+#include "ostc28.drx.txt"
+};
+
+#pragma romdata font_table_large = 0x0BEE0
+rom const rom U16 wp_large_table[] =
+{
+0x0000
+//#include "ostc90.tbl.txt"
+};
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+
+#pragma code subroutines2 = 0x0C000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------------
+// DBS - debug on start of dive //
+// -------------------------------
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & DBG_RUN)
+		int_O_DBG_pre_bitfield = DBG_RESTART;
+	else
+		int_O_DBG_pre_bitfield = DBG_RUN;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= DBS_mode;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= DBS_ppO2;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= DBS_HE_sat;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= DBS_ppO2chg;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= DBS_SAT2l;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= DBS_SAT2h;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= DBS_GFLOW2l;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= DBS_GFLOW2h;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= DBS_GFHGH2l;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= DBS_GFHGH2h;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= DBS_GASO22l;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= DBS_GASO22h;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= DBS_DIST2h;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= DBS_LAST2h;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= DBS_DECOO2l;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= DBS_DECOO2h;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= DBS2_PRES2h;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= DBS2_PRES2l;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= DBS2_SURF2l;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= DBS2_SURF2h;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= DBS2_DESAT2l;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= DBS2_DESAT2h;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= DBS2_GFDneg;
+}
+
+// -------------------------------
+// DBG - set DBG to end_of_dive //
+// -------------------------------
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~DBG_RUN);
+	int_O_DBG_post_bitfield &= (~DBG_RUN);
+}
+
+// -------------------------------
+// DBG - NDL at first 20 m. hit //
+// -------------------------------
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+// -------------------------------
+// DBG - multi main during dive //
+// -------------------------------
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= DBG_c_gas;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= DBG_c_ppO2;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= DBG_CdeSAT;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= DBG_C_MODE;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= DBG_C_SURF;
+	if((!DBS_HE_sat) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= DBG_HEwoHE;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= DBG_C_DPPO2;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= DBG_C_DGAS;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= DBG_C_DIST;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= DBG_C_LAST;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= DBG_C_GF;
+	if(pres_respiration > 13.0)
+		temp_DBS |= DBG_PHIGH;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= DBG_PLOW;
+/*
+	if()
+		temp_DBS |= ;
+	if()
+		temp_DBS |= ;
+ */
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+// -------------------------------
+// DBG - prior to calc. of dive //
+// -------------------------------
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+// -------------------------------
+// DBG - after decocalc of dive //
+// -------------------------------
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// -----------
+// dd2 OLD  //
+// -----------
+void DD2_write(void)
+{
+	_asm
+	nop
+	_endasm
+}
+void DD2_write_incon42(void)
+{
+	DD2_write();
+}
+
+void DD2_write_incon24(void)
+{
+	DD2_write();
+}
+void DD2_get_pointer_to_char(void)
+{
+	DD2_write();
+}
+void DD2_set_column(void)
+{
+	DD2_write();
+}
+void DD2_load_background(void)
+{
+	DD2_write();
+}
+void DD2_build_one_line_of_char(void)
+{
+	DD2_write();
+}
+void DD2_print_column(void)
+{
+	DD2_write();
+}
+void DD2_CmdWrite(void)
+{
+	DD2_write();
+}
+void DD2_DataWrite(void)
+{
+	DD2_write();
+}
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	DD2_write_incon42();
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	DD2_write_incon24();
+}
+
+#pragma code main_wordprocessor = 0x100B8
+void main_wordprocessor(void)
+{
+	wordprocessor();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
+void wp_write_command(void)
+{
+	_asm
+		bcf		oled_rs
+		movff	wp_command,PORTD
+		bcf		oled_rw
+		bsf		oled_rw
+	_endasm
+}
+
+void wp_write_data(void)
+{
+	wp_data_8bit_one = wp_data_16bit >> 8;
+	wp_data_8bit_two = wp_data_16bit;
+_asm
+	bsf		oled_rs
+	movff	wp_data_8bit_one,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_data_8bit_two,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_black(void)
+{
+_asm
+	movff	wp_black,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_color(void)
+{
+_asm
+	movff	wp_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_set_window(void)
+{
+	// x axis start ( 0 - 319)
+	wp_command = 0x35;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+	// x axis end ( 0 - 319)
+	wp_command = 0x36;
+	wp_write_command();
+	wp_data_16bit = 319;
+	wp_write_data();
+	// y axis start + end ( 0 - 239 )
+	wp_command = 0x37;
+	wp_write_command();
+	// the bottom part
+	wp_data_16bit = wp_top;
+	if(wp_font == 2)
+		wp_data_16bit += WP_FONT_LARGE_HEIGHT;
+	else if(wp_font == 1)
+		wp_data_16bit += WP_FONT_MEDIUM_HEIGHT;
+	else
+		wp_data_16bit += WP_FONT_SMALL_HEIGHT;
+	wp_data_16bit--;
+	if(wp_data_16bit > 239)
+		wp_data_16bit = 239;
+	// the top part
+	wp_data_16bit |= ((U16)wp_top) << 8;
+	// all together in one 16bit transfer
+	wp_write_data();
+
+	// start
+	wp_command = 0x20;
+	wp_write_command();
+	wp_data_16bit = wp_top;
+	wp_write_data();
+
+	wp_command = 0x21;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+}
+
+void wp_set_char_font_small(void)
+{
+	// space is A1
+	if (wp_char > 0x7E) // skip space between ~ and Ą
+		wp_char -= 34;
+
+	if (wp_char == ' ')
+		wp_char = 0xA1;
+
+	if((wp_char < '!') || (wp_char > 0xA1)) // font has 34 chars after ~ // ū + 4 chars limit to end of battery at the moment
+		wp_char = 0x82;	// Ī
+
+	wp_start = wp_small_table[wp_char - '!'];
+	wp_end = wp_small_table[1 + wp_char - '!'];
+}
+
+void wp_set_char_font_medium(void)
+{
+	// space is 3E
+	if (wp_char == 0x27) // 0x27 == '
+		wp_char = 0x3B;
+	if (wp_char == '"')
+		wp_char = 0x3C;
+	if (wp_char == 'm')
+		wp_char = 0x3D;
+	if (wp_char == ' ')
+		wp_char = 0x3E;
+
+	if((wp_char < '.') || (wp_char > 0x3E))
+		wp_char = 0x3E;
+	wp_start = wp_medium_table[wp_char - '.'];
+	wp_end = wp_medium_table[1 + wp_char - '.'];
+}
+
+void wp_set_char_font_large(void)
+{
+	// space is / = 0x2F
+	if (wp_char == ' ')
+		wp_char = 0x2F;
+
+	if((wp_char < '.') || (wp_char > '9'))
+		wp_char = 0x2F;
+	wp_start = wp_large_table[wp_char - '.'];
+	wp_end = wp_large_table[1 + wp_char - '.'];
+}
+
+void wordprocessor(void)
+{
+	wp_set_window();
+
+	// access to GRAM
+	wp_command = 0x22;
+	wp_write_command();
+	_asm
+		bsf		oled_rs
+	_endasm
+
+	wp_txtptr = 0;
+	wp_char = wp_stringstore[wp_txtptr];
+
+	while(wp_char)
+	{
+		if(wp_font == 2)
+			wp_set_char_font_large();
+		else if(wp_font == 1)
+			wp_set_char_font_medium();
+		else
+			wp_set_char_font_small();
+
+		wp_black = 0;
+
+			for(wp_i = wp_start; wp_i<wp_end;wp_i++)
+			{
+				if(wp_font == 2)
+					wp_data_16bit = wp_large_data[wp_i / 2];
+				else if(wp_font == 1)
+					wp_data_16bit = wp_medium_data[wp_i / 2];
+				else
+					wp_data_16bit = wp_small_data[wp_i / 2];
+				if(wp_i & 1)
+					wp_temp_U8 = wp_data_16bit & 0xFF;
+				else
+					wp_temp_U8 = wp_data_16bit >> 8;
+				if((wp_temp_U8 & 128))
+				{
+					wp_temp_U8 -= 127;
+					if(wp_invert)
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+					else
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+				}
+				else
+				{
+					wp_temp_U8++;
+					if(wp_invert)
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+					else
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+				}
+			}
+		wp_txtptr++;
+		wp_char = wp_stringstore[wp_txtptr];
+	}
+	wp_command = 0x00;
+	wp_write_command();
+	wp_top = 0;
+	wp_leftx2 = 0;
+	wp_font = 0;
+	wp_invert = 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3144 @@
+/*
+ * 		OSTC - diving computer code
+ *		===========================
+ *		PART 2 :  C code
+ *
+ * 		p2_deco_main.c for OSTC Mk.2
+ *  	Created on: 31.08.2009
+ *      Author: christian.w @ heinrichsweikamp.com
+ *
+ *		#include <p2_tables.romdata>
+ *		#include "ostc28.drx.txt"
+ *      #include "ostc28.tbl.txt"
+ *      #include "ostc48.tbl.txt"
+ *      #include "ostc48.drx.txt"
+ *      #include "ostc90.drx.txt"
+ *      #include "ostc90.tbl.txt"
+ */
+
+// 		Copyright (C) 2009 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// experimental
+//
+// summary:
+// decompression routines
+// and display routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// #include <p2_tables.romdata>
+// #include "ostc28.drx.txt"
+// #include "ostc28.tbl.txt"
+// #include "ostc48.tbl.txt"
+// #include "ostc48.drx.txt"
+// #include "ostc90.drx.txt"
+// #include "ostc90.tbl.txt"
+// assembler code (PART 1) for working OSTC experimental plattform
+//
+// history:
+// 14/09/09 v201: first alpha candidate for Mk. 2 based on v108 for OSTC
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+
+#	define	DBG_c_gas	0b0000000000000001
+#	define	DBG_c_ppO2	0b0000000000000010
+#	define	DBG_RUN 	0b0000000000000100
+#	define	DBG_RESTART 0b0000000000001000
+
+#	define	DBG_CdeSAT 	0b0000000000010000
+#	define	DBG_C_MODE	0b0000000000100000
+#	define	DBG_C_SURF	0b0000000001000000
+#	define	DBG_HEwoHE 	0b0000000010000000
+
+#	define	DBG_C_DPPO2	0b0000000100000000
+#	define	DBG_C_DGAS 	0b0000001000000000
+#	define	DBG_C_DIST	0b0000010000000000
+#	define	DBG_C_LAST	0b0000100000000000
+
+#	define	DBG_C_GF	0b0001000000000000
+#	define	DBG_ZH16ERR	0b0010000000000000
+#	define	DBG_PHIGH	0b0100000000000000
+#	define	DBG_PLOW	0b1000000000000000
+
+
+#	define	DBS_mode	0b0000000000000001
+#	define	DBS_ppO2	0b0000000000000010
+#	define	DBS_HE_sat	0b0000000000000100
+#	define	DBS_ppO2chg 0b0000000000001000
+
+#	define	DBS_SAT2l	0b0000000000010000
+#	define	DBS_SAT2h	0b0000000000100000
+#	define	DBS_GFLOW2l	0b0000000001000000
+#	define	DBS_GFLOW2h	0b0000000010000000
+
+#	define	DBS_GFHGH2l	0b0000000100000000
+#	define	DBS_GFHGH2h	0b0000001000000000
+#	define	DBS_GASO22l	0b0000010000000000
+#	define	DBS_GASO22h	0b0000100000000000
+
+#	define	DBS_DIST2h 	0b0001000000000000
+#	define	DBS_LAST2h 	0b0010000000000000
+#	define	DBS_DECOO2l	0b0100000000000000
+#	define	DBS_DECOO2h	0b1000000000000000
+
+
+#	define	DBS2_PRES2h 0b0000000000000001
+#	define	DBS2_PRES2l 0b0000000000000010
+#	define	DBS2_SURF2l	0b0000000000000100
+#	define	DBS2_SURF2h	0b0000000000001000
+
+#	define DBS2_DESAT2l 0b0000000000010000
+#	define DBS2_DESAT2h 0b0000000000100000
+#	define	DBS2_GFDneg 0b0000000001000000
+#	define	DBS2_ 0b000000000000000
+
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+
+// NDL_at_20mtr
+
+
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#define	WP_FONT_SMALL_HEIGHT	 24
+#define	WP_FONT_MEDIUM_HEIGHT	 32
+#define	WP_FONT_LARGE_HEIGHT	 58
+
+#define oled_rw	PORTA,2,0
+#define oled_rs	PORTE,0,0
+
+#define U8 unsigned char
+#define U16 unsigned int
+
+// IO assembler
+#pragma udata bank0a=0x060
+volatile unsigned char wp_stringstore[26];
+volatile U8 wp_color1;
+volatile U8 wp_color2;
+volatile U8 wp_top;
+volatile U8 wp_leftx2;
+volatile U8 wp_font;
+volatile U8 wp_invert;
+volatile U8 wp_temp_U8;
+// internal C
+#pragma udata bank0b=0x081
+volatile U8 wp_txtptr;
+volatile unsigned char wp_char;
+volatile U8	wp_command;
+volatile U16	wp_data_16bit;
+volatile U8	wp_data_8bit_one;
+volatile U8	wp_data_8bit_two;
+volatile U16	wp_start;
+volatile U16	wp_end;
+volatile U16	wp_i;
+volatile U8 	wp_black;
+// some spare
+volatile U8	wp_debug_U8;
+
+// asm only
+#pragma udata bank0c=0x0D0
+#define LENGTH_kf_bank0	48
+volatile unsigned char keep_free_bank0[LENGTH_kf_bank0];
+
+
+#pragma udata bank1=0x100
+#define LENGTH_kf_bank1	256
+volatile unsigned char keep_free_bank1[LENGTH_kf_bank1]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// 0x24C + 0x24D noch unbenutzt
+
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+
+#pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ //#pragma udata bank7=0x700
+ //const unsigned char keep_free_bank7[256]; // used by the assembler code
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ #pragma udata bank9b=0x930
+// output:
+ static unsigned int	int_O_DBS_bitfield;					// 0x930	new in v.108
+ static unsigned int	int_O_DBS2_bitfield;				// 0x932	new in v.108
+ static unsigned int	int_O_DBG_pre_bitfield;				// 0x934	new in v.108
+ static unsigned int	int_O_DBG_post_bitfield;			// 0x936	new in v.108
+ static char			char_O_NDL_at_20mtr;				// 0x938	new in v.108 // 0xFF == undefined, max. 254
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+// internal, dbg:
+ static unsigned char	DBG_char_I_deco_model;				// new in v.108
+ static unsigned char	DBG_char_I_depth_last_deco;			// new in v.108
+ static float			DBG_pres_surface;					// new in v.108
+ static float			DBG_GF_low;							// new in v.108
+ static float			DBG_GF_high;						// new in v.108
+ static float			DBG_const_ppO2;						// new in v.108
+ static float			DBG_deco_ppO2_change;				// new in v.108
+ static float			DBG_deco_ppO2;						// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_deco_gas_change;				// new in v.108
+ static float			DBG_float_saturation_multiplier;	// new in v.108
+ static float			DBG_float_desaturation_multiplier;	// new in v.108
+ static float			DBG_float_deco_distance;			// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_N2_ratio;						// new in v.108
+ static float			DBG_He_ratio;						// new in v.108
+ static char			flag_in_divemode;					// new in v.108
+ static	int 			int_dbg_i;							// new in v.108
+ unsigned int 			temp_DBS;
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+void wordprocessor(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank0 - 1;wp_temp_U8++)
+		keep_free_bank0[wp_temp_U8] = 7;
+	keep_free_bank0[LENGTH_kf_bank0 - 1] = 7;
+
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank1 - 1;wp_temp_U8++)
+		keep_free_bank1[wp_temp_U8] = 7;
+	keep_free_bank1[LENGTH_kf_bank1 - 1] = 7;
+
+#if 1
+// new main to test DR-5
+
+wp_top = 10;
+wp_leftx2 = 10;
+wp_color1 = 255;
+wp_color2 = 255;
+wp_font   = 0;
+wp_invert = 0;
+wp_stringstore[0] = ' ';
+wp_stringstore[1] = '!';
+wp_stringstore[2] = '"';
+wp_stringstore[3] = ':';
+wp_stringstore[4] = 0;
+wordprocessor();
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+/*
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+*/
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***************
+// ***************
+// ** THE FONTS **
+// ***************
+// ***************
+// all new for bigscreen
+
+// a bit is left (C4)
+#pragma romdata font_data_small = 0x0A0C4
+rom const rom U16 wp_small_data[] =
+{
+#include "ostc28.drx.txt"
+};
+
+#pragma romdata font_table_small = 0x0B548
+rom const rom U16 wp_small_table[] =
+{
+#include "ostc28.tbl.txt" // length 0xEC
+};
+
+#pragma romdata font_table_medium = 0x0B632
+rom const rom U16 wp_medium_table[] =
+{
+#include "ostc48.tbl.txt" // length 0x22
+};
+
+#pragma romdata font_data_medium = 0x0B656
+rom const rom U16 wp_medium_data[] =
+{
+#include "ostc48.drx.txt" // length 0x390
+};
+
+#pragma romdata font_data_large = 0x0BA46
+rom const rom U16 wp_large_data[] =
+{
+#include "ostc90.drx.txt"
+};
+
+#pragma romdata font_table_large = 0x0BFE6
+rom const rom U16 wp_large_table[] =
+{
+#include "ostc90.tbl.txt"
+};
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+
+#pragma code subroutines2 = 0x0C000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------------
+// DBS - debug on start of dive //
+// -------------------------------
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & DBG_RUN)
+		int_O_DBG_pre_bitfield = DBG_RESTART;
+	else
+		int_O_DBG_pre_bitfield = DBG_RUN;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= DBS_mode;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= DBS_ppO2;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= DBS_HE_sat;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= DBS_ppO2chg;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= DBS_SAT2l;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= DBS_SAT2h;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= DBS_GFLOW2l;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= DBS_GFLOW2h;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= DBS_GFHGH2l;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= DBS_GFHGH2h;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= DBS_GASO22l;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= DBS_GASO22h;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= DBS_DIST2h;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= DBS_LAST2h;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= DBS_DECOO2l;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= DBS_DECOO2h;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= DBS2_PRES2h;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= DBS2_PRES2l;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= DBS2_SURF2l;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= DBS2_SURF2h;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= DBS2_DESAT2l;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= DBS2_DESAT2h;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= DBS2_GFDneg;
+}
+
+// -------------------------------
+// DBG - set DBG to end_of_dive //
+// -------------------------------
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~DBG_RUN);
+	int_O_DBG_post_bitfield &= (~DBG_RUN);
+}
+
+// -------------------------------
+// DBG - NDL at first 20 m. hit //
+// -------------------------------
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+// -------------------------------
+// DBG - multi main during dive //
+// -------------------------------
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= DBG_c_gas;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= DBG_c_ppO2;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= DBG_CdeSAT;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= DBG_C_MODE;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= DBG_C_SURF;
+	if((!DBS_HE_sat) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= DBG_HEwoHE;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= DBG_C_DPPO2;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= DBG_C_DGAS;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= DBG_C_DIST;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= DBG_C_LAST;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= DBG_C_GF;
+	if(pres_respiration > 13.0)
+		temp_DBS |= DBG_PHIGH;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= DBG_PLOW;
+/*
+	if()
+		temp_DBS |= ;
+	if()
+		temp_DBS |= ;
+ */
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+// -------------------------------
+// DBG - prior to calc. of dive //
+// -------------------------------
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+// -------------------------------
+// DBG - after decocalc of dive //
+// -------------------------------
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	return;
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	return;
+}
+
+#pragma code main_wordprocessor = 0x100B8
+void main_wordprocessor(void)
+{
+	wordprocessor();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
+void wp_write_command(void)
+{
+	_asm
+		bcf		oled_rs
+		movff	wp_command,PORTD
+		bcf		oled_rw
+		bsf		oled_rw
+	_endasm
+}
+
+void wp_write_data(void)
+{
+	wp_data_8bit_one = wp_data_16bit >> 8;
+	wp_data_8bit_two = wp_data_16bit;
+_asm
+	bsf		oled_rs
+	movff	wp_data_8bit_one,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_data_8bit_two,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_black(void)
+{
+_asm
+	movff	wp_black,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_color(void)
+{
+_asm
+	movff	wp_color1,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+	movff	wp_color2,PORTD
+	bcf		oled_rw
+	bsf		oled_rw
+_endasm
+}
+
+void wp_set_window(void)
+{
+	// x axis start ( 0 - 319)
+	wp_command = 0x35;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+	// x axis end ( 0 - 319)
+	wp_command = 0x36;
+	wp_write_command();
+	wp_data_16bit = 319;
+	wp_write_data();
+	// y axis start + end ( 0 - 239 )
+	wp_command = 0x37;
+	wp_write_command();
+	// the bottom part
+	wp_data_16bit = wp_top;
+	if(wp_font == 2)
+		wp_data_16bit += WP_FONT_LARGE_HEIGHT;
+	else if(wp_font == 1)
+		wp_data_16bit += WP_FONT_MEDIUM_HEIGHT;
+	else
+		wp_data_16bit += WP_FONT_SMALL_HEIGHT;
+	wp_data_16bit--;
+	if(wp_data_16bit > 239)
+		wp_data_16bit = 239;
+	// the top part
+	wp_data_16bit |= ((U16)wp_top) << 8;
+	// all together in one 16bit transfer
+	wp_write_data();
+
+	// start
+	wp_command = 0x20;
+	wp_write_command();
+	wp_data_16bit = wp_top;
+	wp_write_data();
+
+	wp_command = 0x21;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+}
+
+void wp_set_char_font_small(void)
+{
+	if (wp_char == ' ')
+		wp_char = 'ķ';
+
+	if((wp_char < '!') || (wp_char > 'ķ')) // font has 34 chars after ~ // ū + 4 chars limit to end of battery at the moment
+		wp_char = 'Ī'; // 0x82;	// Ī
+
+	if (wp_char > 0x7E) // skip space between ~ and Ą
+		wp_char -= 34;
+
+	wp_start = wp_small_table[wp_char - '!'];
+	wp_end = wp_small_table[1 + wp_char - '!'];
+}
+
+void wp_set_char_font_medium(void)
+{
+	// space is 3E
+	if (wp_char == 0x27) // 0x27 == '
+		wp_char = 0x3B;
+	if (wp_char == '"')
+		wp_char = 0x3C;
+	if (wp_char == 'm')
+		wp_char = 0x3D;
+	if (wp_char == ' ')
+		wp_char = 0x3E;
+
+	if((wp_char < '.') || (wp_char > 0x3E))
+		wp_char = 0x3E;
+	wp_start = wp_medium_table[wp_char - '.'];
+	wp_end = wp_medium_table[1 + wp_char - '.'];
+}
+
+void wp_set_char_font_large(void)
+{
+	// space is / = 0x2F
+	if (wp_char == ' ')
+		wp_char = 0x2F;
+
+	if((wp_char < '.') || (wp_char > '9'))
+		wp_char = 0x2F;
+	wp_start = wp_large_table[wp_char - '.'];
+	wp_end = wp_large_table[1 + wp_char - '.'];
+}
+
+void wordprocessor(void)
+{
+	wp_set_window();
+
+	// access to GRAM
+	wp_command = 0x22;
+	wp_write_command();
+	_asm
+		bsf		oled_rs
+	_endasm
+
+	wp_txtptr = 0;
+	wp_char = wp_stringstore[wp_txtptr];
+
+	while(wp_char)
+	{
+		if(wp_font == 2)
+			wp_set_char_font_large();
+		else if(wp_font == 1)
+			wp_set_char_font_medium();
+		else
+			wp_set_char_font_small();
+
+		wp_black = 0;
+
+			for(wp_i = wp_start; wp_i<wp_end;wp_i++)
+			{
+				if(wp_font == 2)
+					wp_data_16bit = wp_large_data[wp_i / 2];
+				else if(wp_font == 1)
+					wp_data_16bit = wp_medium_data[wp_i / 2];
+				else
+					wp_data_16bit = wp_small_data[wp_i / 2];
+				if(wp_i & 1)
+					wp_temp_U8 = wp_data_16bit & 0xFF;
+				else
+					wp_temp_U8 = wp_data_16bit >> 8;
+				if((wp_temp_U8 & 128))
+				{
+					wp_temp_U8 -= 127;
+					if(wp_invert)
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+					else
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+				}
+				else
+				{
+					wp_temp_U8++;
+					if(wp_invert)
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								bsf		oled_rw
+								bcf		oled_rw
+								bsf		oled_rw
+							_endasm
+						}
+					}
+					else
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+				}
+			}
+		wp_txtptr++;
+		wp_char = wp_stringstore[wp_txtptr];
+	}
+	wp_command = 0x00;
+	wp_write_command();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.err	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,1 @@
+Error[1027] Q:\Data\OSTC2\code\OSTC_code_c_part2\p2_deco_main - 090915b.c 1295 : unable to locate 'p2_tables.romdata'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main - 090915b.i	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,11459 @@
+#line 1 "p2_deco_main - 090915b.c"
+#line 1 "p2_deco_main - 090915b.c"
+
+#line 17 "p2_deco_main - 090915b.c"
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#line 1 "C:/MCC18/h/p18f4685.h"
+
+#line 5 "C:/MCC18/h/p18f4685.h"
+ 
+
+
+#line 9 "C:/MCC18/h/p18f4685.h"
+
+extern volatile far  unsigned char       RXF6SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF6SIDHbits;
+extern volatile far  unsigned char       RXF6SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF6SIDLbits;
+extern volatile far  unsigned char       RXF6EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF6EIDHbits;
+extern volatile far  unsigned char       RXF6EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF6EIDLbits;
+extern volatile far  unsigned char       RXF7SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF7SIDHbits;
+extern volatile far  unsigned char       RXF7SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF7SIDLbits;
+extern volatile far  unsigned char       RXF7EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF7EIDHbits;
+extern volatile far  unsigned char       RXF7EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF7EIDLbits;
+extern volatile far  unsigned char       RXF8SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF8SIDHbits;
+extern volatile far  unsigned char       RXF8SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF8SIDLbits;
+extern volatile far  unsigned char       RXF8EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF8EIDHbits;
+extern volatile far  unsigned char       RXF8EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF8EIDLbits;
+extern volatile far  unsigned char       RXF9SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF9SIDHbits;
+extern volatile far  unsigned char       RXF9SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF9SIDLbits;
+extern volatile far  unsigned char       RXF9EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF9EIDHbits;
+extern volatile far  unsigned char       RXF9EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF9EIDLbits;
+extern volatile far  unsigned char       RXF10SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF10SIDHbits;
+extern volatile far  unsigned char       RXF10SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF10SIDLbits;
+extern volatile far  unsigned char       RXF10EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF10EIDHbits;
+extern volatile far  unsigned char       RXF10EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF10EIDLbits;
+extern volatile far  unsigned char       RXF11SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF11SIDHbits;
+extern volatile far  unsigned char       RXF11SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF11SIDLbits;
+extern volatile far  unsigned char       RXF11EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF11EIDHbits;
+extern volatile far  unsigned char       RXF11EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF11EIDLbits;
+extern volatile far  unsigned char       RXF12SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF12SIDHbits;
+extern volatile far  unsigned char       RXF12SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF12SIDLbits;
+extern volatile far  unsigned char       RXF12EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF12EIDHbits;
+extern volatile far  unsigned char       RXF12EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF12EIDLbits;
+extern volatile far  unsigned char       RXF13SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF13SIDHbits;
+extern volatile far  unsigned char       RXF13SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF13SIDLbits;
+extern volatile far  unsigned char       RXF13EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF13EIDHbits;
+extern volatile far  unsigned char       RXF13EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF13EIDLbits;
+extern volatile far  unsigned char       RXF14SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF14SIDHbits;
+extern volatile far  unsigned char       RXF14SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF14SIDLbits;
+extern volatile far  unsigned char       RXF14EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF14EIDHbits;
+extern volatile far  unsigned char       RXF14EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF14EIDLbits;
+extern volatile far  unsigned char       RXF15SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF15SIDHbits;
+extern volatile far  unsigned char       RXF15SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF15SIDLbits;
+extern volatile far  unsigned char       RXF15EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF15EIDHbits;
+extern volatile far  unsigned char       RXF15EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF15EIDLbits;
+extern volatile far  unsigned char       RXFCON0;
+extern volatile far  struct {
+  unsigned RXF0EN:1;
+  unsigned RXF1EN:1;
+  unsigned RXF2EN:1;
+  unsigned RXF3EN:1;
+  unsigned RXF4EN:1;
+  unsigned RXF5EN:1;
+  unsigned RXF6EN:1;
+  unsigned RXF7EN:1;
+} RXFCON0bits;
+extern volatile far  unsigned char       RXFCON1;
+extern volatile far  struct {
+  unsigned RXF8EN:1;
+  unsigned RXF9EN:1;
+  unsigned RXF10EN:1;
+  unsigned RXF11EN:1;
+  unsigned RXF12EN:1;
+  unsigned RXF13EN:1;
+  unsigned RXF14EN:1;
+  unsigned RXF15EN:1;
+} RXFCON1bits;
+extern volatile far  unsigned char       SDFLC;
+extern volatile far  union {
+  struct {
+    unsigned DFLC0:1;
+    unsigned DFLC1:1;
+    unsigned DFLC2:1;
+    unsigned DFLC3:1;
+    unsigned DFLC4:1;
+  };
+  struct {
+    unsigned FLC0:1;
+    unsigned FLC1:1;
+    unsigned FLC2:1;
+    unsigned FLC3:1;
+    unsigned FLC4:1;
+  };
+} SDFLCbits;
+extern volatile far  unsigned char       RXFBCON0;
+extern volatile far  struct {
+  unsigned F0BP_0:1;
+  unsigned F0BP_1:1;
+  unsigned F0BP_2:1;
+  unsigned F0BP_3:1;
+  unsigned F1BP_0:1;
+  unsigned F1BP_1:1;
+  unsigned F1BP_2:1;
+  unsigned F1BP_3:1;
+} RXFBCON0bits;
+extern volatile far  unsigned char       RXFBCON1;
+extern volatile far  struct {
+  unsigned F2BP_0:1;
+  unsigned F2BP_1:1;
+  unsigned F2BP_2:1;
+  unsigned F2BP_3:1;
+  unsigned F3BP_0:1;
+  unsigned F3BP_1:1;
+  unsigned F3BP_2:1;
+  unsigned F3BP_3:1;
+} RXFBCON1bits;
+extern volatile far  unsigned char       RXFBCON2;
+extern volatile far  struct {
+  unsigned F4BP_0:1;
+  unsigned F4BP_1:1;
+  unsigned F4BP_2:1;
+  unsigned F4BP_3:1;
+  unsigned F5BP_0:1;
+  unsigned F5BP_1:1;
+  unsigned F5BP_2:1;
+  unsigned F5BP_3:1;
+} RXFBCON2bits;
+extern volatile far  unsigned char       RXFBCON3;
+extern volatile far  struct {
+  unsigned F6BP_0:1;
+  unsigned F6BP_1:1;
+  unsigned F6BP_2:1;
+  unsigned F6BP_3:1;
+  unsigned F7BP_0:1;
+  unsigned F7BP_1:1;
+  unsigned F7BP_2:1;
+  unsigned F7BP_3:1;
+} RXFBCON3bits;
+extern volatile far  unsigned char       RXFBCON4;
+extern volatile far  struct {
+  unsigned F8BP_0:1;
+  unsigned F8BP_1:1;
+  unsigned F8BP_2:1;
+  unsigned F8BP_3:1;
+  unsigned F9BP_0:1;
+  unsigned F9BP_1:1;
+  unsigned F9BP_2:1;
+  unsigned F9BP_3:1;
+} RXFBCON4bits;
+extern volatile far  unsigned char       RXFBCON5;
+extern volatile far  struct {
+  unsigned F10BP_0:1;
+  unsigned F10BP_1:1;
+  unsigned F10BP_2:1;
+  unsigned F10BP_3:1;
+  unsigned F11BP_0:1;
+  unsigned F11BP_1:1;
+  unsigned F11BP_2:1;
+  unsigned F11BP_3:1;
+} RXFBCON5bits;
+extern volatile far  unsigned char       RXFBCON6;
+extern volatile far  struct {
+  unsigned F12BP_0:1;
+  unsigned F12BP_1:1;
+  unsigned F12BP_2:1;
+  unsigned F12BP_3:1;
+  unsigned F13BP_0:1;
+  unsigned F13BP_1:1;
+  unsigned F13BP_2:1;
+  unsigned F13BP_3:1;
+} RXFBCON6bits;
+extern volatile far  unsigned char       RXFBCON7;
+extern volatile far  struct {
+  unsigned F14BP_0:1;
+  unsigned F14BP_1:1;
+  unsigned F14BP_2:1;
+  unsigned F14BP_3:1;
+  unsigned F15BP_0:1;
+  unsigned F15BP_1:1;
+  unsigned F15BP_2:1;
+  unsigned F15BP_3:1;
+} RXFBCON7bits;
+extern volatile far  unsigned char       MSEL0;
+extern volatile far  struct {
+  unsigned FIL0_0:1;
+  unsigned FIL0_1:1;
+  unsigned FIL1_0:1;
+  unsigned FIL1_1:1;
+  unsigned FIL2_0:1;
+  unsigned FIL2_1:1;
+  unsigned FIL3_0:1;
+  unsigned FIL3_1:1;
+} MSEL0bits;
+extern volatile far  unsigned char       MSEL1;
+extern volatile far  struct {
+  unsigned FIL4_0:1;
+  unsigned FIL4_1:1;
+  unsigned FIL5_0:1;
+  unsigned FIL5_1:1;
+  unsigned FIL6_0:1;
+  unsigned FIL6_1:1;
+  unsigned FIL7_0:1;
+  unsigned FIL7_1:1;
+} MSEL1bits;
+extern volatile far  unsigned char       MSEL2;
+extern volatile far  struct {
+  unsigned FIL8_0:1;
+  unsigned FIL8_1:1;
+  unsigned FIL9_0:1;
+  unsigned FIL9_1:1;
+  unsigned FIL10_0:1;
+  unsigned FIL10_1:1;
+  unsigned FIL11_0:1;
+  unsigned FIL11_1:1;
+} MSEL2bits;
+extern volatile far  unsigned char       MSEL3;
+extern volatile far  struct {
+  unsigned FIL12_0:1;
+  unsigned FIL12_1:1;
+  unsigned FIL13_0:1;
+  unsigned FIL13_1:1;
+  unsigned FIL14_0:1;
+  unsigned FIL14_1:1;
+  unsigned FIL15_0:1;
+  unsigned FIL15_1:1;
+} MSEL3bits;
+extern volatile far  unsigned char       BSEL0;
+extern volatile far  struct {
+  unsigned :2;
+  unsigned B0TXEN:1;
+  unsigned B1TXEN:1;
+  unsigned B2TXEN:1;
+  unsigned B3TXEN:1;
+  unsigned B4TXEN:1;
+  unsigned B5TXEN:1;
+} BSEL0bits;
+extern volatile far  unsigned char       BIE0;
+extern volatile far  struct {
+  unsigned RXB0IE:1;
+  unsigned RXB1IE:1;
+  unsigned B0IE:1;
+  unsigned B1IE:1;
+  unsigned B2IE:1;
+  unsigned B3IE:1;
+  unsigned B4IE:1;
+  unsigned B5IE:1;
+} BIE0bits;
+extern volatile far  unsigned char       TXBIE;
+extern volatile far  struct {
+  unsigned :2;
+  unsigned TXB0IE:1;
+  unsigned TXB1IE:1;
+  unsigned TXB2IE:1;
+} TXBIEbits;
+extern volatile far  unsigned char       B0CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B0CONbits;
+extern volatile far  unsigned char       B0SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B0SIDHbits;
+extern volatile far  unsigned char       B0SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDE:1;
+  };
+} B0SIDLbits;
+extern volatile far  unsigned char       B0EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B0EIDHbits;
+extern volatile far  unsigned char       B0EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B0EIDLbits;
+extern volatile far  unsigned char       B0DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned TXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} B0DLCbits;
+extern volatile far  unsigned char       B0D0;
+extern volatile far  struct {
+  unsigned B0D00:1;
+  unsigned B0D01:1;
+  unsigned B0D02:1;
+  unsigned B0D03:1;
+  unsigned B0D04:1;
+  unsigned B0D05:1;
+  unsigned B0D06:1;
+  unsigned B0D07:1;
+} B0D0bits;
+extern volatile far  unsigned char       B0D1;
+extern volatile far  struct {
+  unsigned B0D10:1;
+  unsigned B0D11:1;
+  unsigned B0D12:1;
+  unsigned B0D13:1;
+  unsigned B0D14:1;
+  unsigned B0D15:1;
+  unsigned B0D16:1;
+  unsigned B0D17:1;
+} B0D1bits;
+extern volatile far  unsigned char       B0D2;
+extern volatile far  struct {
+  unsigned B0D20:1;
+  unsigned B0D21:1;
+  unsigned B0D22:1;
+  unsigned B0D23:1;
+  unsigned B0D24:1;
+  unsigned B0D25:1;
+  unsigned B0D26:1;
+  unsigned B0D27:1;
+} B0D2bits;
+extern volatile far  unsigned char       B0D3;
+extern volatile far  struct {
+  unsigned B0D30:1;
+  unsigned B0D31:1;
+  unsigned B0D32:1;
+  unsigned B0D33:1;
+  unsigned B0D34:1;
+  unsigned B0D35:1;
+  unsigned B0D36:1;
+  unsigned B0D37:1;
+} B0D3bits;
+extern volatile far  unsigned char       B0D4;
+extern volatile far  struct {
+  unsigned B0D40:1;
+  unsigned B0D41:1;
+  unsigned B0D42:1;
+  unsigned B0D43:1;
+  unsigned B0D44:1;
+  unsigned B0D45:1;
+  unsigned B0D46:1;
+  unsigned B0D47:1;
+} B0D4bits;
+extern volatile far  unsigned char       B0D5;
+extern volatile far  struct {
+  unsigned B0D50:1;
+  unsigned B0D51:1;
+  unsigned B0D52:1;
+  unsigned B0D53:1;
+  unsigned B0D54:1;
+  unsigned B0D55:1;
+  unsigned B0D56:1;
+  unsigned B0D57:1;
+} B0D5bits;
+extern volatile far  unsigned char       B0D6;
+extern volatile far  struct {
+  unsigned B0D60:1;
+  unsigned B0D61:1;
+  unsigned B0D62:1;
+  unsigned B0D63:1;
+  unsigned B0D64:1;
+  unsigned B0D65:1;
+  unsigned B0D66:1;
+  unsigned B0D67:1;
+} B0D6bits;
+extern volatile far  unsigned char       B0D7;
+extern volatile far  struct {
+  unsigned B0D70:1;
+  unsigned B0D71:1;
+  unsigned B0D72:1;
+  unsigned B0D73:1;
+  unsigned B0D74:1;
+  unsigned B0D75:1;
+  unsigned B0D76:1;
+  unsigned B0D77:1;
+} B0D7bits;
+extern volatile far  unsigned char       CANSTAT_RO9;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO9bits;
+extern volatile far  unsigned char       CANCON_RO9;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO9bits;
+extern volatile far  unsigned char       B1CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B1CONbits;
+extern volatile far  unsigned char       B1SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B1SIDHbits;
+extern volatile far  unsigned char       B1SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDE:1;
+  };
+} B1SIDLbits;
+extern volatile far  unsigned char       B1EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B1EIDHbits;
+extern volatile far  unsigned char       B1EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B1EIDLbits;
+extern volatile far  unsigned char       B1DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned TXRTR:1;
+  };
+} B1DLCbits;
+extern volatile far  unsigned char       B1D0;
+extern volatile far  struct {
+  unsigned B1D00:1;
+  unsigned B1D01:1;
+  unsigned B1D02:1;
+  unsigned B1D03:1;
+  unsigned B1D04:1;
+  unsigned B1D05:1;
+  unsigned B1D06:1;
+  unsigned B1D07:1;
+} B1D0bits;
+extern volatile far  unsigned char       B1D1;
+extern volatile far  struct {
+  unsigned B1D10:1;
+  unsigned B1D11:1;
+  unsigned B1D12:1;
+  unsigned B1D13:1;
+  unsigned B1D14:1;
+  unsigned B1D15:1;
+  unsigned B1D16:1;
+  unsigned B1D17:1;
+} B1D1bits;
+extern volatile far  unsigned char       B1D2;
+extern volatile far  struct {
+  unsigned B1D20:1;
+  unsigned B1D21:1;
+  unsigned B1D22:1;
+  unsigned B1D23:1;
+  unsigned B1D24:1;
+  unsigned B1D25:1;
+  unsigned B1D26:1;
+  unsigned B1D27:1;
+} B1D2bits;
+extern volatile far  unsigned char       B1D3;
+extern volatile far  struct {
+  unsigned B1D30:1;
+  unsigned B1D31:1;
+  unsigned B1D32:1;
+  unsigned B1D33:1;
+  unsigned B1D34:1;
+  unsigned B1D35:1;
+  unsigned B1D36:1;
+  unsigned B1D37:1;
+} B1D3bits;
+extern volatile far  unsigned char       B1D4;
+extern volatile far  struct {
+  unsigned B1D40:1;
+  unsigned B1D41:1;
+  unsigned B1D42:1;
+  unsigned B1D43:1;
+  unsigned B1D44:1;
+  unsigned B1D45:1;
+  unsigned B1D46:1;
+  unsigned B1D47:1;
+} B1D4bits;
+extern volatile far  unsigned char       B1D5;
+extern volatile far  struct {
+  unsigned B1D50:1;
+  unsigned B1D51:1;
+  unsigned B1D52:1;
+  unsigned B1D53:1;
+  unsigned B1D54:1;
+  unsigned B1D55:1;
+  unsigned B1D56:1;
+  unsigned B1D57:1;
+} B1D5bits;
+extern volatile far  unsigned char       B1D6;
+extern volatile far  struct {
+  unsigned B1D60:1;
+  unsigned B1D61:1;
+  unsigned B1D62:1;
+  unsigned B1D63:1;
+  unsigned B1D64:1;
+  unsigned B1D65:1;
+  unsigned B1D66:1;
+  unsigned B1D67:1;
+} B1D6bits;
+extern volatile far  unsigned char       B1D7;
+extern volatile far  struct {
+  unsigned B1D70:1;
+  unsigned B1D71:1;
+  unsigned B1D72:1;
+  unsigned B1D73:1;
+  unsigned B1D74:1;
+  unsigned B1D75:1;
+  unsigned B1D76:1;
+  unsigned B1D77:1;
+} B1D7bits;
+extern volatile far  unsigned char       CANSTAT_RO8;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO8bits;
+extern volatile far  unsigned char       CANCON_RO8;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO8bits;
+extern volatile far  unsigned char       B2CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B2CONbits;
+extern volatile far  unsigned char       B2SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B2SIDHbits;
+extern volatile far  unsigned char       B2SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDE:1;
+  };
+} B2SIDLbits;
+extern volatile far  unsigned char       B2EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B2EIDHbits;
+extern volatile far  unsigned char       B2EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B2EIDLbits;
+extern volatile far  unsigned char       B2DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned TXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} B2DLCbits;
+extern volatile far  unsigned char       B2D0;
+extern volatile far  struct {
+  unsigned B2D00:1;
+  unsigned B2D01:1;
+  unsigned B2D02:1;
+  unsigned B2D03:1;
+  unsigned B2D04:1;
+  unsigned B2D05:1;
+  unsigned B2D06:1;
+  unsigned B2D07:1;
+} B2D0bits;
+extern volatile far  unsigned char       B2D1;
+extern volatile far  struct {
+  unsigned B2D10:1;
+  unsigned B2D11:1;
+  unsigned B2D12:1;
+  unsigned B2D13:1;
+  unsigned B2D14:1;
+  unsigned B2D15:1;
+  unsigned B2D16:1;
+  unsigned B2D17:1;
+} B2D1bits;
+extern volatile far  unsigned char       B2D2;
+extern volatile far  struct {
+  unsigned B2D20:1;
+  unsigned B2D21:1;
+  unsigned B2D22:1;
+  unsigned B2D23:1;
+  unsigned B2D24:1;
+  unsigned B2D25:1;
+  unsigned B2D26:1;
+  unsigned B2D27:1;
+} B2D2bits;
+extern volatile far  unsigned char       B2D3;
+extern volatile far  struct {
+  unsigned B2D30:1;
+  unsigned B2D31:1;
+  unsigned B2D32:1;
+  unsigned B2D33:1;
+  unsigned B2D34:1;
+  unsigned B2D35:1;
+  unsigned B2D36:1;
+  unsigned B2D37:1;
+} B2D3bits;
+extern volatile far  unsigned char       B2D4;
+extern volatile far  struct {
+  unsigned B2D40:1;
+  unsigned B2D41:1;
+  unsigned B2D42:1;
+  unsigned B2D43:1;
+  unsigned B2D44:1;
+  unsigned B2D45:1;
+  unsigned B2D46:1;
+  unsigned B2D47:1;
+} B2D4bits;
+extern volatile far  unsigned char       B2D5;
+extern volatile far  struct {
+  unsigned B2D50:1;
+  unsigned B2D51:1;
+  unsigned B2D52:1;
+  unsigned B2D53:1;
+  unsigned B2D54:1;
+  unsigned B2D55:1;
+  unsigned B2D56:1;
+  unsigned B2D57:1;
+} B2D5bits;
+extern volatile far  unsigned char       B2D6;
+extern volatile far  struct {
+  unsigned B2D60:1;
+  unsigned B2D61:1;
+  unsigned B2D62:1;
+  unsigned B2D63:1;
+  unsigned B2D64:1;
+  unsigned B2D65:1;
+  unsigned B2D66:1;
+  unsigned B2D67:1;
+} B2D6bits;
+extern volatile far  unsigned char       B2D7;
+extern volatile far  struct {
+  unsigned B2D70:1;
+  unsigned B2D71:1;
+  unsigned B2D72:1;
+  unsigned B2D73:1;
+  unsigned B2D74:1;
+  unsigned B2D75:1;
+  unsigned B2D76:1;
+  unsigned B2D77:1;
+} B2D7bits;
+extern volatile far  unsigned char       CANSTAT_RO7;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO7bits;
+extern volatile far  unsigned char       CANCON_RO7;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO7bits;
+extern volatile far  unsigned char       B3CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B3CONbits;
+extern volatile far  unsigned char       B3SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B3SIDHbits;
+extern volatile far  unsigned char       B3SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDE:1;
+  };
+} B3SIDLbits;
+extern volatile far  unsigned char       B3EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B3EIDHbits;
+extern volatile far  unsigned char       B3EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B3EIDLbits;
+extern volatile far  unsigned char       B3DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned TXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} B3DLCbits;
+extern volatile far  unsigned char       B3D0;
+extern volatile far  struct {
+  unsigned B3D00:1;
+  unsigned B3D01:1;
+  unsigned B3D02:1;
+  unsigned B3D03:1;
+  unsigned B3D04:1;
+  unsigned B3D05:1;
+  unsigned B3D06:1;
+  unsigned B3D07:1;
+} B3D0bits;
+extern volatile far  unsigned char       B3D1;
+extern volatile far  struct {
+  unsigned B3D10:1;
+  unsigned B3D11:1;
+  unsigned B3D12:1;
+  unsigned B3D13:1;
+  unsigned B3D14:1;
+  unsigned B3D15:1;
+  unsigned B3D16:1;
+  unsigned B3D17:1;
+} B3D1bits;
+extern volatile far  unsigned char       B3D2;
+extern volatile far  struct {
+  unsigned B3D20:1;
+  unsigned B3D21:1;
+  unsigned B3D22:1;
+  unsigned B3D23:1;
+  unsigned B3D24:1;
+  unsigned B3D25:1;
+  unsigned B3D26:1;
+  unsigned B3D27:1;
+} B3D2bits;
+extern volatile far  unsigned char       B3D3;
+extern volatile far  struct {
+  unsigned B3D30:1;
+  unsigned B3D31:1;
+  unsigned B3D32:1;
+  unsigned B3D33:1;
+  unsigned B3D34:1;
+  unsigned B3D35:1;
+  unsigned B3D36:1;
+  unsigned B3D37:1;
+} B3D3bits;
+extern volatile far  unsigned char       B3D4;
+extern volatile far  struct {
+  unsigned B3D40:1;
+  unsigned B3D41:1;
+  unsigned B3D42:1;
+  unsigned B3D43:1;
+  unsigned B3D44:1;
+  unsigned B3D45:1;
+  unsigned B3D46:1;
+  unsigned B3D47:1;
+} B3D4bits;
+extern volatile far  unsigned char       B3D5;
+extern volatile far  struct {
+  unsigned B3D50:1;
+  unsigned B3D51:1;
+  unsigned B3D52:1;
+  unsigned B3D53:1;
+  unsigned B3D54:1;
+  unsigned B3D55:1;
+  unsigned B3D56:1;
+  unsigned B3D57:1;
+} B3D5bits;
+extern volatile far  unsigned char       B3D6;
+extern volatile far  struct {
+  unsigned B3D60:1;
+  unsigned B3D61:1;
+  unsigned B3D62:1;
+  unsigned B3D63:1;
+  unsigned B3D64:1;
+  unsigned B3D65:1;
+  unsigned B3D66:1;
+  unsigned B3D67:1;
+} B3D6bits;
+extern volatile far  unsigned char       B3D7;
+extern volatile far  struct {
+  unsigned B3D70:1;
+  unsigned B3D71:1;
+  unsigned B3D72:1;
+  unsigned B3D73:1;
+  unsigned B3D74:1;
+  unsigned B3D75:1;
+  unsigned B3D76:1;
+  unsigned B3D77:1;
+} B3D7bits;
+extern volatile far  unsigned char       CANSTAT_RO6;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO6bits;
+extern volatile far  unsigned char       CANCON_RO6;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO6bits;
+extern volatile far  unsigned char       B4CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B4CONbits;
+extern volatile far  unsigned char       B4SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B4SIDHbits;
+extern volatile far  unsigned char       B4SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDE:1;
+  };
+} B4SIDLbits;
+extern volatile far  unsigned char       B4EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B4EIDHbits;
+extern volatile far  unsigned char       B4EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B4EIDLbits;
+extern volatile far  unsigned char       B4DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned TXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} B4DLCbits;
+extern volatile far  unsigned char       B4D0;
+extern volatile far  struct {
+  unsigned B4D00:1;
+  unsigned B4D01:1;
+  unsigned B4D02:1;
+  unsigned B4D03:1;
+  unsigned B4D04:1;
+  unsigned B4D05:1;
+  unsigned B4D06:1;
+  unsigned B4D07:1;
+} B4D0bits;
+extern volatile far  unsigned char       B4D1;
+extern volatile far  struct {
+  unsigned B4D10:1;
+  unsigned B4D11:1;
+  unsigned B4D12:1;
+  unsigned B4D13:1;
+  unsigned B4D14:1;
+  unsigned B4D15:1;
+  unsigned B4D16:1;
+  unsigned B4D17:1;
+} B4D1bits;
+extern volatile far  unsigned char       B4D2;
+extern volatile far  struct {
+  unsigned B4D20:1;
+  unsigned B4D21:1;
+  unsigned B4D22:1;
+  unsigned B4D23:1;
+  unsigned B4D24:1;
+  unsigned B4D25:1;
+  unsigned B4D26:1;
+  unsigned B4D27:1;
+} B4D2bits;
+extern volatile far  unsigned char       B4D3;
+extern volatile far  struct {
+  unsigned B4D30:1;
+  unsigned B4D31:1;
+  unsigned B4D32:1;
+  unsigned B4D33:1;
+  unsigned B4D34:1;
+  unsigned B4D35:1;
+  unsigned B4D36:1;
+  unsigned B4D37:1;
+} B4D3bits;
+extern volatile far  unsigned char       B4D4;
+extern volatile far  struct {
+  unsigned B4D40:1;
+  unsigned B4D41:1;
+  unsigned B4D42:1;
+  unsigned B4D43:1;
+  unsigned B4D44:1;
+  unsigned B4D45:1;
+  unsigned B4D46:1;
+  unsigned B4D47:1;
+} B4D4bits;
+extern volatile far  unsigned char       B4D5;
+extern volatile far  struct {
+  unsigned B4D50:1;
+  unsigned B4D51:1;
+  unsigned B4D52:1;
+  unsigned B4D53:1;
+  unsigned B4D54:1;
+  unsigned B4D55:1;
+  unsigned B4D56:1;
+  unsigned B4D57:1;
+} B4D5bits;
+extern volatile far  unsigned char       B4D6;
+extern volatile far  struct {
+  unsigned B4D60:1;
+  unsigned B4D61:1;
+  unsigned B4D62:1;
+  unsigned B4D63:1;
+  unsigned B4D64:1;
+  unsigned B4D65:1;
+  unsigned B4D66:1;
+  unsigned B4D67:1;
+} B4D6bits;
+extern volatile far  unsigned char       B4D7;
+extern volatile far  union {
+  struct {
+    unsigned B4D70:1;
+    unsigned B4D71:1;
+    unsigned B4D72:1;
+    unsigned B4D73:1;
+    unsigned B4D74:1;
+    unsigned B4D75:1;
+    unsigned B4D76:1;
+    unsigned B46D77:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned B4D77:1;
+  };
+} B4D7bits;
+extern volatile far  unsigned char       CANSTAT_RO5;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO5bits;
+extern volatile far  unsigned char       CANCON_RO5;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO5bits;
+extern volatile far  unsigned char       B5CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned RTREN:1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIF:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned RXRTRRO:1;
+  };
+} B5CONbits;
+extern volatile far  unsigned char       B5SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} B5SIDHbits;
+extern volatile far  unsigned char       B5SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXID:1;
+    unsigned SRR:1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} B5SIDLbits;
+extern volatile far  unsigned char       B5EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} B5EIDHbits;
+extern volatile far  unsigned char       B5EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} B5EIDLbits;
+extern volatile far  unsigned char       B5DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} B5DLCbits;
+extern volatile far  unsigned char       B5D0;
+extern volatile far  union {
+  struct {
+    unsigned B5D00:1;
+    unsigned B5D01:1;
+    unsigned B5D02:1;
+    unsigned B5D03:1;
+    unsigned B5D04:1;
+    unsigned B5D05:1;
+    unsigned B5D06:1;
+    unsigned B57D07:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned B5D07:1;
+  };
+} B5D0bits;
+extern volatile far  unsigned char       B5D1;
+extern volatile far  struct {
+  unsigned B5D10:1;
+  unsigned B5D11:1;
+  unsigned B5D12:1;
+  unsigned B5D13:1;
+  unsigned B5D14:1;
+  unsigned B5D15:1;
+  unsigned B5D16:1;
+  unsigned B5D17:1;
+} B5D1bits;
+extern volatile far  unsigned char       B5D2;
+extern volatile far  union {
+  struct {
+    unsigned B5D20:1;
+    unsigned B5D21:1;
+    unsigned B5D22:1;
+    unsigned B57D23:1;
+    unsigned B5D24:1;
+    unsigned B5D25:1;
+    unsigned B5D26:1;
+    unsigned B5D27:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned B5D23:1;
+  };
+} B5D2bits;
+extern volatile far  unsigned char       B5D3;
+extern volatile far  struct {
+  unsigned B5D30:1;
+  unsigned B5D31:1;
+  unsigned B5D32:1;
+  unsigned B5D33:1;
+  unsigned B5D34:1;
+  unsigned B5D35:1;
+  unsigned B5D36:1;
+  unsigned B5D37:1;
+} B5D3bits;
+extern volatile far  unsigned char       B5D4;
+extern volatile far  struct {
+  unsigned B5D40:1;
+  unsigned B5D41:1;
+  unsigned B5D42:1;
+  unsigned B5D43:1;
+  unsigned B5D44:1;
+  unsigned B5D45:1;
+  unsigned B5D46:1;
+  unsigned B5D47:1;
+} B5D4bits;
+extern volatile far  unsigned char       B5D5;
+extern volatile far  struct {
+  unsigned B5D50:1;
+  unsigned B5D51:1;
+  unsigned B5D52:1;
+  unsigned B5D53:1;
+  unsigned B5D54:1;
+  unsigned B5D55:1;
+  unsigned B5D56:1;
+  unsigned B5D57:1;
+} B5D5bits;
+extern volatile far  unsigned char       B5D6;
+extern volatile far  struct {
+  unsigned B5D60:1;
+  unsigned B5D61:1;
+  unsigned B5D62:1;
+  unsigned B5D63:1;
+  unsigned B5D64:1;
+  unsigned B5D65:1;
+  unsigned B5D66:1;
+  unsigned B5D67:1;
+} B5D6bits;
+extern volatile far  unsigned char       B5D7;
+extern volatile far  struct {
+  unsigned B5D70:1;
+  unsigned B5D71:1;
+  unsigned B5D72:1;
+  unsigned B5D73:1;
+  unsigned B5D74:1;
+  unsigned B5D75:1;
+  unsigned B5D76:1;
+  unsigned B5D77:1;
+} B5D7bits;
+extern volatile far  unsigned char       CANSTAT_RO4;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO4bits;
+extern volatile far  unsigned char       CANCON_RO4;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO4bits;
+extern volatile far  unsigned char       RXF0SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF0SIDHbits;
+extern volatile far  unsigned char       RXF0SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF0SIDLbits;
+extern volatile far  unsigned char       RXF0EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF0EIDHbits;
+extern volatile far  unsigned char       RXF0EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF0EIDLbits;
+extern volatile far  unsigned char       RXF1SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF1SIDHbits;
+extern volatile far  unsigned char       RXF1SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF1SIDLbits;
+extern volatile far  unsigned char       RXF1EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF1EIDHbits;
+extern volatile far  unsigned char       RXF1EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF1EIDLbits;
+extern volatile far  unsigned char       RXF2SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF2SIDHbits;
+extern volatile far  unsigned char       RXF2SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF2SIDLbits;
+extern volatile far  unsigned char       RXF2EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF2EIDHbits;
+extern volatile far  unsigned char       RXF2EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF2EIDLbits;
+extern volatile far  unsigned char       RXF3SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF3SIDHbits;
+extern volatile far  unsigned char       RXF3SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF3SIDLbits;
+extern volatile far  unsigned char       RXF3EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF3EIDHbits;
+extern volatile far  unsigned char       RXF3EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF3EIDLbits;
+extern volatile far  unsigned char       RXF4SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF4SIDHbits;
+extern volatile far  unsigned char       RXF4SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF4SIDLbits;
+extern volatile far  unsigned char       RXF4EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF4EIDHbits;
+extern volatile far  unsigned char       RXF4EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF4EIDLbits;
+extern volatile far  unsigned char       RXF5SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXF5SIDHbits;
+extern volatile far  unsigned char       RXF5SIDL;
+extern volatile far  union {
+  struct {
+    unsigned EID16:1;
+    unsigned EID17:1;
+    unsigned :1;
+    unsigned EXIDE:1;
+    unsigned :1;
+    unsigned SID0:1;
+    unsigned SID1:1;
+    unsigned SID2:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned EXIDEN:1;
+  };
+} RXF5SIDLbits;
+extern volatile far  unsigned char       RXF5EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXF5EIDHbits;
+extern volatile far  unsigned char       RXF5EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXF5EIDLbits;
+extern volatile far  unsigned char       RXM0SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXM0SIDHbits;
+extern volatile far  unsigned char       RXM0SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXIDEN:1;
+  unsigned :1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} RXM0SIDLbits;
+extern volatile far  unsigned char       RXM0EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXM0EIDHbits;
+extern volatile far  unsigned char       RXM0EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXM0EIDLbits;
+extern volatile far  unsigned char       RXM1SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXM1SIDHbits;
+extern volatile far  unsigned char       RXM1SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXIDEN:1;
+  unsigned :1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} RXM1SIDLbits;
+extern volatile far  unsigned char       RXM1EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXM1EIDHbits;
+extern volatile far  unsigned char       RXM1EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXM1EIDLbits;
+extern volatile far  unsigned char       TXB2CON;
+extern volatile far  union {
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned :1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIFBXB2CON:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned TXBIF:1;
+  };
+} TXB2CONbits;
+extern volatile far  unsigned char       TXB2SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} TXB2SIDHbits;
+extern volatile far  unsigned char       TXB2SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXIDE:1;
+  unsigned :1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} TXB2SIDLbits;
+extern volatile far  unsigned char       TXB2EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} TXB2EIDHbits;
+extern volatile far  unsigned char       TXB2EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} TXB2EIDLbits;
+extern volatile far  unsigned char       TXB2DLC;
+extern volatile far  struct {
+  unsigned DLC0:1;
+  unsigned DLC1:1;
+  unsigned DLC2:1;
+  unsigned DLC3:1;
+  unsigned :2;
+  unsigned TXRTR:1;
+} TXB2DLCbits;
+extern volatile far  unsigned char       TXB2D0;
+extern volatile far  struct {
+  unsigned TXB2D00:1;
+  unsigned TXB2D01:1;
+  unsigned TXB2D02:1;
+  unsigned TXB2D03:1;
+  unsigned TXB2D04:1;
+  unsigned TXB2D05:1;
+  unsigned TXB2D06:1;
+  unsigned TXB2D07:1;
+} TXB2D0bits;
+extern volatile far  unsigned char       TXB2D1;
+extern volatile far  struct {
+  unsigned TXB2D10:1;
+  unsigned TXB2D11:1;
+  unsigned TXB2D12:1;
+  unsigned TXB2D13:1;
+  unsigned TXB2D14:1;
+  unsigned TXB2D15:1;
+  unsigned TXB2D16:1;
+  unsigned TXB2D17:1;
+} TXB2D1bits;
+extern volatile far  unsigned char       TXB2D2;
+extern volatile far  struct {
+  unsigned TXB2D20:1;
+  unsigned TXB2D21:1;
+  unsigned TXB2D22:1;
+  unsigned TXB2D23:1;
+  unsigned TXB2D24:1;
+  unsigned TXB2D25:1;
+  unsigned TXB2D26:1;
+  unsigned TXB2D27:1;
+} TXB2D2bits;
+extern volatile far  unsigned char       TXB2D3;
+extern volatile far  struct {
+  unsigned TXB2D30:1;
+  unsigned TXB2D31:1;
+  unsigned TXB2D32:1;
+  unsigned TXB2D33:1;
+  unsigned TXB2D34:1;
+  unsigned TXB2D35:1;
+  unsigned TXB2D36:1;
+  unsigned TXB2D37:1;
+} TXB2D3bits;
+extern volatile far  unsigned char       TXB2D4;
+extern volatile far  struct {
+  unsigned TXB2D40:1;
+  unsigned TXB2D41:1;
+  unsigned TXB2D42:1;
+  unsigned TXB2D43:1;
+  unsigned TXB2D44:1;
+  unsigned TXB2D45:1;
+  unsigned TXB2D46:1;
+  unsigned TXB2D47:1;
+} TXB2D4bits;
+extern volatile far  unsigned char       TXB2D5;
+extern volatile far  struct {
+  unsigned TXB2D50:1;
+  unsigned TXB2D51:1;
+  unsigned TXB2D52:1;
+  unsigned TXB2D53:1;
+  unsigned TXB2D54:1;
+  unsigned TXB2D55:1;
+  unsigned TXB2D56:1;
+  unsigned TXB2D57:1;
+} TXB2D5bits;
+extern volatile far  unsigned char       TXB2D6;
+extern volatile far  struct {
+  unsigned TXB2D60:1;
+  unsigned TXB2D61:1;
+  unsigned TXB2D62:1;
+  unsigned TXB2D63:1;
+  unsigned TXB2D64:1;
+  unsigned TXB2D65:1;
+  unsigned TXB2D66:1;
+  unsigned TXB2D67:1;
+} TXB2D6bits;
+extern volatile far  unsigned char       TXB2D7;
+extern volatile far  struct {
+  unsigned TXB2D70:1;
+  unsigned TXB2D71:1;
+  unsigned TXB2D72:1;
+  unsigned TXB2D73:1;
+  unsigned TXB2D74:1;
+  unsigned TXB2D75:1;
+  unsigned TXB2D76:1;
+  unsigned TXB2D77:1;
+} TXB2D7bits;
+extern volatile far  unsigned char       CANSTAT_RO3;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO3bits;
+extern volatile far  unsigned char       CANCON_RO3;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO3bits;
+extern volatile far  unsigned char       TXB1CON;
+extern volatile far  union {
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned :1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+    unsigned TXBIFTXB1CON:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned TXBIF:1;
+  };
+} TXB1CONbits;
+extern volatile far  unsigned char       TXB1SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} TXB1SIDHbits;
+extern volatile far  unsigned char       TXB1SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXIDE:1;
+  unsigned :1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} TXB1SIDLbits;
+extern volatile far  unsigned char       TXB1EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} TXB1EIDHbits;
+extern volatile far  unsigned char       TXB1EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} TXB1EIDLbits;
+extern volatile far  unsigned char       TXB1DLC;
+extern volatile far  struct {
+  unsigned DLC0:1;
+  unsigned DLC1:1;
+  unsigned DLC2:1;
+  unsigned DLC3:1;
+  unsigned :2;
+  unsigned TXRTR:1;
+} TXB1DLCbits;
+extern volatile far  unsigned char       TXB1D0;
+extern volatile far  struct {
+  unsigned TXB1D00:1;
+  unsigned TXB1D01:1;
+  unsigned TXB1D02:1;
+  unsigned TXB1D03:1;
+  unsigned TXB1D04:1;
+  unsigned TXB1D05:1;
+  unsigned TXB1D06:1;
+  unsigned TXB1D07:1;
+} TXB1D0bits;
+extern volatile far  unsigned char       TXB1D1;
+extern volatile far  struct {
+  unsigned TXB1D10:1;
+  unsigned TXB1D11:1;
+  unsigned TXB1D12:1;
+  unsigned TXB1D13:1;
+  unsigned TXB1D14:1;
+  unsigned TXB1D15:1;
+  unsigned TXB1D16:1;
+  unsigned TXB1D17:1;
+} TXB1D1bits;
+extern volatile far  unsigned char       TXB1D2;
+extern volatile far  struct {
+  unsigned TXB1D20:1;
+  unsigned TXB1D21:1;
+  unsigned TXB1D22:1;
+  unsigned TXB1D23:1;
+  unsigned TXB1D24:1;
+  unsigned TXB1D25:1;
+  unsigned TXB1D26:1;
+  unsigned TXB1D27:1;
+} TXB1D2bits;
+extern volatile far  unsigned char       TXB1D3;
+extern volatile far  struct {
+  unsigned TXB1D30:1;
+  unsigned TXB1D31:1;
+  unsigned TXB1D32:1;
+  unsigned TXB1D33:1;
+  unsigned TXB1D34:1;
+  unsigned TXB1D35:1;
+  unsigned TXB1D36:1;
+  unsigned TXB1D37:1;
+} TXB1D3bits;
+extern volatile far  unsigned char       TXB1D4;
+extern volatile far  struct {
+  unsigned TXB1D40:1;
+  unsigned TXB1D41:1;
+  unsigned TXB1D42:1;
+  unsigned TXB1D43:1;
+  unsigned TXB1D44:1;
+  unsigned TXB1D45:1;
+  unsigned TXB1D46:1;
+  unsigned TXB1D47:1;
+} TXB1D4bits;
+extern volatile far  unsigned char       TXB1D5;
+extern volatile far  struct {
+  unsigned TXB1D50:1;
+  unsigned TXB1D51:1;
+  unsigned TXB1D52:1;
+  unsigned TXB1D53:1;
+  unsigned TXB1D54:1;
+  unsigned TXB1D55:1;
+  unsigned TXB1D56:1;
+  unsigned TXB1D57:1;
+} TXB1D5bits;
+extern volatile far  unsigned char       TXB1D6;
+extern volatile far  struct {
+  unsigned TXB1D60:1;
+  unsigned TXB1D61:1;
+  unsigned TXB1D62:1;
+  unsigned TXB1D63:1;
+  unsigned TXB1D64:1;
+  unsigned TXB1D65:1;
+  unsigned TXB1D66:1;
+  unsigned TXB1D67:1;
+} TXB1D6bits;
+extern volatile far  unsigned char       TXB1D7;
+extern volatile far  struct {
+  unsigned TXB1D70:1;
+  unsigned TXB1D71:1;
+  unsigned TXB1D72:1;
+  unsigned TXB1D73:1;
+  unsigned TXB1D74:1;
+  unsigned TXB1D75:1;
+  unsigned TXB1D76:1;
+  unsigned TXB1D77:1;
+} TXB1D7bits;
+extern volatile far  unsigned char       CANSTAT_RO2;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO2bits;
+extern volatile far  unsigned char       CANCON_RO2;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO2bits;
+extern volatile far  unsigned char       TXB0CON;
+extern volatile far  union {
+  struct {
+    unsigned TXPRI0:1;
+    unsigned TXPRI1:1;
+    unsigned :1;
+    unsigned TXREQ:1;
+    unsigned TXERR:1;
+    unsigned TXLARB:1;
+    unsigned TXABT:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned TXBIF:1;
+  };
+} TXB0CONbits;
+extern volatile far  unsigned char       TXB0SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} TXB0SIDHbits;
+extern volatile far  unsigned char       TXB0SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXIDE:1;
+  unsigned :1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} TXB0SIDLbits;
+extern volatile far  unsigned char       TXB0EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} TXB0EIDHbits;
+extern volatile far  unsigned char       TXB0EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} TXB0EIDLbits;
+extern volatile far  unsigned char       TXB0DLC;
+extern volatile far  struct {
+  unsigned DLC0:1;
+  unsigned DLC1:1;
+  unsigned DLC2:1;
+  unsigned DLC3:1;
+  unsigned :2;
+  unsigned TXRTR:1;
+} TXB0DLCbits;
+extern volatile far  unsigned char       TXB0D0;
+extern volatile far  struct {
+  unsigned TXB0D00:1;
+  unsigned TXB0D01:1;
+  unsigned TXB0D02:1;
+  unsigned TXB0D03:1;
+  unsigned TXB0D04:1;
+  unsigned TXB0D05:1;
+  unsigned TXB0D06:1;
+  unsigned TXB0D07:1;
+} TXB0D0bits;
+extern volatile far  unsigned char       TXB0D1;
+extern volatile far  struct {
+  unsigned TXB0D10:1;
+  unsigned TXB0D11:1;
+  unsigned TXB0D12:1;
+  unsigned TXB0D13:1;
+  unsigned TXB0D14:1;
+  unsigned TXB0D15:1;
+  unsigned TXB0D16:1;
+  unsigned TXB0D17:1;
+} TXB0D1bits;
+extern volatile far  unsigned char       TXB0D2;
+extern volatile far  struct {
+  unsigned TXB0D20:1;
+  unsigned TXB0D21:1;
+  unsigned TXB0D22:1;
+  unsigned TXB0D23:1;
+  unsigned TXB0D24:1;
+  unsigned TXB0D25:1;
+  unsigned TXB0D26:1;
+  unsigned TXB0D27:1;
+} TXB0D2bits;
+extern volatile far  unsigned char       TXB0D3;
+extern volatile far  struct {
+  unsigned TXB0D30:1;
+  unsigned TXB0D31:1;
+  unsigned TXB0D32:1;
+  unsigned TXB0D33:1;
+  unsigned TXB0D34:1;
+  unsigned TXB0D35:1;
+  unsigned TXB0D36:1;
+  unsigned TXB0D37:1;
+} TXB0D3bits;
+extern volatile far  unsigned char       TXB0D4;
+extern volatile far  struct {
+  unsigned TXB0D40:1;
+  unsigned TXB0D41:1;
+  unsigned TXB0D42:1;
+  unsigned TXB0D43:1;
+  unsigned TXB0D44:1;
+  unsigned TXB0D45:1;
+  unsigned TXB0D46:1;
+  unsigned TXB0D47:1;
+} TXB0D4bits;
+extern volatile far  unsigned char       TXB0D5;
+extern volatile far  struct {
+  unsigned TXB0D50:1;
+  unsigned TXB0D51:1;
+  unsigned TXB0D52:1;
+  unsigned TXB0D53:1;
+  unsigned TXB0D54:1;
+  unsigned TXB0D55:1;
+  unsigned TXB0D56:1;
+  unsigned TXB0D57:1;
+} TXB0D5bits;
+extern volatile far  unsigned char       TXB0D6;
+extern volatile far  struct {
+  unsigned TXB0D60:1;
+  unsigned TXB0D61:1;
+  unsigned TXB0D62:1;
+  unsigned TXB0D63:1;
+  unsigned TXB0D64:1;
+  unsigned TXB0D65:1;
+  unsigned TXB0D66:1;
+  unsigned TXB0D67:1;
+} TXB0D6bits;
+extern volatile far  unsigned char       TXB0D7;
+extern volatile far  struct {
+  unsigned TXB0D70:1;
+  unsigned TXB0D71:1;
+  unsigned TXB0D72:1;
+  unsigned TXB0D73:1;
+  unsigned TXB0D74:1;
+  unsigned TXB0D75:1;
+  unsigned TXB0D76:1;
+  unsigned TXB0D77:1;
+} TXB0D7bits;
+extern volatile far  unsigned char       CANSTAT_RO1;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO1bits;
+extern volatile far  unsigned char       CANCON_RO1;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO1bits;
+extern volatile far  unsigned char       RXB1CON;
+extern volatile far  union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned RXRTRRO:1;
+    unsigned :1;
+    unsigned RXM0:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+  };
+} RXB1CONbits;
+extern volatile far  unsigned char       RXB1SIDH;
+extern volatile far  struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXB1SIDHbits;
+extern volatile far  unsigned char       RXB1SIDL;
+extern volatile far  struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXID:1;
+  unsigned SRR:1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} RXB1SIDLbits;
+extern volatile far  unsigned char       RXB1EIDH;
+extern volatile far  struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXB1EIDHbits;
+extern volatile far  unsigned char       RXB1EIDL;
+extern volatile far  struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXB1EIDLbits;
+extern volatile far  unsigned char       RXB1DLC;
+extern volatile far  union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} RXB1DLCbits;
+extern volatile far  unsigned char       RXB1D0;
+extern volatile far  struct {
+  unsigned RXB1D00:1;
+  unsigned RXB1D01:1;
+  unsigned RXB1D02:1;
+  unsigned RXB1D03:1;
+  unsigned RXB1D04:1;
+  unsigned RXB1D05:1;
+  unsigned RXB1D06:1;
+  unsigned RXB1D07:1;
+} RXB1D0bits;
+extern volatile far  unsigned char       RXB1D1;
+extern volatile far  struct {
+  unsigned RXB1D10:1;
+  unsigned RXB1D11:1;
+  unsigned RXB1D12:1;
+  unsigned RXB1D13:1;
+  unsigned RXB1D14:1;
+  unsigned RXB1D15:1;
+  unsigned RXB1D16:1;
+  unsigned RXB1D17:1;
+} RXB1D1bits;
+extern volatile far  unsigned char       RXB1D2;
+extern volatile far  struct {
+  unsigned RXB1D20:1;
+  unsigned RXB1D21:1;
+  unsigned RXB1D22:1;
+  unsigned RXB1D23:1;
+  unsigned RXB1D24:1;
+  unsigned RXB1D25:1;
+  unsigned RXB1D26:1;
+  unsigned RXB1D27:1;
+} RXB1D2bits;
+extern volatile far  unsigned char       RXB1D3;
+extern volatile far  struct {
+  unsigned RXB1D30:1;
+  unsigned RXB1D31:1;
+  unsigned RXB1D32:1;
+  unsigned RXB1D33:1;
+  unsigned RXB1D34:1;
+  unsigned RXB1D35:1;
+  unsigned RXB1D36:1;
+  unsigned RXB1D37:1;
+} RXB1D3bits;
+extern volatile far  unsigned char       RXB1D4;
+extern volatile far  struct {
+  unsigned RXB1D40:1;
+  unsigned RXB1D41:1;
+  unsigned RXB1D42:1;
+  unsigned RXB1D43:1;
+  unsigned RXB1D44:1;
+  unsigned RXB1D45:1;
+  unsigned RXB1D46:1;
+  unsigned RXB1D47:1;
+} RXB1D4bits;
+extern volatile far  unsigned char       RXB1D5;
+extern volatile far  struct {
+  unsigned RXB1D50:1;
+  unsigned RXB1D51:1;
+  unsigned RXB1D52:1;
+  unsigned RXB1D53:1;
+  unsigned RXB1D54:1;
+  unsigned RXB1D55:1;
+  unsigned RXB1D56:1;
+  unsigned RXB1D57:1;
+} RXB1D5bits;
+extern volatile far  unsigned char       RXB1D6;
+extern volatile far  struct {
+  unsigned RXB1D60:1;
+  unsigned RXB1D61:1;
+  unsigned RXB1D62:1;
+  unsigned RXB1D63:1;
+  unsigned RXB1D64:1;
+  unsigned RXB1D65:1;
+  unsigned RXB1D66:1;
+  unsigned RXB1D67:1;
+} RXB1D6bits;
+extern volatile far  unsigned char       RXB1D7;
+extern volatile far  struct {
+  unsigned RXB1D70:1;
+  unsigned RXB1D71:1;
+  unsigned RXB1D72:1;
+  unsigned RXB1D73:1;
+  unsigned RXB1D74:1;
+  unsigned RXB1D75:1;
+  unsigned RXB1D76:1;
+  unsigned RXB1D77:1;
+} RXB1D7bits;
+extern volatile far  unsigned char       CANSTAT_RO0;
+extern volatile far  struct {
+  unsigned ICODE0:1;
+  unsigned ICODE1:1;
+  unsigned ICODE2:1;
+  unsigned ICODE3:1;
+  unsigned ICODE4:1;
+  unsigned OPMODE:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANSTAT_RO0bits;
+extern volatile far  unsigned char       CANCON_RO0;
+extern volatile far  struct {
+  unsigned :1;
+  unsigned WIN0:1;
+  unsigned WIN1:1;
+  unsigned WIN2:1;
+  unsigned ABAT:1;
+  unsigned REQOP0:1;
+  unsigned REQOP1:1;
+  unsigned REQOP2:1;
+} CANCON_RO0bits;
+extern volatile near unsigned char       RXB0CON;
+extern volatile near union {
+  struct {
+    unsigned FILHIT0:1;
+    unsigned JTOFF:1;
+    unsigned RXB0DBEN:1;
+    unsigned RXRTRRO:1;
+    unsigned :1;
+    unsigned RXM0:1;
+    unsigned RXM1:1;
+    unsigned RXFUL:1;
+  };
+  struct {
+    unsigned :1;
+    unsigned FILHIT1:1;
+    unsigned FILHIT2:1;
+    unsigned FILHIT3:1;
+    unsigned FILHIT4:1;
+    unsigned RTRRO:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned RXBODBEN:1;
+  };
+} RXB0CONbits;
+extern volatile near unsigned char       RXB0SIDH;
+extern volatile near struct {
+  unsigned SID3:1;
+  unsigned SID4:1;
+  unsigned SID5:1;
+  unsigned SID6:1;
+  unsigned SID7:1;
+  unsigned SID8:1;
+  unsigned SID9:1;
+  unsigned SID10:1;
+} RXB0SIDHbits;
+extern volatile near unsigned char       RXB0SIDL;
+extern volatile near struct {
+  unsigned EID16:1;
+  unsigned EID17:1;
+  unsigned :1;
+  unsigned EXID:1;
+  unsigned SRR:1;
+  unsigned SID0:1;
+  unsigned SID1:1;
+  unsigned SID2:1;
+} RXB0SIDLbits;
+extern volatile near unsigned char       RXB0EIDH;
+extern volatile near struct {
+  unsigned EID8:1;
+  unsigned EID9:1;
+  unsigned EID10:1;
+  unsigned EID11:1;
+  unsigned EID12:1;
+  unsigned EID13:1;
+  unsigned EID14:1;
+  unsigned EID15:1;
+} RXB0EIDHbits;
+extern volatile near unsigned char       RXB0EIDL;
+extern volatile near struct {
+  unsigned EID0:1;
+  unsigned EID1:1;
+  unsigned EID2:1;
+  unsigned EID3:1;
+  unsigned EID4:1;
+  unsigned EID5:1;
+  unsigned EID6:1;
+  unsigned EID7:1;
+} RXB0EIDLbits;
+extern volatile near unsigned char       RXB0DLC;
+extern volatile near union {
+  struct {
+    unsigned DLC0:1;
+    unsigned DLC1:1;
+    unsigned DLC2:1;
+    unsigned DLC3:1;
+    unsigned RESRB0:1;
+    unsigned RESRB1:1;
+    unsigned RXRTR:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned RB0:1;
+    unsigned RB1:1;
+  };
+} RXB0DLCbits;
+extern volatile near unsigned char       RXB0D0;
+extern volatile near struct {
+  unsigned RXB0D00:1;
+  unsigned RXB0D01:1;
+  unsigned RXB0D02:1;
+  unsigned RXB0D03:1;
+  unsigned RXB0D04:1;
+  unsigned RXB0D05:1;
+  unsigned RXB0D06:1;
+  unsigned RXB0D07:1;
+} RXB0D0bits;
+extern volatile near unsigned char       RXB0D1;
+extern volatile near struct {
+  unsigned RXB0D10:1;
+  unsigned RXB0D11:1;
+  unsigned RXB0D12:1;
+  unsigned RXB0D13:1;
+  unsigned RXB0D14:1;
+  unsigned RXB0D15:1;
+  unsigned RXB0D16:1;
+  unsigned RXB0D17:1;
+} RXB0D1bits;
+extern volatile near unsigned char       RXB0D2;
+extern volatile near struct {
+  unsigned RXB0D20:1;
+  unsigned RXB0D21:1;
+  unsigned RXB0D22:1;
+  unsigned RXB0D23:1;
+  unsigned RXB0D24:1;
+  unsigned RXB0D25:1;
+  unsigned RXB0D26:1;
+  unsigned RXB0D27:1;
+} RXB0D2bits;
+extern volatile near unsigned char       RXB0D3;
+extern volatile near struct {
+  unsigned RXB0D30:1;
+  unsigned RXB0D31:1;
+  unsigned RXB0D32:1;
+  unsigned RXB0D33:1;
+  unsigned RXB0D34:1;
+  unsigned RXB0D35:1;
+  unsigned RXB0D36:1;
+  unsigned RXB0D37:1;
+} RXB0D3bits;
+extern volatile near unsigned char       RXB0D4;
+extern volatile near struct {
+  unsigned RXB0D40:1;
+  unsigned RXB0D41:1;
+  unsigned RXB0D42:1;
+  unsigned RXB0D43:1;
+  unsigned RXB0D44:1;
+  unsigned RXB0D45:1;
+  unsigned RXB0D46:1;
+  unsigned RXB0D47:1;
+} RXB0D4bits;
+extern volatile near unsigned char       RXB0D5;
+extern volatile near struct {
+  unsigned RXB0D50:1;
+  unsigned RXB0D51:1;
+  unsigned RXB0D52:1;
+  unsigned RXB0D53:1;
+  unsigned RXB0D54:1;
+  unsigned RXB0D55:1;
+  unsigned RXB0D56:1;
+  unsigned RXB0D57:1;
+} RXB0D5bits;
+extern volatile near unsigned char       RXB0D6;
+extern volatile near struct {
+  unsigned RXB0D60:1;
+  unsigned RXB0D61:1;
+  unsigned RXB0D62:1;
+  unsigned RXB0D63:1;
+  unsigned RXB0D64:1;
+  unsigned RXB0D65:1;
+  unsigned RXB0D66:1;
+  unsigned RXB0D67:1;
+} RXB0D6bits;
+extern volatile near unsigned char       RXB0D7;
+extern volatile near struct {
+  unsigned RXB0D70:1;
+  unsigned RXB0D71:1;
+  unsigned RXB0D72:1;
+  unsigned RXB0D73:1;
+  unsigned RXB0D74:1;
+  unsigned RXB0D75:1;
+  unsigned RXB0D76:1;
+  unsigned RXB0D77:1;
+} RXB0D7bits;
+extern volatile near unsigned char       CANSTAT;
+extern volatile near union {
+  struct {
+    unsigned :1;
+    unsigned ICODE1:1;
+    unsigned ICODE2:1;
+    unsigned ICODE3:1;
+    unsigned :1;
+    unsigned OPMODE0:1;
+    unsigned OPMODE1:1;
+    unsigned OPMODE2:1;
+  };
+  struct {
+    unsigned EICODE0:1;
+    unsigned EICODE1:1;
+    unsigned EICODE2:1;
+    unsigned EICODE3:1;
+    unsigned EICODE4:1;
+  };
+} CANSTATbits;
+extern volatile near unsigned char       CANCON;
+extern volatile near union {
+  struct {
+    unsigned :1;
+    unsigned WIN0:1;
+    unsigned WIN1:1;
+    unsigned WIN2:1;
+    unsigned ABAT:1;
+    unsigned REQOP0:1;
+    unsigned REQOP1:1;
+    unsigned REQOP2:1;
+  };
+  struct {
+    unsigned FP0:1;
+    unsigned FP1:1;
+    unsigned FP2:1;
+    unsigned FP3:1;
+  };
+} CANCONbits;
+extern volatile near unsigned char       BRGCON1;
+extern volatile near struct {
+  unsigned BRP0:1;
+  unsigned BRP1:1;
+  unsigned BRP2:1;
+  unsigned BRP3:1;
+  unsigned BRP4:1;
+  unsigned BRP5:1;
+  unsigned SJW0:1;
+  unsigned SJW1:1;
+} BRGCON1bits;
+extern volatile near unsigned char       BRGCON2;
+extern volatile near union {
+  struct {
+    unsigned PRSEG0:1;
+    unsigned PRSEG1:1;
+    unsigned PRSEG2:1;
+    unsigned SEG1PH0:1;
+    unsigned SEG1PH1:1;
+    unsigned SEG1PH2:1;
+    unsigned SAM:1;
+    unsigned SEG2PHTS:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned SEG2PHT:1;
+  };
+} BRGCON2bits;
+extern volatile near unsigned char       BRGCON3;
+extern volatile near struct {
+  unsigned SEG2PH0:1;
+  unsigned SEG2PH1:1;
+  unsigned SEG2PH2:1;
+  unsigned :3;
+  unsigned WAKFIL:1;
+  unsigned WAKDIS:1;
+} BRGCON3bits;
+extern volatile near unsigned char       CIOCON;
+extern volatile near struct {
+  unsigned :4;
+  unsigned CANCAP:1;
+  unsigned ENDRHI:1;
+} CIOCONbits;
+extern volatile near unsigned char       COMSTAT;
+extern volatile near union {
+  struct {
+    unsigned EWARN:1;
+    unsigned RXWARN:1;
+    unsigned TXWARN:1;
+    unsigned RXBP:1;
+    unsigned TXBP:1;
+    unsigned TXBO:1;
+    unsigned RXB1OVFL:1;
+    unsigned RXB0OVFL:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned RXBnOVFL:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned FIFOEMPTY:1;
+  };
+} COMSTATbits;
+extern volatile near unsigned char       RXERRCNT;
+extern volatile near struct {
+  unsigned REC0:1;
+  unsigned REC1:1;
+  unsigned REC2:1;
+  unsigned REC3:1;
+  unsigned REC4:1;
+  unsigned REC5:1;
+  unsigned REC6:1;
+  unsigned REC7:1;
+} RXERRCNTbits;
+extern volatile near unsigned char       TXERRCNT;
+extern volatile near struct {
+  unsigned TEC0:1;
+  unsigned TEC1:1;
+  unsigned TEC2:1;
+  unsigned TEC3:1;
+  unsigned TEC4:1;
+  unsigned TEC5:1;
+  unsigned TEC6:1;
+  unsigned TEC7:1;
+} TXERRCNTbits;
+extern volatile near unsigned char       ECANCON;
+extern volatile near union {
+  struct {
+    unsigned EWIN0:1;
+    unsigned EWIN1:1;
+    unsigned EWIN2:1;
+    unsigned EWIN3:1;
+    unsigned EWIN4:1;
+    unsigned FIFOWM:1;
+    unsigned MDSEL0:1;
+    unsigned MDSEL1:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned F:1;
+  };
+} ECANCONbits;
+extern volatile near unsigned char       PORTA;
+extern volatile near union {
+  struct {
+    unsigned RA0:1;
+    unsigned RA1:1;
+    unsigned RA2:1;
+    unsigned RA3:1;
+    unsigned RA4:1;
+    unsigned RA5:1;
+    unsigned RA6:1;
+    unsigned RA7:1;
+  };
+  struct {
+    unsigned AN0:1;
+    unsigned AN1:1;
+    unsigned AN2:1;
+    unsigned AN3:1;
+    unsigned T0CKI:1;
+    unsigned AN4:1;
+    unsigned OSC2:1;
+    unsigned OSC1:1;
+  };
+  struct {
+    unsigned CVREF:1;
+    unsigned :1;
+    unsigned VREFM:1;
+    unsigned VREFP:1;
+    unsigned :1;
+    unsigned LVDIN:1;
+    unsigned CLKO:1;
+    unsigned CLKI:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned SS:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned NOT_SS:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned HLVDIN:1;
+  };
+} PORTAbits;
+extern volatile near unsigned char       PORTB;
+extern volatile near union {
+  struct {
+    unsigned RB0:1;
+    unsigned RB1:1;
+    unsigned RB2:1;
+    unsigned RB3:1;
+    unsigned RB4:1;
+    unsigned RB5:1;
+    unsigned RB6:1;
+    unsigned RB7:1;
+  };
+  struct {
+    unsigned INT0:1;
+    unsigned INT1:1;
+    unsigned INT2:1;
+    unsigned CANRX:1;
+    unsigned KBI0:1;
+    unsigned KBI1:1;
+    unsigned KBI2:1;
+    unsigned KBI3:1;
+  };
+  struct {
+    unsigned AN10:1;
+  };
+  struct {
+    unsigned FLT0:1;
+    unsigned AN8:1;
+    unsigned CANTX:1;
+    unsigned :1;
+    unsigned AN9:1;
+    unsigned PGM:1;
+    unsigned PGC:1;
+    unsigned PGD:1;
+  };
+} PORTBbits;
+extern volatile near unsigned char       PORTC;
+extern volatile near union {
+  struct {
+    unsigned RC0:1;
+    unsigned RC1:1;
+    unsigned RC2:1;
+    unsigned RC3:1;
+    unsigned RC4:1;
+    unsigned RC5:1;
+    unsigned RC6:1;
+    unsigned RC7:1;
+  };
+  struct {
+    unsigned T1OSO:1;
+    unsigned T1OSI:1;
+    unsigned CCP1:1;
+    unsigned SCK:1;
+    unsigned SDI:1;
+    unsigned SDO:1;
+    unsigned TX:1;
+    unsigned RX:1;
+  };
+  struct {
+    unsigned T13CKI:1;
+    unsigned :2;
+    unsigned SCL:1;
+    unsigned SDA:1;
+    unsigned :1;
+    unsigned CK:1;
+    unsigned DT:1;
+  };
+} PORTCbits;
+extern volatile near unsigned char       PORTD;
+extern volatile near union {
+  struct {
+    unsigned RD0:1;
+    unsigned RD1:1;
+    unsigned RD2:1;
+    unsigned RD3:1;
+    unsigned RD4:1;
+    unsigned RD5:1;
+    unsigned RD6:1;
+    unsigned RD7:1;
+  };
+  struct {
+    unsigned PSP0:1;
+    unsigned PSP1:1;
+    unsigned PSP2:1;
+    unsigned PSP3:1;
+    unsigned PSP4:1;
+    unsigned PSP5:1;
+    unsigned PSP6:1;
+    unsigned PSP7:1;
+  };
+  struct {
+    unsigned C1INB:1;
+    unsigned C1INA:1;
+    unsigned C2INB:1;
+    unsigned C2INA:1;
+    unsigned P1A:1;
+    unsigned P1B:1;
+    unsigned P1C:1;
+    unsigned P1D:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned ECCP1:1;
+  };
+} PORTDbits;
+extern volatile near unsigned char       PORTE;
+extern volatile near union {
+  struct {
+    unsigned RE0:1;
+    unsigned RE1:1;
+    unsigned RE2:1;
+    unsigned RE3:1;
+  };
+  struct {
+    unsigned AN5:1;
+    unsigned AN6:1;
+    unsigned AN7:1;
+  };
+  struct {
+    unsigned NOT_RD:1;
+    unsigned NOT_WR:1;
+    unsigned NOT_CS:1;
+  };
+  struct {
+    unsigned RD:1;
+    unsigned WR:1;
+    unsigned CS:1;
+  };
+} PORTEbits;
+extern volatile near unsigned char       LATA;
+extern volatile near struct {
+  unsigned LATA0:1;
+  unsigned LATA1:1;
+  unsigned LATA2:1;
+  unsigned LATA3:1;
+  unsigned LATA4:1;
+  unsigned LATA5:1;
+  unsigned LATA6:1;
+  unsigned LATA7:1;
+} LATAbits;
+extern volatile near unsigned char       LATB;
+extern volatile near struct {
+  unsigned LATB0:1;
+  unsigned LATB1:1;
+  unsigned LATB2:1;
+  unsigned LATB3:1;
+  unsigned LATB4:1;
+  unsigned LATB5:1;
+  unsigned LATB6:1;
+  unsigned LATB7:1;
+} LATBbits;
+extern volatile near unsigned char       LATC;
+extern volatile near struct {
+  unsigned LATC0:1;
+  unsigned LATC1:1;
+  unsigned LATC2:1;
+  unsigned LATC3:1;
+  unsigned LATC4:1;
+  unsigned LATC5:1;
+  unsigned LATC6:1;
+  unsigned LATC7:1;
+} LATCbits;
+extern volatile near unsigned char       LATD;
+extern volatile near struct {
+  unsigned LATD0:1;
+  unsigned LATD1:1;
+  unsigned LATD2:1;
+  unsigned LATD3:1;
+  unsigned LATD4:1;
+  unsigned LATD5:1;
+  unsigned LATD6:1;
+  unsigned LATD7:1;
+} LATDbits;
+extern volatile near unsigned char       LATE;
+extern volatile near struct {
+  unsigned LATE0:1;
+  unsigned LATE1:1;
+  unsigned LATE2:1;
+} LATEbits;
+extern volatile near unsigned char       DDRA;
+extern volatile near struct {
+  unsigned RA0:1;
+  unsigned RA1:1;
+  unsigned RA2:1;
+  unsigned RA3:1;
+  unsigned RA4:1;
+  unsigned RA5:1;
+  unsigned RA6:1;
+} DDRAbits;
+extern volatile near unsigned char       TRISA;
+extern volatile near struct {
+  unsigned TRISA0:1;
+  unsigned TRISA1:1;
+  unsigned TRISA2:1;
+  unsigned TRISA3:1;
+  unsigned TRISA4:1;
+  unsigned TRISA5:1;
+  unsigned TRISA6:1;
+  unsigned TRISA7:1;
+} TRISAbits;
+extern volatile near unsigned char       DDRB;
+extern volatile near struct {
+  unsigned RB0:1;
+  unsigned RB1:1;
+  unsigned RB2:1;
+  unsigned RB3:1;
+  unsigned RB4:1;
+  unsigned RB5:1;
+  unsigned RB6:1;
+  unsigned RB7:1;
+} DDRBbits;
+extern volatile near unsigned char       TRISB;
+extern volatile near struct {
+  unsigned TRISB0:1;
+  unsigned TRISB1:1;
+  unsigned TRISB2:1;
+  unsigned TRISB3:1;
+  unsigned TRISB4:1;
+  unsigned TRISB5:1;
+  unsigned TRISB6:1;
+  unsigned TRISB7:1;
+} TRISBbits;
+extern volatile near unsigned char       DDRC;
+extern volatile near struct {
+  unsigned RC0:1;
+  unsigned RC1:1;
+  unsigned RC2:1;
+  unsigned RC3:1;
+  unsigned RC4:1;
+  unsigned RC5:1;
+  unsigned RC6:1;
+  unsigned RC7:1;
+} DDRCbits;
+extern volatile near unsigned char       TRISC;
+extern volatile near struct {
+  unsigned TRISC0:1;
+  unsigned TRISC1:1;
+  unsigned TRISC2:1;
+  unsigned TRISC3:1;
+  unsigned TRISC4:1;
+  unsigned TRISC5:1;
+  unsigned TRISC6:1;
+  unsigned TRISC7:1;
+} TRISCbits;
+extern volatile near unsigned char       DDRD;
+extern volatile near struct {
+  unsigned RD0:1;
+  unsigned RD1:1;
+  unsigned RD2:1;
+  unsigned RD3:1;
+  unsigned RD4:1;
+  unsigned RD5:1;
+  unsigned RD6:1;
+  unsigned RD7:1;
+} DDRDbits;
+extern volatile near unsigned char       TRISD;
+extern volatile near struct {
+  unsigned TRISD0:1;
+  unsigned TRISD1:1;
+  unsigned TRISD2:1;
+  unsigned TRISD3:1;
+  unsigned TRISD4:1;
+  unsigned TRISD5:1;
+  unsigned TRISD6:1;
+  unsigned TRISD7:1;
+} TRISDbits;
+extern volatile near unsigned char       DDRE;
+extern volatile near struct {
+  unsigned RE0:1;
+  unsigned RE1:1;
+  unsigned RE2:1;
+  unsigned :1;
+  unsigned PSPMODE:1;
+  unsigned IBOV:1;
+  unsigned OBF:1;
+  unsigned IBF:1;
+} DDREbits;
+extern volatile near unsigned char       TRISE;
+extern volatile near struct {
+  unsigned TRISE0:1;
+  unsigned TRISE1:1;
+  unsigned TRISE2:1;
+  unsigned :1;
+  unsigned PSPMODE:1;
+  unsigned IBOV:1;
+  unsigned OBF:1;
+  unsigned IBF:1;
+} TRISEbits;
+extern volatile near unsigned char       OSCTUNE;
+extern volatile near union {
+  struct {
+    unsigned TUN0:1;
+    unsigned TUN1:1;
+    unsigned TUN2:1;
+    unsigned TUN3:1;
+    unsigned TUN4:1;
+    unsigned :1;
+    unsigned PLLEN:1;
+    unsigned INTSCR:1;
+  };
+  struct {
+    unsigned :7;
+    unsigned INTSRC:1;
+  };
+} OSCTUNEbits;
+extern volatile near unsigned char       PIE1;
+extern volatile near struct {
+  unsigned TMR1IE:1;
+  unsigned TMR2IE:1;
+  unsigned CCP1IE:1;
+  unsigned SSPIE:1;
+  unsigned TXIE:1;
+  unsigned RCIE:1;
+  unsigned ADIE:1;
+  unsigned PSPIE:1;
+} PIE1bits;
+extern volatile near unsigned char       PIR1;
+extern volatile near struct {
+  unsigned TMR1IF:1;
+  unsigned TMR2IF:1;
+  unsigned CCP1IF:1;
+  unsigned SSPIF:1;
+  unsigned TXIF:1;
+  unsigned RCIF:1;
+  unsigned ADIF:1;
+  unsigned PSPIF:1;
+} PIR1bits;
+extern volatile near unsigned char       IPR1;
+extern volatile near union {
+  struct {
+    unsigned TMR1IP:1;
+    unsigned TMR2IP:1;
+    unsigned CCP1IP:1;
+    unsigned SSPIP:1;
+    unsigned TXBIP:1;
+    unsigned RCIP:1;
+    unsigned ADIP:1;
+    unsigned PSPIP:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned TXIP:1;
+  };
+} IPR1bits;
+extern volatile near unsigned char       PIE2;
+extern volatile near union {
+  struct {
+    unsigned ECCP1IE:1;
+    unsigned TMR3IE:1;
+    unsigned LVDIE:1;
+    unsigned BCLIE:1;
+    unsigned EEIE:1;
+    unsigned :1;
+    unsigned CMIE:1;
+    unsigned OSCFIE:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned HLVDIE:1;
+  };
+} PIE2bits;
+extern volatile near unsigned char       PIR2;
+extern volatile near union {
+  struct {
+    unsigned ECCP1IF:1;
+    unsigned TMR3IF:1;
+    unsigned LVDIF:1;
+    unsigned BCLIF:1;
+    unsigned EEIF:1;
+    unsigned :1;
+    unsigned CMIF:1;
+    unsigned OSCFIF:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned HLVDIF:1;
+  };
+} PIR2bits;
+extern volatile near unsigned char       IPR2;
+extern volatile near union {
+  struct {
+    unsigned ECCP1IP:1;
+    unsigned TMR3IP:1;
+    unsigned LVDIP:1;
+    unsigned BCLIP:1;
+    unsigned EEIP:1;
+    unsigned :1;
+    unsigned CMIP:1;
+    unsigned OSCFIP:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned HLVDIP:1;
+  };
+} IPR2bits;
+extern volatile near unsigned char       PIE3;
+extern volatile near union {
+  struct {
+    unsigned RXB0IE:1;
+    unsigned RXB1IE:1;
+    unsigned TXB0IE:1;
+    unsigned TXB1IE:1;
+    unsigned TXB2IE:1;
+    unsigned ERRIE:1;
+    unsigned WAKIE:1;
+    unsigned IRXIE:1;
+  };
+  struct {
+    unsigned FIFOWMIE:1;
+    unsigned RXBnIE:1;
+    unsigned :2;
+    unsigned TXBnIE:1;
+  };
+  struct {
+    unsigned FIFOMWIE:1;
+  };
+} PIE3bits;
+extern volatile near unsigned char       PIR3;
+extern volatile near union {
+  struct {
+    unsigned RXB0IF:1;
+    unsigned RXB1IF:1;
+    unsigned TXB0IF:1;
+    unsigned TXB1IF:1;
+    unsigned TXB2IF:1;
+    unsigned ERRIF:1;
+    unsigned WAKIF:1;
+    unsigned IRXIF:1;
+  };
+  struct {
+    unsigned FIFOWMIF:1;
+    unsigned RXBnIF:1;
+    unsigned :2;
+    unsigned TXBnIF:1;
+  };
+} PIR3bits;
+extern volatile near unsigned char       IPR3;
+extern volatile near union {
+  struct {
+    unsigned RXB0IP:1;
+    unsigned RXB1IP:1;
+    unsigned TXB0IP:1;
+    unsigned TXB1IP:1;
+    unsigned TXB2IP:1;
+    unsigned ERRIP:1;
+    unsigned WAKIP:1;
+    unsigned IRXIP:1;
+  };
+  struct {
+    unsigned FIFOWMIP:1;
+    unsigned RXBnIP:1;
+    unsigned :2;
+    unsigned TXBnIP:1;
+  };
+} IPR3bits;
+extern volatile near unsigned char       EECON1;
+extern volatile near struct {
+  unsigned RD:1;
+  unsigned WR:1;
+  unsigned WREN:1;
+  unsigned WRERR:1;
+  unsigned FREE:1;
+  unsigned :1;
+  unsigned CFGS:1;
+  unsigned EEPGD:1;
+} EECON1bits;
+extern volatile near unsigned char       EECON2;
+extern volatile near unsigned char       EEDATA;
+extern volatile near unsigned char       EEADR;
+extern volatile near unsigned char       EEADRH;
+extern volatile near unsigned char       RCSTA;
+extern volatile near union {
+  struct {
+    unsigned RX9D:1;
+    unsigned OERR:1;
+    unsigned FERR:1;
+    unsigned ADEN:1;
+    unsigned CREN:1;
+    unsigned SREN:1;
+    unsigned RX9:1;
+    unsigned SPEN:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned ADDEN:1;
+  };
+} RCSTAbits;
+extern volatile near unsigned char       TXSTA;
+extern volatile near struct {
+  unsigned TX9D:1;
+  unsigned TRMT:1;
+  unsigned BRGH:1;
+  unsigned SENDB:1;
+  unsigned SYNC:1;
+  unsigned TXEN:1;
+  unsigned TX9:1;
+  unsigned CSRC:1;
+} TXSTAbits;
+extern volatile near unsigned char       TXREG;
+extern volatile near unsigned char       RCREG;
+extern volatile near unsigned char       SPBRG;
+extern volatile near unsigned char       SPBRGH;
+extern volatile near unsigned char       T3CON;
+extern volatile near union {
+  struct {
+    unsigned TMR3ON:1;
+    unsigned TMR3CS:1;
+    unsigned T3SYNC:1;
+    unsigned T3CCP1:1;
+    unsigned T3CKPS0:1;
+    unsigned T3CKPS1:1;
+    unsigned T3CCP2:1;
+    unsigned RD16:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned T3NSYNC:1;
+  };
+  struct {
+    unsigned :6;
+    unsigned T3ECCP1:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned NOT_T3SYNC:1;
+  };
+} T3CONbits;
+extern volatile near unsigned char       TMR3L;
+extern volatile near unsigned char       TMR3H;
+extern volatile near unsigned char       CMCON;
+extern volatile near struct {
+  unsigned CM0:1;
+  unsigned CM1:1;
+  unsigned CM2:1;
+  unsigned CIS:1;
+  unsigned C1INV:1;
+  unsigned C2INV:1;
+  unsigned C1OUT:1;
+  unsigned C2OUT:1;
+} CMCONbits;
+extern volatile near unsigned char       CVRCON;
+extern volatile near union {
+  struct {
+    unsigned CVR0:1;
+    unsigned CVR1:1;
+    unsigned CVR2:1;
+    unsigned CVR3:1;
+    unsigned CVREF:1;
+    unsigned CVRR:1;
+    unsigned CVROE:1;
+    unsigned CVREN:1;
+  };
+  struct {
+    unsigned :4;
+    unsigned CVRSS:1;
+  };
+} CVRCONbits;
+extern volatile near unsigned char       ECCP1AS;
+extern volatile near struct {
+  unsigned PSSBD0:1;
+  unsigned PSSBD1:1;
+  unsigned PSSAC0:1;
+  unsigned PSSAC1:1;
+  unsigned ECCPAS0:1;
+  unsigned ECCPAS1:1;
+  unsigned ECCPAS2:1;
+  unsigned ECCPASE:1;
+} ECCP1ASbits;
+extern volatile near unsigned char       ECCP1DEL;
+extern volatile near struct {
+  unsigned PDC0:1;
+  unsigned PDC1:1;
+  unsigned PDC2:1;
+  unsigned PDC3:1;
+  unsigned PDC4:1;
+  unsigned PDC5:1;
+  unsigned PDC6:1;
+  unsigned PRSEN:1;
+} ECCP1DELbits;
+extern volatile near unsigned char       BAUDCON;
+extern volatile near struct {
+  unsigned ABDEN:1;
+  unsigned WUE:1;
+  unsigned :1;
+  unsigned BRG16:1;
+  unsigned SCKP:1;
+  unsigned :1;
+  unsigned RCIDL:1;
+  unsigned ABDOVF:1;
+} BAUDCONbits;
+extern volatile near unsigned char       ECCP1CON;
+extern volatile near struct {
+  unsigned ECCP1M0:1;
+  unsigned ECCP1M1:1;
+  unsigned ECCP1M2:1;
+  unsigned ECCP1M3:1;
+  unsigned EDC1B0:1;
+  unsigned EDC1B1:1;
+  unsigned EPWM1M0:1;
+  unsigned EPWM1M1:1;
+} ECCP1CONbits;
+extern volatile near unsigned            ECCPR1;
+extern volatile near unsigned char       ECCPR1L;
+extern volatile near unsigned char       ECCPR1H;
+extern volatile near unsigned char       CCP1CON;
+extern volatile near struct {
+  unsigned CCP1M0:1;
+  unsigned CCP1M1:1;
+  unsigned CCP1M2:1;
+  unsigned CCP1M3:1;
+  unsigned DC1B0:1;
+  unsigned DC1B1:1;
+} CCP1CONbits;
+extern volatile near unsigned            CCPR1;
+extern volatile near unsigned char       CCPR1L;
+extern volatile near unsigned char       CCPR1H;
+extern volatile near unsigned char       ADCON2;
+extern volatile near struct {
+  unsigned ADCS0:1;
+  unsigned ADCS1:1;
+  unsigned ADCS2:1;
+  unsigned ACQT0:1;
+  unsigned ACQT1:1;
+  unsigned ACQT2:1;
+  unsigned :1;
+  unsigned ADFM:1;
+} ADCON2bits;
+extern volatile near unsigned char       ADCON1;
+extern volatile near struct {
+  unsigned PCFG0:1;
+  unsigned PCFG1:1;
+  unsigned PCFG2:1;
+  unsigned PCFG3:1;
+  unsigned VCFG0:1;
+  unsigned VCFG1:1;
+} ADCON1bits;
+extern volatile near unsigned char       ADCON0;
+extern volatile near union {
+  struct {
+    unsigned ADON:1;
+    unsigned GO_DONE:1;
+    unsigned CHS0:1;
+    unsigned CHS1:1;
+    unsigned CHS2:1;
+    unsigned CHS3:1;
+  };
+  struct {
+    unsigned :1;
+    unsigned DONE:1;
+  };
+  struct {
+    unsigned :1;
+    unsigned GO:1;
+  };
+  struct {
+    unsigned :1;
+    unsigned NOT_DONE:1;
+  };
+} ADCON0bits;
+extern volatile near unsigned            ADRES;
+extern volatile near unsigned char       ADRESL;
+extern volatile near unsigned char       ADRESH;
+extern volatile near unsigned char       SSPCON2;
+extern volatile near struct {
+  unsigned SEN:1;
+  unsigned RSEN:1;
+  unsigned PEN:1;
+  unsigned RCEN:1;
+  unsigned ACKEN:1;
+  unsigned ACKDT:1;
+  unsigned ACKSTAT:1;
+  unsigned GCEN:1;
+} SSPCON2bits;
+extern volatile near unsigned char       SSPCON1;
+extern volatile near struct {
+  unsigned SSPM0:1;
+  unsigned SSPM1:1;
+  unsigned SSPM2:1;
+  unsigned SSPM3:1;
+  unsigned CKP:1;
+  unsigned SSPEN:1;
+  unsigned SSPOV:1;
+  unsigned WCOL:1;
+} SSPCON1bits;
+extern volatile near unsigned char       SSPSTAT;
+extern volatile near union {
+  struct {
+    unsigned BF:1;
+    unsigned UA:1;
+    unsigned R_W:1;
+    unsigned S:1;
+    unsigned P:1;
+    unsigned D_A:1;
+    unsigned CKE:1;
+    unsigned SMP:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned I2C_READ:1;
+    unsigned I2C_START:1;
+    unsigned I2C_STOP:1;
+    unsigned I2C_DAT:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned NOT_W:1;
+    unsigned :2;
+    unsigned NOT_A:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned NOT_WRITE:1;
+    unsigned :2;
+    unsigned NOT_ADDRESS:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned READ_WRITE:1;
+    unsigned :2;
+    unsigned DATA_ADDRESS:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned R:1;
+    unsigned :2;
+    unsigned D:1;
+  };
+} SSPSTATbits;
+extern volatile near unsigned char       SSPADD;
+extern volatile near unsigned char       SSPBUF;
+extern volatile near unsigned char       T2CON;
+extern volatile near struct {
+  unsigned T2CKPS0:1;
+  unsigned T2CKPS1:1;
+  unsigned TMR2ON:1;
+  unsigned T2OUTPS0:1;
+  unsigned T2OUTPS1:1;
+  unsigned T2OUTPS2:1;
+  unsigned T2OUTPS3:1;
+} T2CONbits;
+extern volatile near unsigned char       PR2;
+extern volatile near unsigned char       TMR2;
+extern volatile near unsigned char       T1CON;
+extern volatile near union {
+  struct {
+    unsigned TMR1ON:1;
+    unsigned TMR1CS:1;
+    unsigned T1SYNC:1;
+    unsigned T1OSCEN:1;
+    unsigned T1CKPS0:1;
+    unsigned T1CKPS1:1;
+    unsigned T1RUN:1;
+    unsigned RD16:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned T1INSYNC:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned NOT_T1SYNC:1;
+  };
+} T1CONbits;
+extern volatile near unsigned char       TMR1L;
+extern volatile near unsigned char       TMR1H;
+extern volatile near unsigned char       RCON;
+extern volatile near union {
+  struct {
+    unsigned NOT_BOR:1;
+    unsigned NOT_POR:1;
+    unsigned NOT_PD:1;
+    unsigned NOT_TO:1;
+    unsigned NOT_RI:1;
+    unsigned :1;
+    unsigned SBOREN:1;
+    unsigned IPEN:1;
+  };
+  struct {
+    unsigned BOR:1;
+    unsigned POR:1;
+    unsigned PD:1;
+    unsigned TO:1;
+    unsigned RI:1;
+  };
+} RCONbits;
+extern volatile near unsigned char       WDTCON;
+extern volatile near union {
+  struct {
+    unsigned SWDTEN:1;
+  };
+  struct {
+    unsigned SWDTE:1;
+  };
+} WDTCONbits;
+extern volatile near unsigned char       HLVDCON;
+extern volatile near union {
+  struct {
+    unsigned LVDL0:1;
+    unsigned LVDL1:1;
+    unsigned LVDL2:1;
+    unsigned LVDL3:1;
+    unsigned LVDEN:1;
+    unsigned IRVST:1;
+  };
+  struct {
+    unsigned LVV0:1;
+    unsigned LVV1:1;
+    unsigned LVV2:1;
+    unsigned LVV3:1;
+    unsigned :1;
+    unsigned BGST:1;
+  };
+  struct {
+    unsigned HLVDL0:1;
+    unsigned HLVDL1:1;
+    unsigned HLVDL2:1;
+    unsigned HLVDL3:1;
+    unsigned HLVDEN:1;
+    unsigned :2;
+    unsigned VDIRMAG:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned IVRST:1;
+  };
+} HLVDCONbits;
+extern volatile near unsigned char       LVDCON;
+extern volatile near union {
+  struct {
+    unsigned LVDL0:1;
+    unsigned LVDL1:1;
+    unsigned LVDL2:1;
+    unsigned LVDL3:1;
+    unsigned LVDEN:1;
+    unsigned IRVST:1;
+  };
+  struct {
+    unsigned LVV0:1;
+    unsigned LVV1:1;
+    unsigned LVV2:1;
+    unsigned LVV3:1;
+    unsigned :1;
+    unsigned BGST:1;
+  };
+  struct {
+    unsigned HLVDL0:1;
+    unsigned HLVDL1:1;
+    unsigned HLVDL2:1;
+    unsigned HLVDL3:1;
+    unsigned HLVDEN:1;
+    unsigned :2;
+    unsigned VDIRMAG:1;
+  };
+  struct {
+    unsigned :5;
+    unsigned IVRST:1;
+  };
+} LVDCONbits;
+extern volatile near unsigned char       OSCCON;
+extern volatile near struct {
+  unsigned SCS0:1;
+  unsigned SCS1:1;
+  unsigned IOFS:1;
+  unsigned OSTS:1;
+  unsigned IRCF0:1;
+  unsigned IRCF1:1;
+  unsigned IRCF2:1;
+  unsigned IDLEN:1;
+} OSCCONbits;
+extern volatile near unsigned char       T0CON;
+extern volatile near union {
+  struct {
+    unsigned T0PS0:1;
+    unsigned T0PS1:1;
+    unsigned T0PS2:1;
+    unsigned PSA:1;
+    unsigned T0SE:1;
+    unsigned T0CS:1;
+    unsigned T08BIT:1;
+    unsigned TMR0ON:1;
+  };
+  struct {
+    unsigned :3;
+    unsigned T0PS3:1;
+  };
+} T0CONbits;
+extern volatile near unsigned char       TMR0L;
+extern volatile near unsigned char       TMR0H;
+extern          near unsigned char       STATUS;
+extern          near struct {
+  unsigned C:1;
+  unsigned DC:1;
+  unsigned Z:1;
+  unsigned OV:1;
+  unsigned N:1;
+} STATUSbits;
+extern          near unsigned            FSR2;
+extern          near unsigned char       FSR2L;
+extern          near unsigned char       FSR2H;
+extern volatile near unsigned char       PLUSW2;
+extern volatile near unsigned char       PREINC2;
+extern volatile near unsigned char       POSTDEC2;
+extern volatile near unsigned char       POSTINC2;
+extern          near unsigned char       INDF2;
+extern          near unsigned char       BSR;
+extern          near unsigned            FSR1;
+extern          near unsigned char       FSR1L;
+extern          near unsigned char       FSR1H;
+extern volatile near unsigned char       PLUSW1;
+extern volatile near unsigned char       PREINC1;
+extern volatile near unsigned char       POSTDEC1;
+extern volatile near unsigned char       POSTINC1;
+extern          near unsigned char       INDF1;
+extern          near unsigned char       WREG;
+extern          near unsigned            FSR0;
+extern          near unsigned char       FSR0L;
+extern          near unsigned char       FSR0H;
+extern volatile near unsigned char       PLUSW0;
+extern volatile near unsigned char       PREINC0;
+extern volatile near unsigned char       POSTDEC0;
+extern volatile near unsigned char       POSTINC0;
+extern          near unsigned char       INDF0;
+extern volatile near unsigned char       INTCON3;
+extern volatile near union {
+  struct {
+    unsigned INT1IF:1;
+    unsigned INT2IF:1;
+    unsigned :1;
+    unsigned INT1IE:1;
+    unsigned INT2IE:1;
+    unsigned :1;
+    unsigned INT1IP:1;
+    unsigned INT2IP:1;
+  };
+  struct {
+    unsigned INT1F:1;
+    unsigned INT2F:1;
+    unsigned :1;
+    unsigned INT1E:1;
+    unsigned INT2E:1;
+    unsigned :1;
+    unsigned INT1P:1;
+    unsigned INT2P:1;
+  };
+} INTCON3bits;
+extern volatile near unsigned char       INTCON2;
+extern volatile near union {
+  struct {
+    unsigned RBIP:1;
+    unsigned :1;
+    unsigned TMR0IP:1;
+    unsigned :1;
+    unsigned INTEDG2:1;
+    unsigned INTEDG1:1;
+    unsigned INTEDG0:1;
+    unsigned NOT_RBPU:1;
+  };
+  struct {
+    unsigned :2;
+    unsigned T0IP:1;
+    unsigned :4;
+    unsigned RBPU:1;
+  };
+} INTCON2bits;
+extern volatile near unsigned char       INTCON;
+extern volatile near union {
+  struct {
+    unsigned RBIF:1;
+    unsigned INT0IF:1;
+    unsigned TMR0IF:1;
+    unsigned RBIE:1;
+    unsigned INT0IE:1;
+    unsigned TMR0IE:1;
+    unsigned PEIE:1;
+    unsigned GIE:1;
+  };
+  struct {
+    unsigned :1;
+    unsigned INT0F:1;
+    unsigned T0IF:1;
+    unsigned :1;
+    unsigned INT0E:1;
+    unsigned T0IE:1;
+    unsigned GIEL:1;
+    unsigned GIEH:1;
+  };
+} INTCONbits;
+extern          near unsigned            PROD;
+extern          near unsigned char       PRODL;
+extern          near unsigned char       PRODH;
+extern volatile near unsigned char       TABLAT;
+extern volatile near unsigned short long TBLPTR;
+extern volatile near unsigned char       TBLPTRL;
+extern volatile near unsigned char       TBLPTRH;
+extern volatile near unsigned char       TBLPTRU;
+extern volatile near unsigned short long PC;
+extern volatile near unsigned char       PCL;
+extern volatile near unsigned char       PCLATH;
+extern volatile near unsigned char       PCLATU;
+extern volatile near unsigned char       STKPTR;
+extern volatile near union {
+  struct {
+    unsigned STKPTR0:1;
+    unsigned STKPTR1:1;
+    unsigned STKPTR2:1;
+    unsigned STKPTR3:1;
+    unsigned STKPTR4:1;
+    unsigned :1;
+    unsigned STKUNF:1;
+    unsigned STKOVF:1;
+  };
+  struct {
+    unsigned SP0:1;
+    unsigned SP1:1;
+    unsigned SP2:1;
+    unsigned SP3:1;
+    unsigned SP4:1;
+    unsigned :2;
+    unsigned STKFUL:1;
+  };
+} STKPTRbits;
+extern          near unsigned short long TOS;
+extern          near unsigned char       TOSL;
+extern          near unsigned char       TOSH;
+extern          near unsigned char       TOSU;
+
+#pragma varlocate 13 RXF6SIDH
+#pragma varlocate 13 RXF6SIDHbits
+#pragma varlocate 13 RXF6SIDL
+#pragma varlocate 13 RXF6SIDLbits
+#pragma varlocate 13 RXF6EIDH
+#pragma varlocate 13 RXF6EIDHbits
+#pragma varlocate 13 RXF6EIDL
+#pragma varlocate 13 RXF6EIDLbits
+#pragma varlocate 13 RXF7SIDH
+#pragma varlocate 13 RXF7SIDHbits
+#pragma varlocate 13 RXF7SIDL
+#pragma varlocate 13 RXF7SIDLbits
+#pragma varlocate 13 RXF7EIDH
+#pragma varlocate 13 RXF7EIDHbits
+#pragma varlocate 13 RXF7EIDL
+#pragma varlocate 13 RXF7EIDLbits
+#pragma varlocate 13 RXF8SIDH
+#pragma varlocate 13 RXF8SIDHbits
+#pragma varlocate 13 RXF8SIDL
+#pragma varlocate 13 RXF8SIDLbits
+#pragma varlocate 13 RXF8EIDH
+#pragma varlocate 13 RXF8EIDHbits
+#pragma varlocate 13 RXF8EIDL
+#pragma varlocate 13 RXF8EIDLbits
+#pragma varlocate 13 RXF9SIDH
+#pragma varlocate 13 RXF9SIDHbits
+#pragma varlocate 13 RXF9SIDL
+#pragma varlocate 13 RXF9SIDLbits
+#pragma varlocate 13 RXF9EIDH
+#pragma varlocate 13 RXF9EIDHbits
+#pragma varlocate 13 RXF9EIDL
+#pragma varlocate 13 RXF9EIDLbits
+#pragma varlocate 13 RXF10SIDH
+#pragma varlocate 13 RXF10SIDHbits
+#pragma varlocate 13 RXF10SIDL
+#pragma varlocate 13 RXF10SIDLbits
+#pragma varlocate 13 RXF10EIDH
+#pragma varlocate 13 RXF10EIDHbits
+#pragma varlocate 13 RXF10EIDL
+#pragma varlocate 13 RXF10EIDLbits
+#pragma varlocate 13 RXF11SIDH
+#pragma varlocate 13 RXF11SIDHbits
+#pragma varlocate 13 RXF11SIDL
+#pragma varlocate 13 RXF11SIDLbits
+#pragma varlocate 13 RXF11EIDH
+#pragma varlocate 13 RXF11EIDHbits
+#pragma varlocate 13 RXF11EIDL
+#pragma varlocate 13 RXF11EIDLbits
+#pragma varlocate 13 RXF12SIDH
+#pragma varlocate 13 RXF12SIDHbits
+#pragma varlocate 13 RXF12SIDL
+#pragma varlocate 13 RXF12SIDLbits
+#pragma varlocate 13 RXF12EIDH
+#pragma varlocate 13 RXF12EIDHbits
+#pragma varlocate 13 RXF12EIDL
+#pragma varlocate 13 RXF12EIDLbits
+#pragma varlocate 13 RXF13SIDH
+#pragma varlocate 13 RXF13SIDHbits
+#pragma varlocate 13 RXF13SIDL
+#pragma varlocate 13 RXF13SIDLbits
+#pragma varlocate 13 RXF13EIDH
+#pragma varlocate 13 RXF13EIDHbits
+#pragma varlocate 13 RXF13EIDL
+#pragma varlocate 13 RXF13EIDLbits
+#pragma varlocate 13 RXF14SIDH
+#pragma varlocate 13 RXF14SIDHbits
+#pragma varlocate 13 RXF14SIDL
+#pragma varlocate 13 RXF14SIDLbits
+#pragma varlocate 13 RXF14EIDH
+#pragma varlocate 13 RXF14EIDHbits
+#pragma varlocate 13 RXF14EIDL
+#pragma varlocate 13 RXF14EIDLbits
+#pragma varlocate 13 RXF15SIDH
+#pragma varlocate 13 RXF15SIDHbits
+#pragma varlocate 13 RXF15SIDL
+#pragma varlocate 13 RXF15SIDLbits
+#pragma varlocate 13 RXF15EIDH
+#pragma varlocate 13 RXF15EIDHbits
+#pragma varlocate 13 RXF15EIDL
+#pragma varlocate 13 RXF15EIDLbits
+#pragma varlocate 13 RXFCON0
+#pragma varlocate 13 RXFCON0bits
+#pragma varlocate 13 RXFCON1
+#pragma varlocate 13 RXFCON1bits
+#pragma varlocate 13 SDFLC
+#pragma varlocate 13 SDFLCbits
+#pragma varlocate 13 RXFBCON0
+#pragma varlocate 13 RXFBCON0bits
+#pragma varlocate 13 RXFBCON1
+#pragma varlocate 13 RXFBCON1bits
+#pragma varlocate 13 RXFBCON2
+#pragma varlocate 13 RXFBCON2bits
+#pragma varlocate 13 RXFBCON3
+#pragma varlocate 13 RXFBCON3bits
+#pragma varlocate 13 RXFBCON4
+#pragma varlocate 13 RXFBCON4bits
+#pragma varlocate 13 RXFBCON5
+#pragma varlocate 13 RXFBCON5bits
+#pragma varlocate 13 RXFBCON6
+#pragma varlocate 13 RXFBCON6bits
+#pragma varlocate 13 RXFBCON7
+#pragma varlocate 13 RXFBCON7bits
+#pragma varlocate 13 MSEL0
+#pragma varlocate 13 MSEL0bits
+#pragma varlocate 13 MSEL1
+#pragma varlocate 13 MSEL1bits
+#pragma varlocate 13 MSEL2
+#pragma varlocate 13 MSEL2bits
+#pragma varlocate 13 MSEL3
+#pragma varlocate 13 MSEL3bits
+#pragma varlocate 13 BSEL0
+#pragma varlocate 13 BSEL0bits
+#pragma varlocate 13 BIE0
+#pragma varlocate 13 BIE0bits
+#pragma varlocate 13 TXBIE
+#pragma varlocate 13 TXBIEbits
+#pragma varlocate 14 B0CON
+#pragma varlocate 14 B0CONbits
+#pragma varlocate 14 B0SIDH
+#pragma varlocate 14 B0SIDHbits
+#pragma varlocate 14 B0SIDL
+#pragma varlocate 14 B0SIDLbits
+#pragma varlocate 14 B0EIDH
+#pragma varlocate 14 B0EIDHbits
+#pragma varlocate 14 B0EIDL
+#pragma varlocate 14 B0EIDLbits
+#pragma varlocate 14 B0DLC
+#pragma varlocate 14 B0DLCbits
+#pragma varlocate 14 B0D0
+#pragma varlocate 14 B0D0bits
+#pragma varlocate 14 B0D1
+#pragma varlocate 14 B0D1bits
+#pragma varlocate 14 B0D2
+#pragma varlocate 14 B0D2bits
+#pragma varlocate 14 B0D3
+#pragma varlocate 14 B0D3bits
+#pragma varlocate 14 B0D4
+#pragma varlocate 14 B0D4bits
+#pragma varlocate 14 B0D5
+#pragma varlocate 14 B0D5bits
+#pragma varlocate 14 B0D6
+#pragma varlocate 14 B0D6bits
+#pragma varlocate 14 B0D7
+#pragma varlocate 14 B0D7bits
+#pragma varlocate 14 CANSTAT_RO9
+#pragma varlocate 14 CANSTAT_RO9bits
+#pragma varlocate 14 CANCON_RO9
+#pragma varlocate 14 CANCON_RO9bits
+#pragma varlocate 14 B1CON
+#pragma varlocate 14 B1CONbits
+#pragma varlocate 14 B1SIDH
+#pragma varlocate 14 B1SIDHbits
+#pragma varlocate 14 B1SIDL
+#pragma varlocate 14 B1SIDLbits
+#pragma varlocate 14 B1EIDH
+#pragma varlocate 14 B1EIDHbits
+#pragma varlocate 14 B1EIDL
+#pragma varlocate 14 B1EIDLbits
+#pragma varlocate 14 B1DLC
+#pragma varlocate 14 B1DLCbits
+#pragma varlocate 14 B1D0
+#pragma varlocate 14 B1D0bits
+#pragma varlocate 14 B1D1
+#pragma varlocate 14 B1D1bits
+#pragma varlocate 14 B1D2
+#pragma varlocate 14 B1D2bits
+#pragma varlocate 14 B1D3
+#pragma varlocate 14 B1D3bits
+#pragma varlocate 14 B1D4
+#pragma varlocate 14 B1D4bits
+#pragma varlocate 14 B1D5
+#pragma varlocate 14 B1D5bits
+#pragma varlocate 14 B1D6
+#pragma varlocate 14 B1D6bits
+#pragma varlocate 14 B1D7
+#pragma varlocate 14 B1D7bits
+#pragma varlocate 14 CANSTAT_RO8
+#pragma varlocate 14 CANSTAT_RO8bits
+#pragma varlocate 14 CANCON_RO8
+#pragma varlocate 14 CANCON_RO8bits
+#pragma varlocate 14 B2CON
+#pragma varlocate 14 B2CONbits
+#pragma varlocate 14 B2SIDH
+#pragma varlocate 14 B2SIDHbits
+#pragma varlocate 14 B2SIDL
+#pragma varlocate 14 B2SIDLbits
+#pragma varlocate 14 B2EIDH
+#pragma varlocate 14 B2EIDHbits
+#pragma varlocate 14 B2EIDL
+#pragma varlocate 14 B2EIDLbits
+#pragma varlocate 14 B2DLC
+#pragma varlocate 14 B2DLCbits
+#pragma varlocate 14 B2D0
+#pragma varlocate 14 B2D0bits
+#pragma varlocate 14 B2D1
+#pragma varlocate 14 B2D1bits
+#pragma varlocate 14 B2D2
+#pragma varlocate 14 B2D2bits
+#pragma varlocate 14 B2D3
+#pragma varlocate 14 B2D3bits
+#pragma varlocate 14 B2D4
+#pragma varlocate 14 B2D4bits
+#pragma varlocate 14 B2D5
+#pragma varlocate 14 B2D5bits
+#pragma varlocate 14 B2D6
+#pragma varlocate 14 B2D6bits
+#pragma varlocate 14 B2D7
+#pragma varlocate 14 B2D7bits
+#pragma varlocate 14 CANSTAT_RO7
+#pragma varlocate 14 CANSTAT_RO7bits
+#pragma varlocate 14 CANCON_RO7
+#pragma varlocate 14 CANCON_RO7bits
+#pragma varlocate 14 B3CON
+#pragma varlocate 14 B3CONbits
+#pragma varlocate 14 B3SIDH
+#pragma varlocate 14 B3SIDHbits
+#pragma varlocate 14 B3SIDL
+#pragma varlocate 14 B3SIDLbits
+#pragma varlocate 14 B3EIDH
+#pragma varlocate 14 B3EIDHbits
+#pragma varlocate 14 B3EIDL
+#pragma varlocate 14 B3EIDLbits
+#pragma varlocate 14 B3DLC
+#pragma varlocate 14 B3DLCbits
+#pragma varlocate 14 B3D0
+#pragma varlocate 14 B3D0bits
+#pragma varlocate 14 B3D1
+#pragma varlocate 14 B3D1bits
+#pragma varlocate 14 B3D2
+#pragma varlocate 14 B3D2bits
+#pragma varlocate 14 B3D3
+#pragma varlocate 14 B3D3bits
+#pragma varlocate 14 B3D4
+#pragma varlocate 14 B3D4bits
+#pragma varlocate 14 B3D5
+#pragma varlocate 14 B3D5bits
+#pragma varlocate 14 B3D6
+#pragma varlocate 14 B3D6bits
+#pragma varlocate 14 B3D7
+#pragma varlocate 14 B3D7bits
+#pragma varlocate 14 CANSTAT_RO6
+#pragma varlocate 14 CANSTAT_RO6bits
+#pragma varlocate 14 CANCON_RO6
+#pragma varlocate 14 CANCON_RO6bits
+#pragma varlocate 14 B4CON
+#pragma varlocate 14 B4CONbits
+#pragma varlocate 14 B4SIDH
+#pragma varlocate 14 B4SIDHbits
+#pragma varlocate 14 B4SIDL
+#pragma varlocate 14 B4SIDLbits
+#pragma varlocate 14 B4EIDH
+#pragma varlocate 14 B4EIDHbits
+#pragma varlocate 14 B4EIDL
+#pragma varlocate 14 B4EIDLbits
+#pragma varlocate 14 B4DLC
+#pragma varlocate 14 B4DLCbits
+#pragma varlocate 14 B4D0
+#pragma varlocate 14 B4D0bits
+#pragma varlocate 14 B4D1
+#pragma varlocate 14 B4D1bits
+#pragma varlocate 14 B4D2
+#pragma varlocate 14 B4D2bits
+#pragma varlocate 14 B4D3
+#pragma varlocate 14 B4D3bits
+#pragma varlocate 14 B4D4
+#pragma varlocate 14 B4D4bits
+#pragma varlocate 14 B4D5
+#pragma varlocate 14 B4D5bits
+#pragma varlocate 14 B4D6
+#pragma varlocate 14 B4D6bits
+#pragma varlocate 14 B4D7
+#pragma varlocate 14 B4D7bits
+#pragma varlocate 14 CANSTAT_RO5
+#pragma varlocate 14 CANSTAT_RO5bits
+#pragma varlocate 14 CANCON_RO5
+#pragma varlocate 14 CANCON_RO5bits
+#pragma varlocate 14 B5CON
+#pragma varlocate 14 B5CONbits
+#pragma varlocate 14 B5SIDH
+#pragma varlocate 14 B5SIDHbits
+#pragma varlocate 14 B5SIDL
+#pragma varlocate 14 B5SIDLbits
+#pragma varlocate 14 B5EIDH
+#pragma varlocate 14 B5EIDHbits
+#pragma varlocate 14 B5EIDL
+#pragma varlocate 14 B5EIDLbits
+#pragma varlocate 14 B5DLC
+#pragma varlocate 14 B5DLCbits
+#pragma varlocate 14 B5D0
+#pragma varlocate 14 B5D0bits
+#pragma varlocate 14 B5D1
+#pragma varlocate 14 B5D1bits
+#pragma varlocate 14 B5D2
+#pragma varlocate 14 B5D2bits
+#pragma varlocate 14 B5D3
+#pragma varlocate 14 B5D3bits
+#pragma varlocate 14 B5D4
+#pragma varlocate 14 B5D4bits
+#pragma varlocate 14 B5D5
+#pragma varlocate 14 B5D5bits
+#pragma varlocate 14 B5D6
+#pragma varlocate 14 B5D6bits
+#pragma varlocate 14 B5D7
+#pragma varlocate 14 B5D7bits
+#pragma varlocate 14 CANSTAT_RO4
+#pragma varlocate 14 CANSTAT_RO4bits
+#pragma varlocate 14 CANCON_RO4
+#pragma varlocate 14 CANCON_RO4bits
+#pragma varlocate 15 RXF0SIDH
+#pragma varlocate 15 RXF0SIDHbits
+#pragma varlocate 15 RXF0SIDL
+#pragma varlocate 15 RXF0SIDLbits
+#pragma varlocate 15 RXF0EIDH
+#pragma varlocate 15 RXF0EIDHbits
+#pragma varlocate 15 RXF0EIDL
+#pragma varlocate 15 RXF0EIDLbits
+#pragma varlocate 15 RXF1SIDH
+#pragma varlocate 15 RXF1SIDHbits
+#pragma varlocate 15 RXF1SIDL
+#pragma varlocate 15 RXF1SIDLbits
+#pragma varlocate 15 RXF1EIDH
+#pragma varlocate 15 RXF1EIDHbits
+#pragma varlocate 15 RXF1EIDL
+#pragma varlocate 15 RXF1EIDLbits
+#pragma varlocate 15 RXF2SIDH
+#pragma varlocate 15 RXF2SIDHbits
+#pragma varlocate 15 RXF2SIDL
+#pragma varlocate 15 RXF2SIDLbits
+#pragma varlocate 15 RXF2EIDH
+#pragma varlocate 15 RXF2EIDHbits
+#pragma varlocate 15 RXF2EIDL
+#pragma varlocate 15 RXF2EIDLbits
+#pragma varlocate 15 RXF3SIDH
+#pragma varlocate 15 RXF3SIDHbits
+#pragma varlocate 15 RXF3SIDL
+#pragma varlocate 15 RXF3SIDLbits
+#pragma varlocate 15 RXF3EIDH
+#pragma varlocate 15 RXF3EIDHbits
+#pragma varlocate 15 RXF3EIDL
+#pragma varlocate 15 RXF3EIDLbits
+#pragma varlocate 15 RXF4SIDH
+#pragma varlocate 15 RXF4SIDHbits
+#pragma varlocate 15 RXF4SIDL
+#pragma varlocate 15 RXF4SIDLbits
+#pragma varlocate 15 RXF4EIDH
+#pragma varlocate 15 RXF4EIDHbits
+#pragma varlocate 15 RXF4EIDL
+#pragma varlocate 15 RXF4EIDLbits
+#pragma varlocate 15 RXF5SIDH
+#pragma varlocate 15 RXF5SIDHbits
+#pragma varlocate 15 RXF5SIDL
+#pragma varlocate 15 RXF5SIDLbits
+#pragma varlocate 15 RXF5EIDH
+#pragma varlocate 15 RXF5EIDHbits
+#pragma varlocate 15 RXF5EIDL
+#pragma varlocate 15 RXF5EIDLbits
+#pragma varlocate 15 RXM0SIDH
+#pragma varlocate 15 RXM0SIDHbits
+#pragma varlocate 15 RXM0SIDL
+#pragma varlocate 15 RXM0SIDLbits
+#pragma varlocate 15 RXM0EIDH
+#pragma varlocate 15 RXM0EIDHbits
+#pragma varlocate 15 RXM0EIDL
+#pragma varlocate 15 RXM0EIDLbits
+#pragma varlocate 15 RXM1SIDH
+#pragma varlocate 15 RXM1SIDHbits
+#pragma varlocate 15 RXM1SIDL
+#pragma varlocate 15 RXM1SIDLbits
+#pragma varlocate 15 RXM1EIDH
+#pragma varlocate 15 RXM1EIDHbits
+#pragma varlocate 15 RXM1EIDL
+#pragma varlocate 15 RXM1EIDLbits
+#pragma varlocate 15 TXB2CON
+#pragma varlocate 15 TXB2CONbits
+#pragma varlocate 15 TXB2SIDH
+#pragma varlocate 15 TXB2SIDHbits
+#pragma varlocate 15 TXB2SIDL
+#pragma varlocate 15 TXB2SIDLbits
+#pragma varlocate 15 TXB2EIDH
+#pragma varlocate 15 TXB2EIDHbits
+#pragma varlocate 15 TXB2EIDL
+#pragma varlocate 15 TXB2EIDLbits
+#pragma varlocate 15 TXB2DLC
+#pragma varlocate 15 TXB2DLCbits
+#pragma varlocate 15 TXB2D0
+#pragma varlocate 15 TXB2D0bits
+#pragma varlocate 15 TXB2D1
+#pragma varlocate 15 TXB2D1bits
+#pragma varlocate 15 TXB2D2
+#pragma varlocate 15 TXB2D2bits
+#pragma varlocate 15 TXB2D3
+#pragma varlocate 15 TXB2D3bits
+#pragma varlocate 15 TXB2D4
+#pragma varlocate 15 TXB2D4bits
+#pragma varlocate 15 TXB2D5
+#pragma varlocate 15 TXB2D5bits
+#pragma varlocate 15 TXB2D6
+#pragma varlocate 15 TXB2D6bits
+#pragma varlocate 15 TXB2D7
+#pragma varlocate 15 TXB2D7bits
+#pragma varlocate 15 CANSTAT_RO3
+#pragma varlocate 15 CANSTAT_RO3bits
+#pragma varlocate 15 CANCON_RO3
+#pragma varlocate 15 CANCON_RO3bits
+#pragma varlocate 15 TXB1CON
+#pragma varlocate 15 TXB1CONbits
+#pragma varlocate 15 TXB1SIDH
+#pragma varlocate 15 TXB1SIDHbits
+#pragma varlocate 15 TXB1SIDL
+#pragma varlocate 15 TXB1SIDLbits
+#pragma varlocate 15 TXB1EIDH
+#pragma varlocate 15 TXB1EIDHbits
+#pragma varlocate 15 TXB1EIDL
+#pragma varlocate 15 TXB1EIDLbits
+#pragma varlocate 15 TXB1DLC
+#pragma varlocate 15 TXB1DLCbits
+#pragma varlocate 15 TXB1D0
+#pragma varlocate 15 TXB1D0bits
+#pragma varlocate 15 TXB1D1
+#pragma varlocate 15 TXB1D1bits
+#pragma varlocate 15 TXB1D2
+#pragma varlocate 15 TXB1D2bits
+#pragma varlocate 15 TXB1D3
+#pragma varlocate 15 TXB1D3bits
+#pragma varlocate 15 TXB1D4
+#pragma varlocate 15 TXB1D4bits
+#pragma varlocate 15 TXB1D5
+#pragma varlocate 15 TXB1D5bits
+#pragma varlocate 15 TXB1D6
+#pragma varlocate 15 TXB1D6bits
+#pragma varlocate 15 TXB1D7
+#pragma varlocate 15 TXB1D7bits
+#pragma varlocate 15 CANSTAT_RO2
+#pragma varlocate 15 CANSTAT_RO2bits
+#pragma varlocate 15 CANCON_RO2
+#pragma varlocate 15 CANCON_RO2bits
+#pragma varlocate 15 TXB0CON
+#pragma varlocate 15 TXB0CONbits
+#pragma varlocate 15 TXB0SIDH
+#pragma varlocate 15 TXB0SIDHbits
+#pragma varlocate 15 TXB0SIDL
+#pragma varlocate 15 TXB0SIDLbits
+#pragma varlocate 15 TXB0EIDH
+#pragma varlocate 15 TXB0EIDHbits
+#pragma varlocate 15 TXB0EIDL
+#pragma varlocate 15 TXB0EIDLbits
+#pragma varlocate 15 TXB0DLC
+#pragma varlocate 15 TXB0DLCbits
+#pragma varlocate 15 TXB0D0
+#pragma varlocate 15 TXB0D0bits
+#pragma varlocate 15 TXB0D1
+#pragma varlocate 15 TXB0D1bits
+#pragma varlocate 15 TXB0D2
+#pragma varlocate 15 TXB0D2bits
+#pragma varlocate 15 TXB0D3
+#pragma varlocate 15 TXB0D3bits
+#pragma varlocate 15 TXB0D4
+#pragma varlocate 15 TXB0D4bits
+#pragma varlocate 15 TXB0D5
+#pragma varlocate 15 TXB0D5bits
+#pragma varlocate 15 TXB0D6
+#pragma varlocate 15 TXB0D6bits
+#pragma varlocate 15 TXB0D7
+#pragma varlocate 15 TXB0D7bits
+#pragma varlocate 15 CANSTAT_RO1
+#pragma varlocate 15 CANSTAT_RO1bits
+#pragma varlocate 15 CANCON_RO1
+#pragma varlocate 15 CANCON_RO1bits
+#pragma varlocate 15 RXB1CON
+#pragma varlocate 15 RXB1CONbits
+#pragma varlocate 15 RXB1SIDH
+#pragma varlocate 15 RXB1SIDHbits
+#pragma varlocate 15 RXB1SIDL
+#pragma varlocate 15 RXB1SIDLbits
+#pragma varlocate 15 RXB1EIDH
+#pragma varlocate 15 RXB1EIDHbits
+#pragma varlocate 15 RXB1EIDL
+#pragma varlocate 15 RXB1EIDLbits
+#pragma varlocate 15 RXB1DLC
+#pragma varlocate 15 RXB1DLCbits
+#pragma varlocate 15 RXB1D0
+#pragma varlocate 15 RXB1D0bits
+#pragma varlocate 15 RXB1D1
+#pragma varlocate 15 RXB1D1bits
+#pragma varlocate 15 RXB1D2
+#pragma varlocate 15 RXB1D2bits
+#pragma varlocate 15 RXB1D3
+#pragma varlocate 15 RXB1D3bits
+#pragma varlocate 15 RXB1D4
+#pragma varlocate 15 RXB1D4bits
+#pragma varlocate 15 RXB1D5
+#pragma varlocate 15 RXB1D5bits
+#pragma varlocate 15 RXB1D6
+#pragma varlocate 15 RXB1D6bits
+#pragma varlocate 15 RXB1D7
+#pragma varlocate 15 RXB1D7bits
+#pragma varlocate 15 CANSTAT_RO0
+#pragma varlocate 15 CANSTAT_RO0bits
+#pragma varlocate 15 CANCON_RO0
+#pragma varlocate 15 CANCON_RO0bits
+
+
+#line 4978 "C:/MCC18/h/p18f4685.h"
+ 
+#line 4980 "C:/MCC18/h/p18f4685.h"
+#line 4981 "C:/MCC18/h/p18f4685.h"
+
+
+#line 4984 "C:/MCC18/h/p18f4685.h"
+ 
+#line 4986 "C:/MCC18/h/p18f4685.h"
+#line 4987 "C:/MCC18/h/p18f4685.h"
+#line 4988 "C:/MCC18/h/p18f4685.h"
+#line 4989 "C:/MCC18/h/p18f4685.h"
+
+#line 4991 "C:/MCC18/h/p18f4685.h"
+#line 4992 "C:/MCC18/h/p18f4685.h"
+#line 4993 "C:/MCC18/h/p18f4685.h"
+#line 4994 "C:/MCC18/h/p18f4685.h"
+#line 4995 "C:/MCC18/h/p18f4685.h"
+
+
+#line 4999 "C:/MCC18/h/p18f4685.h"
+ 
+#line 5001 "C:/MCC18/h/p18f4685.h"
+
+
+#line 5004 "C:/MCC18/h/p18f4685.h"
+#line 80 "p2_deco_main - 090915b.c"
+
+#line 1 "C:/MCC18/h/math.h"
+ 
+
+#line 4 "C:/MCC18/h/math.h"
+
+typedef float float_t;
+typedef float double_t;
+
+#line 9 "C:/MCC18/h/math.h"
+#line 10 "C:/MCC18/h/math.h"
+#line 11 "C:/MCC18/h/math.h"
+
+float fabs (auto float x);
+float ldexp (auto float x, auto int n);
+float exp (auto float f);
+float sqrt (auto float x);
+float asin (auto float x);
+float acos (auto float x);
+float atan2 (auto float y, auto float x);
+float atan (auto float x);
+float sin (auto float x);
+float cos (auto float x);
+float tan (auto float x);
+float sinh (auto float x);
+float cosh (auto float x);
+float tanh (auto float x);
+float frexp (auto float x, auto int *pexp);
+float log10 (auto float x);
+float log (auto float x);
+float pow (auto float x, auto float y);
+float ceil (auto float x);
+float floor (auto float x);
+float modf (auto float x, auto float *ipart);
+float fmod (auto float x, auto float y);
+
+float mchptoieee (auto unsigned long v);
+unsigned long ieeetomchp (auto float v);
+
+#line 39 "C:/MCC18/h/math.h"
+#line 81 "p2_deco_main - 090915b.c"
+
+
+
+
+
+
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+
+
+
+
+#line 107 "p2_deco_main - 090915b.c"
+#line 108 "p2_deco_main - 090915b.c"
+#line 109 "p2_deco_main - 090915b.c"
+
+
+#line 112 "p2_deco_main - 090915b.c"
+#line 113 "p2_deco_main - 090915b.c"
+#line 114 "p2_deco_main - 090915b.c"
+#line 115 "p2_deco_main - 090915b.c"
+
+#line 117 "p2_deco_main - 090915b.c"
+#line 118 "p2_deco_main - 090915b.c"
+#line 119 "p2_deco_main - 090915b.c"
+#line 120 "p2_deco_main - 090915b.c"
+
+#line 122 "p2_deco_main - 090915b.c"
+#line 123 "p2_deco_main - 090915b.c"
+#line 124 "p2_deco_main - 090915b.c"
+#line 125 "p2_deco_main - 090915b.c"
+
+#line 127 "p2_deco_main - 090915b.c"
+#line 128 "p2_deco_main - 090915b.c"
+#line 129 "p2_deco_main - 090915b.c"
+#line 130 "p2_deco_main - 090915b.c"
+
+
+#line 133 "p2_deco_main - 090915b.c"
+#line 134 "p2_deco_main - 090915b.c"
+#line 135 "p2_deco_main - 090915b.c"
+#line 136 "p2_deco_main - 090915b.c"
+
+#line 138 "p2_deco_main - 090915b.c"
+#line 139 "p2_deco_main - 090915b.c"
+#line 140 "p2_deco_main - 090915b.c"
+#line 141 "p2_deco_main - 090915b.c"
+
+#line 143 "p2_deco_main - 090915b.c"
+#line 144 "p2_deco_main - 090915b.c"
+#line 145 "p2_deco_main - 090915b.c"
+#line 146 "p2_deco_main - 090915b.c"
+
+#line 148 "p2_deco_main - 090915b.c"
+#line 149 "p2_deco_main - 090915b.c"
+#line 150 "p2_deco_main - 090915b.c"
+#line 151 "p2_deco_main - 090915b.c"
+
+
+#line 154 "p2_deco_main - 090915b.c"
+#line 155 "p2_deco_main - 090915b.c"
+#line 156 "p2_deco_main - 090915b.c"
+#line 157 "p2_deco_main - 090915b.c"
+
+#line 159 "p2_deco_main - 090915b.c"
+#line 160 "p2_deco_main - 090915b.c"
+#line 161 "p2_deco_main - 090915b.c"
+#line 162 "p2_deco_main - 090915b.c"
+
+#line 164 "p2_deco_main - 090915b.c"
+#line 165 "p2_deco_main - 090915b.c"
+#line 166 "p2_deco_main - 090915b.c"
+#line 167 "p2_deco_main - 090915b.c"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#line 189 "p2_deco_main - 090915b.c"
+#line 190 "p2_deco_main - 090915b.c"
+#line 191 "p2_deco_main - 090915b.c"
+
+#line 193 "p2_deco_main - 090915b.c"
+#line 194 "p2_deco_main - 090915b.c"
+
+#line 196 "p2_deco_main - 090915b.c"
+#line 197 "p2_deco_main - 090915b.c"
+
+
+#pragma udata bank0a=0x060
+volatile unsigned char wp_stringstore[26];
+volatile unsigned char  wp_color1;
+volatile unsigned char  wp_color2;
+volatile unsigned char  wp_top;
+volatile unsigned char  wp_leftx2;
+volatile unsigned char  wp_font;
+volatile unsigned char  wp_invert;
+volatile unsigned char  wp_temp_U8;
+
+#pragma udata bank0b=0x081
+volatile unsigned char  wp_txtptr;
+volatile unsigned char wp_char;
+volatile unsigned char 	wp_command;
+volatile unsigned int 	wp_data_16bit;
+volatile unsigned char 	wp_data_8bit_one;
+volatile unsigned char 	wp_data_8bit_two;
+volatile unsigned int 	wp_start;
+volatile unsigned int 	wp_end;
+volatile unsigned int 	wp_i;
+volatile unsigned char  	wp_black;
+
+volatile unsigned char 	wp_debug_U8;
+
+
+#pragma udata bank0c=0x0D0
+#line 226 "p2_deco_main - 090915b.c"
+volatile unsigned char keep_free_bank0[48 ];
+
+
+#pragma udata bank1=0x100
+#line 231 "p2_deco_main - 090915b.c"
+volatile unsigned char keep_free_bank1[256 ]; 
+
+ #pragma udata bank2a=0x200
+
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						
+ static unsigned int	int_O_GF_step;							
+ static unsigned int 	int_O_gtissue_limit;					
+ static unsigned int 	int_O_gtissue_press;					
+ static unsigned int 	int_O_limit_GF_low;						
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			
+
+
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					
+ static unsigned char	char_O_actual_pointer;					
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			
+
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+
+#pragma udata bank4a=0x400
+
+ unsigned char			ci ; 
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						
+
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+
+
+ static unsigned int	int_I_pres_respiration;				
+ static unsigned int	int_I_pres_surface;					
+ static unsigned int	int_I_temp;							
+ static unsigned char	char_I_temp;						
+ static unsigned char	char_I_actual_ppO2;					
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					
+ static unsigned char	char_I_He_ratio;					
+ static unsigned char	char_I_saturation_multiplier;		
+ static unsigned char	char_I_desaturation_multiplier; 	
+ static unsigned char	char_I_GF_High_percentage;			
+ static unsigned char	char_I_GF_Low_percentage;			
+ static unsigned char	char_I_spare;					
+ static unsigned char	char_I_deco_distance;				
+ static unsigned char	char_I_const_ppO2;					
+ static unsigned char	char_I_deco_ppO2_change;			
+ static unsigned char	char_I_deco_ppO2;					
+ static unsigned char	char_I_deco_gas_change;				
+ static unsigned char	char_I_deco_N2_ratio;				
+ static unsigned char	char_I_deco_He_ratio;				
+ static unsigned char	char_I_depth_last_deco;				
+ static unsigned char	char_I_deco_model;					
+
+ static unsigned int	int_O_desaturation_time;			
+ static unsigned char	char_O_nullzeit;					
+ static unsigned char	char_O_deco_status;					
+ static unsigned char	char_O_array_decotime[7];			
+ static unsigned char	char_O_array_decodepth[6];			
+ static unsigned char	char_O_ascenttime;					
+ static unsigned char	char_O_gradient_factor;				
+ static unsigned char	char_O_tissue_saturation[32];		
+ static unsigned char	char_O_array_gradient_weighted[16];	
+ static unsigned char	char_O_gtissue_no;					
+ static unsigned char	char_O_diluent;						
+ static unsigned char	char_O_CNS_fraction;				
+ static unsigned char	char_O_relative_gradient_GF;		
+
+
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						
+ static float			deco_diluent;						
+ static float			const_ppO2;							
+ static float			deco_ppO2_change;					
+ static float			deco_ppO2;							
+
+ #pragma udata bank6=0x600
+
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ 
+ 
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+
+ static char			md_state[48];		
+ #pragma udata bank9b=0x930
+
+ static unsigned int	int_O_DBS_bitfield;					
+ static unsigned int	int_O_DBS2_bitfield;				
+ static unsigned int	int_O_DBG_pre_bitfield;				
+ static unsigned int	int_O_DBG_post_bitfield;			
+ static char			char_O_NDL_at_20mtr;				
+
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						
+ static float			deco_He_ratio;						
+ static float			calc_N2_ratio;						
+ static float			calc_He_ratio;						
+ static float			deco_gas_change;					
+ static float			CNS_fraction;						
+ static float			float_saturation_multiplier;		
+ static float			float_desaturation_multiplier;		
+ static float			float_deco_distance;				
+
+ static unsigned char	DBG_char_I_deco_model;				
+ static unsigned char	DBG_char_I_depth_last_deco;			
+ static float			DBG_pres_surface;					
+ static float			DBG_GF_low;							
+ static float			DBG_GF_high;						
+ static float			DBG_const_ppO2;						
+ static float			DBG_deco_ppO2_change;				
+ static float			DBG_deco_ppO2;						
+ static float			DBG_deco_N2_ratio;					
+ static float			DBG_deco_He_ratio;					
+ static float			DBG_deco_gas_change;				
+ static float			DBG_float_saturation_multiplier;	
+ static float			DBG_float_desaturation_multiplier;	
+ static float			DBG_float_deco_distance;			
+ static float			DBG_deco_N2_ratio;					
+ static float			DBG_deco_He_ratio;					
+ static float			DBG_N2_ratio;						
+ static float			DBG_He_ratio;						
+ static char			flag_in_divemode;					
+ static	int 			int_dbg_i;							
+ unsigned int 			temp_DBS;
+
+
+
+
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+void wordprocessor(void);
+
+
+
+
+
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+
+
+
+
+
+#pragma code main = 0x9000
+void main(void)
+{
+	for(wp_temp_U8=0;wp_temp_U8<48  - 1;wp_temp_U8++)
+		keep_free_bank0[wp_temp_U8] = 7;
+	keep_free_bank0[48  - 1] = 7;
+
+	for(wp_temp_U8=0;wp_temp_U8<256  - 1;wp_temp_U8++)
+		keep_free_bank1[wp_temp_U8] = 7;
+	keep_free_bank1[256  - 1] = 7;
+
+#line 520 "p2_deco_main - 090915b.c"
+
+
+wp_top = 10;
+wp_leftx2 = 10;
+wp_color1 = 255;
+wp_color2 = 255;
+wp_font   = 0;
+wp_invert = 0;
+wp_stringstore[0] = ' ';
+wp_stringstore[1] = '!';
+wp_stringstore[2] = '"';
+wp_stringstore[3] = ':';
+wp_stringstore[4] = 0;
+wordprocessor();
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+
+
+
+
+
+
+
+
+
+int_I_pres_respiration = 1000;
+int_I_pres_surface = 1000;
+char_I_N2_ratio = 39; 
+char_I_He_ratio = 40; 
+char_I_deco_distance = 0; 
+char_I_depth_last_deco = 3;	
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; 
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; 
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+
+char_I_GF_High_percentage = 100;			
+char_I_GF_Low_percentage = 100;			
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+
+#line 587 "p2_deco_main - 090915b.c"
+ 
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} 
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		
+			{
+				char_O_deco_status = 2;
+
+			}
+ 			else
+			{
+
+				calc_hauptroutine_calc_deco();
+			}
+
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+
+			calc_hauptroutine_calc_deco();
+
+_asm
+nop
+_endasm
+};
+debug_temp = 60; 
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} 
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		
+			{
+				char_O_deco_status = 2;
+
+			}
+ 			else
+			{
+
+				calc_hauptroutine_calc_deco();
+			}
+
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+
+			calc_hauptroutine_calc_deco();
+
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; 
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} 
+_asm
+nop
+_endasm
+#line 709 "p2_deco_main - 090915b.c"
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma romdata font_data_small = 0x0A0C4
+rom const rom unsigned int  wp_small_data[] =
+{
+#line 1 "./ostc28.drx.txt"
+0xF803
+,0x8A01
+,0x850C
+,0x8202
+,0x850A
+,0x8302
+,0xFF94
+,0xCD00
+,0x9105
+,0x9103
+,0xC701
+,0x9105
+,0x9103
+,0xDA9D
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x0688
+,0x0D87
+,0x0781
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0182
+,0x0786
+,0x0D89
+,0x0583
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x00A2
+,0xB402
+,0x8601
+,0x8A04
+,0x8601
+,0x8801
+,0x8102
+,0x8501
+,0x8800
+,0x8301
+,0x8600
+,0x8702
+,0x8202
+,0x8501
+,0x8512
+,0x8501
+,0x8402
+,0x8401
+,0x8700
+,0x8501
+,0x8301
+,0x8801
+,0x8402
+,0x8201
+,0x8901
+,0x8405
+,0x9203
+,0x9F9A
+,0x0392
+,0x0588
+,0x0185
+,0x0183
+,0x0185
+,0x0286
+,0x0183
+,0x0084
+,0x0289
+,0x0582
+,0x038B
+,0x0382
+,0x0292
+,0x0282
+,0x028C
+,0x0283
+,0x0489
+,0x0284
+,0x0182
+,0x0186
+,0x0385
+,0x0183
+,0x0086
+,0x0187
+,0x0182
+,0x0191
+,0x049D
+,0xA403
+,0x9106
+,0x8804
+,0x8102
+,0x8202
+,0x8608
+,0x8501
+,0x8600
+,0x8402
+,0x8501
+,0x8600
+,0x8403
+,0x8401
+,0x8601
+,0x8205
+,0x8301
+,0x8606
+,0x8202
+,0x8001
+,0x8803
+,0x8503
+,0x9402
+,0x9206
+,0x9001
+,0x8200
+,0x9DFF
+,0x9401
+,0x9006
+,0x9102
+,0xFF8B
+,0xE707
+,0x8C0C
+,0x8903
+,0x8703
+,0x8602
+,0x8B02
+,0x8401
+,0x8E02
+,0x8201
+,0x9101
+,0x8101
+,0x9102
+,0x8000
+,0x9300
+,0xB0B0
+,0x0093
+,0x0081
+,0x0191
+,0x0181
+,0x028F
+,0x0282
+,0x028D
+,0x0284
+,0x028B
+,0x0286
+,0x0387
+,0x0389
+,0x0B8D
+,0x07E7
+,0x9F00
+,0x9601
+,0x9501
+,0x8202
+,0x9000
+,0x8102
+,0x9104
+,0x8D07
+,0x8F07
+,0x9404
+,0x9200
+,0x8102
+,0x9001
+,0x8301
+,0x8F01
+,0x9500
+,0xA6A0
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0191
+,0x0A8B
+,0x0B90
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x01A4
+,0xFF88
+,0x0182
+,0x018F
+,0x0690
+,0x0494
+,0x00FC
+,0xB801
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0x9501
+,0xBCFF
+,0x8701
+,0x9502
+,0x9402
+,0xFF94
+,0xC101
+,0x9303
+,0x9004
+,0x9004
+,0x9004
+,0x9003
+,0x9103
+,0x9103
+,0x9103
+,0x9301
+,0xC4A0
+,0x0290
+,0x0A8B
+,0x0285
+,0x0389
+,0x0186
+,0x0587
+,0x0186
+,0x0183
+,0x0186
+,0x0086
+,0x0184
+,0x0186
+,0x0084
+,0x0285
+,0x0186
+,0x0182
+,0x0286
+,0x0186
+,0x0280
+,0x0187
+,0x0188
+,0x0484
+,0x038B
+,0x0A90
+,0x02A3
+,0xCA01
+,0x9501
+,0x9401
+,0x9510
+,0x8610
+,0xFF94
+,0xB300
+,0x8B01
+,0x8701
+,0x8903
+,0x8601
+,0x8904
+,0x8601
+,0x8802
+,0x8001
+,0x8600
+,0x8801
+,0x8201
+,0x8600
+,0x8701
+,0x8301
+,0x8601
+,0x8501
+,0x8401
+,0x8602
+,0x8301
+,0x8501
+,0x8706
+,0x8601
+,0x8804
+,0x8701
+,0xB4BF
+,0x0188
+,0x008B
+,0x0187
+,0x018C
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0183
+,0x0285
+,0x0186
+,0x0281
+,0x0180
+,0x0183
+,0x0188
+,0x0482
+,0x0592
+,0x03B7
+,0xA400
+,0x9402
+,0x9204
+,0x9102
+,0x8001
+,0x8F02
+,0x8201
+,0x8E02
+,0x8301
+,0x8C02
+,0x8501
+,0x8B10
+,0x8610
+,0x9002
+,0x9401
+,0x9600
+,0xA1B7
+,0x0185
+,0x0088
+,0x0883
+,0x0287
+,0x0282
+,0x0185
+,0x0187
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0087
+,0x0186
+,0x0084
+,0x0186
+,0x0186
+,0x0084
+,0x0185
+,0x0187
+,0x0085
+,0x0887
+,0x0086
+,0x06B6
+,0xB508
+,0x8C0C
+,0x8902
+,0x8201
+,0x8302
+,0x8701
+,0x8301
+,0x8601
+,0x8601
+,0x8301
+,0x8601
+,0x8600
+,0x8400
+,0x8701
+,0x8600
+,0x8401
+,0x8601
+,0x8601
+,0x8302
+,0x8401
+,0x8701
+,0x8408
+,0x8F05
+,0xB7B1
+,0x0096
+,0x0096
+,0x008D
+,0x0186
+,0x008A
+,0x0486
+,0x0087
+,0x0588
+,0x0085
+,0x048B
+,0x0082
+,0x058D
+,0x0690
+,0x0393
+,0x01C3
+,0xBB04
+,0x8904
+,0x8206
+,0x8702
+,0x8002
+,0x8001
+,0x8301
+,0x8701
+,0x8302
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8601
+,0x8302
+,0x8501
+,0x8602
+,0x8101
+,0x8001
+,0x8301
+,0x8805
+,0x8106
+,0x8902
+,0x8404
+,0xB6B3
+,0x0586
+,0x0088
+,0x0784
+,0x0187
+,0x0284
+,0x0184
+,0x0186
+,0x0186
+,0x0084
+,0x0186
+,0x0087
+,0x0183
+,0x0186
+,0x0087
+,0x0084
+,0x0186
+,0x0185
+,0x0183
+,0x0187
+,0x0284
+,0x0182
+,0x0288
+,0x0D8B
+,0x09B8
+,0xFE01
+,0x8601
+,0x8C02
+,0x8502
+,0x8B02
+,0x8502
+,0xFF94
+,0xFF01
+,0x8601
+,0x8201
+,0x8602
+,0x8506
+,0x8702
+,0x8504
+,0x9400
+,0xFCA0
+,0x0195
+,0x0293
+,0x0393
+,0x0081
+,0x0191
+,0x0181
+,0x0190
+,0x0183
+,0x018F
+,0x0184
+,0x018D
+,0x0185
+,0x018D
+,0x0186
+,0x018B
+,0x0187
+,0x018B
+,0x0188
+,0x0189
+,0x0189
+,0x019E
+,0x9E00
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0x9000
+,0x8400
+,0xA19A
+,0x0189
+,0x018A
+,0x0188
+,0x018A
+,0x0187
+,0x018C
+,0x0186
+,0x018C
+,0x0185
+,0x018E
+,0x0184
+,0x018E
+,0x0183
+,0x0190
+,0x0181
+,0x0192
+,0x0081
+,0x0192
+,0x0394
+,0x0294
+,0x01A4
+,0xB101
+,0x9501
+,0x9401
+,0x9501
+,0x9401
+,0x8801
+,0x8202
+,0x8401
+,0x8604
+,0x8102
+,0x8501
+,0x8402
+,0x8401
+,0x8602
+,0x8202
+,0x8F06
+,0x9104
+,0xBF9D
+,0x078D
+,0x0481
+,0x048A
+,0x0287
+,0x0288
+,0x018B
+,0x0187
+,0x0184
+,0x0383
+,0x0087
+,0x0084
+,0x0582
+,0x0186
+,0x0083
+,0x0182
+,0x0182
+,0x0186
+,0x0083
+,0x0084
+,0x0082
+,0x0186
+,0x0182
+,0x0084
+,0x0082
+,0x0186
+,0x0281
+,0x0083
+,0x0182
+,0x0187
+,0x0A82
+,0x008A
+,0x08A1
+,0xA702
+,0x9104
+,0x8F04
+,0x8F06
+,0x8D04
+,0x8201
+,0x8B03
+,0x8501
+,0x8C04
+,0x8301
+,0x8F04
+,0x8001
+,0x9105
+,0x9404
+,0x9504
+,0x9402
+,0x9C99
+,0x1086
+,0x1086
+,0x0085
+,0x0185
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0086
+,0x0186
+,0x0085
+,0x0185
+,0x0186
+,0x0183
+,0x0285
+,0x0186
+,0x0183
+,0x0284
+,0x0287
+,0x0580
+,0x0281
+,0x0289
+,0x0382
+,0x0593
+,0x029F
+,0x9E06
+,0x8E0A
+,0x8A03
+,0x8503
+,0x8901
+,0x8902
+,0x8701
+,0x8B02
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8601
+,0x8C01
+,0x8601
+,0x8B01
+,0x8802
+,0x8802
+,0x8900
+,0x8A00
+,0x9E99
+,0x1086
+,0x1086
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x018C
+,0x0186
+,0x018C
+,0x0186
+,0x028A
+,0x0188
+,0x0386
+,0x028B
+,0x0A8E
+,0x05A2
+,0xB110
+,0x8610
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8D01
+,0xB4B1
+,0x1086
+,0x1086
+,0x0085
+,0x018E
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x0085
+,0x008F
+,0x00C4
+,0x9E06
+,0x8D0B
+,0x8A02
+,0x8702
+,0x8802
+,0x8A01
+,0x8701
+,0x8C01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8700
+,0x8401
+,0x8601
+,0x8600
+,0x8401
+,0x8601
+,0x8600
+,0x8400
+,0x8802
+,0x8406
+,0x8900
+,0x8505
+,0x9EB1
+,0x1086
+,0x108D
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x018E
+,0x1086
+,0x10B4
+,0xB100
+,0x8E00
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8610
+,0x8610
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0xCCBF
+,0x0196
+,0x0195
+,0x0186
+,0x008D
+,0x0186
+,0x008D
+,0x0186
+,0x008C
+,0x0187
+,0x0F87
+,0x0D89
+,0x0096
+,0x0096
+,0x00AC
+,0x9910
+,0x8610
+,0x8D02
+,0x9302
+,0x9304
+,0x9102
+,0x8002
+,0x8F02
+,0x8202
+,0x8D01
+,0x8503
+,0x8A01
+,0x8802
+,0x8801
+,0x8A03
+,0x8600
+,0x8D01
+,0x9600
+,0x9CB1
+,0x1086
+,0x1095
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x0195
+,0x01B4
+,0x9910
+,0x8610
+,0x8703
+,0x9503
+,0x9503
+,0x9503
+,0x9302
+,0x9202
+,0x9203
+,0x9103
+,0x9210
+,0x8610
+,0x9C99
+,0x1086
+,0x1086
+,0x0395
+,0x0295
+,0x0395
+,0x0395
+,0x0395
+,0x0395
+,0x0295
+,0x0387
+,0x1086
+,0x109C
+,0x9D08
+,0x8C0C
+,0x8902
+,0x8703
+,0x8701
+,0x8B01
+,0x8701
+,0x8C01
+,0x8600
+,0x8D01
+,0x8600
+,0x8D01
+,0x8601
+,0x8C01
+,0x8601
+,0x8B01
+,0x8802
+,0x8802
+,0x890C
+,0x8C08
+,0xA0B1
+,0x1086
+,0x1086
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0184
+,0x018E
+,0x0184
+,0x018E
+,0x0282
+,0x028F
+,0x0692
+,0x02A7
+,0x9D08
+,0x8C0C
+,0x8902
+,0x8802
+,0x8701
+,0x8B02
+,0x8601
+,0x8C01
+,0x8600
+,0x8E02
+,0x8400
+,0x8E04
+,0x8201
+,0x8C01
+,0x8101
+,0x8201
+,0x8C01
+,0x8101
+,0x8302
+,0x8802
+,0x8201
+,0x840C
+,0x8301
+,0x8608
+,0xA0B1
+,0x1086
+,0x1086
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x008E
+,0x0086
+,0x018D
+,0x0184
+,0x048B
+,0x0184
+,0x0180
+,0x0389
+,0x0783
+,0x0388
+,0x0586
+,0x028A
+,0x008A
+,0x009C
+,0xB303
+,0x8602
+,0x8805
+,0x8601
+,0x8701
+,0x8202
+,0x8601
+,0x8601
+,0x8301
+,0x8601
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8600
+,0x8501
+,0x8501
+,0x8601
+,0x8501
+,0x8302
+,0x8602
+,0x8402
+,0x8102
+,0x8801
+,0x8505
+,0x9301
+,0xA099
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x1086
+,0x1086
+,0x0096
+,0x0096
+,0x0096
+,0x0096
+,0x00AC
+,0x990C
+,0x8A0E
+,0x9502
+,0x9501
+,0x9601
+,0x9501
+,0x9501
+,0x9501
+,0x9401
+,0x9402
+,0x870E
+,0x880C
+,0xA099
+,0x0195
+,0x0494
+,0x0594
+,0x0594
+,0x0594
+,0x0592
+,0x048F
+,0x048F
+,0x048F
+,0x048F
+,0x0492
+,0x01AB
+,0x9905
+,0x920A
+,0x9209
+,0x9004
+,0x8E05
+,0x8E04
+,0x9005
+,0x9406
+,0x9406
+,0x9206
+,0x8909
+,0x8A06
+,0xA6A9
+,0x0086
+,0x018B
+,0x0286
+,0x0388
+,0x0388
+,0x0384
+,0x038B
+,0x0381
+,0x038F
+,0x0591
+,0x058F
+,0x0381
+,0x038C
+,0x0285
+,0x0388
+,0x0387
+,0x0387
+,0x018B
+,0x0296
+,0x009C
+,0x9900
+,0x9602
+,0x9503
+,0x9503
+,0x9503
+,0x940A
+,0x8D09
+,0x8B04
+,0x9004
+,0x9003
+,0x9202
+,0x9400
+,0xACA9
+,0x0086
+,0x008C
+,0x0286
+,0x008A
+,0x0486
+,0x0089
+,0x0280
+,0x0186
+,0x0087
+,0x0381
+,0x0186
+,0x0085
+,0x0383
+,0x0186
+,0x0084
+,0x0285
+,0x0186
+,0x0082
+,0x0386
+,0x0186
+,0x0080
+,0x0388
+,0x0186
+,0x038A
+,0x0186
+,0x028B
+,0x0195
+,0x019C
+,0xDF15
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8200
+,0x9100
+,0xB2B0
+,0x0195
+,0x0395
+,0x0395
+,0x0395
+,0x0395
+,0x0494
+,0x0495
+,0x0395
+,0x0395
+,0x01B3
+,0xB000
+,0x9100
+,0x8201
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8101
+,0x9101
+,0x8115
+,0xE1CE
+,0x0194
+,0x0292
+,0x0292
+,0x0294
+,0x0296
+,0x0295
+,0x0395
+,0x01D6
+,0xAB00
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9AE0
+,0x0195
+,0x0395
+,0x0295
+,0x0295
+,0x00FF
+,0x89A6
+,0x0193
+,0x048C
+,0x0183
+,0x0180
+,0x028B
+,0x0083
+,0x0182
+,0x018A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0084
+,0x008A
+,0x0183
+,0x0083
+,0x008C
+,0x0182
+,0x0082
+,0x018C
+,0x0B8C
+,0x0AB4
+,0xAF12
+,0x8411
+,0x8C01
+,0x8601
+,0x8C00
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B01
+,0x8602
+,0x8B03
+,0x8302
+,0x8D08
+,0x9004
+,0xA0B8
+,0x068F
+,0x088D
+,0x0284
+,0x028C
+,0x0186
+,0x028A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0186
+,0x018C
+,0x0285
+,0x018D
+,0x00A6
+,0xA104
+,0x9008
+,0x8D02
+,0x8402
+,0x8C01
+,0x8602
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B00
+,0x8800
+,0x8C01
+,0x8601
+,0x8611
+,0x8412
+,0xB4A2
+,0x0292
+,0x078E
+,0x0480
+,0x038C
+,0x0181
+,0x0182
+,0x018B
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018B
+,0x0181
+,0x0183
+,0x018B
+,0x0582
+,0x018D
+,0x0483
+,0x00B5
+,0xB601
+,0x9501
+,0x9501
+,0x9010
+,0x8503
+,0x8101
+,0x8F01
+,0x8301
+,0x8F00
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8400
+,0x9001
+,0x9502
+,0xABAA
+,0x0289
+,0x0481
+,0x0180
+,0x0487
+,0x0B81
+,0x0186
+,0x0183
+,0x0181
+,0x0183
+,0x0086
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0085
+,0x0082
+,0x0083
+,0x0185
+,0x0183
+,0x0182
+,0x0083
+,0x0186
+,0x0583
+,0x0083
+,0x0086
+,0x0584
+,0x0181
+,0x0186
+,0x0089
+,0x0487
+,0x008B
+,0x019A
+,0xAF12
+,0x8412
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9502
+,0x950B
+,0x8C0A
+,0xB4CD
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x0185
+,0x0182
+,0x0C85
+,0x0182
+,0x0C95
+,0x0195
+,0x0195
+,0x01CC
+,0xC401
+,0x9601
+,0x8501
+,0x8D01
+,0x8501
+,0x8D01
+,0x8501
+,0x8D01
+,0x8501
+,0x8C01
+,0x8101
+,0x8210
+,0x8102
+,0x810F
+,0x8201
+,0xDCAF
+,0x1284
+,0x128F
+,0x0294
+,0x0194
+,0x0392
+,0x0180
+,0x0290
+,0x0182
+,0x028E
+,0x0184
+,0x028C
+,0x0186
+,0x038A
+,0x0089
+,0x0196
+,0x009C
+,0xB000
+,0x8E01
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8401
+,0x8E01
+,0x8412
+,0x8412
+,0x9501
+,0x9501
+,0x9501
+,0x9600
+,0xB49D
+,0x0C8A
+,0x0C8B
+,0x0095
+,0x0195
+,0x0195
+,0x0C8B
+,0x0B8B
+,0x0194
+,0x0195
+,0x0195
+,0x0C8B
+,0x0B9C
+,0xB50C
+,0x8A0C
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9502
+,0x950B
+,0x8C0A
+,0xB4A1
+,0x0491
+,0x078E
+,0x0282
+,0x038C
+,0x0186
+,0x018B
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0186
+,0x018C
+,0x0383
+,0x028D
+,0x0890
+,0x04A0
+,0xB511
+,0x8510
+,0x8701
+,0x8601
+,0x8C00
+,0x8800
+,0x8B01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8B01
+,0x8602
+,0x8B02
+,0x8402
+,0x8D08
+,0x9004
+,0xA0A1
+,0x0490
+,0x088D
+,0x0283
+,0x038C
+,0x0087
+,0x028A
+,0x0188
+,0x018A
+,0x0188
+,0x018A
+,0x0188
+,0x018B
+,0x0088
+,0x008C
+,0x0186
+,0x018C
+,0x0F86
+,0x11AF
+,0xCD0C
+,0x8A0C
+,0x8C01
+,0x9401
+,0x9500
+,0x9501
+,0x9501
+,0x9501
+,0x9601
+,0x9500
+,0xA7B8
+,0x0085
+,0x018C
+,0x0483
+,0x018C
+,0x0484
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0182
+,0x0183
+,0x018A
+,0x0183
+,0x0182
+,0x018B
+,0x0083
+,0x0182
+,0x018B
+,0x0182
+,0x058D
+,0x0083
+,0x03B6
+,0xB501
+,0x9501
+,0x9501
+,0x920E
+,0x880F
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x8A01
+,0x8801
+,0x9401
+,0xB5B5
+,0x0A8C
+,0x0B95
+,0x0295
+,0x0196
+,0x0096
+,0x0095
+,0x0095
+,0x018B
+,0x0C8A
+,0x0CB4
+,0x9D00
+,0x9603
+,0x9404
+,0x9504
+,0x9404
+,0x9404
+,0x9303
+,0x9103
+,0x9103
+,0x9004
+,0x9003
+,0x9300
+,0xA89D
+,0x0593
+,0x0893
+,0x0593
+,0x038F
+,0x048F
+,0x0492
+,0x0395
+,0x0594
+,0x0593
+,0x038C
+,0x098B
+,0x06A2
+,0xB501
+,0x8801
+,0x8A02
+,0x8602
+,0x8C02
+,0x8203
+,0x8E02
+,0x8002
+,0x9104
+,0x9204
+,0x9102
+,0x8002
+,0x8E02
+,0x8303
+,0x8B02
+,0x8602
+,0x8A00
+,0x8901
+,0xB4AC
+,0x0186
+,0x028C
+,0x0185
+,0x0589
+,0x0188
+,0x0487
+,0x018A
+,0x0484
+,0x018E
+,0x0791
+,0x048F
+,0x0490
+,0x048F
+,0x0490
+,0x0393
+,0x01A7
+,0xA900
+,0x8A01
+,0x8702
+,0x8A01
+,0x8603
+,0x8A01
+,0x8504
+,0x8A01
+,0x8402
+,0x8001
+,0x8A01
+,0x8202
+,0x8201
+,0x8A01
+,0x8102
+,0x8301
+,0x8A01
+,0x8002
+,0x8401
+,0x8A04
+,0x8501
+,0x8A02
+,0x8701
+,0x8A01
+,0x8801
+,0x9501
+,0x9CA2
+,0x0096
+,0x0195
+,0x0193
+,0x0581
+,0x0286
+,0x0781
+,0x0883
+,0x068A
+,0x0281
+,0x0191
+,0x0181
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0192
+,0x00C8
+,0xFF90
+,0x1581
+,0x15FF
+,0x90C8
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0192
+,0x0081
+,0x0191
+,0x0182
+,0x0685
+,0x0181
+,0x0383
+,0x0781
+,0x088A
+,0x0581
+,0x018F
+,0x0195
+,0x01BA
+,0x9F00
+,0x9501
+,0x9501
+,0x9401
+,0x9501
+,0x9601
+,0x9502
+,0x9501
+,0x9501
+,0x9501
+,0x9401
+,0x9501
+,0xA6F8
+,0x0189
+,0x0485
+,0x0381
+,0x0C85
+,0x0283
+,0x0AFF
+,0x94A1
+,0x0291
+,0x078E
+,0x0382
+,0x038C
+,0x0186
+,0x018B
+,0x0188
+,0x018A
+,0x0086
+,0x0786
+,0x0E86
+,0x0884
+,0x0187
+,0x0081
+,0x0188
+,0x018A
+,0x0187
+,0x028B
+,0x0186
+,0x01B6
+,0xA900
+,0x8C01
+,0x8601
+,0x8904
+,0x8502
+,0x870E
+,0x8702
+,0x8206
+,0x8001
+,0x8701
+,0x8301
+,0x8600
+,0x8700
+,0x8401
+,0x8601
+,0x8600
+,0x8D01
+,0x8601
+,0x8D00
+,0x8601
+,0x8D00
+,0x9501
+,0x9501
+,0x9CB4
+,0x0086
+,0x008E
+,0x088F
+,0x0182
+,0x018F
+,0x0184
+,0x008F
+,0x0184
+,0x018E
+,0x0184
+,0x018E
+,0x0184
+,0x0090
+,0x0182
+,0x018F
+,0x088E
+,0x0086
+,0x00B9
+,0xB101
+,0x8700
+,0x8100
+,0x8903
+,0x8401
+,0x8100
+,0x8B03
+,0x8201
+,0x8100
+,0x8D02
+,0x8101
+,0x8100
+,0x8F0A
+,0x8C0A
+,0x8A03
+,0x8001
+,0x8100
+,0x8B03
+,0x8201
+,0x8100
+,0x8903
+,0x8401
+,0x8100
+,0x8901
+,0x8601
+,0x8100
+,0x8900
+,0xACFF
+,0x9009
+,0x8208
+,0x8109
+,0x8208
+,0xFF90
+,0xB802
+,0x8500
+,0x8604
+,0x8004
+,0x8302
+,0x8407
+,0x8101
+,0x8401
+,0x8401
+,0x8201
+,0x8301
+,0x8401
+,0x8201
+,0x8301
+,0x8301
+,0x8401
+,0x8201
+,0x8401
+,0x8201
+,0x8401
+,0x8300
+,0x8401
+,0x8301
+,0x8201
+,0x8401
+,0x8402
+,0x8007
+,0x8501
+,0x8304
+,0x8004
+,0x8E01
+,0xBBC8
+,0x0194
+,0x0295
+,0x01C5
+,0x0194
+,0x0295
+,0x01DC
+,0x8902
+,0x9107
+,0x8E01
+,0x8502
+,0x8B01
+,0x8202
+,0x8200
+,0x8B00
+,0x8105
+,0x8200
+,0x8901
+,0x8100
+,0x8301
+,0x8100
+,0x8900
+,0x8101
+,0x8401
+,0x8000
+,0x8900
+,0x8101
+,0x8401
+,0x8000
+,0x8901
+,0x8001
+,0x8400
+,0x8100
+,0x8A00
+,0x8101
+,0x8201
+,0x8100
+,0x8A01
+,0x8100
+,0x8501
+,0x8B01
+,0x8601
+,0x8D02
+,0x8202
+,0x9004
+,0x89BC
+,0x018F
+,0x0381
+,0x018A
+,0x0181
+,0x0481
+,0x018A
+,0x0082
+,0x0181
+,0x0180
+,0x018A
+,0x0082
+,0x0082
+,0x0180
+,0x018A
+,0x0082
+,0x0082
+,0x0180
+,0x018A
+,0x0181
+,0x0081
+,0x0181
+,0x018A
+,0x0881
+,0x018B
+,0x0781
+,0x0195
+,0x01B8
+,0xBA01 
+,0x9403
+,0x9202
+,0x8001
+,0x9002
+,0x8201
+,0x8F01
+,0x8401
+,0x9101
+,0x9403
+,0x9202
+,0x8001
+,0x9002
+,0x8201
+,0x8F01
+,0x8401
+,0xB6D0 
+,0x0195
+,0x0190
+,0x0C8B
+,0x0A8D
+,0x088F
+,0x0691
+,0x0493
+,0x0295
+,0x00BC 
+,0xFFFF
+,0xCF89
+,0x0291
+,0x078E
+,0x0185
+,0x028B
+,0x0188
+,0x008B
+,0x0080
+,0x0781
+,0x0089
+,0x0180
+,0x0781
+,0x0089
+,0x0081
+,0x0082
+,0x0084
+,0x0089
+,0x0081
+,0x0082
+,0x0084
+,0x0089
+,0x0180
+,0x0180
+,0x0382
+,0x008A
+,0x0081
+,0x0281
+,0x0181
+,0x008A
+,0x0188
+,0x018B
+,0x0186
+,0x018D
+,0x0282
+,0x0290
+,0x0489
+,0xC900
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0x9600
+,0xDCCB
+,0x0193
+,0x0591
+,0x0181
+,0x0190
+,0x0183
+,0x018F
+,0x0183
+,0x018F
+,0x0183
+,0x0091
+,0x0592
+,0x03D8
+,0x9F00
+,0x8700
+,0x8D00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x870B
+,0x8101
+,0x870B
+,0x8101
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8701
+,0x8C00
+,0x8700
+,0x9DCA
+,0x0086
+,0x008D
+,0x0184
+,0x028C
+,0x0184
+,0x038C
+,0x0184
+,0x0080
+,0x018C
+,0x0183
+,0x0180
+,0x018C
+,0x0182
+,0x0181
+,0x018D
+,0x0482
+,0x018E
+,0x0283
+,0x01D3
+,0xD100
+,0x8E01
+,0x8401
+,0x8D01
+,0x8601
+,0x8C01
+,0x8200
+,0x8201
+,0x8C01
+,0x8200
+,0x8201
+,0x8C01
+,0x8101
+,0x8201
+,0x8D05
+,0x8001
+,0x8F01
+,0x8103
+,0xD4FF
+,0x9101
+,0x9303
+,0x9301
+,0x9500
+,0xF69D
+,0x1185
+,0x0B95
+,0x0196
+,0x0195
+,0x0195
+,0x0195
+,0x0094
+,0x028B
+,0x0B95
+,0x0295
+,0x0195
+,0x0195
+,0x0085
+,0xFFFF
+,0xCF00
+
+#line 2487 "./ostc28.drx.txt"
+ #line 730 "p2_deco_main - 090915b.c"
+
+};
+
+#pragma romdata font_table_small = 0x0B548
+rom const rom unsigned int  wp_small_table[] =
+{
+#line 1 "./ostc28.tbl.txt"
+0x0000
+,0x000E
+,0x001B
+,0x0048
+,0x007D
+,0x00B4
+,0x00E7
+,0x00F0
+,0x010D
+,0x012A
+,0x014B
+,0x0164
+,0x0170
+,0x0185
+,0x018E
+,0x01A3
+,0x01D6
+,0x01E2
+,0x0215
+,0x0246
+,0x0267
+,0x029C
+,0x02CB
+,0x02EA
+,0x0321
+,0x0352
+,0x0360
+,0x0371
+,0x039C
+,0x03CD
+,0x03F8
+,0x041B
+,0x045C
+,0x047D
+,0x04B8
+,0x04E5
+,0x050E
+,0x0541
+,0x0564
+,0x0597
+,0x05AC
+,0x05CD
+,0x05EA
+,0x060F
+,0x0624
+,0x063D
+,0x0656
+,0x067F
+,0x06A4
+,0x06D5
+,0x0700
+,0x0739
+,0x0752
+,0x076B
+,0x0784
+,0x079D
+,0x07C6
+,0x07DF
+,0x0818
+,0x0837
+,0x084C
+,0x086B
+,0x087C
+,0x0895
+,0x08A1 
+,0x08D4
+,0x08F9
+,0x0920
+,0x0945
+,0x097A
+,0x099B
+,0x09E4
+,0x09F9
+,0x0A14
+,0x0A33
+,0x0A54
+,0x0A71
+,0x0A8A
+,0x0A9F
+,0x0AC8
+,0x0AED
+,0x0B12
+,0x0B27
+,0x0B5A
+,0x0B77
+,0x0B8C
+,0x0BA5
+,0x0BBE
+,0x0BE3
+,0x0C04
+,0x0C39
+,0x0C5C
+,0x0C63
+,0x0C86
+,0x0C9F
+,0x0CAD
+,0x0CD6
+,0x0D05
+,0x0D2A
+,0x0D61
+,0x0D6C
+,0x0DAB
+,0x0DB8
+,0x0E05
+,0x0E3C
+,0x0E5D 
+,0x0E70 
+,0x0E73 
+,0x0EBA 
+,0x0ECB 
+,0x0EE4 
+,0x0F15 
+,0x0F3C
+,0x0F61
+,0x0F6B 
+,0x0F86 
+,0x0F89 
+
+
+#line 205 "./ostc28.tbl.txt"
+ #line 736 "p2_deco_main - 090915b.c"
+ 
+};
+
+#pragma romdata font_table_medium = 0x0B632
+rom const rom unsigned int  wp_medium_table[] =
+{
+#line 1 "./ostc48.tbl.txt"
+0x0000
+,0x000F 
+,0x0016 
+,0x006B 
+,0x0083
+,0x00DC
+,0x012D
+,0x0166
+,0x01C1
+,0x0216
+,0x024C
+,0x02AB 
+,0x0302 
+,0x031B 
+,0x032A 
+,0x0344 
+,0x036F 
+,0x0375 
+#line 742 "p2_deco_main - 090915b.c"
+ 
+};
+
+#pragma romdata font_data_medium = 0x0B656
+rom const rom unsigned int  wp_medium_data[] =
+{
+#line 1 "./ostc48.drx.txt"
+0x9F9F
+,0xBA03
+,0x9A04
+,0x9A05
+,0x9904
+,0x9B03
+,0x9F9F
+,0xC09F 
+,0x9FBF
+,0x7F9F
+,0x9FBF
+,0xCD03 
+,0x960E
+,0x8E12
+,0x8A16
+,0x8704
+,0x8B07
+,0x8503
+,0x8C03
+,0x8004
+,0x8303
+,0x8B04
+,0x8204
+,0x8202
+,0x8B04
+,0x8403
+,0x8102
+,0x8B03
+,0x8702
+,0x8102
+,0x8A03
+,0x8802
+,0x8102
+,0x8804
+,0x8903
+,0x8002
+,0x8703
+,0x8B02
+,0x8103
+,0x8503
+,0x8C02
+,0x8203
+,0x8204
+,0x8C03
+,0x8303
+,0x8004
+,0x8C03
+,0x8506
+,0x8C04
+,0x8716
+,0x8913
+,0x8E0E
+,0x9503
+,0xCDFF 
+,0x8400
+,0x9E01
+,0x9C02
+,0x9B02
+,0x9C02
+,0x9B03
+,0x9B02
+,0x9B1D
+,0x811D
+,0x811D
+,0xFFFF
+,0xC0FC
+,0x0185
+,0x0094
+,0x0384
+,0x0291
+,0x0583
+,0x0390
+,0x0682
+,0x0390
+,0x0782
+,0x0290
+,0x0381
+,0x0281
+,0x028F
+,0x0482
+,0x0281
+,0x028E
+,0x0483
+,0x0281
+,0x028D
+,0x0484
+,0x0281
+,0x028D
+,0x0385
+,0x0281
+,0x028C
+,0x0386
+,0x0281
+,0x038A
+,0x0387
+,0x0282
+,0x0288
+,0x0488
+,0x0282
+,0x0386
+,0x0489
+,0x0283
+,0x0D8A
+,0x0284
+,0x0A8C
+,0x0285
+,0x088D
+,0x0287
+,0x0390
+,0x02E0
+,0xFF9A
+,0x0185
+,0x0292
+,0x0483
+,0x0393
+,0x0482
+,0x0295
+,0x0382
+,0x0296
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0289
+,0x028A
+,0x0281
+,0x0288
+,0x038A
+,0x0282
+,0x0287
+,0x0489
+,0x0282
+,0x0385
+,0x0687
+,0x0383
+,0x0A81
+,0x0384
+,0x0484
+,0x0A81
+,0x0C87
+,0x0684
+,0x0A8A
+,0x0288
+,0x07FF
+,0x84D3
+,0x029A
+,0x0499
+,0x0597
+,0x0796
+,0x0381
+,0x0294
+,0x0482
+,0x0293
+,0x0384
+,0x0291
+,0x0485
+,0x0290
+,0x0387
+,0x028E
+,0x0488
+,0x028D
+,0x038A
+,0x028B
+,0x048B
+,0x028A
+,0x1C81
+,0x1D81
+,0x1D81
+,0x1D94
+,0x029C
+,0x029C
+,0x029C
+,0x02C8
+,0xFA00
+,0x8D06
+,0x8802
+,0x830F
+,0x8704
+,0x820F
+,0x8803
+,0x8209
+,0x8102
+,0x8A03
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8701
+,0x8D02
+,0x8102
+,0x8701
+,0x8E02
+,0x8002
+,0x8701
+,0x8D03
+,0x8002
+,0x8702
+,0x8C02
+,0x8102
+,0x8702
+,0x8C02
+,0x8102
+,0x8703
+,0x8A03
+,0x8102
+,0x8803
+,0x8804
+,0x8102
+,0x8805
+,0x8405
+,0x8202
+,0x890E
+,0x8302
+,0x8A0C
+,0x9408
+,0xE5EC
+,0x0891
+,0x118B
+,0x1588
+,0x1785
+,0x0584
+,0x0286
+,0x0584
+,0x0385
+,0x0289
+,0x0383
+,0x0386
+,0x028A
+,0x0381
+,0x0386
+,0x028C
+,0x0281
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x028D
+,0x0280
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x028C
+,0x0281
+,0x0287
+,0x038B
+,0x0281
+,0x0288
+,0x0389
+,0x0283
+,0x0287
+,0x0584
+,0x0583
+,0x0387
+,0x0E85
+,0x008A
+,0x0C95
+,0x06E6
+,0xFF80
+,0x029C
+,0x029C
+,0x029C
+,0x0297
+,0x0281
+,0x0294
+,0x0581
+,0x0291
+,0x0881
+,0x028F
+,0x0982
+,0x028C
+,0x0985
+,0x0289
+,0x0988
+,0x0287
+,0x088B
+,0x0284
+,0x098D
+,0x0282
+,0x0890
+,0x0B93
+,0x0995
+,0x0698
+,0x049A
+,0x01FC
+,0xF405
+,0x8A03
+,0x8808
+,0x8707
+,0x850A
+,0x8509
+,0x8304
+,0x8105
+,0x830B
+,0x8103
+,0x8504
+,0x8202
+,0x8506
+,0x8803
+,0x8102
+,0x8705
+,0x8902
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8902
+,0x8A02
+,0x8102
+,0x8803
+,0x8A02
+,0x8102
+,0x8804
+,0x8902
+,0x8103
+,0x8606
+,0x8802
+,0x8203
+,0x8303
+,0x8103
+,0x8602
+,0x830B
+,0x8105
+,0x8204
+,0x8408
+,0x840B
+,0x8705
+,0x8609
+,0x9705
+,0xE5E7
+,0x0498
+,0x098B
+,0x0086
+,0x0C89
+,0x0284
+,0x0E88
+,0x0382
+,0x0388
+,0x0388
+,0x0282
+,0x028A
+,0x0387
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0380
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x028C
+,0x0287
+,0x0281
+,0x038A
+,0x0287
+,0x0382
+,0x0389
+,0x0286
+,0x0383
+,0x0487
+,0x0285
+,0x0485
+,0x0781
+,0x0381
+,0x0887
+,0x168A
+,0x128F
+,0x0CE9
+,0x9F9F 
+,0xAB03
+,0x8A03
+,0x8B04
+,0x8904
+,0x8B04
+,0x8905
+,0x8A04
+,0x8904
+,0x8C02 
+,0x8B03
+,0x9F9F
+,0xC09F 
+,0x9FC8
+,0x0194
+,0x0A94
+,0x0A94
+,0x0896
+,0x059F
+,0x9FB9
+,0xFFA9 
+,0x009B
+,0x0394
+,0x0A94
+,0x0995
+,0x0698
+,0x03FF
+,0x8302
+,0x940A
+,0x940A
+,0x9407
+,0x9704
+,0xFFBA
+,0xC815 
+,0x8915
+,0x8915
+,0x8B02
+,0x9B01
+,0x9C01
+,0x9D01
+,0x9D02
+,0x9C04
+,0x9A15
+,0x8A14
+,0x8B13
+,0x8A02
+,0x9B02
+,0x9C01
+,0x9D01
+,0x9D02
+,0x9C15
+,0x8915
+,0x8A14
+,0x8D11
+,0xA0FF
+,0xFFFF
+,0xFFFF
+,0xFF00
+#line 748 "p2_deco_main - 090915b.c"
+ 
+};
+
+#pragma romdata font_data_large = 0x0BA46
+rom const rom unsigned int  wp_large_data[] =
+{
+#line 1 "./ostc90.drx.txt"
+0x9BAF
+,0xAFAF
+,0xAFAF
+,0xAFD1
+,0x05B2
+,0x07B0
+,0x08B0
+,0x09AF
+,0x09AF
+,0x09AF
+,0x09AF
+,0x08B1
+,0x07B2
+,0x049B
+,0x9F9F
+,0x9F9F
+,0x9FAE
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0xFFFF
+,0x8FFF
+,0xFF82
+,0x04AC
+,0x14A1
+,0x1A9B
+,0x2096
+,0x2492
+,0x288F
+,0x0E8A
+,0x108C
+,0x0B94
+,0x0C8A
+,0x0996
+,0x0F87
+,0x0896
+,0x1285
+,0x0797
+,0x0783
+,0x0785
+,0x0697
+,0x0785
+,0x0783
+,0x0696
+,0x0887
+,0x0782
+,0x0596
+,0x078A
+,0x0681
+,0x0596
+,0x078C
+,0x0581
+,0x0594
+,0x088E
+,0x0580
+,0x0494
+,0x0790
+,0x0580
+,0x0493
+,0x0791
+,0x0580
+,0x0491
+,0x0892
+,0x0580
+,0x0490
+,0x0794
+,0x0580
+,0x058E
+,0x0795
+,0x0580
+,0x058C
+,0x0896
+,0x0580
+,0x068A
+,0x0896
+,0x0582
+,0x0688
+,0x0797
+,0x0682
+,0x0785
+,0x0897
+,0x0684
+,0x0783
+,0x0897
+,0x0785
+,0x0880
+,0x0798
+,0x0787
+,0x0F97
+,0x0889
+,0x0D95
+,0x0A8B
+,0x108C
+,0x0E8E
+,0x2891
+,0x2694
+,0x2299
+,0x1CA0
+,0x15AA
+,0x0797
+,0xFFFF
+,0xFFD7
+,0x01B7
+,0x03B4
+,0x04B4
+,0x03B4
+,0x04B4
+,0x04B3
+,0x04B3
+,0x05B3
+,0x05B2
+,0x06B2
+,0x05B2
+,0x06B2
+,0x3681
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x37FF
+,0xFFFF
+,0xFFFF
+,0xFFAC
+,0xFFFF
+,0xFF90
+,0x0389
+,0x00A8
+,0x0587
+,0x03A5
+,0x0786
+,0x05A3
+,0x0885
+,0x07A0
+,0x0A84
+,0x089F
+,0x0B84
+,0x069F
+,0x0D83
+,0x069F
+,0x0E82
+,0x069F
+,0x0881
+,0x0482
+,0x059E
+,0x0883
+,0x0482
+,0x049E
+,0x0884
+,0x0481
+,0x059D
+,0x0885
+,0x0481
+,0x059C
+,0x0787
+,0x0481
+,0x049C
+,0x0788
+,0x0481
+,0x049B
+,0x0789
+,0x0481
+,0x049A
+,0x078A
+,0x0481
+,0x0499
+,0x078B
+,0x0481
+,0x0498
+,0x078C
+,0x0481
+,0x0596
+,0x078D
+,0x0481
+,0x0595
+,0x078E
+,0x0481
+,0x0594
+,0x078F
+,0x0481
+,0x0692
+,0x0790
+,0x0482
+,0x0690
+,0x0791
+,0x0482
+,0x078E
+,0x0792
+,0x0483
+,0x078B
+,0x0893
+,0x0483
+,0x0986
+,0x0A94
+,0x0484
+,0x1995
+,0x0485
+,0x1796
+,0x0486
+,0x1498
+,0x0487
+,0x1299
+,0x0489
+,0x0E9B
+,0x048C
+,0x089D
+,0x05B3
+,0x05BA
+,0xFFFF
+,0xFF8E
+,0x00B7
+,0x028A
+,0x01A8
+,0x0488
+,0x03A5
+,0x0786
+,0x05A3
+,0x0886
+,0x05A5
+,0x0784
+,0x05A7
+,0x0684
+,0x05A8
+,0x0682
+,0x05AA
+,0x0582
+,0x05AA
+,0x0581
+,0x0591
+,0x0495
+,0x0580
+,0x0591
+,0x0495
+,0x0580
+,0x0591
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0495
+,0x0580
+,0x0492
+,0x0594
+,0x0580
+,0x0590
+,0x0694
+,0x0580
+,0x0590
+,0x0694
+,0x0580
+,0x058F
+,0x0892
+,0x0582
+,0x058E
+,0x0892
+,0x0582
+,0x068C
+,0x0A90
+,0x0682
+,0x078A
+,0x0C8E
+,0x0684
+,0x0787
+,0x0681
+,0x068C
+,0x0785
+,0x1581
+,0x0789
+,0x0887
+,0x1383
+,0x1889
+,0x1185
+,0x168B
+,0x0F87
+,0x148D
+,0x0C8A
+,0x1291
+,0x078E
+,0x0EAC
+,0x0AFF
+,0xB8FF
+,0xFF8B
+,0x05B2
+,0x06B0
+,0x08AF
+,0x09AD
+,0x0BAC
+,0x0CAA
+,0x0EA9
+,0x0781
+,0x05A7
+,0x0882
+,0x05A6
+,0x0784
+,0x05A4
+,0x0786
+,0x05A3
+,0x0787
+,0x05A1
+,0x0789
+,0x059F
+,0x088A
+,0x059E
+,0x078C
+,0x059C
+,0x088D
+,0x059B
+,0x078F
+,0x0599
+,0x0890
+,0x0598
+,0x0792
+,0x0596
+,0x0794
+,0x0595
+,0x0795
+,0x0593
+,0x0797
+,0x0592
+,0x3581
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x3781
+,0x37A4
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x05B3
+,0x058F
+,0xFFFF
+,0xFF8C
+,0x01A2
+,0x0092
+,0x0392
+,0x1090
+,0x0585
+,0x1C8F
+,0x0784
+,0x1D8E
+,0x0883
+,0x1D8E
+,0x0883
+,0x1C91
+,0x0782
+,0x1B93
+,0x0682
+,0x058E
+,0x0595
+,0x0681
+,0x058E
+,0x0497
+,0x0581
+,0x058E
+,0x0497
+,0x0581
+,0x058D
+,0x0598
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0499
+,0x0580
+,0x058D
+,0x0597
+,0x0581
+,0x058D
+,0x0597
+,0x0581
+,0x058E
+,0x0595
+,0x0681
+,0x058E
+,0x0693
+,0x0682
+,0x058E
+,0x0791
+,0x0782
+,0x058F
+,0x088D
+,0x0883
+,0x0590
+,0x0A87
+,0x0B83
+,0x0591
+,0x1C84
+,0x0592
+,0x1A85
+,0x0593
+,0x1886
+,0x0594
+,0x15A5
+,0x11AA
+,0x0CC5
+,0xFFFF
+,0xF111
+,0xA21B
+,0x9A21
+,0x9426
+,0x9029
+,0x8E2B
+,0x8C0D
+,0x8505
+,0x850E
+,0x880B
+,0x8805
+,0x8B09
+,0x8808
+,0x8906
+,0x8E08
+,0x8607
+,0x8B05
+,0x9107
+,0x8407
+,0x8B05
+,0x9306
+,0x8306
+,0x8C05
+,0x9506
+,0x8205
+,0x8D05
+,0x9605
+,0x8106
+,0x8D04
+,0x9706
+,0x8005
+,0x8D05
+,0x9805
+,0x8005
+,0x8D05
+,0x9805
+,0x8004
+,0x8E04
+,0x990B
+,0x8E04
+,0x990B
+,0x8E05
+,0x980B
+,0x8E05
+,0x980B
+,0x8E05
+,0x9805
+,0x8004
+,0x8E06
+,0x9605
+,0x8104
+,0x8F05
+,0x9605
+,0x8105
+,0x8E06
+,0x9405
+,0x8205
+,0x8F07
+,0x9007
+,0x8305
+,0x8E09
+,0x8C08
+,0x8407
+,0x8D0B
+,0x860A
+,0x8507
+,0x8E1B
+,0x8705
+,0x9019
+,0x8903
+,0x9217
+,0x8B00
+,0x9613
+,0xA70F
+,0xAD07
+,0xC8FF
+,0xFFFF
+,0x9605
+,0xB305
+,0xB305
+,0xB305
+,0xB305
+,0xB305
+,0xAF01
+,0x8105
+,0xAC04
+,0x8105
+,0xA907
+,0x8105
+,0xA60A
+,0x8105
+,0xA40C
+,0x8105
+,0xA10F
+,0x8105
+,0x9E12
+,0x8105
+,0x9B13
+,0x8305
+,0x9813
+,0x8605
+,0x9612
+,0x8905
+,0x9312
+,0x8C05
+,0x9012
+,0x8F05
+,0x8E11
+,0x9205
+,0x8B11
+,0x9505
+,0x8910
+,0x9805
+,0x8610
+,0x9B05
+,0x840F
+,0x9E05
+,0x8110
+,0xA015
+,0xA312
+,0xA610
+,0xA80D
+,0xAB0B
+,0xAD09
+,0xAF06
+,0xB204
+,0xFFA7
+,0xFFFF
+,0xCA03
+,0xB10B
+,0xAB0F
+,0x9007
+,0x8F11
+,0x8D0C
+,0x8A14
+,0x8A0F
+,0x8816
+,0x8811
+,0x8618
+,0x8614
+,0x8407
+,0x8708
+,0x8515
+,0x8306
+,0x8B07
+,0x8406
+,0x8608
+,0x8106
+,0x8D06
+,0x8306
+,0x8907
+,0x8004
+,0x9006
+,0x8205
+,0x8B0C
+,0x9105
+,0x8105
+,0x8D0A
+,0x9205
+,0x8104
+,0x8F08
+,0x9405
+,0x8004
+,0x9006
+,0x9505
+,0x8004
+,0x9006
+,0x950B
+,0x9105
+,0x950B
+,0x9105
+,0x950B
+,0x9205
+,0x940B
+,0x9106
+,0x9405
+,0x8004
+,0x9107
+,0x9305
+,0x8005
+,0x8F08
+,0x9304
+,0x8105
+,0x8E0A
+,0x9105
+,0x8106
+,0x8C0C
+,0x8F06
+,0x8206
+,0x8906
+,0x8106
+,0x8E05
+,0x8308
+,0x8508
+,0x8107
+,0x8C06
+,0x8415
+,0x8308
+,0x8807
+,0x8613
+,0x850A
+,0x820A
+,0x8711
+,0x8716
+,0x890F
+,0x8914
+,0x8B0C
+,0x8C12
+,0x8F06
+,0x9010
+,0xAA0C
+,0xAF06
+,0xC5FF 
+,0xFFE9
+,0x09AC
+,0x0F98
+,0x008D
+,0x1395
+,0x028A
+,0x1792
+,0x0488
+,0x1990
+,0x0686
+,0x1B8E
+,0x0785
+,0x0988
+,0x0A8F
+,0x0683
+,0x088D
+,0x0790
+,0x0582
+,0x0790
+,0x078F
+,0x0582
+,0x0693
+,0x0590
+,0x0580
+,0x0694
+,0x068F
+,0x0580
+,0x0596
+,0x058F
+,0x0580
+,0x0597
+,0x048F
+,0x0580
+,0x0498
+,0x048F
+,0x0580
+,0x0498
+,0x058E
+,0x0B98
+,0x058E
+,0x0B98
+,0x048F
+,0x0580
+,0x0498
+,0x048E
+,0x0581
+,0x0597
+,0x048E
+,0x0581
+,0x0596
+,0x058D
+,0x0681
+,0x0695
+,0x048E
+,0x0583
+,0x0594
+,0x058D
+,0x0683
+,0x0693
+,0x048D
+,0x0685
+,0x0790
+,0x058B
+,0x0786
+,0x098D
+,0x058A
+,0x0888
+,0x0B88
+,0x0687
+,0x0C89
+,0x2D8C
+,0x2B8F
+,0x2793
+,0x2496
+,0x1F9D
+,0x17A9
+,0x07D3 
+,0xFF00
+#line 754 "p2_deco_main - 090915b.c"
+
+};
+
+#pragma romdata font_table_large = 0x0BFE6
+rom const rom unsigned int  wp_large_table[] =
+{
+#line 1 "./ostc90.tbl.txt"
+0x0000 
+,0x0022 
+,0x0035 
+,0x00D2
+,0x0100
+,0x01A8
+,0x0243
+,0x02AC
+,0x0354
+,0x03ED
+,0x0454
+,0x04FF 
+,0x059A 
+#line 760 "p2_deco_main - 090915b.c"
+
+};
+
+
+
+
+
+
+
+
+
+#pragma code subroutines2 = 0x0C000	
+
+
+
+
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & 0b0000000000000100 )
+		int_O_DBG_pre_bitfield = 0b0000000000001000 ;
+	else
+		int_O_DBG_pre_bitfield = 0b0000000000000100 ;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= 0b0000000000000001 ;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= 0b0000000000000010 ;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= 0b0000000000000100 ;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= 0b0000000000001000 ;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= 0b0000000000010000 ;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= 0b0000000000100000 ;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= 0b0000000001000000 ;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= 0b0000000010000000 ;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= 0b0000000100000000 ;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= 0b0000001000000000 ;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= 0b0000010000000000 ;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= 0b0000100000000000 ;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= 0b0001000000000000 ;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= 0b0010000000000000 ;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= 0b0100000000000000 ;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= 0b1000000000000000 ;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= 0b0000000000000001 ;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= 0b0000000000000010 ;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= 0b0000000000000100 ;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= 0b0000000000001000 ;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= 0b0000000000010000 ;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= 0b0000000000100000 ;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= 0b0000000001000000 ;
+}
+
+
+
+
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~0b0000000000000100 );
+	int_O_DBG_post_bitfield &= (~0b0000000000000100 );
+}
+
+
+
+
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+
+
+
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= 0b0000000000000001 ;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= 0b0000000000000010 ;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= 0b0000000000010000 ;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= 0b0000000000100000 ;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= 0b0000000001000000 ;
+	if((!0b0000000000000100 ) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= 0b0000000010000000 ;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= 0b0000000100000000 ;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= 0b0000001000000000 ;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= 0b0000010000000000 ;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= 0b0000100000000000 ;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= 0b0001000000000000 ;
+	if(pres_respiration > 13.0)
+		temp_DBS |= 0b0100000000000000 ;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= 0b1000000000000000 ;
+
+#line 914 "p2_deco_main - 090915b.c"
+ 
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+
+
+
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+
+
+
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+
+
+
+
+void calc_nextdecodepth_GF(void)
+{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	char_I_table_deco_done[0] = 0; 
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; 
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	
+			if (temp1 > temp2) 
+			{
+				int_temp = 0;	
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; 
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; 
+			}
+		} 
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		
+		
+		
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	
+  			} 
+ 		} 
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} 
+	} 
+} 
+
+
+#line 1100 "p2_deco_main - 090915b.c"
+#line 1116 "p2_deco_main - 090915b.c"
+
+
+
+
+
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		
+
+
+
+
+
+
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	
+
+
+
+
+
+
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	
+
+
+
+
+
+
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} 
+
+
+
+
+
+
+
+
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; 
+calc_desaturation_time();
+}			
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	return;
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	return;
+}
+
+#pragma code main_wordprocessor = 0x100B8
+void main_wordprocessor(void)
+{
+	wordprocessor();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+
+
+
+
+
+
+#pragma romdata tables = 0x10200
+ 		
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+
+
+
+
+
+
+#pragma code subroutines = 0x10700	
+
+
+
+
+
+
+
+void clear_tissue(void)    
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+ N2_ratio = 0.7902; 
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} 
+
+for (ci=16;ci<32;ci++)  
+{
+ pres_tissue[ci] = 0.0;
+}  
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} 
+
+
+
+
+
+
+
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; 
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; 
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); 
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; 
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; 
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+
+			calc_hauptroutine_calc_deco();
+
+			break;
+		case 3:				
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		
+			{
+				char_O_deco_status = 2;
+
+			}
+ 			else
+			{
+
+				calc_hauptroutine_calc_deco();
+			}
+
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; 
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																
+  		pres_diluent = pres_respiration;															
+ 	else																						
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					
+ 	if (pres_diluent > pres_respiration)														
+  		pres_diluent = pres_respiration;															
+ 	if (pres_diluent > 0.0627)																	
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						
+ 	{
+ 		temp_atem = 0.0;																			
+ 		temp2_atem = 0.0;																			
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  
+ 	{
+  		char_O_nullzeit = 0; 
+  		char_O_deco_status = 255; 
+ 	}
+} 		
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																
+	 		{
+     			deco_diluent = temp_deco;																
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															
+     			deco_diluent = temp_deco;																
+ 			if (deco_diluent > 0.0627)																
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										
+    		}
+    		else																					
+    		{
+     			temp_atem = 0.0;																		
+     			temp2_atem = 0.0;																		
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else 
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																
+ 	do								
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								
+   		{
+   			lock_GF_depth_list = 0; 																	
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																
+			{
+    			deco_diluent = temp_deco + 0.5;															
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	
+    				if (deco_diluent > (temp_deco +0.5))															
+     					deco_diluent = temp_deco + 0.5;															
+			}
+   			if (deco_diluent > 0.0627)																
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										
+    		}
+   			else																						
+    		{
+    			temp_atem = 0.0;																		
+    			temp2_atem = 0.0;																		
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	
+
+
+
+
+
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ 
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= 0b0010000000000000 ;
+
+
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }
+} 
+}
+
+
+
+
+
+
+
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} 
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} 
+} 
+
+
+
+
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} 
+
+
+
+
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} 
+
+
+
+
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; 
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} 
+
+
+
+
+
+
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} 
+
+
+
+
+
+
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} 
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} 
+
+
+
+
+
+
+
+
+
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} 
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} 
+
+
+
+
+
+
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} 
+
+
+
+
+
+
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; 
+		} 
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; 
+  			} 
+ 			else
+  				x++;
+ 		} 
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} 
+} 
+
+
+
+
+
+
+
+
+void calc_gradient_factor(void)
+{
+	
+	
+	
+	
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; 
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; 
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} 
+
+
+
+
+
+
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; 
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; 
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} 
+} 
+
+
+
+
+
+
+
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; 
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; 
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+
+
+
+
+
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; 
+							 
+							 
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; 
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; 
+							 
+							 
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; 
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+
+ temp2 = temp1 * 20.0;  
+ temp2 = temp2 + 80.0; 
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+
+ temp4 = temp3 * 20.0;  
+ temp4 = temp4 + 80.0; 
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} 
+} 
+
+
+
+
+
+
+
+
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; 
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; 
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); 
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; 
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; 
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} 
+
+
+
+
+
+
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }
+
+
+
+
+
+
+
+
+
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; 
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} 
+} 
+
+#line 2689 "p2_deco_main - 090915b.c"
+#line 2700 "p2_deco_main - 090915b.c"
+
+
+
+
+void hash(void)
+{
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } 
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } 
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } 
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } 
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } 
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } 
+  md_t = (unsigned char)(md_t+1);
+ } 
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } 
+} 
+} 
+
+
+
+
+
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  CNS_fraction =  0.000755 + CNS_fraction; 
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; 
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; 
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} 
+
+
+
+
+
+
+
+
+
+
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}
+
+
+
+
+
+
+
+
+
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
+void wp_write_command(void)
+{
+	_asm
+		bcf		PORTE,0,0 
+		movff	wp_command,PORTD
+		bcf		PORTA,2,0 
+		bsf		PORTA,2,0 
+	_endasm
+}
+
+void wp_write_data(void)
+{
+	wp_data_8bit_one = wp_data_16bit >> 8;
+	wp_data_8bit_two = wp_data_16bit;
+_asm
+	bsf		PORTE,0,0 
+	movff	wp_data_8bit_one,PORTD
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+	movff	wp_data_8bit_two,PORTD
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+_endasm
+}
+
+void wp_write_black(void)
+{
+_asm
+	movff	wp_black,PORTD
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+_endasm
+}
+
+void wp_write_color(void)
+{
+_asm
+	movff	wp_color1,PORTD
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+	movff	wp_color2,PORTD
+	bcf		PORTA,2,0 
+	bsf		PORTA,2,0 
+_endasm
+}
+
+void wp_set_window(void)
+{
+	
+	wp_command = 0x35;
+	wp_write_command();
+	wp_data_16bit = ((unsigned int )wp_leftx2) << 1;
+	wp_write_data();
+	
+	wp_command = 0x36;
+	wp_write_command();
+	wp_data_16bit = 319;
+	wp_write_data();
+	
+	wp_command = 0x37;
+	wp_write_command();
+	
+	wp_data_16bit = wp_top;
+	if(wp_font == 2)
+		wp_data_16bit += 58 ;
+	else if(wp_font == 1)
+		wp_data_16bit += 32 ;
+	else
+		wp_data_16bit += 24 ;
+	wp_data_16bit--;
+	if(wp_data_16bit > 239)
+		wp_data_16bit = 239;
+	
+	wp_data_16bit |= ((unsigned int )wp_top) << 8;
+	
+	wp_write_data();
+
+	
+	wp_command = 0x20;
+	wp_write_command();
+	wp_data_16bit = wp_top;
+	wp_write_data();
+
+	wp_command = 0x21;
+	wp_write_command();
+	wp_data_16bit = ((unsigned int )wp_leftx2) << 1;
+	wp_write_data();
+}
+
+void wp_set_char_font_small(void)
+{
+	if (wp_char == ' ')
+		wp_char = 'ķ';
+
+	if((wp_char < '!') || (wp_char > 'ķ')) 
+		wp_char = 'Ī'; 
+
+	if (wp_char > 0x7E) 
+		wp_char -= 34;
+
+	wp_start = wp_small_table[wp_char - '!'];
+	wp_end = wp_small_table[1 + wp_char - '!'];
+}
+
+void wp_set_char_font_medium(void)
+{
+	
+	if (wp_char == 0x27) 
+		wp_char = 0x3B;
+	if (wp_char == '"')
+		wp_char = 0x3C;
+	if (wp_char == 'm')
+		wp_char = 0x3D;
+	if (wp_char == ' ')
+		wp_char = 0x3E;
+
+	if((wp_char < '.') || (wp_char > 0x3E))
+		wp_char = 0x3E;
+	wp_start = wp_medium_table[wp_char - '.'];
+	wp_end = wp_medium_table[1 + wp_char - '.'];
+}
+
+void wp_set_char_font_large(void)
+{
+	
+	if (wp_char == ' ')
+		wp_char = 0x2F;
+
+	if((wp_char < '.') || (wp_char > '9'))
+		wp_char = 0x2F;
+	wp_start = wp_large_table[wp_char - '.'];
+	wp_end = wp_large_table[1 + wp_char - '.'];
+}
+
+void wordprocessor(void)
+{
+	wp_set_window();
+
+	
+	wp_command = 0x22;
+	wp_write_command();
+	_asm
+		bsf		PORTE,0,0 
+	_endasm
+
+	wp_txtptr = 0;
+	wp_char = wp_stringstore[wp_txtptr];
+
+	while(wp_char)
+	{
+		if(wp_font == 2)
+			wp_set_char_font_large();
+		else if(wp_font == 1)
+			wp_set_char_font_medium();
+		else
+			wp_set_char_font_small();
+
+		wp_black = 0;
+
+			for(wp_i = wp_start; wp_i<wp_end;wp_i++)
+			{
+				if(wp_font == 2)
+					wp_data_16bit = wp_large_data[wp_i / 2];
+				else if(wp_font == 1)
+					wp_data_16bit = wp_medium_data[wp_i / 2];
+				else
+					wp_data_16bit = wp_small_data[wp_i / 2];
+				if(wp_i & 1)
+					wp_temp_U8 = wp_data_16bit & 0xFF;
+				else
+					wp_temp_U8 = wp_data_16bit >> 8;
+				if((wp_temp_U8 & 128))
+				{
+					wp_temp_U8 -= 127;
+					if(wp_invert)
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+					else
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		PORTA,2,0 
+								bsf		PORTA,2,0 
+								bcf		PORTA,2,0 
+								bsf		PORTA,2,0 
+							_endasm
+						}
+					}
+				}
+				else
+				{
+					wp_temp_U8++;
+					if(wp_invert)
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		PORTA,2,0 
+								bsf		PORTA,2,0 
+								bcf		PORTA,2,0 
+								bsf		PORTA,2,0 
+							_endasm
+						}
+					}
+					else
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+				}
+			}
+		wp_txtptr++;
+		wp_char = wp_stringstore[wp_txtptr];
+	}
+	wp_command = 0x00;
+	wp_write_command();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3211 @@
+/*
+ *  p2_deco_main.c
+ *
+ *  Created on: 31.08.2009
+ *      Author: christian.w @ heinrichsweikamp.com
+ *
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+// OSTC - diving computer code
+// Copyright (C) 2009 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+/*
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+*/
+
+#	define	DBG_c_gas	0b0000000000000001
+#	define	DBG_c_ppO2	0b0000000000000010
+#	define	DBG_RUN 	0b0000000000000100
+#	define	DBG_RESTART 0b0000000000001000
+
+#	define	DBG_CdeSAT 	0b0000000000010000
+#	define	DBG_C_MODE	0b0000000000100000
+#	define	DBG_C_SURF	0b0000000001000000
+#	define	DBG_HEwoHE 	0b0000000010000000
+
+#	define	DBG_C_DPPO2	0b0000000100000000
+#	define	DBG_C_DGAS 	0b0000001000000000
+#	define	DBG_C_DIST	0b0000010000000000
+#	define	DBG_C_LAST	0b0000100000000000
+
+#	define	DBG_C_GF	0b0001000000000000
+#	define	DBG_ZH16ERR	0b0010000000000000
+#	define	DBG_PHIGH	0b0100000000000000
+#	define	DBG_PLOW	0b1000000000000000
+
+
+#	define	DBS_mode	0b0000000000000001
+#	define	DBS_ppO2	0b0000000000000010
+#	define	DBS_HE_sat	0b0000000000000100
+#	define	DBS_ppO2chg 0b0000000000001000
+
+#	define	DBS_SAT2l	0b0000000000010000
+#	define	DBS_SAT2h	0b0000000000100000
+#	define	DBS_GFLOW2l	0b0000000001000000
+#	define	DBS_GFLOW2h	0b0000000010000000
+
+#	define	DBS_GFHGH2l	0b0000000100000000
+#	define	DBS_GFHGH2h	0b0000001000000000
+#	define	DBS_GASO22l	0b0000010000000000
+#	define	DBS_GASO22h	0b0000100000000000
+
+#	define	DBS_DIST2h 	0b0001000000000000
+#	define	DBS_LAST2h 	0b0010000000000000
+#	define	DBS_DECOO2l	0b0100000000000000
+#	define	DBS_DECOO2h	0b1000000000000000
+
+
+#	define	DBS2_PRES2h 0b0000000000000001
+#	define	DBS2_PRES2l 0b0000000000000010
+#	define	DBS2_SURF2l	0b0000000000000100
+#	define	DBS2_SURF2h	0b0000000000001000
+
+#	define DBS2_DESAT2l 0b0000000000010000
+#	define DBS2_DESAT2h 0b0000000000100000
+#	define	DBS2_GFDneg 0b0000000001000000
+#	define	DBS2_ 0b000000000000000
+
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+#	define	DBS2_ 0b000000000000000
+
+// NDL_at_20mtr
+
+
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#define	WP_FONT_SMALL_HEIGHT	 24
+#define	WP_FONT_MEDIUM_HEIGHT	 32
+#define	WP_FONT_LARGE_HEIGHT	 58
+
+#define oled_rw	PORTA,2,0
+#define oled_rs	PORTE,0,0
+
+#define U8 unsigned char
+#define U16 unsigned int
+
+// IO assembler
+#pragma udata bank0a=0x060
+volatile unsigned char wp_stringstore[26];
+volatile U8 wp_color1;
+volatile U8 wp_color2;
+volatile U8 wp_top;
+volatile U8 wp_leftx2;
+volatile U8 wp_font;
+volatile U8 wp_invert;
+volatile U8 wp_temp_U8;
+// internal C
+#pragma udata bank0b=0x081
+volatile U8 wp_txtptr;
+volatile unsigned char wp_char;
+volatile U8	wp_command;
+volatile U16	wp_data_16bit;
+volatile U8	wp_data_8bit_one;
+volatile U8	wp_data_8bit_two;
+volatile U16	wp_start;
+volatile U16	wp_end;
+volatile U16	wp_i;
+volatile U8 	wp_black;
+// some spare
+volatile U8	wp_debug_U8;
+
+// asm only
+#pragma udata bank0c=0x0D0
+#define LENGTH_kf_bank0	48
+volatile unsigned char keep_free_bank0[LENGTH_kf_bank0];
+
+
+#pragma udata bank1=0x100
+#define LENGTH_kf_bank1	256
+volatile unsigned char keep_free_bank1[LENGTH_kf_bank1]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// 0x24C + 0x24D noch unbenutzt
+
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ //#pragma udata bank7=0x700
+ //const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9a=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! // has to be at the beginning of bank 9 for the asm code!!!
+ #pragma udata bank9b=0x930
+// output:
+ static unsigned int	int_O_DBS_bitfield;					// 0x930	new in v.108
+ static unsigned int	int_O_DBS2_bitfield;				// 0x932	new in v.108
+ static unsigned int	int_O_DBG_pre_bitfield;				// 0x934	new in v.108
+ static unsigned int	int_O_DBG_post_bitfield;			// 0x936	new in v.108
+ static char			char_O_NDL_at_20mtr;				// 0x938	new in v.108 // 0xFF == undefined, max. 254
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+// internal, dbg:
+ static unsigned char	DBG_char_I_deco_model;				// new in v.108
+ static unsigned char	DBG_char_I_depth_last_deco;			// new in v.108
+ static float			DBG_pres_surface;					// new in v.108
+ static float			DBG_GF_low;							// new in v.108
+ static float			DBG_GF_high;						// new in v.108
+ static float			DBG_const_ppO2;						// new in v.108
+ static float			DBG_deco_ppO2_change;				// new in v.108
+ static float			DBG_deco_ppO2;						// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_deco_gas_change;				// new in v.108
+ static float			DBG_float_saturation_multiplier;	// new in v.108
+ static float			DBG_float_desaturation_multiplier;	// new in v.108
+ static float			DBG_float_deco_distance;			// new in v.108
+ static float			DBG_deco_N2_ratio;					// new in v.108
+ static float			DBG_deco_He_ratio;					// new in v.108
+ static float			DBG_N2_ratio;						// new in v.108
+ static float			DBG_He_ratio;						// new in v.108
+ static char			flag_in_divemode;					// new in v.108
+ static	int 			int_dbg_i;							// new in v.108
+ unsigned int 			temp_DBS;
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);
+void DD2_set_column(void);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);
+void DD2_print_column(void);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+void wordprocessor(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank0 - 1;wp_temp_U8++)
+		keep_free_bank0[wp_temp_U8] = 7;
+	keep_free_bank0[LENGTH_kf_bank0 - 1] = 7;
+
+	for(wp_temp_U8=0;wp_temp_U8<LENGTH_kf_bank1 - 1;wp_temp_U8++)
+		keep_free_bank1[wp_temp_U8] = 7;
+	keep_free_bank1[LENGTH_kf_bank1 - 1] = 7;
+
+#if 1
+// new main to test DR-5
+
+wp_top = 10;
+wp_leftx2 = 10;
+wp_color1 = 255;
+wp_color2 = 255;
+wp_font   = 0;
+wp_invert = 0;
+wp_stringstore[0] = ' ';
+wp_stringstore[1] = ' ';
+wp_stringstore[2] = '1';
+wp_stringstore[3] = ':';
+wp_stringstore[4] = 0;
+wordprocessor();
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+/*
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+*/
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***************
+// ***************
+// ** THE FONTS **
+// ***************
+// ***************
+// all new for bigscreen
+
+#pragma romdata font_data_large = 0x09A00
+rom const rom U16 wp_large_data[] =
+{
+#include "ostc90.drx.txt" // length 0x59A
+};
+
+#pragma romdata font_table_large = 0x09FA0
+rom const rom U16 wp_large_table[] =
+{
+#include "ostc90.tbl.txt" // length 0x18
+};
+
+#pragma romdata font_table_medium = 0x0A000
+rom const rom U16 wp_medium_table[] =
+{
+#include "ostc48.tbl.txt" // length 0x22
+};
+
+#pragma romdata font_data_medium = 0x0A024
+rom const rom U16 wp_medium_data[] =
+{
+#include "ostc48.drx.txt" // length 0x374 // geht bis einschl. 0xA398
+};
+
+#pragma romdata font_table_small = 0x0A39A
+rom const rom U16 wp_small_table[] =
+{
+#include "ostc28.tbl.txt" // length 0xE8
+};
+
+#pragma romdata font_data_small = 0x0A484
+rom const rom U16 wp_small_data[] =
+{
+#include "ostc28.drx.txt"
+};
+
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+// moved from 0x0D000 to 0x0C000 in v.108
+
+#pragma code subroutines2 = 0x0C000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------------
+// DBS - debug on start of dive //
+// -------------------------------
+void create_dbs_set_dbg_and_ndl20mtr(void)
+{
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	if(int_O_DBG_pre_bitfield & DBG_RUN)
+		int_O_DBG_pre_bitfield = DBG_RESTART;
+	else
+		int_O_DBG_pre_bitfield = DBG_RUN;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+	DBG_N2_ratio = N2_ratio;
+	DBG_He_ratio = He_ratio;
+	DBG_char_I_deco_model = char_I_deco_model;
+	DBG_char_I_depth_last_deco = char_I_depth_last_deco;
+	DBG_pres_surface = pres_surface;
+	DBG_GF_low = GF_low;
+	DBG_GF_high = GF_high;
+	DBG_const_ppO2 = const_ppO2;
+	DBG_deco_ppO2_change = deco_ppO2_change;
+	DBG_deco_ppO2 = deco_ppO2;
+	DBG_deco_N2_ratio = deco_N2_ratio;
+	DBG_deco_He_ratio = deco_He_ratio;
+	DBG_deco_gas_change = deco_gas_change;
+	DBG_float_saturation_multiplier = float_saturation_multiplier;
+	DBG_float_desaturation_multiplier = float_desaturation_multiplier;
+	DBG_float_deco_distance = float_deco_distance;
+
+	if(char_I_deco_model)
+		int_O_DBS_bitfield |= DBS_mode;
+	if(const_ppO2)
+		int_O_DBS_bitfield |= DBS_ppO2;
+	for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+		if(pres_tissue[int_dbg_i])
+			int_O_DBS_bitfield |= DBS_HE_sat;
+	if(deco_ppO2_change)
+		int_O_DBS_bitfield |= DBS_ppO2chg;
+	if(float_saturation_multiplier < 0.99)
+		int_O_DBS_bitfield |= DBS_SAT2l;
+	if(float_saturation_multiplier > 1.3)
+		int_O_DBS_bitfield |= DBS_SAT2h;
+	if(GF_low < 0.19)
+		int_O_DBS_bitfield |= DBS_GFLOW2l;
+	if(GF_low > 1.01)
+		int_O_DBS_bitfield |= DBS_GFLOW2h;
+	if(GF_high < 0.6)
+		int_O_DBS_bitfield |= DBS_GFHGH2l;
+	if(GF_high > 1.01)
+		int_O_DBS_bitfield |= DBS_GFHGH2h;
+	if((N2_ratio + He_ratio) > 0.95)
+		int_O_DBS_bitfield |= DBS_GASO22l;
+	if((N2_ratio + He_ratio) < 0.05)
+		int_O_DBS_bitfield |= DBS_GASO22h;
+	if(float_deco_distance > 0.25)
+		int_O_DBS_bitfield |= DBS_DIST2h;
+	if(char_I_depth_last_deco > 8)
+		int_O_DBS_bitfield |= DBS_LAST2h;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) > 0.95))
+		int_O_DBS_bitfield |= DBS_DECOO2l;
+	if(DBG_deco_gas_change && ((deco_N2_ratio + deco_He_ratio) < 0.05))
+		int_O_DBS_bitfield |= DBS_DECOO2h;
+	if(pres_respiration > 3.0)
+		int_O_DBS2_bitfield |= DBS2_PRES2h;
+	if(pres_surface - pres_respiration > 0.2)
+		int_O_DBS2_bitfield |= DBS2_PRES2l;
+	if(pres_surface < 0.75)
+		int_O_DBS2_bitfield |= DBS2_SURF2l;
+	if(pres_surface > 1.11)
+		int_O_DBS2_bitfield |= DBS2_SURF2h;
+	if(float_desaturation_multiplier < 0.70)
+		int_O_DBS2_bitfield |= DBS2_DESAT2l;
+	if(float_desaturation_multiplier > 1.01)
+		int_O_DBS2_bitfield |= DBS2_DESAT2h;
+	if(GF_low > GF_high)
+		int_O_DBS2_bitfield |= DBS2_GFDneg;
+}
+
+// -------------------------------
+// DBG - set DBG to end_of_dive //
+// -------------------------------
+void set_dbg_end_of_dive(void)
+{
+	int_O_DBG_pre_bitfield &= (~DBG_RUN);
+	int_O_DBG_post_bitfield &= (~DBG_RUN);
+}
+
+// -------------------------------
+// DBG - NDL at first 20 m. hit //
+// -------------------------------
+void check_ndl(void)
+{
+	if((char_O_NDL_at_20mtr == -1) && (int_I_pres_respiration > 3000))
+	{
+		char_O_NDL_at_20mtr = char_O_nullzeit;
+		if(char_O_NDL_at_20mtr == 255)
+			char_O_NDL_at_20mtr == 254;
+	}
+}
+
+// -------------------------------
+// DBG - multi main during dive //
+// -------------------------------
+void check_dbg(char is_post_check)
+{
+	temp_DBS = 0;
+	if( (DBG_N2_ratio != N2_ratio) || (DBG_He_ratio != He_ratio) )
+		temp_DBS |= DBG_c_gas;
+	if(DBG_const_ppO2 != const_ppO2)
+		temp_DBS |= DBG_c_ppO2;
+	if((DBG_float_saturation_multiplier != float_saturation_multiplier) || (DBG_float_desaturation_multiplier != float_desaturation_multiplier))
+		temp_DBS |= DBG_CdeSAT;
+	if(DBG_char_I_deco_model != char_I_deco_model)
+		temp_DBS |= DBG_C_MODE;
+	if(DBG_pres_surface != pres_surface)
+		temp_DBS |= DBG_C_SURF;
+	if((!DBS_HE_sat) && (!He_ratio))
+		for(int_dbg_i = 16; int_dbg_i < 32; int_dbg_i++)
+			if(pres_tissue[int_dbg_i])
+				temp_DBS |= DBG_HEwoHE;
+	if(DBG_deco_ppO2 != deco_ppO2)
+		temp_DBS |= DBG_C_DPPO2;
+	if((DBG_deco_gas_change != deco_gas_change) || (DBG_deco_N2_ratio != deco_N2_ratio) || (DBG_deco_He_ratio != deco_He_ratio))
+		temp_DBS |= DBG_C_DGAS;
+	if(DBG_float_deco_distance != float_deco_distance)
+		temp_DBS |= DBG_C_DIST;
+	if(DBG_char_I_depth_last_deco != char_I_depth_last_deco)
+		temp_DBS |= DBG_C_LAST;
+	if((DBG_GF_low != GF_low) || (DBG_GF_high != GF_high))
+		temp_DBS |= DBG_C_GF;
+	if(pres_respiration > 13.0)
+		temp_DBS |= DBG_PHIGH;
+	if(pres_surface - pres_respiration > 0.2)
+		temp_DBS |= DBG_PLOW;
+/*
+	if()
+		temp_DBS |= ;
+	if()
+		temp_DBS |= ;
+ */
+	if(is_post_check)
+		int_O_DBG_post_bitfield |= temp_DBS;
+	else
+		int_O_DBG_pre_bitfield |= temp_DBS;
+}
+
+// -------------------------------
+// DBG - prior to calc. of dive //
+// -------------------------------
+void check_pre_dbg(void)
+{
+	check_dbg(0);
+}
+
+// -------------------------------
+// DBG - after decocalc of dive //
+// -------------------------------
+void check_post_dbg(void)
+{
+	check_dbg(1);
+}
+
+
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// -----------
+// dd2 OLD  //
+// -----------
+void DD2_write(void)
+{
+	_asm
+	nop
+	_endasm
+}
+void DD2_write_incon42(void)
+{
+	DD2_write();
+}
+
+void DD2_write_incon24(void)
+{
+	DD2_write();
+}
+void DD2_get_pointer_to_char(void)
+{
+	DD2_write();
+}
+void DD2_set_column(void)
+{
+	DD2_write();
+}
+void DD2_load_background(void)
+{
+	DD2_write();
+}
+void DD2_build_one_line_of_char(void)
+{
+	DD2_write();
+}
+void DD2_print_column(void)
+{
+	DD2_write();
+}
+void DD2_CmdWrite(void)
+{
+	DD2_write();
+}
+void DD2_DataWrite(void)
+{
+	DD2_write();
+}
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000 
+void main_calc_hauptroutine(void) // length 0x0A
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+
+#pragma code main_without_deco = 0x1000C // length 0x06
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+
+#pragma code main_clear_CNS_fraction = 0x10016
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x1001C
+void main_calc_CNS_decrease_15min(void) // length 0x06
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10022
+void main_calc_percentage(void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10028
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10032
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10038
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x1003E
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_wordprocessor = 0x1004E
+void main_wordprocessor(void)
+{
+	wordprocessor();
+}
+
+#pragma code main_gradient_array = 0x10054
+void main_gradient_array(void)
+{
+	calc_gradient_array_only();
+}
+
+#pragma code main_push_tissues = 0x1005A
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+
+#pragma code main_pull_tissues = 0x10060
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x10066
+void main_hash(void)
+{
+hash();
+}
+/*
+#pragma code main_debug = 0x1004E
+void main_debug(void)
+{
+//	debug();
+}
+*/
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+
+	flag_in_divemode = 0;
+	int_O_DBS_bitfield = 0;
+	int_O_DBS2_bitfield = 0;
+	int_O_DBG_pre_bitfield = 0;
+	int_O_DBG_post_bitfield = 0;
+	char_O_NDL_at_20mtr = 255;
+
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+
+	if(!flag_in_divemode)
+	{
+		flag_in_divemode = 1;
+		create_dbs_set_dbg_and_ndl20mtr();
+	}
+	else
+		check_pre_dbg();
+
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			check_ndl();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+	check_post_dbg();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ if(char_I_deco_gas_change)
+ {
+	 deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+	 deco_gas_change = deco_gas_change + float_deco_distance;
+ }
+ else
+	deco_gas_change = 0;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+	if(	(var_e2secs < 0.0000363)
+		|| (var_e2secs > 0.00577)
+		|| (var2_e2secs < 0.0000961)
+		|| (var2_e2secs > 0.150)
+		|| (var_a < 0.231)
+		|| (var_a > 1.27)
+		|| (var_b < 0.504)
+		|| (var_b > 0.966)
+		|| (var2_a < 0.510)
+		|| (var2_a > 1.75)
+		|| (var2_b < 0.423)
+		|| (var2_b > 0.927)
+		)
+		int_O_DBG_pre_bitfield |= DBG_ZH16ERR;
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+	if(flag_in_divemode)
+	{
+		flag_in_divemode = 0;
+		set_dbg_end_of_dive();
+	}
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
+
+void wp_write_command(void)
+{
+_asm
+	bcf		oled_rs
+	nop
+	movff	wp_command,PORTD
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_data(void)
+{
+	wp_data_8bit_one = wp_data_16bit >> 8;
+	wp_data_8bit_two = wp_data_16bit;
+_asm
+	bsf		oled_rs
+	nop
+	movff	wp_data_8bit_one,PORTD
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+	nop
+	movff	wp_data_8bit_two,PORTD
+	nop
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_black(void)
+{
+_asm
+	movff	wp_black,PORTD
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+	nop
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+_endasm
+}
+
+void wp_write_color(void)
+{
+_asm
+	movff	wp_color1,PORTD
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+	nop
+	movff	wp_color2,PORTD
+	bcf		oled_rw
+	nop
+	bsf		oled_rw
+_endasm
+}
+
+void wp_set_window(void)
+{
+	// x axis start ( 0 - 319)
+	wp_command = 0x35;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+	// x axis end ( 0 - 319)
+	wp_command = 0x36;
+	wp_write_command();
+	wp_data_16bit = 319;
+	wp_write_data();
+	// y axis start + end ( 0 - 239 )
+	wp_command = 0x37;
+	wp_write_command();
+	// the bottom part
+	wp_data_16bit = wp_top;
+	if(wp_font == 2)
+		wp_data_16bit += WP_FONT_LARGE_HEIGHT;
+	else if(wp_font == 1)
+		wp_data_16bit += WP_FONT_MEDIUM_HEIGHT;
+	else
+		wp_data_16bit += WP_FONT_SMALL_HEIGHT;
+	wp_data_16bit--;
+	if(wp_data_16bit > 239)
+		wp_data_16bit = 239;
+	// the top part
+	wp_data_16bit |= ((U16)wp_top) << 8;
+	// all together in one 16bit transfer
+	wp_write_data();
+
+	// start
+	wp_command = 0x20;
+	wp_write_command();
+	wp_data_16bit = wp_top;
+	wp_write_data();
+
+	wp_command = 0x21;
+	wp_write_command();
+	wp_data_16bit = ((U16)wp_leftx2) << 1;
+	wp_write_data();
+}
+
+void wp_set_char_font_small(void)
+{
+	if(wp_char == ' ')
+		wp_char = 'ķ';
+
+	if (wp_char > 0x7E) // skip space between ~ and Ą
+		wp_char -= 34;
+
+	if((wp_char < '!') || (wp_char > 0xA1)) // font has 34 chars after ~ // ū + 4 chars limit to end of battery at the moment
+		wp_char = 0x82;	// Ī
+
+	wp_start = wp_small_table[wp_char - '!'];
+	wp_end = wp_small_table[1 + wp_char - '!'];
+}
+
+void wp_set_char_font_medium(void)
+{
+	// space is 3E
+	if (wp_char == 0x27) // 0x27 == '
+		wp_char = 0x3B;
+	if (wp_char == '"')
+		wp_char = 0x3C;
+	if (wp_char == 'm')
+		wp_char = 0x3D;
+	if (wp_char == ' ')
+		wp_char = 0x3E;
+
+	if((wp_char < '.') || (wp_char > 0x3E))
+		wp_char = 0x3E;
+	wp_start = wp_medium_table[wp_char - '.'];
+	wp_end = wp_medium_table[1 + wp_char - '.'];
+}
+
+void wp_set_char_font_large(void)
+{
+	// space is / = 0x2F
+	if (wp_char == ' ')
+		wp_char = 0x2F;
+
+	if((wp_char < '.') || (wp_char > '9'))
+		wp_char = 0x2F;
+	wp_start = wp_large_table[wp_char - '.'];
+	wp_end = wp_large_table[1 + wp_char - '.'];
+}
+
+void wordprocessor(void)
+{
+	wp_set_window();
+
+	// access to GRAM
+	wp_command = 0x22;
+	wp_write_command();
+	_asm
+		bsf		oled_rs
+		nop
+	_endasm
+
+	wp_txtptr = 0;
+	wp_char = wp_stringstore[wp_txtptr];
+
+	while(wp_char)
+	{
+		if(wp_font == 2)
+			wp_set_char_font_large();
+		else if(wp_font == 1)
+			wp_set_char_font_medium();
+		else
+			wp_set_char_font_small();
+
+		wp_black = 0;
+
+			for(wp_i = wp_start; wp_i<wp_end;wp_i++)
+			{
+				if(wp_font == 2)
+					wp_data_16bit = wp_large_data[wp_i / 2];
+				else if(wp_font == 1)
+					wp_data_16bit = wp_medium_data[wp_i / 2];
+				else
+					wp_data_16bit = wp_small_data[wp_i / 2];
+				if(wp_i & 1)
+					wp_temp_U8 = wp_data_16bit & 0xFF;
+				else
+					wp_temp_U8 = wp_data_16bit >> 8;
+				if((wp_temp_U8 & 128))
+				{
+					wp_temp_U8 -= 127;
+					if(wp_invert)
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+					else
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								nop
+								bsf		oled_rw
+								nop
+								bcf		oled_rw
+								nop
+								bsf		oled_rw
+							_endasm
+						}
+					}
+				}
+				else
+				{
+					wp_temp_U8++;
+					if(wp_invert)
+					{
+						_asm
+							movff	wp_black,PORTD
+						_endasm
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							_asm
+								bcf		oled_rw
+								nop
+								bsf		oled_rw
+								nop
+								bcf		oled_rw
+								nop
+								bsf		oled_rw
+							_endasm
+						}
+					}
+					else
+					{
+						while(wp_temp_U8 > 0)
+						{
+							wp_temp_U8--;
+							wp_write_color();
+						}
+					}
+				}
+			}
+		wp_txtptr++;
+		wp_char = wp_stringstore[wp_txtptr];
+	}
+	wp_command = 0x00;
+	wp_write_command();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_deco_main_old_v107.c	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,3453 @@
+/*
+ * p2_deco_main_c_v107.c
+ *
+ *  Created on: 31.03.2009
+ *      Author: chsw
+ */
+
+//#include <p2_deco_header_c_v102d.h>
+
+
+// OSTC - diving computer code
+// Copyright (C) 2008 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+// *****************************
+// ** I N T R O D U C T I O N **
+// *****************************
+//
+// OSTC
+//
+// code:
+// p2_deco_main_c_v101.c
+// part2 of the OSTC code
+// code with constant O2 partial pressure routines
+// under construction !!
+//
+// summary:
+// decompression routines
+// for the OSTC experimental project
+// written by Christian Weikamp
+// last revision __________
+// comments added _________
+//
+// additional files:
+// p2_tables_v100.romdata (other files)
+// 18f4685_ostc_v100.lkr (linker script)
+//
+// history:
+// 01/03/08 v100: first release candidate
+// 03/13/08 v101: start of programming ppO2 code
+// 03/13/25 v101a: backup of interrim version with ppO2 calculation
+// 03/13/25 v101: open circuit gas change during deco
+// 03/13/25 v101: CNS_fraction calculation
+// 03/13/26 v101: optimization of tissue calc routines
+// 07/xx/08 v102a: debug of bottom time routine
+// 09/xx/08 v102d: Gradient Factor Model implemenation
+// 10/10/08 v104: renamed to build v103 for v118 stable
+// 10/14/08	v104: integration of temp_depth_last_deco for Gradient Model
+// 03/31/090 v107: integration of FONT Incon24
+
+//
+// literature:
+// B"uhlmann, Albert: Tauchmedizin; 4. Auflage;
+// 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
+// Morrison, Stuart; 2000; DIY DECOMPRESSION; http://www.lizardland.co.uk/DIYDeco.html
+// Balthasar, Steffen; Dekompressionstheorie I: Neo Haldane Modelle; http://www.txfreak.de/dekompressionstheorie_1.pdf
+// Baker, Erik C.; Clearing Up The Confusion About "Deep Stops"
+// Baker, Erik C.; Understanding M-values; http://www.txfreak.de/understanding_m-values.pdf
+
+
+// *********************
+// ** I N C L U D E S **
+// *********************
+ #include <p18f4685.h>
+ #include <math.h>
+
+// ********************************
+// ** C O N F I G U R A T I O N  **
+// ** for simulation without asm **
+// ********************************
+ #pragma config OSC = IRCIO67
+ #pragma config FCMEN = OFF
+ #pragma config IESO = OFF
+ #pragma config PWRT = ON
+ #pragma config BOREN = OFF
+ #pragma config WDT = OFF
+ #pragma config WDTPS = 128
+ #pragma config MCLRE = ON
+ #pragma config LPT1OSC = OFF
+ #pragma config PBADEN = OFF
+ #pragma config DEBUG = OFF
+ #pragma config XINST = OFF
+ #pragma config LVP = OFF
+ #pragma config STVREN = OFF
+
+// ****************************
+// ** D E F I N E S          **
+// ** missing in  p18f4685.h **
+// ****************************
+#define INT0IF	1
+#define INT1IF	0
+#define TMR1IF	0
+
+#define oled_clk			PORTD, 0,0
+#define oled_data			PORTD, 1,0
+#define oled_en				PORTE, 0,0
+#define oled_rs				PORTE, 1,0
+#define flag5				0x29	// in Bank1
+//#define	no_sensor_int		flag5,7,1	// ; block any further access to pressure sensor
+
+// ***********************
+// ** V A R I A B L E S **
+// ***********************
+// prefixes etc:
+// _O_ = output for use in the assembler code
+// _I_ = input from the assembler code for the c code
+// char_ and int_ = used to identify output and input size
+// var = variable (from b"uhlmann)
+// pres = pressure
+// gtissue = guiding tissue, the one limiting the ascent
+// e2secs = exp of the b"uhlmann formula precalculated for a 2 second step
+// e1min = same for 1 minute step
+// sim = used in simulating the ascent to the surface
+// nullzeit = remaining ground/bottom time for "no deco"
+// hauptroutine = main
+
+#pragma udata bank0a=0x060
+volatile unsigned char dd2_stringstore[17];
+#pragma udata bank0b=0x071
+volatile unsigned char keep_free_bank0[21];
+
+#pragma udata bank0c=0x086
+volatile unsigned char dd2_left;		// 1 - 64
+volatile unsigned char dd2_top;			// 1 - 64
+volatile unsigned char dd2_heightmax; 	// 1 - 37
+volatile unsigned char dd2_oled_brightness_offset; // 0 - 15 (15 is pitch black always)
+volatile unsigned char dd2_fontwidth;	//  8, 12, 21 for Incon16, Incon24, Incon42
+volatile unsigned char dd2_fontheight;	// 14, 21, 37 for "
+volatile unsigned long dd2_pointer;		// for font lut
+volatile unsigned char dd2_i;
+volatile unsigned char dd2_j;
+volatile unsigned char dd2_k;
+volatile unsigned char dd2_char;
+volatile unsigned char dd2_lowbyte;
+volatile unsigned char dd2_temp;
+volatile unsigned char dd2_data;
+volatile unsigned long dd2_base;			// for font lut
+volatile unsigned char dd2_start;			// for font lut
+volatile unsigned char dd2_end;			// for font lut
+
+
+ #pragma udata bank1=0x100
+ const unsigned char keep_free_bank1[256]; // used by the assembler code
+
+ #pragma udata bank2a=0x200
+// output:
+ static unsigned int	int_O_tissue_for_debug[32];
+ static unsigned int	int_O_GF_spare____;						// 0x240
+ static unsigned int	int_O_GF_step;							// 0x242
+ static unsigned int 	int_O_gtissue_limit;					// 0x244
+ static unsigned int 	int_O_gtissue_press;					// 0x246
+ static unsigned int 	int_O_limit_GF_low;						// 0x248
+ static unsigned int 	int_O_gtissue_press_at_GF_low;			// 0x24A
+// ...
+ #pragma udata bank2b=0x24E
+ static unsigned char	char_O_GF_low_pointer;					// 0x24E
+ static unsigned char	char_O_actual_pointer;					// 0x24F
+ #pragma udata bank2c=0x250
+ static unsigned char	char_O_deco_table[32];					// 0x250
+ #pragma udata bank2d=0x270
+ static unsigned char	char_I_table_deco_done[32];
+ #pragma udata bank2e=0x290
+ static unsigned int 	int_O_calc_tissue_call_counter;			// 0x290
+
+
+
+// internal:
+ unsigned char 			lock_GF_depth_list;
+ static float			temp_limit;
+ static float			GF_low;
+ static float			GF_high;
+ static float			GF_delta;
+ static float			GF_temp;
+ static float			GF_step;
+ static float			GF_step2;
+ static float			temp_pres_gtissue;
+ static float			temp_pres_gtissue_diff;
+ static float			temp_pres_gtissue_limit_GF_low;
+ static float			temp_pres_gtissue_limit_GF_low_below_surface;
+ static	unsigned int	temp_depth_limit;
+ static unsigned char	temp_decotime;
+ static unsigned char	temp_gtissue_no;
+ static	unsigned int	temp_depth_last_deco;				// new in v.101
+
+ static unsigned char	temp_depth_GF_low_meter;
+ static unsigned char	temp_depth_GF_low_number;
+ static unsigned char	internal_deco_pointer;
+ static unsigned char	internal_deco_table[32];
+ static float			temp_pres_deco_GF_low;
+
+static unsigned int debug_temp;
+
+
+#pragma udata bank3a=0x300
+static char output[32];
+// used by the math routines
+#pragma udata bank3b=0x380
+volatile float pres_tissue_vault[32];
+ #pragma udata bank4a=0x400
+// internal:
+ unsigned char			ci ; // don't move - used in _asm routines - if moved then modify movlb commands
+ unsigned char 			x;
+ unsigned int 			main_i;
+ unsigned int 			int_temp;
+ unsigned int 			int_temp_decostatus;
+ static float 			pres_respiration;
+ static float			pres_surface;
+ static float			temp1;
+ static float			temp2;
+ static float			temp3;
+ static float			temp4;
+ static float			temp_deco;
+ static float			temp_atem;
+ static float			temp2_atem;
+ static float			temp_tissue;
+ static float			temp_surface;
+ static float			N2_ratio;
+ static float			He_ratio;
+ static float			temp_ratio;
+ static float 			var_a;
+ static float 			var2_a;
+ static float 			var_b;
+ static float 			var2_b;
+ static float 			var_t05nc;
+ static float 			var2_t05nc;
+ static float  			var_e2secs;
+ static float  			var2_e2secs;
+ static float  			var_e1min;
+ static float  			var2_e1min;
+ static float  			var_halftimes;
+ static float  			var2_halftimes;
+ static float			pres_gtissue_limit;
+ static float			temp_pres_gtissue_limit;
+ static float			actual_ppO2;						// new in v.102
+ #pragma udata bank4b=0x480
+ static float			pres_tissue[32];
+
+ #pragma udata bank5=0x500
+// don't move positions in this bank, the registers are addressed directly from assembler code
+// input:
+ static unsigned int	int_I_pres_respiration;				// 0x500
+ static unsigned int	int_I_pres_surface;					// 0x502
+ static unsigned int	int_I_temp;							// 0x504  new in v101
+ static unsigned char	char_I_temp;						// 0x506  new in v101
+ static unsigned char	char_I_actual_ppO2;					// 0x507
+ static unsigned int	int_I_spare_3;
+ static unsigned int	int_I_spare_4;
+ static unsigned int	int_I_spare_5;
+ static unsigned int	int_I_spare_6;
+ static unsigned char	char_I_N2_ratio;					// 0x510
+ static unsigned char	char_I_He_ratio;					// 0x511
+ static unsigned char	char_I_saturation_multiplier;		// for conservatism/safety values 1.0 (no conservatism) to 1.5 (50% faster saturation
+ 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()
+ static unsigned char	char_I_GF_High_percentage;			// 0x514	new in v.102
+ static unsigned char	char_I_GF_Low_percentage;			// 0x515	new in v.102
+ static unsigned char	char_I_spare;					// 0x516
+ static unsigned char	char_I_deco_distance;				// 0x517
+ static unsigned char	char_I_const_ppO2;					// 0x518	new in v.101
+ static unsigned char	char_I_deco_ppO2_change;			// 0x519	new in v.101
+ static unsigned char	char_I_deco_ppO2;					// 0x51A	new in v.101
+ static unsigned char	char_I_deco_gas_change;				// 0x51B	new in v.101
+ static unsigned char	char_I_deco_N2_ratio;				// 0x51C	new in v.101
+ static unsigned char	char_I_deco_He_ratio;				// 0x51D	new in v.101
+ static unsigned char	char_I_depth_last_deco;				// 0x51E	new in v.101 unit: [m]
+ static unsigned char	char_I_deco_model;					// 0x51F	new in v.102	( 1 = MultiGraF, sonst Std. mit (de-)saturation_multiplier)
+// output:
+ static unsigned int	int_O_desaturation_time;			// 0x520
+ static unsigned char	char_O_nullzeit;					// 0x522
+ static unsigned char	char_O_deco_status;					// 0x523
+ static unsigned char	char_O_array_decotime[7];			// 0x524
+ static unsigned char	char_O_array_decodepth[6];			// 0x52B
+ static unsigned char	char_O_ascenttime;					// 0x531
+ static unsigned char	char_O_gradient_factor;				// 0x532
+ static unsigned char	char_O_tissue_saturation[32];		// 0x533
+ static unsigned char	char_O_array_gradient_weighted[16];	// 0x553
+ static unsigned char	char_O_gtissue_no;					// 0x563
+ static unsigned char	char_O_diluent;						// 0x564	new in v.101
+ static unsigned char	char_O_CNS_fraction;				// 0x565	new in v.101
+ static unsigned char	char_O_relative_gradient_GF;		// 0x566	new in v.102
+// internal:
+ static float			pres_tissue_limit[16];
+ static float			sim_pres_tissue_limit[16];
+ static float			pres_diluent;						// new in v.101
+ static float			deco_diluent;						// new in v.101
+ static float			const_ppO2;							// new in v.101
+ static float			deco_ppO2_change;					// new in v.101
+ static float			deco_ppO2;							// new in v.101
+
+
+
+ #pragma udata bank6=0x600
+// internal:
+ static float			sim_pres_tissue[32];
+ static float			sim_pres_tissue_backup[32];
+
+ #pragma udata bank7=0x700
+ const unsigned char keep_free_bank7[256]; // used by the assembler code (DD font2display)
+
+ #pragma udata bank8=0x800
+ static char			md_pi_subst[256];
+
+ #pragma udata bank9=0x900
+// output:
+ static char			md_state[48];		// DONT MOVE !! has to be at the beginning of bank 9 for the asm code!!!
+// internal:
+ static char			md_t;
+ static char			md_buffer[16];
+ static char			md_cksum[16];
+ static char			md_i;
+ static char			md_j;
+ static char			md_temp;
+ static unsigned int	md_pointer;
+ static float			deco_N2_ratio;						// new in v.101
+ static float			deco_He_ratio;						// new in v.101
+ static float			calc_N2_ratio;						// new in v.101
+ static float			calc_He_ratio;						// new in v.101
+ static float			deco_gas_change;					// new in v.101
+ static float			CNS_fraction;						// new in v.101
+ static float			float_saturation_multiplier;		// new in v.101
+ static float			float_desaturation_multiplier;		// new in v.101
+ static float			float_deco_distance;				// new in v.101
+
+
+
+// *************************
+// ** P R O T O T Y P E S **
+// *************************
+void main_calc_hauptroutine(void);
+void main_calc_without_deco(void);
+void main_clear_tissue(void);
+void main_calc_percentage(void);
+void main_calc_wo_deco_step_1_min(void);
+void main_debug(void);
+void main_gradient_array(void);
+void main_hash(void);
+
+void calc_hauptroutine(void);
+void calc_tissue(void);
+void calc_nullzeit(void);
+void backup_sim_pres_tissue(void);
+void restore_sim_pres_tissue(void);
+
+void calc_without_deco(void);
+void clear_tissue(void);
+void calc_ascenttime(void);
+void update_startvalues(void);
+void clear_decoarray(void);
+void update_decoarray(void);
+void sim_tissue_1min(void);
+void sim_tissue_10min(void);
+void calc_gradient_factor(void);
+void calc_gradient_array_only(void);
+void calc_desaturation_time(void);
+void calc_wo_deco_step_1_min(void);
+void calc_tissue_step_1_min(void);
+//void debug(void);
+void hash(void);
+void clear_CNS_fraction(void);
+void calc_CNS_fraction(void);
+void calc_CNS_decrease_15min(void);
+void calc_percentage(void);
+void main(void);
+void calc_hauptroutine_data_input(void);
+void calc_hauptroutine_update_tissues(void);
+void calc_hauptroutine_calc_deco(void);
+void calc_hauptroutine_calc_ascend_to_deco(void);
+//void build_debug_output(void);
+void calc_nextdecodepth_GF(void);
+void copy_deco_table_GF(void);
+void clear_internal_deco_table_GF(void);
+void update_internal_deco_table_GF(void);
+void DD2_write(void);
+void DD2_write_incon42(void);
+void DD2_get_pointer_to_char(void);//dd2_char, &dd2_pointer);
+void DD2_set_column(void);//top, dd2_k);void DD2_load_background(void);//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+void DD2_load_background(void);
+void DD2_build_one_line_of_char(void);//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+void DD2_print_column(void);//&dd2_columnstore, dd2_heightmax);
+void DD2_CmdWrite(void);
+void DD2_DataWrite(void);
+void push_tissues_to_vault(void);
+void pull_tissues_from_vault(void);
+void main_push_tissues_to_vault(void);
+void main_pull_tissues_from_vault(void);
+
+// *******************************
+// ** start                     **
+// ** necessary for compilation **
+// *******************************
+#pragma romdata der_code = 0x0000
+#pragma code der_start = 0x0000
+void der_start(void)
+{
+_asm
+	goto	main
+_endasm
+}
+
+// ***********************************
+// ** main code for simulation /    **
+// ** tests without assembler code  **
+// ** is NOT a part of the OSTC     **
+// ***********************************
+#pragma code main = 0x9000
+void main(void)
+{
+#if 1
+// new main to test DR-5
+
+GF_low = 1.0;
+GF_high = 1.0;
+
+GF_temp = GF_low * GF_high;
+
+clear_CNS_fraction();
+//char_I_const_ppO2 = 100;
+//for (main_i=0;main_i<255;main_i++)
+//{
+//calc_CNS_fraction();
+//} //for
+
+
+
+
+int_I_pres_respiration = 1000;//980;
+int_I_pres_surface = 1000;//980;
+char_I_N2_ratio = 39; //38;
+char_I_He_ratio = 40; //50;
+char_I_deco_distance = 0; // 10 = 1 meter
+char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
+
+char_I_const_ppO2 = 0;
+char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
+char_I_deco_ppO2 = 0;
+
+char_I_deco_gas_change = 0; // [m] 1 = 1 meter
+char_I_deco_N2_ratio = 0;
+char_I_deco_He_ratio = 0;
+
+//char_I_actual_ppO2;					// 0x507
+char_I_GF_High_percentage = 100;			// 0x514	new in v.102
+char_I_GF_Low_percentage = 100;			// 0x515	new in v.102
+
+char_I_saturation_multiplier = 110;
+char_I_desaturation_multiplier = 90;
+
+char_I_deco_model = 0;
+
+main_clear_tissue();
+
+int_I_pres_respiration = 1000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 3000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+int_I_pres_respiration = 5000 + int_I_pres_surface;
+main_calc_wo_deco_step_1_min();
+
+
+int_I_pres_respiration = 6000 + int_I_pres_surface;
+for (main_i=0;main_i<27;main_i++)
+	main_calc_wo_deco_step_1_min();
+
+char_O_deco_status = 255;
+while (char_O_deco_status)
+	main_calc_hauptroutine();
+_asm
+nop
+_endasm
+
+for (main_i=0;main_i<50;main_i++)
+{
+main_calc_hauptroutine();
+}
+int_I_pres_respiration = 10000;
+for (main_i=0;main_i<1500;main_i++)
+{
+main_calc_hauptroutine();
+}
+
+_asm
+nop
+_endasm
+
+
+int_I_pres_respiration = 3000;
+for (main_i=0;main_i<150;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 33;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+int_I_pres_respiration = int_I_pres_respiration - 34;
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+
+_asm
+nop
+_endasm
+while (char_O_deco_status == 1)
+{
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+_asm
+nop
+_endasm
+};
+_asm
+nop
+_endasm
+debug_temp = 60; // [mtr Aufstieg in 10 mtr/min (30steps'2sec/min]
+int_I_pres_respiration = 9980;
+debug_temp = debug_temp * 3;
+for (main_i=0;main_i<debug_temp;main_i++)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+} //for
+_asm
+nop
+_endasm
+#endif
+// -----------------------
+
+} // main
+
+// ******************************************************
+// ******************************************************
+// ** THE FOLLOWING CODE HAS TO BE COPPIED TO THE OSTC **
+// ******************************************************
+// ******************************************************
+
+// ***********************
+// ***********************
+// ** THE SUBROUTINES 2 **
+// ***********************
+// ***********************
+// all new in v.102
+
+#pragma code subroutines2 = 0x0D000	// can be adapted to fit the romdata tables ahead
+
+// -------------------------
+// calc_next_decodepth_GF //
+// -------------------------
+// new in v.102
+void calc_nextdecodepth_GF(void)
+{
+// INPUT, changing during dive:
+// temp_pres_gtissue_limit_GF_low
+// temp_pres_gtissue_limit_GF_low_below_surface
+// temp_pres_gtissue
+// temp_pres_gtissue_diff
+// lock_GF_depth_list
+
+// INPUT, fixed during dive:
+// pres_surface
+// GF_delta
+// GF_high
+// GF_low
+// temp_depth_last_deco
+// float_deco_distance
+
+// OUTPUT
+// GF_step
+// temp_deco
+// temp_depth_limt
+// lock_GF_depth_list
+
+// USES
+// temp1
+// temp2
+// int_temp
+
+	char_I_table_deco_done[0] = 0; // safety if changed somewhere else. Needed for exit
+	if (char_I_deco_model == 1)
+	{
+		if (lock_GF_depth_list == 0)
+		{
+			temp2 =  temp_pres_gtissue_limit_GF_low_below_surface / 0.29985; 					// = ... / 99.95 / 0.003;
+ 			int_temp = (int) (temp2 + 0.99);
+			if (int_temp > 31)
+				int_temp = 31;						//	deepest deco at 93 meter (31 deco stops)
+			if (int_temp < 0)
+				int_temp = 0;
+			temp_depth_GF_low_number = int_temp;
+ 			temp_depth_GF_low_meter = 3 * temp_depth_GF_low_number;
+			temp2 = (float)temp_depth_GF_low_meter * 0.09995;
+			temp_pres_deco_GF_low = temp2 + float_deco_distance + pres_surface;
+			if (temp_depth_GF_low_number == 0)
+				GF_step = 0;
+			else
+				GF_step = GF_delta / (float)temp_depth_GF_low_number;
+			if (GF_step < 0)
+				GF_step = 0;
+			if (GF_step > GF_delta)
+				GF_step = GF_delta;
+			int_O_GF_step = (int)(GF_step * 10000);
+			int_O_limit_GF_low = (int)(temp_pres_deco_GF_low * 1000);
+			int_O_gtissue_press_at_GF_low = (int)(temp_pres_gtissue * 1000);
+			char_O_GF_low_pointer = temp_depth_GF_low_number;
+			lock_GF_depth_list = 1;
+			internal_deco_pointer = 0;
+		}
+		if (internal_deco_pointer == 0)		// new run
+		{
+			internal_deco_pointer = temp_depth_GF_low_number;
+			GF_temp = GF_high - ((float)internal_deco_pointer * GF_step);
+			int_temp = char_I_table_deco_done[internal_deco_pointer];
+			output[8] = int_temp;
+			output[9] = 33;
+		}
+		else
+		{
+			int_temp = 1;
+		}
+		while (int_temp == 1)
+		{
+			int_temp = internal_deco_pointer - 1;
+			if (int_temp == 1)								// new in v104
+			{
+				temp2 = (float)(temp_depth_last_deco * int_temp) * 0.09995;
+				GF_step2 = GF_step/3.0 * ((float)(6 - temp_depth_last_deco));
+			}
+			else
+			if (int_temp == 0)
+			{
+				temp2 = 0.0;
+				GF_step2 = GF_high - GF_temp;
+			}
+			else
+			{
+				temp2 = (float)(3 *int_temp) * 0.09995;
+				GF_step2 = GF_step;
+			}
+			temp2 = temp2 + pres_surface; // next deco stop to be tested
+			temp1 = ((GF_temp + GF_step2)* temp_pres_gtissue_diff) + temp_pres_gtissue;	// upper limit (lowest pressure allowed) // changes GF_step2 in v104
+			if (temp1 > temp2) // check if ascent to next deco stop is ok
+			{
+				int_temp = 0;	// no
+			}
+			else
+			{
+				internal_deco_pointer = int_temp;
+				GF_temp = GF_temp + GF_step2; // changed in v104
+				int_temp = char_I_table_deco_done[internal_deco_pointer]; // yes and check for ascent to even next stop if deco_done is set
+			}
+		} // while
+		if (internal_deco_pointer > 0)
+		{
+			temp2 = (float)(0.29985 * internal_deco_pointer);
+			temp_deco = temp2 + float_deco_distance + pres_surface;
+			if (internal_deco_pointer == 1)						// new in v104
+				temp_depth_limit = temp_depth_last_deco;
+			else
+				temp_depth_limit = 3 * internal_deco_pointer;
+			if (output[9] == 33)
+			{
+				output[9] = internal_deco_pointer;
+				output[10] = char_I_table_deco_done[internal_deco_pointer];
+				output[12] = output[12] + 1;
+				if (output[12] == 100)
+					output[12] = 0;
+			}
+		}
+		else	// 	if (char_I_deco_model == 1)
+		{
+			temp_deco = pres_surface;
+			temp_depth_limit = 0;
+		}
+	}
+	else
+	{
+		// calc_nextdecodepth - original
+		// optimized in v.101
+		// depth_last_deco included in v.101
+
+		temp1 = temp_pres_gtissue_limit - pres_surface;
+		if (temp1 >= 0)
+ 		{
+ 			temp1 = temp1 / 0.29985; 									// = temp1 / 99.95 / 0.003;
+ 			temp_depth_limit = (int) (temp1 + 0.99);
+ 			temp_depth_limit = 3 * temp_depth_limit; 					// depth for deco [m]
+ 			if (temp_depth_limit == 0)
+  				temp_deco = pres_surface;
+ 			else
+  			{
+  				if (temp_depth_limit < temp_depth_last_deco)
+					temp_depth_limit = temp_depth_last_deco;
+  				temp1 = (float)temp_depth_limit * 0.09995;
+  				temp_deco = temp1 + float_deco_distance + pres_surface; 	// depth for deco [bar]
+  			} // if (temp_depth_limit == 0)
+ 		} // if (temp1 >= 0)
+		else
+ 		{
+ 			temp_deco = pres_surface;
+ 			temp_depth_limit = 0;
+ 		} // if (temp1 >= 0)
+	} // calc_nextdecodepth original
+} // calc_nextdecodepth_GF
+
+
+#if 0
+void 			build_debug_output(void)
+{
+output[0] = 0; // not used in asm PLED output
+output[1] = (int) (GF_low * 100);
+output[2] = (int) (GF_high * 100);
+output[3] = (int) (GF_step * 100);
+output[4] = (int) temp_depth_GF_low_number;
+output[5] = (int) temp_depth_GF_low_meter;
+//output[6]
+output[7] = (int) internal_deco_pointer;
+//output[8] = char_I_table_deco_done[temp_depth_GF_low_number]
+//output[9] = internal_deco_pointer @ new run
+//output[10] = char_I_table_deco_done[internal_deco_pointer] @ new run
+output [11] = (int) (temp_pres_deco_GF_low * 10);
+}	// build_debug_output
+#endif
+
+// ---------------------
+// copy_deco_table_GF //
+// ---------------------
+// new in v.102
+void copy_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		int_temp = 32;
+		for (ci=0;ci<int_temp;ci++)
+			char_O_deco_table[ci] = internal_deco_table[ci];
+	}
+}		// copy_deco_table_GF
+
+
+// ------------------------------
+// clear_internal_deco_table_GF//
+// ------------------------------
+// new in v.102
+void clear_internal_deco_table_GF(void)
+{
+	if (char_I_deco_model == 1)
+	{
+		for (ci=0;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+		{
+			internal_deco_table[ci] = 0;
+		}
+	}
+}	// clear_internal_deco_table_GF
+
+
+// --------------------------------
+// update_internal_deco_table_GF //
+// --------------------------------
+// new in v.102
+void update_internal_deco_table_GF(void)
+{
+	if ((char_I_deco_model == 1) && (internal_deco_table[internal_deco_pointer] < 255))
+		internal_deco_table[internal_deco_pointer] = internal_deco_table[internal_deco_pointer] + 1;
+}	// update_internal_deco_table_GF
+
+
+// ---------------------
+// temp_tissue_safety //
+// ---------------------
+// outsourced in v.102
+void temp_tissue_safety(void)
+{
+	if (char_I_deco_model == 1)
+	{
+	}
+	else
+	{
+		if (temp_tissue < 0.0)
+			temp_tissue = temp_tissue * float_desaturation_multiplier;
+ 		else
+			temp_tissue = temp_tissue * float_saturation_multiplier;
+	}
+} // temp_tissue_safety
+
+// ---------------------
+// dd2_write_incon42  //
+// ---------------------
+void DD2_write_incon42(void)
+{
+//dd2_fontwidth	= 21;
+//dd2_fontheight  = 30;
+dd2_fontwidth	= 19;
+dd2_fontheight  = 28;
+dd2_base = 0x0F500;
+dd2_start = '0';
+dd2_end = '9';
+DD2_write();
+}
+
+// ---------------------
+// dd2_write_incon24  //
+// ---------------------
+void DD2_write_incon24(void)
+{
+dd2_fontwidth	= 12;
+dd2_fontheight  = 16;
+dd2_base = 0x0E100;
+dd2_start = '.';
+dd2_end = '9' + 5;
+DD2_write();
+}
+
+
+void DD2_write(void)
+{
+	dd2_i = 0;
+_asm
+	movff	dd2_i, POSTINC2 // write 0x00 at the end of dd2_strinstore[]
+	bsf		oled_rs
+_endasm
+	dd2_stringstore[16] = 0;	// safety if more than 16 letters (max at font incon16) are written, the other space is used by font remap
+	if (dd2_top == 0) dd2_top = 1;
+	if (dd2_left == 0) dd2_left = 1;
+	if (dd2_heightmax > dd2_fontheight) dd2_heightmax = dd2_fontheight;
+	if ((dd2_top + dd2_heightmax) > 65) dd2_heightmax = 65 - dd2_top;
+
+	dd2_k = dd2_left;
+	dd2_j = 0;
+	dd2_char = dd2_stringstore[dd2_j++];
+	DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+	dd2_i = 0;
+	dd2_lowbyte = 1;
+
+while (dd2_char != 0)
+{
+		if (dd2_lowbyte == 1)	DD2_load_background();//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+		DD2_build_one_line_of_char();	//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte); 	// dd2_heightmax
+		dd2_lowbyte = dd2_lowbyte ^ 1;
+		if (dd2_lowbyte == 1)
+		{
+			DD2_set_column();//top, dd2_k); 				//
+			if(dd2_k < 64) dd2_k++;
+			DD2_print_column();//&dd2_columnstore, dd2_heightmax);				// dd2_column_store, dd2_heightmax
+		}
+		dd2_i++;
+		if ((dd2_i >= dd2_fontwidth) | (((dd2_char == '.') |(dd2_char == ':') | (dd2_char == '<')) & (dd2_i >= 4)))
+		{
+			dd2_char = dd2_stringstore[dd2_j++];
+			DD2_get_pointer_to_char();//dd2_char, &dd2_pointer);
+			dd2_i = 0;
+		}
+}
+}		// void dd2_write(void)
+
+void DD2_get_pointer_to_char(void)//dd2_char, &dd2_pointer);
+{
+		if((dd2_char < dd2_start) | (dd2_char > dd2_end))
+		{
+			dd2_pointer = 0;
+			dd2_temp = 0;
+		}
+		else
+		{
+			dd2_pointer = dd2_char - dd2_start;
+			dd2_pointer = dd2_pointer * ((dd2_fontheight+1)/2);
+			dd2_pointer = dd2_pointer * dd2_fontwidth;
+			dd2_pointer += dd2_base;
+			if((dd2_char == '.') | (dd2_char == ':') | (dd2_char == '<'))
+			{
+				dd2_pointer += 2 * dd2_fontheight;
+			}
+
+		}
+}		// void DD2_get_pointer_to_char(void)
+
+void DD2_set_column(void)//top, dd2_k);
+{
+	dd2_data = 0x75;
+	DD2_CmdWrite();
+	dd2_data = dd2_top - 1;
+	DD2_CmdWrite();
+	dd2_data = 0x3f;
+	DD2_CmdWrite();
+
+	dd2_data = 0x15;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+	dd2_data = dd2_k - 1;
+	DD2_CmdWrite();
+}		// DD2_set_column()
+
+void DD2_load_background(void)//&dd2_columnstore, &dd2_background, dd2_top, dd2_left, dd2_heightmax);
+{
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+		md_pi_subst[dd2_temp] = 0x00;
+}		// void DD2_load_background()
+
+void DD2_build_one_line_of_char(void)//&dd2_columnstore, &dd2_pointer, dd2_fontheight, dd2_lowbyte);
+{
+	if (dd2_pointer != 0)
+	{
+		dd2_temp = (char)(dd2_pointer & 255);
+_asm
+		movff	dd2_temp,TBLPTRL
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 8) & 255);
+_asm
+		movff	dd2_temp,TBLPTRH
+_endasm
+		dd2_temp = (char)((dd2_pointer >> 16)& 255);
+_asm
+		movff	dd2_temp,TBLPTRU
+_endasm
+
+		for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp += 2)
+		{
+_asm
+			TBLRDPOSTINC
+			movff	TABLAT,dd2_data
+_endasm
+			if (dd2_oled_brightness_offset != 0)
+			{
+				if ((dd2_oled_brightness_offset << 4) < (dd2_data & 0xF0))
+					dd2_data = dd2_data - (dd2_oled_brightness_offset << 4);
+				if ((dd2_oled_brightness_offset) < (dd2_data & 0x0F))
+					dd2_data = dd2_data - dd2_oled_brightness_offset;
+			}
+			if (dd2_lowbyte == 1)
+			{
+				md_pi_subst[dd2_temp]   = dd2_data & 0xF0;
+				md_pi_subst[dd2_temp+1] = (dd2_data << 4) & 0xF0;
+			}
+			else
+			{
+				md_pi_subst[dd2_temp]   = (md_pi_subst[dd2_temp] & 0xF0) | ((dd2_data >> 4) & 0x0F);
+				md_pi_subst[dd2_temp+1] = (md_pi_subst[dd2_temp+1] & 0xF0) | (dd2_data & 0x0F);
+			}
+		}//for
+		dd2_pointer += (dd2_fontheight+1)/2;
+	}//if
+}		//
+
+void DD2_print_column(void)//&dd2_columnstore, dd2_heightmax);
+{
+_asm
+		bsf	oled_rs
+_endasm
+	for(dd2_temp = 0; dd2_temp < dd2_heightmax; dd2_temp++)
+	{
+		dd2_data = md_pi_subst[dd2_temp];
+		DD2_DataWrite();
+	}
+}		// void DD2_print_column(void)
+
+//; -----------------------------
+//; DD Write Cmd via W
+//; two jump_ins:
+//;  DD_CmdWrite and DD_CmdWrite2
+//; -----------------------------
+void DD2_CmdWrite(void)
+{
+_asm
+	bcf		oled_rs
+_endasm
+	DD2_DataWrite();
+}
+
+void DD2_DataWrite(void)
+{
+_asm
+	movlb	1
+//	bsf		no_sensor_int					// flag5, no_sensor_int
+	bcf		oled_en
+	movlb	0
+	bcf		oled_clk				//; CLK=0
+	btfsc	dd2_data,7,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,7,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,6,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,6,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,5,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,5,1
+	bcf		oled_data				//;
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,4,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,4,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,3,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,3,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,2,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,2,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,1,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,1,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	btfsc	dd2_data,0,1				//; Bit
+	bsf		oled_data
+	bcf		oled_clk				//; CLK=0
+	btfss	dd2_data,0,1
+	bcf		oled_data
+	bsf		oled_clk				//; CLK=1
+	bsf		oled_en					//; CS#=1
+	movlb	1
+//	bcf		no_sensor_int					// flag5, no_sensor_int
+	movlb	0
+_endasm
+	dd2_data	= 0; // to be sure that C knows we are in Bank0
+}
+#pragma romdata font_incon_24h15 = 0x0E100
+ rom const rom unsigned char incon24h15[] =
+ {
+		  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xff, 0xa0
+		 ,0x00, 0x00, 0x00, 0x00, 0x5c, 0xff, 0x91, 0x00
+		 ,0x00, 0x00, 0x00, 0x6d, 0xfe, 0x71, 0x00, 0x00
+		 ,0x00, 0x01, 0x7e, 0xfd, 0x60, 0x00, 0x00, 0x00
+		 ,0x01, 0x8f, 0xfd, 0x50, 0x00, 0x00, 0x00, 0x00
+		 ,0x9f, 0xfb, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x72, 0x00, 0x00
+		 ,0x00, 0x9f, 0xfe, 0xdc, 0xdf, 0xff, 0xb2, 0x00
+		 ,0x1d, 0xf8, 0x20, 0x00, 0x05, 0xfd, 0xff, 0x30
+		 ,0xaf, 0x30, 0x00, 0x00, 0x9f, 0x90, 0x2e, 0xd0
+		 ,0xf8, 0x00, 0x00, 0x2c, 0xf5, 0x00, 0x06, 0xf0
+		 ,0xf8, 0x00, 0x04, 0xed, 0x30, 0x00, 0x05, 0xf0
+		 ,0xaf, 0x30, 0x8f, 0xb1, 0x00, 0x00, 0x0c, 0xe0
+		 ,0x1d, 0xfd, 0xf8, 0x00, 0x00, 0x16, 0xdf, 0x40
+		 ,0x00, 0x9f, 0xff, 0xdc, 0xde, 0xff, 0xc3, 0x00
+		 ,0x00, 0x01, 0x69, 0xbc, 0xca, 0x73, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x02, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30
+		 ,0x0a, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x2f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0xaf, 0x97, 0x77, 0x77, 0x77, 0x77, 0x79, 0xf0
+		 ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x26, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd0
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40
+		 ,0x07, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0
+		 ,0x4f, 0x80, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0xf0
+		 ,0xcc, 0x00, 0x00, 0x00, 0x02, 0xef, 0x57, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0x2e, 0xe2, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x01, 0xde, 0x20, 0x07, 0xf0
+		 ,0xce, 0x10, 0x00, 0x2d, 0xe2, 0x00, 0x07, 0xf0
+		 ,0x4f, 0xd6, 0x58, 0xfe, 0x30, 0x00, 0x07, 0xf0
+		 ,0x06, 0xff, 0xff, 0xb1, 0x00, 0x00, 0x07, 0xf0
+		 ,0x00, 0x14, 0x52, 0x00, 0x00, 0x00, 0x05, 0x80
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
+		 ,0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x50
+		 ,0x6f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xd0
+		 ,0xdb, 0x00, 0x00, 0x59, 0x00, 0x00, 0x07, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x04, 0xf0
+		 ,0xea, 0x00, 0x00, 0xcf, 0x10, 0x00, 0x06, 0xf0
+		 ,0x9f, 0x30, 0x07, 0xff, 0x90, 0x00, 0x1e, 0xe0
+		 ,0x1e, 0xfc, 0xdf, 0x87, 0xfb, 0x79, 0xef, 0x50
+		 ,0x01, 0x9d, 0xc6, 0x00, 0x7e, 0xff, 0xd5, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x06, 0xff, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x02, 0xcf, 0x69, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x7f, 0xb1, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x2c, 0xe6, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x07, 0xfb, 0x10, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0xcf, 0xfc, 0xcc, 0xcc, 0xce, 0xfd, 0xdd, 0xd0
+		 ,0xde, 0xee, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xe0
+		 ,0x00, 0x00, 0x00, 0x00, 0x09, 0xe0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00
+		 ,0x78, 0xab, 0xcd, 0xed, 0x00, 0x00, 0xce, 0x20
+		 ,0xff, 0xed, 0xcc, 0xfa, 0x00, 0x00, 0x5f, 0xb0
+		 ,0xf9, 0x00, 0x06, 0xf0, 0x00, 0x00, 0x08, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xb0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf9, 0x00, 0x08, 0xf3, 0x00, 0x00, 0x0b, 0xf0
+		 ,0xf9, 0x00, 0x01, 0xfe, 0x62, 0x13, 0xbf, 0x90
+		 ,0xf9, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xfb, 0x00
+		 ,0x11, 0x00, 0x00, 0x01, 0x6a, 0xa9, 0x40, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x03, 0x56, 0x65, 0x30, 0x00, 0x00
+		 ,0x00, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x00
+		 ,0x08, 0xfe, 0x96, 0x8f, 0x95, 0x6a, 0xff, 0x30
+		 ,0x6f, 0x90, 0x01, 0xf8, 0x00, 0x00, 0x3e, 0xd0
+		 ,0xec, 0x00, 0x08, 0xf0, 0x00, 0x00, 0x06, 0xf0
+		 ,0xf6, 0x00, 0x0a, 0xe0, 0x00, 0x00, 0x04, 0xf0
+		 ,0xf7, 0x00, 0x07, 0xf3, 0x00, 0x00, 0x09, 0xf0
+		 ,0xcd, 0x10, 0x01, 0xef, 0x72, 0x13, 0xaf, 0x90
+		 ,0x4d, 0x20, 0x00, 0x2d, 0xff, 0xff, 0xf9, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x47, 0x86, 0x10, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90
+		 ,0xfa, 0x00, 0x00, 0x00, 0x00, 0x39, 0xef, 0xf0
+		 ,0xfa, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xe9, 0x40
+		 ,0xfa, 0x00, 0x05, 0xbf, 0xff, 0x94, 0x00, 0x00
+		 ,0xfa, 0x18, 0xef, 0xfb, 0x50, 0x00, 0x00, 0x00
+		 ,0xfe, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x02, 0x78, 0x50, 0x00
+		 ,0x03, 0xad, 0xb4, 0x00, 0x7f, 0xff, 0xfc, 0x00
+		 ,0x3f, 0xfc, 0xff, 0x66, 0xfa, 0x43, 0xaf, 0xa0
+		 ,0xcd, 0x10, 0x1c, 0xfe, 0x70, 0x00, 0x0b, 0xf0
+		 ,0xf5, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x05, 0xf0
+		 ,0xf5, 0x00, 0x00, 0xbf, 0x10, 0x00, 0x04, 0xf0
+		 ,0xec, 0x00, 0x07, 0xff, 0xb0, 0x00, 0x0a, 0xf0
+		 ,0x6f, 0xd9, 0xcf, 0x78, 0xfb, 0x32, 0x9f, 0x90
+		 ,0x07, 0xef, 0xe6, 0x00, 0x9f, 0xff, 0xfb, 0x00
+		 ,0x00, 0x01, 0x00, 0x00, 0x03, 0x88, 0x50, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x03, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x04, 0xdf, 0xff, 0xfb, 0x10, 0x00, 0x0b, 0x60
+		 ,0x4f, 0xd7, 0x45, 0x9f, 0xd0, 0x00, 0x1c, 0xe0
+		 ,0xdd, 0x00, 0x00, 0x05, 0xf5, 0x00, 0x05, 0xf0
+		 ,0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x04, 0xf0
+		 ,0xf8, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x08, 0xf0
+		 ,0xbe, 0x20, 0x00, 0x06, 0xf2, 0x00, 0x5f, 0xa0
+		 ,0x2e, 0xf9, 0x54, 0x7f, 0x94, 0x7c, 0xfc, 0x00
+		 ,0x02, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0x70, 0x00
+		 ,0x00, 0x01, 0x46, 0x77, 0x75, 0x30, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x06, 0xa1, 0x00, 0x00, 0x09, 0x80
+		 ,0x00, 0x00, 0x1f, 0xf9, 0x00, 0x00, 0x6f, 0xf0
+		 ,0x00, 0x00, 0x0d, 0xf5, 0x00, 0x00, 0x3f, 0xe0
+		 ,0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xba, 0xae, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xe9, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x97, 0x8c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x75, 0x6a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xff, 0xfd, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xa8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x2c, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xdd, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf2, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0xf0, 0x00, 0x4f, 0x10, 0x00, 0x00, 0x00, 0x00
+		 ,0xea, 0x23, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x4f, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10
+		 ,0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x9f, 0xa7, 0x77, 0x77, 0x77, 0x70
+		 ,0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xff, 0xcb, 0xbb, 0xbb, 0xbb, 0xb0
+		 ,0x00, 0x00, 0x4f, 0xfe, 0xee, 0xee, 0xee, 0xe0
+		 ,0x00, 0x00, 0xab, 0x20, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x01, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00
+		 ,0x00, 0x02, 0xfa, 0x55, 0x55, 0x55, 0x55, 0x50
+		 ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf0
+		 ,0x00, 0x00, 0x02, 0x44, 0x44, 0x44, 0x44, 0x40
+ };
+
+#pragma romdata font_incon_42 = 0x0F500
+ rom const rom unsigned char incon42[] =
+ {
+	 // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+	  ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+	  ,0x00, 0xbf, 0xff, 0xc7, 0x65, 0x43, 0x22, 0x33, 0x57, 0xbf, 0xff, 0xfd, 0x20, 0x00
+	  ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6e, 0xff, 0xd1, 0x00
+	  ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xfa, 0x00
+	  ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0x20
+	  ,0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x60
+	  ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+	  ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+	  ,0xcf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+	  ,0x4f, 0xfe, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+	  ,0x07, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+	  ,0x00, 0x5e, 0xff, 0xfb, 0x98, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+	  ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+	  ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+	  ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+	 // ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+#if 0
+// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+#endif
+//
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ //
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+#if 0
+#pragma romdata font_incon_42 = 0x0E000
+ rom const rom unsigned char incon42[] =
+ {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x03, 0x7a, 0xcd, 0xee, 0xdc, 0xa8, 0x40, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x18, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x92, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xef, 0xff, 0xff, 0xdc, 0xbb, 0xce, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00
+ ,0x00, 0x00, 0xbf, 0xff, 0xc7, 0x20, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x0b, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x6e, 0xff, 0xd1, 0x00
+ ,0x00, 0x7f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x01, 0xbf, 0xfa, 0x00
+ ,0x00, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xe5, 0x00, 0x00, 0x0d, 0xff, 0x20
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x02, 0xcf, 0xfc, 0x20, 0x00, 0x00, 0x05, 0xff, 0x60
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xff, 0x90, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x02, 0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x00, 0xcf, 0xf3, 0x00, 0x01, 0xcf, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x00, 0x4f, 0xfe, 0x50, 0x4e, 0xff, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf8, 0x00
+ ,0x00, 0x07, 0xff, 0xfd, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xb0, 0x00
+ ,0x00, 0x00, 0x5e, 0xff, 0xff, 0xd8, 0x54, 0x33, 0x34, 0x58, 0xbf, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x50, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x01, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x40, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x77, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x1f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00
+ ,0x00, 0x00, 0x9f, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x02, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0xbf, 0xfc, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x79, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0x00
+ ,0x00, 0x00, 0xbf, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0x00
+ ,0x00, 0x0a, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0x00
+ ,0x00, 0x4f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xdb, 0xff, 0x00
+ ,0x00, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf8, 0x08, 0xff, 0x00
+ ,0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfe, 0x40, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xd2, 0x00, 0x08, 0xff, 0x00
+ ,0x04, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xfd, 0x10, 0x00, 0x08, 0xff, 0x00
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd1, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xfe, 0x20, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x9f, 0xfa, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x2e, 0xff, 0xd6, 0x21, 0x38, 0xef, 0xfd, 0x20, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x59, 0xbb, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x30, 0x00
+ ,0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xd0, 0x00
+ ,0x00, 0x1e, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xf8, 0x00
+ ,0x00, 0x7f, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x95, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x01, 0xff, 0x70, 0x00, 0x00, 0x00, 0x0c, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x03, 0xff, 0x50, 0x00, 0x00, 0x00, 0x0e, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x70
+ ,0x03, 0xff, 0x60, 0x00, 0x00, 0x00, 0x2f, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0x30
+ ,0x00, 0xbf, 0xf4, 0x00, 0x00, 0x02, 0xef, 0xff, 0x70, 0x00, 0x00, 0x00, 0x2f, 0xfe, 0x00
+ ,0x00, 0x4f, 0xfe, 0x60, 0x00, 0x5e, 0xfd, 0xbf, 0xf5, 0x00, 0x00, 0x03, 0xef, 0xf7, 0x00
+ ,0x00, 0x09, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x2f, 0xff, 0xb6, 0x56, 0xbf, 0xff, 0xc0, 0x00
+ ,0x00, 0x00, 0x8f, 0xff, 0xff, 0xfe, 0x40, 0x04, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00
+ ,0x00, 0x00, 0x02, 0x8c, 0xdb, 0x71, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x66, 0x30, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xd4, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xef, 0xf8, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0xbf, 0xfc, 0x30, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x70, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x2c, 0xff, 0xb2, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x07, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x03, 0xcf, 0xfa, 0x10, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x8f, 0xff, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, 0xea, 0xaa, 0xaa, 0xaa, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+ ,0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xdf, 0xd4, 0x44, 0x44, 0x44, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xc0, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x72, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00
+ ,0x01, 0xab, 0xcd, 0xef, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x80, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x28, 0xff, 0xf3, 0x00
+ ,0x02, 0xff, 0xda, 0xa9, 0x87, 0x67, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfb, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0d, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0e, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x0b, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x30
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x06, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xfd, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0xdf, 0xfd, 0x40, 0x00, 0x00, 0x29, 0xff, 0xf5, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0xba, 0xbd, 0xff, 0xff, 0x90, 0x00
+ ,0x02, 0xff, 0x70, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00
+ ,0x01, 0x55, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdf, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x42, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x33, 0x33, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x49, 0xce, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x71, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00
+ ,0x00, 0x00, 0x3d, 0xff, 0xff, 0xfc, 0xba, 0xff, 0xfb, 0xab, 0xef, 0xff, 0xfd, 0x20, 0x00
+ ,0x00, 0x04, 0xff, 0xfe, 0x83, 0x00, 0x1c, 0xfd, 0x20, 0x00, 0x02, 0x8e, 0xff, 0xd1, 0x00
+ ,0x00, 0x1e, 0xff, 0x90, 0x00, 0x00, 0xbf, 0xe1, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xf9, 0x00
+ ,0x00, 0xaf, 0xf7, 0x00, 0x00, 0x05, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x10
+ ,0x01, 0xff, 0xb0, 0x00, 0x00, 0x0a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x04, 0xff, 0x50, 0x00, 0x00, 0x0d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x70
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x0a, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0x30
+ ,0x03, 0xff, 0x70, 0x00, 0x00, 0x05, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0xef, 0xe1, 0x00, 0x00, 0x00, 0xcf, 0xfd, 0x50, 0x00, 0x00, 0x28, 0xff, 0xf4, 0x00
+ ,0x00, 0x7f, 0xfd, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xdb, 0xcd, 0xff, 0xff, 0x70, 0x00
+ ,0x00, 0x0c, 0xd2, 0x00, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x00, 0x00
+ ,0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9d, 0xff, 0xfe, 0xb6, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xcc, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xef, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x9e, 0xff, 0xff, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xdf, 0xff, 0xff, 0xfe, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xff, 0xd9, 0x40, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x00, 0x05, 0xbf, 0xff, 0xff, 0xfd, 0x83, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x00, 0x39, 0xef, 0xff, 0xff, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x90, 0x00, 0x6c, 0xff, 0xff, 0xfe, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0x92, 0x8e, 0xff, 0xff, 0xfb, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xef, 0xff, 0xff, 0xd7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xff, 0xfd, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x02, 0xba, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x67, 0x62, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x42, 0x00, 0x00, 0x00, 0x04, 0xdf, 0xff, 0xff, 0xb2, 0x00, 0x00
+ ,0x00, 0x00, 0x3c, 0xff, 0xff, 0xc4, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x00
+ ,0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0x70, 0x08, 0xff, 0xfb, 0x77, 0xaf, 0xff, 0xe1, 0x00
+ ,0x00, 0x3f, 0xff, 0xa7, 0x8d, 0xff, 0xf6, 0x4f, 0xfc, 0x20, 0x00, 0x02, 0xdf, 0xf9, 0x00
+ ,0x00, 0xbf, 0xe3, 0x00, 0x00, 0x8f, 0xfe, 0xdf, 0xb0, 0x00, 0x00, 0x00, 0x2e, 0xff, 0x00
+ ,0x01, 0xff, 0x60, 0x00, 0x00, 0x08, 0xff, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x08, 0xff, 0x40
+ ,0x05, 0xff, 0x10, 0x00, 0x00, 0x00, 0xcf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x60
+ ,0x06, 0xff, 0x20, 0x00, 0x00, 0x00, 0x5f, 0xff, 0x10, 0x00, 0x00, 0x00, 0x05, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x03, 0xef, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x0a, 0xff, 0x20
+ ,0x00, 0xdf, 0xf6, 0x00, 0x00, 0x5e, 0xfc, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x4f, 0xfd, 0x00
+ ,0x00, 0x4f, 0xff, 0xc8, 0x9d, 0xff, 0xf3, 0x3f, 0xff, 0xa2, 0x00, 0x06, 0xff, 0xf5, 0x00
+ ,0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xdc, 0xef, 0xff, 0xa0, 0x00
+ ,0x00, 0x00, 0x4c, 0xff, 0xff, 0x91, 0x00, 0x00, 0x5e, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00, 0x00, 0x01, 0x8e, 0xff, 0xfb, 0x40, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x01, 0x7d, 0xff, 0xff, 0xea, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00
+ ,0x00, 0x00, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xe2, 0x00
+ ,0x00, 0x08, 0xff, 0xff, 0xb9, 0x9b, 0xef, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0xfa, 0x00
+ ,0x00, 0x4f, 0xff, 0x70, 0x00, 0x00, 0x05, 0xef, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0xff, 0x10
+ ,0x00, 0xdf, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 0x10, 0x00, 0x00, 0x06, 0xff, 0x50
+ ,0x03, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0x50, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x05, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x04, 0xff, 0x60
+ ,0x06, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x70, 0x00, 0x00, 0x07, 0xff, 0x40
+ ,0x04, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0x40, 0x00, 0x00, 0x0d, 0xfe, 0x00
+ ,0x00, 0xef, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xfd, 0x00, 0x00, 0x00, 0x9f, 0xf8, 0x00
+ ,0x00, 0x7f, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x7f, 0xf4, 0x00, 0x00, 0x1a, 0xff, 0xd1, 0x00
+ ,0x00, 0x0b, 0xff, 0xfb, 0x52, 0x00, 0x08, 0xff, 0x60, 0x13, 0x6a, 0xff, 0xfe, 0x20, 0x00
+ ,0x00, 0x00, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xc2, 0x00, 0x00
+ ,0x00, 0x00, 0x04, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x02, 0x69, 0xcd, 0xef, 0xff, 0xed, 0xb9, 0x62, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+#endif
+
+// **********************
+// **********************
+// ** THE JUMP-IN CODE **
+// ** for the asm code **
+// **********************
+// **********************
+#pragma code main_calc_hauptroutine = 0x10000
+void main_calc_hauptroutine(void)
+{
+calc_hauptroutine();
+int_O_desaturation_time = 65535;
+}				// divemode
+#pragma code main_without_deco = 0x10020
+void main_calc_without_deco(void)
+{
+calc_without_deco();
+calc_desaturation_time();
+}
+
+#pragma code main_clear_CNS_fraction = 0x10030
+void main_clear_CNS_fraction(void)
+{
+clear_CNS_fraction();
+}
+
+#pragma code main_calc_CNS_decrease_15min = 0x10034
+void main_calc_CNS_decrease_15min(void)
+{
+calc_CNS_decrease_15min();
+}
+
+#pragma code main_calc_percentage = 0x10038
+void main_calc_percentage (void)
+{
+calc_percentage();
+}
+
+#pragma code main_clear_tissue = 0x10040
+void main_clear_tissue(void)
+{
+clear_tissue();
+char_I_depth_last_deco	= 0;		// for compatibility with v.101pre_no_last_deco
+}
+
+#pragma code main_calc_CNS_fraction = 0x10050
+void main_calc_CNS_fraction(void)
+{
+calc_CNS_fraction();
+}
+
+#pragma code main_calc_desaturation_time = 0x10060
+void main_calc_desaturation_time(void)
+{
+calc_desaturation_time();
+}
+
+#pragma code main_calc_wo_deco_step_1_min = 0x10080
+void main_calc_wo_deco_step_1_min(void)
+{
+calc_wo_deco_step_1_min();
+char_O_deco_status = 3; // surface new in v.102 overwrites value of calc_wo_deco_step_1_min
+calc_desaturation_time();
+}			// surface mode
+
+#pragma code main_debug = 0x100A0
+void main_debug(void)
+{
+//debug();
+}
+
+#pragma code main_DD2_write_incon42 = 0x100B0
+void main_DD2_write_incon42(void)
+{
+	DD2_write_incon42();
+}
+
+#pragma code main_DD2_write_incon24 = 0x100B4
+void main_DD2_write_incon24(void)
+{
+	DD2_write_incon24();
+}
+
+#pragma code main_gradient_array = 0x100C0
+void main_gradient_array(void)
+{
+calc_gradient_array_only();
+}
+#pragma code main_push_tissues = 0x100C4
+void main_push_tissues_to_vault(void)
+{
+	push_tissues_to_vault();
+}
+#pragma code main_pull_tissues = 0x100C8
+void main_pull_tissues_from_vault(void)
+{
+	pull_tissues_from_vault();
+}
+
+#pragma code main_hash = 0x100E0
+void main_hash(void)
+{
+hash();
+}
+
+// ***********************
+// ***********************
+// ** THE LOOKUP TABLES **
+// ***********************
+// ***********************
+
+#pragma romdata tables = 0x10200
+#include	<p2_tables.romdata> 		// new table for deco_main_v.101 (var_a modified)
+
+#pragma romdata tables2 = 0x10600
+rom const rom unsigned int md_pi[] =
+{
+    0x292E, 0x43C9, 0xA2D8, 0x7C01, 0x3D36, 0x54A1, 0xECF0, 0x0613
+  , 0x62A7, 0x05F3, 0xC0C7, 0x738C, 0x9893, 0x2BD9, 0xBC4C, 0x82CA
+  , 0x1E9B, 0x573C, 0xFDD4, 0xE016, 0x6742, 0x6F18, 0x8A17, 0xE512
+  , 0xBE4E, 0xC4D6, 0xDA9E, 0xDE49, 0xA0FB, 0xF58E, 0xBB2F, 0xEE7A
+  , 0xA968, 0x7991, 0x15B2, 0x073F, 0x94C2, 0x1089, 0x0B22, 0x5F21
+  , 0x807F, 0x5D9A, 0x5A90, 0x3227, 0x353E, 0xCCE7, 0xBFF7, 0x9703
+  , 0xFF19, 0x30B3, 0x48A5, 0xB5D1, 0xD75E, 0x922A, 0xAC56, 0xAAC6
+  , 0x4FB8, 0x38D2, 0x96A4, 0x7DB6, 0x76FC, 0x6BE2, 0x9C74, 0x04F1
+  , 0x459D, 0x7059, 0x6471, 0x8720, 0x865B, 0xCF65, 0xE62D, 0xA802
+  , 0x1B60, 0x25AD, 0xAEB0, 0xB9F6, 0x1C46, 0x6169, 0x3440, 0x7E0F
+  , 0x5547, 0xA323, 0xDD51, 0xAF3A, 0xC35C, 0xF9CE, 0xBAC5, 0xEA26
+  , 0x2C53, 0x0D6E, 0x8528, 0x8409, 0xD3DF, 0xCDF4, 0x4181, 0x4D52
+  , 0x6ADC, 0x37C8, 0x6CC1, 0xABFA, 0x24E1, 0x7B08, 0x0CBD, 0xB14A
+  , 0x7888, 0x958B, 0xE363, 0xE86D, 0xE9CB, 0xD5FE, 0x3B00, 0x1D39
+  , 0xF2EF, 0xB70E, 0x6658, 0xD0E4, 0xA677, 0x72F8, 0xEB75, 0x4B0A
+  , 0x3144, 0x50B4, 0x8FED, 0x1F1A, 0xDB99, 0x8D33, 0x9F11, 0x8314
+};
+
+// *********************
+// *********************
+// ** THE SUBROUTINES **
+// *********************
+// *********************
+
+#pragma code subroutines = 0x10700	// can be adapted to fit the romdata tables ahead
+
+
+// ---------------
+// CLEAR tissue //
+// ---------------
+// optimized in v.101 (var_a)
+
+void clear_tissue(void)    // preload tissues with standard pressure for the given ambient pressure
+{
+_asm
+lfsr 1, 0x300 // C math routines shall use this variable bank
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+// N2_ratio = (float)char_I_N2_ratio; // the 0.0002 of 0.7902 are missing with standard air
+ N2_ratio = 0.7902; // N2_ratio / 100.0;
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+for (ci=0;ci<16;ci++)  // cycle through the 16 b"uhlmann tissues
+{
+ pres_tissue[ci] =  N2_ratio * (pres_respiration -  0.0627) ;
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x80
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+_endasm
+
+pres_tissue_limit[ci] = (pres_tissue[ci] - var_a) * var_b ;
+// now update the guiding tissue
+if (pres_tissue_limit[ci] < 0)
+pres_tissue_limit[ci] = 0;
+} // for 0 to 16
+
+for (ci=16;ci<32;ci++)  // cycle through the 16 b"uhlmann tissues for Helium
+{
+ pres_tissue[ci] = 0.0;
+}  // for
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ char_O_gradient_factor = 0;
+ char_O_relative_gradient_GF = 0;
+} // clear_tissue(void)
+
+
+// --------------------
+// calc_without_deco //
+// fixed N2_ratio !  //
+// --------------------
+// optimized in v.101 (float_..saturation_multiplier)
+
+void calc_without_deco(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED RATIO !! sum as stated in b"uhlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does apply to the pressure without any inert ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_without_deco
+
+
+// --------------------
+// calc_hauptroutine //
+// --------------------
+// this is the major code in dive mode
+// calculates:
+// 		the tissues,
+//		the bottom time
+//		and simulates the ascend with all deco stops
+
+void calc_hauptroutine(void)
+{
+	calc_hauptroutine_data_input();
+	calc_hauptroutine_update_tissues();
+	calc_gradient_factor();
+
+
+	switch (char_O_deco_status)	// toggle between calculation for nullzeit (bottom time), deco stops and more deco stops (continue)
+	{
+ 		case 0:
+			update_startvalues();
+			calc_nullzeit();
+			char_O_deco_status = 255; // calc deco next time
+			break;
+		case 1:
+			if (char_O_deco_status == 3)
+				break;
+			char_O_deco_status = 0;
+//			char_O_lock_depth_list = 255;
+			calc_hauptroutine_calc_deco();
+//			build_debug_output();
+			break;
+		case 3:				// new dive
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			copy_deco_table_GF();
+			internal_deco_pointer = 0;
+			lock_GF_depth_list = 0;
+			update_startvalues();
+			calc_nextdecodepth_GF();
+			char_O_deco_status = 0;
+			break;
+		default:
+			update_startvalues();
+			clear_decoarray();
+			clear_internal_deco_table_GF();
+			output[6] = 1;
+			calc_hauptroutine_calc_ascend_to_deco();
+ 			if (char_O_deco_status > 15)		// can't go up to first deco, too deep to calculate in the given time slot
+			{
+				char_O_deco_status = 2;
+//				char_O_lock_depth_list = 255;
+			}
+ 			else
+			{
+//				char_O_lock_depth_list = lock_GF_depth_list;
+				calc_hauptroutine_calc_deco();
+			}
+//			build_debug_output();
+			break;
+	}
+	calc_ascenttime();
+}
+
+void calc_hauptroutine_data_input(void)
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0;
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+
+ N2_ratio = (float)char_I_N2_ratio / 100.0;; // the 0.0002 of 0.7902 are missing with standard air
+ He_ratio = (float)char_I_He_ratio / 100.0;;
+ deco_N2_ratio = (float)char_I_deco_N2_ratio / 100.0;
+ deco_He_ratio = (float)char_I_deco_He_ratio / 100.0;
+ float_deco_distance = (float)char_I_deco_distance / 100.0;
+ deco_gas_change = (float)char_I_deco_gas_change / 9.995 + pres_surface;
+ deco_gas_change = deco_gas_change + float_deco_distance;
+ const_ppO2 = (float)char_I_const_ppO2 / 100.0;
+ deco_ppO2_change = (float)char_I_deco_ppO2_change / 99.95 + pres_surface;
+ deco_ppO2_change = deco_ppO2_change + float_deco_distance;
+ deco_ppO2 = (float)char_I_deco_ppO2 / 100.0;
+ float_desaturation_multiplier = (float)char_I_desaturation_multiplier / 100.0;
+ float_saturation_multiplier = (float)char_I_saturation_multiplier / 100.0;
+ GF_low = (float)char_I_GF_Low_percentage / 100.0;
+ GF_high = (float)char_I_GF_High_percentage / 100.0;
+ GF_delta = GF_high - GF_low;
+
+ temp2 = (pres_respiration - pres_surface) / 0.29985;
+ int_temp = (int)(temp2);
+ if (int_temp < 0)
+	int_temp = 0;
+ if (int_temp > 255)
+	int_temp = 255;
+ char_O_actual_pointer = int_temp;
+
+ temp_depth_last_deco = (int)char_I_depth_last_deco;
+}
+
+void calc_hauptroutine_update_tissues(void)
+{
+	int_O_calc_tissue_call_counter = int_O_calc_tissue_call_counter + 1;
+ 	if (char_I_const_ppO2 == 0)																// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	else																						// new in v.101
+  		pres_diluent = ((pres_respiration - const_ppO2)/(N2_ratio + He_ratio));					// new in v.101
+ 	if (pres_diluent > pres_respiration)														// new in v.101
+  		pres_diluent = pres_respiration;															// new in v.101
+ 	if (pres_diluent > 0.0627)																	// new in v.101
+ 	{
+ 		temp_atem = N2_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		temp2_atem = He_ratio * (pres_diluent - 0.0627);											// changed in v.101
+ 		char_O_diluent = (char)(pres_diluent/pres_respiration*100.0);
+ 	}
+ 	else																						// new in v.101
+ 	{
+ 		temp_atem = 0.0;																			// new in v.101
+ 		temp2_atem = 0.0;																			// new in v.101
+ 		char_O_diluent = 0;
+ 	}
+ 	temp_surface = pres_surface;
+ 	calc_tissue();
+ 	int_O_gtissue_limit = (int)(pres_tissue_limit[char_O_gtissue_no] * 1000);
+	int_O_gtissue_press = (int)((pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16]) * 1000);
+ 	if (char_I_deco_model == 1)
+ 	{
+		temp1 = temp1 * GF_high;
+ 	}
+	else
+	{
+	temp1 = temp_surface;
+	}
+	if (pres_gtissue_limit > temp1 && char_O_deco_status == 0)  // if guiding tissue can not be exposed to surface pressure immediately
+ 	{
+  		char_O_nullzeit = 0; // deco necessary
+  		char_O_deco_status = 255; // calculate deco skip nullzeit calculation
+ 	}
+} 		// calc_hauptroutine_update_tissues
+void calc_hauptroutine_calc_deco(void)
+{
+ 	do
+  	{
+  		int_temp_decostatus = 0;
+  		calc_nextdecodepth_GF();
+  		if (temp_depth_limit > 0)
+   		{
+    		if (char_I_const_ppO2 == 0)																// new in v.101
+	 		{
+     			deco_diluent = temp_deco;																// new in v.101
+	 			if (temp_deco > deco_gas_change)
+	  			{
+	  				calc_N2_ratio = N2_ratio;
+	  				calc_He_ratio = He_ratio;
+	  			}
+	 			else
+	  			{
+	  				calc_N2_ratio = deco_N2_ratio;
+	  				calc_He_ratio = deco_He_ratio;
+	  			}
+	 		}
+    		else																					// new in v.101
+	 		{
+	 			calc_N2_ratio = N2_ratio;
+	 			calc_He_ratio = He_ratio;
+	 			if (temp_deco > deco_ppO2_change)
+				{
+      				deco_diluent = ((temp_deco - const_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 			else
+				{
+      				deco_diluent = ((temp_deco - deco_ppO2)/(N2_ratio + He_ratio));			// new in v.101
+				}
+	 		}
+    		if (deco_diluent > temp_deco)															// new in v.101
+     			deco_diluent = temp_deco;																// new in v.101
+ 			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+     			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);										// changed in v.101
+				temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+    		else																					// new in v.101
+    		{
+     			temp_atem = 0.0;																		// new in v.101
+     			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+			update_internal_deco_table_GF();
+   			temp_decotime = 1;
+   			update_decoarray();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)
+     			int_temp_decostatus = 1;
+   		}
+  		else // if (temp_depth_limit > 0)
+		{
+   		char_O_deco_status = 0;
+		}
+	} while (int_temp_decostatus == 1);
+	if (char_O_deco_status > 15)
+	{
+   		char_O_deco_status = 1;
+	}
+  	else
+  	{
+		copy_deco_table_GF();
+		char_O_deco_status = 0;
+  	}
+}
+
+void calc_hauptroutine_calc_ascend_to_deco(void)
+{
+ 	update_startvalues();
+ 	char_O_deco_status = 0;
+   	temp_deco = pres_respiration;
+ 	lock_GF_depth_list = 1; 																// new in v.102
+ 	do								// go up to first deco
+  	{
+  		int_temp_decostatus = 0;
+  		temp_deco = temp_deco - 1.0;
+  		if ( char_I_deco_model == 1)																// new in v.102 , 4 = deep stops
+			temp_limit = temp_pres_gtissue_limit_GF_low;
+  		else
+			temp_limit = temp_pres_gtissue_limit;
+  		if ((temp_deco > temp_limit) && (temp_deco > pres_surface)) 								// changes in v.102
+   		{
+   			lock_GF_depth_list = 0; 																	// new in v.102, distance to first stop > 10 mtr.
+			output[6] = 0;
+  		 	if (char_I_const_ppO2 == 0)																// new in v.101 // calculate at half of the ascent
+			{
+    			deco_diluent = temp_deco + 0.5;															// new in v.101
+				if (temp_deco + 0.5 > deco_gas_change)
+	 			{
+	 				calc_N2_ratio = N2_ratio;
+	 				calc_He_ratio = He_ratio;
+	 			}
+				else
+	 			{
+	 				calc_N2_ratio = deco_N2_ratio;
+	 				calc_He_ratio = deco_He_ratio;
+	 			}
+			}
+   			else																						// new in v.101
+			{
+					calc_N2_ratio = N2_ratio;
+					calc_He_ratio = He_ratio;
+					if (temp_deco + 0.5 > deco_ppO2_change)
+     					deco_diluent = ((temp_deco + 0.5 - const_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+					else
+     					deco_diluent = ((temp_deco + 0.5 - deco_ppO2)/(N2_ratio + He_ratio));	// new in v.101 // calculate at half of the ascent
+    				if (deco_diluent > (temp_deco +0.5))															// new in v.101
+     					deco_diluent = temp_deco + 0.5;															// new in v.101 // calculate at half of the ascent
+			}
+   			if (deco_diluent > 0.0627)																// new in v.101
+    		{
+    			temp_atem = calc_N2_ratio * (deco_diluent - 0.0627);											// changed in v.101
+    			temp2_atem = calc_He_ratio * (deco_diluent - 0.0627);										// changed in v.101
+    		}
+   			else																						// new in v.101
+    		{
+    			temp_atem = 0.0;																		// new in v.101
+    			temp2_atem = 0.0;																		// new in v.101
+    		}
+   			sim_tissue_1min();
+   			char_O_deco_status = char_O_deco_status + 1;
+   			if (char_O_deco_status < 16)  // 16 is the limit of calculations for one time slot
+    			int_temp_decostatus = 1;
+   		}
+	} while (int_temp_decostatus == 1);
+}	// calc_hauptroutine_calc_ascend_to_deco
+
+// --------------
+// calc_tissue //
+// --------------
+// optimized in v.101
+
+void calc_tissue(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+1 // the order is confussing
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs	// low byte first, high afterwards
+TBLRDPOSTINC
+movff	TABLAT,var_e2secs+3
+TBLRD
+movff	TABLAT,var_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs
+TBLRDPOSTINC
+movff	TABLAT,var2_e2secs+3
+TBLRD
+movff	TABLAT,var2_e2secs+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+_endasm
+ // the start values are the previous end values // write new values in temp
+
+// N2
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e2secs;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+} // for
+}//calc_tissue(void)
+
+// ----------------
+// calc_nullzeit //
+// ----------------
+// calculates the remaining bottom time
+
+// unchanged in v.101
+
+void calc_nullzeit(void)
+{
+	char_O_nullzeit = 0;
+	int_temp = 1;
+ 	do
+	{
+  		backup_sim_pres_tissue();
+  		sim_tissue_10min();
+  		char_O_nullzeit = char_O_nullzeit + 10;
+  		int_temp = int_temp + 1;
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+ 	} while (int_temp < 17);
+ 	if (int_temp == 255)
+ 	{
+  		restore_sim_pres_tissue();
+  		char_O_nullzeit = char_O_nullzeit - 10;
+ 	} //if int_temp == 255]
+ 	int_temp = 1;
+ 	if (char_O_nullzeit < 60)
+ 	{
+  		do
+		{
+   			sim_tissue_1min();
+   			char_O_nullzeit = char_O_nullzeit + 1;
+   			int_temp = int_temp + 1;			// new in v.102a
+		if (char_I_deco_model == 1)
+			temp1 = GF_high * temp_pres_gtissue_diff + temp_pres_gtissue;
+		else
+			temp1 = temp_pres_gtissue_limit;
+		if (temp1 > temp_surface)  // changed in v.102 , if guiding tissue can not be exposed to surface pressure immediately
+			int_temp = 255;
+  		} while (int_temp < 10);
+  		if (int_temp == 255)
+   			char_O_nullzeit = char_O_nullzeit - 1;
+ 	} // if char_O_nullzeit < 60
+} //calc_nullzeit
+
+// -------------------------
+// backup_sim_pres_tissue //
+// -------------------------
+void backup_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue_backup[x] = sim_pres_tissue[x];
+   sim_pres_tissue_backup[x+16] = sim_pres_tissue[x+16];
+  }
+} // backup_sim
+
+// --------------------------
+// restore_sim_pres_tissue //
+// --------------------------
+void restore_sim_pres_tissue(void)
+{
+  for (x = 0;x<16;x++)
+  {
+   sim_pres_tissue[x] = sim_pres_tissue_backup[x];
+   sim_pres_tissue[x+16] = sim_pres_tissue_backup[x+16];
+  }
+} // restore_sim
+
+// ------------------
+// calc_ascenttime //
+// ------------------
+
+void calc_ascenttime(void)
+{
+if (pres_respiration > pres_surface)
+ {
+ switch (char_O_deco_status)
+  {
+  case 2:
+	char_O_ascenttime = 255;
+	break;
+  case 1:
+	break;
+  default:
+	temp1 = pres_respiration - pres_surface + 0.6; // + 0.6 hence 1 minute ascent time from a depth of 4 meter on
+	if (temp1 < 0)
+		temp1 = 0;
+	if (temp1 > 255)
+		temp1 = 255;
+    char_O_ascenttime = (char)temp1;
+
+	for(ci=0;ci<7;ci++)
+	{
+	x = char_O_ascenttime + char_O_array_decotime[ci];
+	if (x < char_O_ascenttime)
+		char_O_ascenttime = 255;
+	else
+		char_O_ascenttime = x;
+	}
+  }
+ }
+else
+ char_O_ascenttime = 0;
+} // calc_ascenttime()
+
+
+// ---------------------
+// update_startvalues //
+// ---------------------
+// updated in v.102
+
+void update_startvalues(void)
+{
+  	temp_pres_gtissue_limit = pres_gtissue_limit;
+  	temp_pres_gtissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;						// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+
+	temp_gtissue_no = char_O_gtissue_no;
+  	for (x = 0;x<16;x++)
+  	{
+   		sim_pres_tissue[x] = pres_tissue[x];
+   		sim_pres_tissue[x+16] = pres_tissue[x+16];
+   		sim_pres_tissue_limit[x] = pres_tissue_limit[x];
+  	}
+} // update_startvalues
+
+
+// ------------------
+// sim_tissue_1min //
+// ------------------
+// optimized in v.101
+
+void sim_tissue_1min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+ temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+ sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_1min()
+
+//--------------------
+// sim_tissue_10min //
+//--------------------
+
+// Attention!! uses var_e1min und var2_e1min to load 10min data !!!
+// is identical to sim_tissue_1min routine except for the different load of those variables
+
+// optimized in v.101
+
+void sim_tissue_10min(void)
+{
+temp_pres_gtissue_limit = 0.0;
+temp_gtissue_no = 255;
+
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0				// different to 1 min
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+//incf	TBLPTRH,1,0			// different to 1 min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+// N2
+ temp_tissue = (temp_atem - sim_pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci] = sim_pres_tissue[ci] + temp_tissue;
+// He
+ temp_tissue = (temp2_atem - sim_pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ sim_pres_tissue[ci+16] = sim_pres_tissue[ci+16] + temp_tissue;
+// pressure limit
+temp_tissue = sim_pres_tissue[ci] + sim_pres_tissue[ci+16];
+ var_a = (var_a * sim_pres_tissue[ci] + var2_a * sim_pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * sim_pres_tissue[ci] + var2_b * sim_pres_tissue[ci+16]) / temp_tissue;
+
+sim_pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (sim_pres_tissue_limit[ci] < 0)
+  sim_pres_tissue_limit[ci] = 0;
+ if (sim_pres_tissue_limit[ci] > temp_pres_gtissue_limit)
+  {
+  temp_pres_gtissue = temp_tissue;
+  temp_pres_gtissue_limit = sim_pres_tissue_limit[ci];
+  temp_gtissue_no = ci;
+  }
+} // for
+  	temp_pres_gtissue_diff = temp_pres_gtissue_limit - temp_pres_gtissue;							// negative number
+	temp_pres_gtissue_limit_GF_low = GF_low * temp_pres_gtissue_diff + temp_pres_gtissue;
+  	temp_pres_gtissue_limit_GF_low_below_surface = temp_pres_gtissue_limit_GF_low - pres_surface;
+	if (temp_pres_gtissue_limit_GF_low_below_surface < 0)
+		temp_pres_gtissue_limit_GF_low_below_surface = 0;
+} //sim_tissue_10min()
+
+
+// ------------------
+// clear_decoarray //
+// ------------------
+// unchanged in v.101
+
+void clear_decoarray(void)
+{
+char_O_array_decodepth[0] = 0;
+char_O_array_decodepth[1] = 0;
+char_O_array_decodepth[2] = 0;
+char_O_array_decodepth[3] = 0;
+char_O_array_decodepth[4] = 0;
+char_O_array_decodepth[5] = 0;
+char_O_array_decotime[0] = 0;
+char_O_array_decotime[1] = 0;
+char_O_array_decotime[2] = 0;
+char_O_array_decotime[3] = 0;
+char_O_array_decotime[4] = 0;
+char_O_array_decotime[5] = 0;
+char_O_array_decotime[6] = 0;
+} // clear_decoarray
+
+
+// -------------------
+// update_decoarray //
+// -------------------
+// unchanged in v.101
+
+void update_decoarray()
+{
+	x = 0;
+	do
+	{
+		if (char_O_array_decodepth[x] == temp_depth_limit)
+		{
+			int_temp = char_O_array_decotime[x] + temp_decotime;
+			if (int_temp < 0)
+				int_temp = 0;
+			if (int_temp > 240)
+				int_temp = 240;
+ 			char_O_array_decotime[x] = int_temp;
+			x = 10; // exit
+		} // if
+		else
+ 		{
+ 			if (char_O_array_decodepth[x] == 0)
+  			{
+  				if (temp_depth_limit > 255)
+   					char_O_array_decodepth[x] = 255;
+  				else
+   					char_O_array_decodepth[x] = (char)temp_depth_limit;
+  				int_temp = char_O_array_decotime[x] + temp_decotime;
+  				if (int_temp > 240)
+   					char_O_array_decotime[x] = 240;
+  				else
+   					char_O_array_decotime[x] = (char)int_temp;
+  				x = 10; // exit
+  			} // if
+ 			else
+  				x++;
+ 		} // else
+	} while (x<6);
+	if (x == 6)
+ 	{
+ 		int_temp = char_O_array_decotime[6] + temp_decotime;
+ 		if (int_temp > 220)
+  			char_O_array_decotime[6] = 220;
+ 		else
+  			char_O_array_decotime[6] = (char)int_temp;
+ 	} // if x == 6
+} // update_decoarray
+
+
+// -----------------------
+// calc_gradient_factor //
+// -----------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_factor(void)
+{
+	// tissue > respiration (entsaettigungsvorgang)
+	// gradient ist wieviel prozent an limit mit basis tissue
+	// dh. 0% = respiration == tissue
+	// dh. 100% = respiration == limit
+	temp_tissue = pres_tissue[char_O_gtissue_no] + pres_tissue[char_O_gtissue_no+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[char_O_gtissue_no];	// changed in v.102
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 100; // displayed in percent
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_gradient_factor = 0;
+	else
+ 		char_O_gradient_factor = (char)temp2;
+
+	temp3 = temp2;
+
+	if (char_I_deco_model == 1)		// calculate relative gradient factor
+	{
+		temp1 = (float)temp_depth_GF_low_meter * 0.09995;
+		temp2 = pres_respiration - pres_surface;
+		if (temp2 <= 0)
+			temp1 = GF_high;
+		else
+		if (temp2 >= temp1)
+			temp1 = GF_low;
+		else
+			temp1 = GF_low + (temp1 - temp2)/temp1*GF_delta;
+		if (temp_depth_GF_low_meter == 0)
+			temp1 = GF_high;
+		temp2 = temp3 / temp1; // temp3 is already in percent
+		if (temp2 < 0)
+			temp2 = 0;
+		if (temp2 > 255)
+			temp2 = 255;
+		char_O_relative_gradient_GF  = (char)temp2;
+	}	// calc relative gradient factor
+	else
+	{
+ 			char_O_relative_gradient_GF = char_O_gradient_factor;
+	}
+} // calc_gradient
+
+// ---------------------------
+// calc_gradient_array_only //
+// ---------------------------
+// optimized in v.101 (var_a)
+// new code in v.102
+
+void calc_gradient_array_only()
+{
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+for (ci=0;ci<16;ci++)
+{
+	temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+	temp1 = temp_tissue - pres_respiration;
+	temp2 = temp_tissue - pres_tissue_limit[ci];
+	temp2 = temp1/temp2;
+	temp2 = temp2 * 200; // because of output in (Double-)percentage
+	if (temp2 < 0)
+		temp2 = 0;
+	if (temp2 > 255)
+		temp2 = 255;
+	if (temp1 < 0)
+ 		char_O_array_gradient_weighted[ci] = 0;
+	else
+ 		char_O_array_gradient_weighted[ci] = (char)temp2;
+} // for
+} // calc_gradient_array_only
+
+
+// -------------------------
+// calc_desaturation_time //
+// -------------------------
+// FIXED N2_ratio
+// unchanged in v.101
+
+void calc_desaturation_time(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+ N2_ratio = 0.7902; // FIXED sum as stated in b"uhlmann
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_surface - 0.0627);
+ int_O_desaturation_time = 0;
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x04
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var_halftimes+3
+TBLRD
+movff	TABLAT,var_halftimes+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+1
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes
+TBLRDPOSTINC
+movff	TABLAT,var2_halftimes+3
+TBLRD
+movff	TABLAT,var2_halftimes+2
+_endasm
+
+// saturation_time (for flight) and N2_saturation in multiples of halftime
+// version v.100: 1.1 = 10 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// new in version v.101: 1.07 = 7 percent distance to totally clean (totally clean is not possible, would take infinite time )
+// changes in v.101: 1.05 = 5 percent dist to totally clean is new desaturation point for display and noFly calculations
+// N2
+ temp1 = 1.05 * temp_atem;
+ temp1 = temp1 - pres_tissue[ci];
+ temp2 = temp_atem - pres_tissue[ci];
+  if (temp2 >= 0.0)
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+ else
+    temp1 = temp1 / temp2;
+  if (temp1 > 0.0)
+	{
+	temp1 = log(1.0 - temp1);
+	temp1 = temp1 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e not 2 as requested.
+							 // minus because log is negative
+	temp2 = var_halftimes * temp1 / float_desaturation_multiplier; // time necessary (in minutes ) for complete desaturation (see comment about 10 percent) , new in v.101: float_desaturation_multiplier
+	}
+ else
+	{
+	temp1 = 0;
+	temp2 = 0;
+	}
+
+// He
+ temp3 = 0.1 - pres_tissue[ci+16];
+if (temp3 >= 0.0)
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+ else
+    temp3 = -1.0 * temp3 / pres_tissue[ci+16];
+  if (temp3 > 0.0)
+	{
+	temp3 = log(1.0 - temp3);
+	temp3 = temp3 / -0.6931; // temp1 is the multiples of half times necessary.
+							 // 0.6931 is ln(2), because the math function log() calculates with a base of e  not 2 as requested.
+							 // minus because log is negative
+	temp4 = var2_halftimes * temp3 / float_desaturation_multiplier; // time necessary (in minutes ) for "complete" desaturation, new in v.101 float_desaturation_multiplier
+	}
+ else
+	{
+	temp3 = 0;
+	temp4 = 0;
+	}
+
+// saturation_time (for flight)
+ if (temp4 > temp2)
+	 int_temp = (int)temp4;
+ else
+	 int_temp = (int)temp2;
+ if(int_temp > int_O_desaturation_time)
+	int_O_desaturation_time = int_temp;
+
+// N2 saturation in multiples of halftime for display purposes
+ temp2 = temp1 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp2 = temp2 + 80.0; // set center
+ if (temp2 < 0.0)
+	 temp2 = 0.0;
+ if (temp2 > 255.0)
+ 	 temp2 = 255.0;
+ char_O_tissue_saturation[ci] = (char)temp2;
+// He saturation in multiples of halftime for display purposes
+ temp4 = temp3 * 20.0;  // 0 = 1/8, 120 = 0, 249 = 8
+ temp4 = temp4 + 80.0; // set center
+ if (temp4 < 0.0)
+	 temp4 = 0.0;
+ if (temp4 > 255.0)
+ 	 temp4 = 255.0;
+ char_O_tissue_saturation[ci+16] = (char)temp4;
+} // for
+} // calc_desaturation_time
+
+
+// --------------------------
+// calc_wo_deco_step_1_min //
+// --------------------------
+// FIXED N2 Ratio
+// optimized in v.101 (...saturation_multiplier)
+// desaturation slowed down to 70,42%
+
+void calc_wo_deco_step_1_min(void)
+{
+_asm
+ lfsr 1, 0x300
+_endasm
+ N2_ratio = 0.7902; // FIXED, sum lt. buehlmann
+ pres_respiration = (float)int_I_pres_respiration / 1000.0; // assembler code uses different digit system
+ pres_surface = (float)int_I_pres_surface / 1000.0;
+ temp_atem = N2_ratio * (pres_respiration - 0.0627); // 0.0627 is the extra pressure in the body
+ temp2_atem = 0.0;
+ temp_surface = pres_surface; // the b"uhlmann formula using temp_surface does not use the N2_ratio
+ float_desaturation_multiplier = char_I_desaturation_multiplier / 142.0; // new in v.101	(70,42%/100.=142)
+ float_saturation_multiplier = char_I_saturation_multiplier / 100.0;
+
+ calc_tissue_step_1_min();  // update the pressure in the 16 tissues in accordance with the new ambient pressure
+ clear_decoarray();
+ char_O_deco_status = 0;
+ char_O_nullzeit = 0;
+ char_O_ascenttime = 0;
+ calc_gradient_factor();
+
+} // calc_wo_deco_step_1_min(void)
+
+
+// -------------------------
+// calc_tissue_step_1_min //
+// -------------------------
+// optimized in v.101
+
+void calc_tissue_step_1_min(void)
+{
+_asm
+lfsr 1, 0x300
+movlw	0x01
+movwf	TBLPTRU,0
+_endasm
+
+ char_O_gtissue_no = 255;
+ pres_gtissue_limit = 0.0;
+
+for (ci=0;ci<16;ci++)
+{
+_asm
+movlw	0x02
+movwf	TBLPTRH,0
+movlb	4 // fuer ci
+movf ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addwf	ci,0,1
+addlw	0x80
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var_a+1
+TBLRDPOSTINC
+movff	TABLAT,var_a
+TBLRDPOSTINC
+movff	TABLAT,var_a+3
+TBLRD
+movff	TABLAT,var_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_a+1
+TBLRDPOSTINC
+movff	TABLAT,var2_a
+TBLRDPOSTINC
+movff	TABLAT,var2_a+3
+TBLRD
+movff	TABLAT,var2_a+2
+addlw	0x40
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_b+1
+TBLRDPOSTINC
+movff	TABLAT,var_b
+TBLRDPOSTINC
+movff	TABLAT,var_b+3
+TBLRD
+movff	TABLAT,var_b+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_b+1
+TBLRDPOSTINC
+movff	TABLAT,var2_b
+TBLRDPOSTINC
+movff	TABLAT,var2_b+3
+TBLRD
+movff	TABLAT,var2_b+2
+addlw	0xC0
+movwf	TBLPTRL,0
+incf	TBLPTRH,1,0
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var_e1min
+TBLRDPOSTINC
+movff	TABLAT,var_e1min+3
+TBLRD
+movff	TABLAT,var_e1min+2
+addlw	0x40
+movwf	TBLPTRL,0
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+1
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min
+TBLRDPOSTINC
+movff	TABLAT,var2_e1min+3
+TBLRD
+movff	TABLAT,var2_e1min+2
+_endasm
+
+// N2 1 min
+ temp_tissue = (temp_atem - pres_tissue[ci]) * var_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci] = pres_tissue[ci] + temp_tissue;
+
+// He 1 min
+ temp_tissue = (temp2_atem - pres_tissue[ci+16]) * var2_e1min;
+ temp_tissue_safety();
+ pres_tissue[ci+16] = pres_tissue[ci+16] + temp_tissue;
+
+ temp_tissue = pres_tissue[ci] + pres_tissue[ci+16];
+ var_a = (var_a * pres_tissue[ci] + var2_a * pres_tissue[ci+16]) / temp_tissue;
+ var_b = (var_b * pres_tissue[ci] + var2_b * pres_tissue[ci+16]) / temp_tissue;
+ pres_tissue_limit[ci] = (temp_tissue - var_a) * var_b;
+ if (pres_tissue_limit[ci] < 0)
+  pres_tissue_limit[ci] = 0;
+ if (pres_tissue_limit[ci] > pres_gtissue_limit)
+  {
+  pres_gtissue_limit = pres_tissue_limit[ci];
+  char_O_gtissue_no = ci;
+  }//if
+
+// gradient factor array for graphical display
+// display range is 0 to 250! in steps of 5 for 1 pixel
+// the display is divided in 6 blocks
+// -> double the gradient 100% = 200
+// tissue > respiration (entsaettigungsvorgang)
+// gradient ist wieviel prozent an limit von tissue aus
+// dh. 0% = respiration == tissue
+// dh. 100% = respiration == limit
+temp1 = temp_tissue - pres_respiration;
+temp2 = temp_tissue - pres_tissue_limit[ci];	// changed in v.102
+temp2 = temp1/temp2;
+temp2 = temp2 * 200; // because of output in (Double-)percentage
+if (temp2 < 0)
+	temp2 = 0;
+if (temp2 > 255)
+	temp2 = 255;
+if (temp1 < 0)
+ char_O_array_gradient_weighted[ci] = 0;
+else
+ char_O_array_gradient_weighted[ci] = (char)temp2;
+
+} // for
+} // calc wo deco 1min
+
+#if 0
+// --------
+// debug //
+// --------
+void debug(void)
+{
+for (ci=0;ci<32;ci++)
+{
+ int_O_tissue_for_debug[ci] = (unsigned int)(pres_tissue[ci] *1000);
+}
+} // void debug(void)
+#endif
+
+// ----------
+// md hash //
+// ----------
+void hash(void)
+{
+// init
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_state[md_i] = 0;
+  md_cksum[md_i] = 0;
+ } // for md_i 16
+
+_asm
+ movlw	0x01
+ movwf	TBLPTRU,0
+ movlw	0x06
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[127] = md_temp;
+ for (md_i=0;md_i<127;md_i++)
+ {
+_asm
+ TBLRDPOSTINC
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[md_i+128] = md_temp;
+ } // for md_i 256
+_asm
+ TBLRD
+ movff	TABLAT,md_temp
+_endasm
+  md_pi_subst[255] = md_temp;
+
+_asm
+ movlw	0x00
+ movwf	TBLPTRU,0
+ movlw	0x00
+ movwf	TBLPTRH,0
+ movlw	0x00
+ movwf	TBLPTRL,0
+_endasm
+// cycle buffers
+for (md_pointer=0x0000;md_pointer<0x17f3;md_pointer++)
+{
+ md_t = 0;
+ for (md_i=0;md_i<16;md_i++)
+ {
+  if(md_pointer == 9)
+   md_temp = md_cksum[md_i];
+  else
+  {
+_asm
+  TBLRDPOSTINC
+  movff	TABLAT,md_temp
+_endasm
+  } // else
+  md_buffer[md_i] = md_temp;
+  md_state[md_i+16] = md_buffer[md_i];
+  md_state[md_i+32] = (unsigned char)(md_buffer[md_i] ^ md_state[md_i]);
+ } // for md_i 16
+
+ for (md_i=0;md_i<18;md_i++)
+ {
+  for (md_j=0;md_j<48;md_j++)
+  {
+   md_state[md_j] = (unsigned char)(md_state[md_j] ^ md_pi_subst[md_t]);
+   md_t = md_state[md_j];
+  } // for md_j 48
+  md_t = (unsigned char)(md_t+1);
+ } // for md_i 18
+ md_t = md_cksum[15];
+
+ for (md_i=0;md_i<16;md_i++)
+ {
+  md_cksum[md_i] = (unsigned char)(md_cksum[md_i] ^ md_pi_subst[(md_buffer[md_i] ^ md_t)]);
+  md_t = md_cksum[md_i];
+ } // for md_i 16
+} // for md_pointer
+} // void hash(void)
+
+// ---------------------
+// clear_CNS_fraction //
+// ---------------------
+// new in v.101
+
+void clear_CNS_fraction(void)
+{
+ CNS_fraction = 0.0;
+ char_O_CNS_fraction = 0;
+} // void clear_CNS_fraction(void)
+
+
+// --------------------
+// calc_CNS_fraction //
+// --------------------
+// new in v.101
+// optimized in v.102 : with new variables char_I_actual_ppO2 and actual_ppO2
+
+// Input: char_I_actual_ppO2
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+// Uses: acutal_ppO2
+
+void calc_CNS_fraction(void)
+{
+ actual_ppO2 = (float)char_I_actual_ppO2 / 100.0;
+
+ if (char_I_actual_ppO2 < 50)
+  CNS_fraction = CNS_fraction;// no changes
+ else if (char_I_actual_ppO2 < 60)
+  CNS_fraction = 1/(-54000.0 * actual_ppO2 + 54000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 70)
+  CNS_fraction = 1/(-45000.0 * actual_ppO2 + 48600.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 80)
+  CNS_fraction = 1/(-36000.0 * actual_ppO2 + 42300.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 90)
+  CNS_fraction = 1/(-27000.0 * actual_ppO2 + 35100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 110)
+  CNS_fraction = 1/(-18000.0 * actual_ppO2 + 27000.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 150)
+  CNS_fraction = 1/(-9000.0 * actual_ppO2 + 17100.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 160)
+  CNS_fraction = 1/(-22500.0 * actual_ppO2 + 37350.0) + CNS_fraction;
+ else if (char_I_actual_ppO2 < 165)
+  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
+ else if (char_I_actual_ppO2 < 170)
+  CNS_fraction =  0.00102 + CNS_fraction; // example calculation: Sqrt((1.7/1.55)^20)*0.000404
+ else if (char_I_actual_ppO2 < 175)
+  CNS_fraction =  0.00136 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 180)
+  CNS_fraction =  0.00180 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 185)
+  CNS_fraction =  0.00237 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 190)
+  CNS_fraction =  0.00310 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 195)
+  CNS_fraction =  0.00401 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 200)
+  CNS_fraction =  0.00517 + CNS_fraction;
+ else if (char_I_actual_ppO2 < 230)
+  CNS_fraction =  0.0209 + CNS_fraction;
+ else
+  CNS_fraction =  0.0482 + CNS_fraction; // value for 2.5
+
+ if (CNS_fraction > 2.5)
+  CNS_fraction = 2.5;
+ if (CNS_fraction < 0.0)
+  CNS_fraction = 0.0;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+} // void calc_CNS_fraction(void)
+
+// --------------------------
+// calc_CNS_decrease_15min //
+// --------------------------
+// new in v.101
+
+// calculates the half time of 90 minutes in 6 steps of 15 min
+
+// Output: char_O_CNS_fraction
+// Uses and Updates: CNS_fraction
+
+void calc_CNS_decrease_15min(void)
+{
+ CNS_fraction =  0.890899 * CNS_fraction;
+ char_O_CNS_fraction = (char)((CNS_fraction + 0.005)* 100.0);
+}// calc_CNS_decrease_15min(void)
+
+
+// ------------------
+// calc_percentage //
+// ------------------
+// new in v.101
+
+// calculates int_I_temp * char_I_temp / 100
+// output is int_I_temp
+
+void calc_percentage(void)
+{
+ temp1 = (float)int_I_temp;
+ temp2 = (float)char_I_temp / 100.0;
+ temp3 = temp1 * temp2;
+ int_I_temp = (int)temp3;
+}
+void push_tissues_to_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue_vault[ci] = pres_tissue[ci];
+}
+void pull_tissues_from_vault(void)
+{
+	for (ci=0;ci<32;ci++)
+		pres_tissue[ci] = pres_tissue_vault[ci];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_part1/OSTC_code_c_part2/p2_tables.romdata	Tue Jan 12 15:05:59 2010 +0100
@@ -0,0 +1,363 @@
+
+// OSTC - diving computer code
+// Copyright (C) 2008 HeinrichsWeikamp GbR
+
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+/*
+INHALT
+------
+{ unsigned int *rom e2secs[];
+{ unsigned int *rom a_N2[];
+{ unsigned int *rom b_N2[];
+{ unsigned int *rom t05[]; formated:  und zwar t05 * -1.0 / ln(2) 
+{ unsigned int *rom e1min[];
+{ unsigned int *rom ht[]; t05 unmodified
+*/
+
+
+rom const unsigned int e2secs[] =
+{ 
+// N2
+  0x07BB, 0xBC3B, 0xD0FF, 0x3C3B, 0xF80C, 0xF23A, 0x4997, 0xA33A
+, 0xE93A, 0x603A, 0x0418, 0x1E3A, 0x9009, 0xDF39, 0x014C, 0x9D39
+, 0xE53E, 0x5E39, 0x3AED, 0x2539, 0x338D, 0x0139, 0xC6BA, 0xCA38
+, 0x82DC, 0x9E38, 0x844D, 0x7838, 0x9F9D, 0x4238, 0x34AC, 0x1838
+// He
+, 0xA3C9, 0x783C, 0x45BD, 0xF93B, 0xCC02, 0xA03B, 0x3E44, 0x583B
+, 0x6223, 0x143B, 0x31FA, 0xD03A, 0xA46D, 0x933A, 0xDDFB, 0x4F3A
+, 0x03F8, 0x123A, 0x8D71, 0xDB39, 0xAB55, 0xAB39, 0x7712, 0x8639
+, 0xEA1E, 0x5239, 0x2C54, 0x2439, 0x37B2, 0x0039, 0xDADB, 0xC938
+/*
+Die e2secs Werte in float Notation:
+5.7596E-03,  und zwar  1 - 2^(-2sec/t05)
+2.8839E-03,
+1.8467e-03,
+1.2481e-03,
+8.5537E-04,
+6.0308E-04,
+4.2541E-04, 
+3.0002E-04,
+2.1195E-04,
+1.5824E-04,
+1.2355E-04,
+9.6669E-05,
+7.5751E-05,
+5.92E-05,
+4.64E-05,
+3.64E-05
+// e 2 sec He
+sim_pres_tissue_limit[0] = 0.01518479275;
+sim_pres_tissue_limit[1] = 0.007621439546;
+sim_pres_tissue_limit[2] = 0.004883145696;
+sim_pres_tissue_limit[3] = 0.003299965996;
+sim_pres_tissue_limit[4] = 0.002260409686;
+sim_pres_tissue_limit[5] = 0.00159437032;
+sim_pres_tissue_limit[6] = 0.001124788578;
+sim_pres_tissue_limit[7] = 0.0007933953673;
+sim_pres_tissue_limit[8] = 0.0005606414716;
+sim_pres_tissue_limit[9] = 0.0004185553604;
+sim_pres_tissue_limit[10] =0.0003267948866;
+sim_pres_tissue_limit[11] =0.0002557222899;
+sim_pres_tissue_limit[12] =0.0002003867723;
+sim_pres_tissue_limit[13] =0.0001567161546;
+sim_pres_tissue_limit[14] =0.0001227342122;
+sim_pres_tissue_limit[15] =9.625377675E-5
+*/
+};
+
+rom const unsigned int a_N2[] =
+{
+// N2
+   0x6744, 0xA13F, 0x0000, 0x803F, 0xED9E, 0x5C3F, 0x5396, 0x413F
+ , 0x52B8, 0x1E3F, 0xCE19, 0x013F, 0xC1CA, 0xE13E, 0xCDCC, 0xCC3E
+ , 0x0000, 0xC03E, 0x3333, 0xB33E, 0x39B4, 0xA83E, 0x91ED, 0x9C3E
+ , 0xE926, 0x913E, 0xCBA1, 0x853E, 0xB6F3, 0x7D3E, 0xE948, 0x6E3E
+// He
+ , 0xF706, 0xDF3F, 0x2506, 0xB13F, 0x2E90, 0x983F, 0xC7DC, 0x853F
+ , 0x3108, 0x6C3F, 0x4A0C, 0x523F, 0x0C02, 0x3B3F, 0x8273, 0x263F
+ , 0xEC51, 0x183F, 0xB6F3, 0x0D3F, 0x5986, 0x083F, 0xA1D6, 0x043F
+ , 0x34A2, 0x043F, 0x6F81, 0x043F, 0x3867, 0x043F, 0xE10B, 0x033F
+
+/*
+// a of N2
+sim_pres_tissue[0] = 1.2599;
+sim_pres_tissue[1] = 1.0;
+sim_pres_tissue[2] = 0.8618;
+sim_pres_tissue[3] = 0.7562;
+sim_pres_tissue[4] = 0.6200;
+sim_pres_tissue[5] = 0.5043;
+sim_pres_tissue[6] = 0.4410;
+sim_pres_tissue[7] = 0.4000;
+sim_pres_tissue[8] = 0.3750;
+sim_pres_tissue[9] = 0.3500;
+sim_pres_tissue[10] = 0.3295;
+sim_pres_tissue[11] = 0.3065;
+sim_pres_tissue[12] = 0.2835;
+sim_pres_tissue[13] = 0.2610;
+sim_pres_tissue[14] = 0.2480;
+sim_pres_tissue[15] = 0.2327;
+// a of He
+sim_pres_tissue[16] = 1742.4 / 1000.0;
+sim_pres_tissue[17] = 1383.0 / 1000.0;
+sim_pres_tissue[18] = 1191.9 / 1000.0;
+sim_pres_tissue[19] = 1045.8 / 1000.0;
+sim_pres_tissue[20] = 9220. / 10000.0;
+sim_pres_tissue[21] = 8205. / 10000.0;
+sim_pres_tissue[22] = 7305. / 10000.0;
+sim_pres_tissue[23] = 6502. / 10000.0;
+sim_pres_tissue[24] = 5950. / 10000.0;
+sim_pres_tissue[25] = 5545. / 10000.0;
+sim_pres_tissue[26] = 5333. / 10000.0;
+sim_pres_tissue[27] = 5189. / 10000.0;
+sim_pres_tissue[28] = 5181. / 10000.0;
+sim_pres_tissue[29] = 5176. / 10000.0;
+sim_pres_tissue[30] = 5172. / 10000.0;
+sim_pres_tissue[31] = 5119. / 10000.0;
+*/
+};
+
+rom const unsigned int b_N2[] =
+{
+// N2
+0xAE47,  0x013F,  0x27C2,  0x263F,  0x19E2,  0x383F,  0xEC51,  0x483F,
+0x8E06,  0x503F,  0x10E9,  0x573F,  0x728A,  0x5E3F,  0x9318,  0x643F,
+0x55C1,  0x683F,  0x4D15,  0x6C3F,  0x0091,  0x6E3F,  0x80B7,  0x703F,
+0x789C,  0x723F,  0x8F53,  0x743F,  0xABCF,  0x753F,  0xE71D,  0x773F
+// He
+, 0x1058, 0xD93E, 0x8A1F, 0x133F, 0x5917, 0x273F, 0xA7E8, 0x383F
+, 0x6519, 0x423F, 0xFFB2, 0x4B3F, 0x41F1, 0x533F, 0xF1F4, 0x5A3F
+, 0xE02D, 0x603F, 0xB3EA, 0x633F, 0xBD52, 0x663F, 0xD044, 0x683F
+, 0xF085, 0x693F, 0x11C7, 0x6A3F, 0x88F4, 0x6B3F, 0x363C, 0x6D3F
+
+/*
+ 5050, Werte sind Einheitslos. 5050 ist in float als 0.5050
+ 6514,
+ 7222,
+ 7825,
+ 8126,
+ 8434,
+ 8693,
+ 8910,
+ 9092,
+ 9222,
+ 9319,
+ 9403,
+ 9477,
+ 9544,
+ 9602,
+ 9653
+// b
+sim_pres_tissue[16] = 0.4245;
+sim_pres_tissue[17] = 0.5747;
+sim_pres_tissue[18] = 0.6527;
+sim_pres_tissue[19] = 0.7223;
+sim_pres_tissue[20] = 0.7582;
+sim_pres_tissue[21] = 0.7957;
+sim_pres_tissue[22] = 0.8279;
+sim_pres_tissue[23] = 0.8553;
+sim_pres_tissue[24] = 0.8757;
+sim_pres_tissue[25] = 0.8903;
+sim_pres_tissue[26] = 0.8997;
+sim_pres_tissue[27] = 0.9073;
+sim_pres_tissue[28] = 0.9122;
+sim_pres_tissue[29] = 0.9171;
+sim_pres_tissue[30] = 0.9217;
+sim_pres_tissue[31] = 0.9267;
+*/
+};
+
+rom const unsigned int t05[] =
+{
+// N2
+  0x3BAA, 0xB8C0, 0x3BAA, 0x38C1, 0xFE44, 0x90C1, 0xD484, 0xD5C1
+, 0xA2CF, 0x1BC2, 0x5805, 0x5DC2, 0x3BAD, 0x9CC2, 0xCF2C, 0xDEC2
+, 0xF640, 0x1DC3, 0x2BA2, 0x52C3, 0x59E4, 0x86C3, 0xED66, 0xACC3
+, 0xD002, 0xDCC3, 0xABA9, 0x0CC4, 0x939D, 0x33C4, 0x2007, 0x65C4
+// He
+, 0x0B6C, 0x0BC0, 0x0B6C, 0x8BC0, 0x98E7, 0xD9C0, 0xDC59, 0x21C1
+, 0xBDAD, 0x6BC1, 0x2E1F, 0xA7C1, 0xBFF2, 0xECC1, 0xC7FC, 0x27C2
+, 0x93C1, 0x6DC2, 0xA33E, 0x9FC2, 0xDEF7, 0xCBC2, 0x4455, 0x02C3
+, 0x0C54, 0x26C3, 0x9EAE, 0x54C3, 0x55C9, 0x87C3, 0x2225, 0xADC3
+/*
+4, und zwar 4.0 * -1.0 / ln(2) ...
+8,
+12,
+18,
+27,
+39,
+55,
+77,
+109,
+146,
+187,
+239,
+305,
+390,
+498,
+635
+// He; t05 * -1 /ln(2)
+pres_tissue[16] = -2.178469512;
+pres_tissue[17] = -4.356939024;
+pres_tissue[18] = -6.809520594;
+pres_tissue[19] = -10.08443834;
+pres_tissue[20] = -14.72991637;
+pres_tissue[21] = -20.89022419;
+pres_tissue[22] = -29.61852919;
+pres_tissue[23] = -41.99685264;
+pres_tissue[24] = -59.43903569;
+pres_tissue[25] = -79.62233931;
+pres_tissue[26] = -101.9841124;
+pres_tissue[27] = -130.33307;
+pres_tissue[28] = -166.3283113;
+pres_tissue[29] = -212.6821029;
+pres_tissue[30] = -271.5729145;
+pres_tissue[31] = -346.2900907;
+*/
+};
+
+// ab hier bei Speicher 0x4100
+rom const unsigned int e1min[] =
+{ // N2
+0x0EEC, 0x223E, 0xC9F9, 0xA93D, 0xA8F2, 0x5C3D, 0x8AA0, 0x163D
+, 0x23A1, 0xCF3C, 0x89EC, 0x923C, 0x9AD0, 0x4F3C, 0x52D3, 0x123C
+, 0x26B7, 0xCF3B, 0x3A33, 0x9B3B, 0x7B78, 0x723B, 0xC0CA, 0x3D3B
+, 0xD7C4, 0x143B, 0x58BF, 0xE83A, 0xA54E, 0xB63A, 0x0AFF, 0x8E3A
+// He
+, 0xBE78, 0xBC3E, 0x9001, 0x523E, 0x71DB, 0x0B3E, 0x3757, 0xC13D
+, 0x186C, 0x863D, 0x2274, 0x3F3D, 0xBAFB, 0x073D, 0x1AC2, 0xC03C
+, 0x44AB, 0x883C, 0x107C, 0x4C3C, 0x0EDE, 0x1F3C, 0x9174, 0xFA3B
+, 0xBB6A, 0xC43B, 0x6CB5, 0x993B, 0x57E0, 0x703B, 0x8FFA, 0x3C3B 
+/*
+Die e1min Werte in float Notation:
+  und zwar  1 - 2^(-1/t05)
+c_2[0] = 0.1591036;
+c_2[1] = 0.08299596;
+c_2[2] = 0.053942353;
+c_2[3] = 0.036774196;
+c_2[4] = 0.02534539;
+c_2[5] = 0.017935055;
+c_2[6] = 0.012684012;
+c_2[7] = 8.961515534E-3;
+c_2[8] = 6.338971845E-3;
+c_2[9] = 4.73633146E-3;
+c_2[10] = 3.699808187E-3;
+c_2[11] = 2.89599589E-3;
+c_2[12] = 2.270033275E-3;
+c_2[13] = 1.775722E-3;
+c_2[14] = 1.390893611E-3;
+c_2[15] = 1.090974815E-3;
+// e 1 īmin He
+pres_tissue[0] = 0.368108684;
+pres_tissue[1] = 0.2050840824;
+pres_tissue[2] = 0.1365792957;
+pres_tissue[3] = 0.09440463235;
+pres_tissue[4] = 0.06563586265;
+pres_tissue[5] = 0.04674161154;
+pres_tissue[6] = 0.03319905126;
+pres_tissue[7] = 0.02353005571;
+pres_tissue[8] = 0.0166832282;
+pres_tissue[9] = 0.01248075064;
+pres_tissue[10] = 0.009757532198;
+pres_tissue[11] = 0.007643290133;
+pres_tissue[12] = 0.005994168431;
+pres_tissue[13] = 0.004690816669;
+pres_tissue[14] = 0.003675481163;
+pres_tissue[15] = 0.002883586737;
+*/
+};
+
+rom const unsigned int ht[] =
+{
+// N2
+0x0000, 0x8040, 0x0000, 0x0041, 0x0000, 0x4841, 0x0000, 0x9441
+, 0x0000, 0xD841, 0x3333, 0x1942, 0x3333, 0x5942, 0x0000, 0x9A42
+, 0x0000, 0xDA42, 0x0000, 0x1243, 0x0000, 0x3B43, 0x0000, 0x6F43
+, 0x0080, 0x9843, 0x0000, 0xC343, 0x0000, 0xF943, 0x00C0, 0x1E44
+// He
+, 0xAE47, 0xC13F, 0xAE47, 0x4140, 0x3D0A, 0x9740, 0x14AE, 0xDF40
+, 0x295C, 0x2341, 0x14AE, 0x6741, 0x713D, 0xA441, 0x48E1, 0xE841
+, 0xCDCC, 0x2442, 0x8FC2, 0x5C42, 0x4861, 0x8D42, 0x14AE, 0xB442
+, 0x7B94, 0xE642, 0x856B, 0x1343, 0x713D, 0x3C43, 0xAE07, 0x7043
+/*
+He:
+sim_pres_tissue[0] = 1.51;
+sim_pres_tissue[1] = 3.02;
+sim_pres_tissue[2] = 4.72;
+sim_pres_tissue[3] = 6.99;
+sim_pres_tissue[4] =10.21;
+sim_pres_tissue[5] =14.48;
+sim_pres_tissue[6] =20.53;
+sim_pres_tissue[7] =29.11;
+sim_pres_tissue[8] =41.20;
+sim_pres_tissue[9] =55.19;
+sim_pres_tissue[10] =70.69;
+sim_pres_tissue[11] =90.34;
+sim_pres_tissue[12] =115.29;
+sim_pres_tissue[13] =147.42;
+sim_pres_tissue[14] =188.24;
+sim_pres_tissue[15] =240.03;
+*/
+};
+
+rom const unsigned int e10min[] =
+{
+// N2
+  0xBEBE, 0x523F, 0x855D, 0x143F, 0xEEEE, 0xD93E, 0x4CFE, 0x9F3E
+, 0x99D9, 0x673E, 0x2785, 0x293E, 0xAD6E, 0xF53D, 0x044E, 0xB03D
+, 0x8D5C, 0x7C3D, 0xCDEA, 0x3D3D, 0xB00B, 0x153D, 0x232C, 0xEA3C
+, 0x9612, 0xB83C, 0x6E4F, 0x903C, 0x8276, 0x623C, 0x9FDE, 0x313C
+// He
+, 0xE066, 0x7D3F, 0xC635, 0x663F, 0x7C0D, 0x453F, 0xEA07, 0x213F
+, 0x0953, 0xFC3E, 0xB5C4, 0xC23E, 0x1CB5, 0x923E, 0xA5F8, 0x583E
+, 0xBC90, 0x1E3E, 0x9EB7, 0xF13D, 0xC348, 0xBF3D, 0x4942, 0x973D
+, 0xD400, 0x6F3D, 0x6921, 0x3C3D, 0xF514, 0x143D, 0x982E, 0xE93C
+/*
+He: 10 min
+sim_pres_tissue[0] = 0.989851;
+sim_pres_tissue[1] = 0.899258;
+sim_pres_tissue[2] = 0.769737;
+sim_pres_tissue[3] = 0.629027;
+sim_pres_tissue[4] = 0.492821;
+sim_pres_tissue[5] = 0.380407;
+sim_pres_tissue[6] = 0.286538;
+sim_pres_tissue[7] = 0.211886;
+sim_pres_tissue[8] = 0.154849;
+sim_pres_tissue[9] = 0.118026;
+sim_pres_tissue[10] =0.0934005;
+sim_pres_tissue[11] =0.0738569;
+sim_pres_tissue[12] =0.0583504;
+sim_pres_tissue[13] =0.0459303;
+sim_pres_tissue[14] =0.0361528;
+sim_pres_tissue[15] =0.0284646;
+N2: 10 min
+sim_pres_tissue[16] = 0.823223;
+sim_pres_tissue[17] = 0.579552;
+sim_pres_tissue[18] = 0.425651;
+sim_pres_tissue[19] = 0.312487;
+sim_pres_tissue[20] = 0.226416;
+sim_pres_tissue[21] = 0.165547;
+sim_pres_tissue[22] = 0.11984;
+sim_pres_tissue[23] = 0.0860863;
+sim_pres_tissue[24] = 0.0616117;
+sim_pres_tissue[25] = 0.0463665;
+sim_pres_tissue[26] = 0.0363881;
+sim_pres_tissue[27] = 0.0285855;
+sim_pres_tissue[28] = 0.0224698;
+sim_pres_tissue[29] = 0.017616;
+sim_pres_tissue[30] = 0.0138222;
+sim_pres_tissue[31] = 0.0108563;
+*/
+};
Binary file code_part1/OSTC_code_c_part2/p3_wordprocessor.o has changed