/Designs/MRAKOMER4/SW/2zone/dbloader.c
1,6 → 1,6
/*------------------- DUMMY BOOT LOADER --------------------------------------------*/
#define FLASH_BLOCK_SIZE 32
#define LOADER_RESERVED getenv("PROGRAM_MEMORY")-26*FLASH_BLOCK_SIZE
#define LOADER_RESERVED getenv("PROGRAM_MEMORY")-24*FLASH_BLOCK_SIZE
#define BUFFER_LEN_LOD 46
#if FLASH_BLOCK_SIZE != getenv("FLASH_ERASE_SIZE")/2
#error Wrong length of the Flash Block Size. getenv("FLASH_ERASE_SIZE")/getenv("FLASH_WRITE_SIZE")
/Designs/MRAKOMER4/SW/2zone/irmrak4.PJT
34,13 → 34,14
[Opened Files]
1=irmrak4.c
2=irmrak4.h
3=..\..\..\..\..\..\..\..\Program Files\PICC\devices\16F88.h
4=..\..\..\..\..\..\..\..\Program Files\PICC\drivers\TOUCH.C
5=..\..\..\..\..\..\..\..\Program Files\PICC\drivers\string.h
6=..\..\..\..\..\..\..\..\Program Files\PICC\drivers\stddef.h
7=..\..\..\..\..\..\..\..\Program Files\PICC\drivers\ctype.h
8=smb.c
9=
3=..\..\..\..\..\..\..\..\Program Files\PICC\Devices\16F88.h
4=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\string.h
5=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\stddef.h
6=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\ctype.h
7=smb.c
8=dbloader.c
9=TOUCH.C
10=
[Units]
Count=1
1=irmrak4 (main)
/Designs/MRAKOMER4/SW/2zone/irmrak4.c
3,7 → 3,6
#define ID "$Id$"
 
#include "irmrak4.h"
#include <TOUCH.C>
 
#bit CREN = 0x18.4 // USART registers
#bit SPEN = 0x18.7
20,7 → 19,6
#define RESPONSE_DELAY 100 // Reaction time after receiving a command
#define SAFETY_COUNT 90 // Time of one emergency cycle
#define SEND_DELAY 50 // Time between two characters on RS232
#define ERROR -32000 // Error flag
 
#define DOME PIN_B4 // Dome controll port
#define HEATING PIN_B3 // Heating for defrosting
51,21 → 49,16
char REV[50]=ID; // Buffer for concatenate of a version string
 
if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
printf("\n\r\n\r# Mrakomer %s (C) 2007 KAKL\n\r",VER); // Welcome message
printf("#%s\n\r",&REV[4]);
printf("#\n\r");
printf("# h - Switch On Heating for 20s.\n\r");
printf("# c - Need Colder. Switch Off Heating.\n\r");
printf("# o - Open the Dome for 20s.\n\r");
printf("# l - Lock the Dome.\n\r");
printf("# x - Open the Dome and switch On Heating.\n\r");
printf("# i - Print this Information.\n\r");
printf("# r - Repeat measure every second.\n\r");
printf("# s - Single measure.\n\r");
printf("# u - Update firmware. Go to the Boot Loader.\n\r");
printf("#\n\r");
printf("\r\n\r\n# Mrakomer %s (C) 2007 UST\n\r",VER); // Welcome message
printf("#%s\r\n",&REV[4]);
printf("#\r\n");
printf("# commands:\r\n");
printf("# h_eat, c_old, o_pen, l_ock, x_open, ");
printf("i_nfo, r_epeat, a_uto, s_single, u_pdate\r\n");
printf("#\r\n");
printf("# <ver> <sequence> <inside[1/100 C]> <sky[1/100 C]> <sky[1/100 C]> ");
printf("<ambient[1/100 C]> <heating[s]> <dome[s]> <check>\n\r\n\r");
printf("<ambient[1/100 C]> <heating[s]> <dome[s]> <check>\r\n\r\n");
 
//---WDT
restart_wdt();
}
72,6 → 65,7
 
 
#include "smb.c" // System Management Bus driver
#include "TOUCH.C"
 
 
// Read sensor's RAM
145,7 → 139,8
signed int16 ta, to1, to2, tTouch;
int8 tLSB,tMSB; // Temperatures from TouchMemory
int8 safety_counter;
int1 repeat;
int1 repeat; // Status flags
int1 automatic;
 
output_high(DOME); // Close Dome
output_low(HEATING); // Heating off
203,23 → 198,28
{
case 'h':
heat=MAXHEAT; // Need heating
automatic=FALSE;
break;
 
case 'c':
heat=0; // Need colder
automatic=FALSE;
break;
 
case 'o':
open=MAXOPEN; // Open the dome
automatic=FALSE;
break;
 
case 'x':
open=MAXOPEN; // Open the dome
heat=MAXHEAT; // Need heating
automatic=FALSE;
break;
 
case 'l':
open=0; // Lock the dome
automatic=FALSE;
break;
 
case 'i':
228,12 → 228,19
 
case 'r':
repeat=TRUE; // Repeated measure mode
automatic=FALSE;
break;
 
case 's':
repeat=FALSE; // Single measure mode
automatic=FALSE;
break;
 
case 'a':
repeat=TRUE; // Automatic mode
automatic=TRUE;
break;
 
case 'u':
reset_cpu(); // Update firmware
}
272,18 → 279,21
if ((SN[8]==TM_check_CRC(SN,8))&&(SN[7]==0x10)) // Check CRC and family code to prevent O's error
{
tTouch=make16(tMSB,tLSB);
tTouch=tTouch*6+tTouch/4; // 1bit = 0,0625gradC recalculate to 1/100gradC
}
else
{
tTouch=ERROR;
tTouch=-27315;
}
 
for(n=0;n<9;n++) printf("%X ",SN[n]);
//!!! printf("CRC %u %u ",SN[8],TM_check_CRC(SN,8));
//!!! printf("%.4f ",tTouch*6.25);
}
if(automatic) // Solve automatic mode
{
if(ta<1800) heat=MAXHEAT; // Need heating
if((abs(to1-to2)<200)&&(tTouch>to1)&&(abs(tTouch/4-to1)>500))
open=MAXOPEN; // Open the dome
}
 
{ // printf
char output[8]; // Output buffer
int8 j; // String pointer
302,14 → 312,7
j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
sprintf(output,"%Ld \0", to2);
j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
if(tTouch==ERROR)
{
sprintf(output,"-27315 \0"); // Error condition
}
else
{
sprintf(output,"%Ld \0",tTouch*6+(tTouch/4)); // 1bit = 0,0625gradC
}
sprintf(output,"%Ld \0",tTouch);
j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
sprintf(output,"%u \0", heat);
j=0; while(output[j]!=0) { delay(SEND_DELAY); putc(output[j]); check^=output[j++]; }
320,7 → 323,6
delay(SEND_DELAY);
}
 
//---WDT
restart_wdt();
}
327,4 → 329,4
}
 
 
//#include "dbloader.c" // Space reservation for the BootLoader
#include "dbloader.c" // Space reservation for the BootLoader
/Designs/MRAKOMER4/SW/2zone/irmrak4.hex
1,413 → 1,414
:1000000009308A001E2900000A108A100A110B3ECE
:1000100003188A0A820000345E34BC34E23461344E
:100020003F34DD348334C2349C347E342034A334F2
:10003000FD341F3441349D34C33421347F34FC34C7
:10004000A23440341E345F340134E334BD343E34D2
:1000500060348234DC3423347D349F34C134423400
:100060001C34FE34A034E134BF345D3403348034B6
:10007000DE343C346234BE34E03402345C34DF3489
:10008000813463343D347C342234C0349E341D3496
:100090004334A134FF3446341834FA34A4342734BA
:1000A00079349B34C5348434DA3438346634E534F6
:1000B000BB3459340734DB34853467343934BA34CB
:1000C000E4340634583419344734A534FB347834D6
:1000D0002634C4349A3465343B34D93487340434F8
:1000E0005A34B834E634A734F9341B344534C634B2
:1000F00098347A342434F834A63444341A34993495
:10010000C73425347B343A3464348634D8345B3491
:100110000534E734B9348C34D23430346E34ED34B1
:10012000B33451340F344E341034F234AC342F34F1
:1001300071349334CD3411344F34AD34F3347034DE
:100140002E34CC349234D3348D346F343134B234D1
:10015000EC340E345034AF34F13413344D34CE34E7
:10016000903472342C346D343334D1348F340C34B5
:100170005234B034EE3432346C348E34D0345334A0
:100180000D34EF34B134F034AE344C341234913495
:10019000CF342D347334CA34943476342834AB34A9
:1001A000F5341734493408345634B434EA346934F5
:1001B0003734D5348B3457340934EB34B5343634D2
:1001C00068348A34D4349534CB3429347734F434D5
:1001D000AA3448341634E934B73455340B348834EF
:1001E000D63434346A342B3475349734C9344A34B1
:1001F0001434F634A83474342A34C834963415349C
:100200004B34A934F734B634E8340A345434D73490
:1002100089346B3435348A068A0623104D39E1352A
:10022000EF366539A0127310A82129103218B01BBF
:10023000A025C1254C050D00231068102D10D33BBF
:10024000693A6334A0276E10C832613A6937671083
:10025000E6377210321873178A06000023106310F5
:100260002D10CE326532A0216F36E4327217A029EC
:10027000F734F43168104F336610C832613A693789
:1002800067178A06000123106F102D104F3865374D
:10029000203AE8322022EF366510E6377210321825
:1002A00073178A06000123106C102D10CC37E3352C
:1002B000203AE8322022EF3665178A060001231023
:1002C00078102D104F386537203AE8322022EF366B
:1002D000651061376410F33B693A6334A0276E10F0
:1002E000C832613A693767178A060001231069101E
:1002F0002D105039693774107434E939A0246E33E5
:100300006F39ED30F4346F372E050D002310721065
:100310002D10D232F032613AA036E530F33AF232A3
:10032000A032F632F23CA039E5316F3764178A0605
:100330000001231073102D10D334EE33EC32A036AD
:10034000E530F33AF2322E050D00231075102D1012
:100350005538E430F43220336939ED3B61396517A3
:10036000A0236F10F437203AE8322021EF377410C1
:10037000CC37613265392E050D0023103C3B6539C1
:100380003E10BC39E538F532EE31651F201E693765
:10039000F334E432DB18AF183018A0215D1F201EA3
:1003A000F335F92DB11731183010C32E3E10BC397A
:1003B000EB3CDB18AF183018A0215D1F2000BC30CB
:1003C0006D31E9326E3ADB18AF183018A0215D1F8D
:1003D000201EE832613A6937E72DF32E3E103C3299
:1003E000EF36E52DF32E3E10BC31E832E3353E0505
:1003F0000D050D002D19B719B11A2000000053305A
:100400008400831300080319122A0230F800F70150
:10041000F70B082AF80B072A9730F700F70B0E2A7C
:10042000800B052A080083165308D5005208D40013
:100430005508FA005408840083137A18831780083B
:100440000319262AD40A0319D50A182A5208540275
:10045000F7005508FA005308031C530FFA027708F7
:10046000F80083120800831603178C170C14000081
:10047000000003186A2A83120C087F3983160313BD
:10048000D300831203170D0883160313D4008312BD
:1004900003170F0883160313D500530883120C1E8D
:1004A0004F2A990083165408831203178D00831670
:1004B00003135508831203178F0083168C170C142F
:1004C000000000000313D20B662A682A03176A2A69
:1004D000952A031783120C0D0E0D7F398316031313
:1004E000D300831203170D0883160313D40083125D
:1004F00003170F0883160313D500530883120C1E2D
:100500007F2A990083165408831203178D008316DF
:1005100003135508831203178F008D0A03198F0ADE
:10052000031083160313D20B342A831208008008A9
:100530000319B42A8316D3010408D2005310831B75
:100540005314000883120C1EA32A99008316520824
:100550008400831353188317840A031DB22A83125D
:10056000850A83168312972A0800831603178C17AF
:100570000C140000000083120C087F3903190F2BA4
:1005800083160313D200831203170D088316031377
:10059000D300831203170F0883160313D4005208E5
:1005A00083120C1ED12A9900831653088312031755
:1005B0008D00831603135408831203178F008316CC
:1005C0008C170C140000000083120C0D0E0D7F39E7
:1005D00003190F2B83160313D200831203170D0880
:1005E00083160313D300831203170F088316031314
:1005F000D400520883120C1EFB2A9900831653085C
:10060000831203178D0083160313540883120317F4
:100610008F008D0A03198F0A0313B52A03170313DA
:10062000080024308316A0004930A1006430A200E5
:100630003A30A3002030A4006930A5007230A60033
:100640006D30A7007230A8006130A9006B30AA009D
:100650003430AB002E30AC006330AD002030AE0043
:100660003130AF003530B0003930B1003730B20032
:100670002030B3003230B4003030B5003130B60035
:100680003030B7002D30B8003030B9003830BA0003
:100690002D30BB003230BC003530BD002030BE00F4
:1006A0003130BF003930C0003A30C1003430C200B0
:1006B0003730C3003A30C4003530C5003830C6008A
:1006C0005A30C7002030C8006B30C9006130CA0002
:1006D0006B30CB006C30CC002030CD002430CE000D
:1006E000CF01D301A030D20083121322013078024F
:1006F000A03E840083130008243C031D8B2B83162B
:10070000D301A030D2008312132201307802A03E20
:100710008400831380010B3003178D0001308F009C
:1007200003100F3083160313D200831233222230BA
:10073000840083139722133003178D0001308F003C
:100740000314103083160313D20083123322233094
:100750000C1EA82B9900A4308400831397220A3022
:100760000C1EB02B99000D300C1EB42B99002330B9
:100770000C1EB82B99000A300C1EBC2B99000D30B2
:100780000C1EC02B99001C3003178D0001308F0008
:100790000313B5222E3003178D0001308F00031391
:1007A000B522433003178D0001308F000313B522AB
:1007B000533003178D0001308F000313B5225F30D3
:1007C00003178D0001308F000313B5227630031715
:1007D0008D0001308F000313B522863003178D0082
:1007E00001308F000313B522993003178D000130BB
:1007F0008F000313B522A53003178D0001308F0041
:100800000313B52223300C1E032C99000A300C1E52
:10081000072C99000D300C1E0B2C9900BD300317CE
:100820008D0001308F000313B522DF3003178D00D8
:1008300001308F000313B52264000800831686146C
:100840000610831206100D30F700F70B252C8316C7
:100850008610831286100D30F700F70B2D2C8316AF
:1008600006140D30F700F70B332C861483120800A2
:10087000831686140D30F700F70B3C2C06140D3050
:10088000F700F70B412C8610831286100D30F7000D
:10089000F70B482C83160610831206100D30F70054
:1008A000F70B502C0800E208031D5B2C8316861002
:1008B000831286105E2C8316861483125F2C602CA4
:1008C000612C831606141A30F700F70B652C000014
:1008D000061083120610A7080319742C831606123B
:1008E000103083128606782C8316061283120616A1
:1008F0004230F700F70B7A2C0000A7080319862C6A
:10090000831606121030831286068A2C831606126E
:100910008312061608008316861406141A30F70090
:10092000F70B902C000086148312861C9A2C013041
:10093000E2009B2CE2018316061083120610A70822
:100940000319A82C83160612103083128606AC2CCD
:1009500083160612831206164230F700F70BAE2CF0
:100960000000A7080319BA2C831606121030831250
:100970008606BE2C83160612831206166208F8003D
:1009800008000830DF00DF080319D32CDE1FCB2C52
:100990000130E100CC2CE1016108E2005324031096
:1009A000DE0DDF03C32C8B247808E0006008F8001C
:1009B00008000830DF00DF080319EB2C8B24F8084F
:1009C0000319E62C0310DE0D5E14E92C0310DE0D76
:1009D0005E10DF03DB2C5D08E20053245E08F800A4
:1009E00008000310D20D1E2438245208DE00C12452
:1009F0005308DD00DE00C12438245208DE00C12483
:100A0000DD01D9247808D600DD01D9247808D50085
:100A10005508DC005608DB000130DD00D9247808D9
:100A2000DA001E245208D9005308D8005208D70013
:100A3000D401DE015430DD002F30E500E401E30194
:100A4000E201E1010130E0000730DF002F30E50076
:100A5000E6010530E700E80167085D0784008313BD
:100A60005E1883170008EA008030F7006808F80075
:100A700003193E2D0310F70CF80B3A2D77086A0581
:100A8000031D5C2DE70803195C2DE5036808063C8F
:100A9000031C4C2DE80A4E2DE801E703A7080319B3
:100AA000572D831606121030831286065B2D83168F
:100AB0000612831206162C2D08306502E600E608A1
:100AC0000319942D0530E700670F672D852D013040
:100AD00067025F3E84008313801F742DE7080319AB
:100AE000742D0130E900752DE9015F30670784003E
:100AF00083130310000D80005F30670784008313A9
:100B0000690800078000E703642DE603A7080319BE
:100B10008F2D83160612103083128606932D8316AE
:100B20000612831206165F2DE7016708053C031CB9
:100B3000B72D67085D07F8005E08FA000318FA0A87
:100B40007808840083137A1883170008EC005F305C
:100B500067078400831300086C06EC0078088400A3
:100B600083137A1883176C088000E70A952D6508AF
:100B7000083C031C1E2D5D08840083135E18831738
:100B80000008F80078085A020319C82DDC01DB01BF
:100B90005B08F8005C08F9000800831686138613CA
:100BA000831286130230D300F830D4000830D40208
:100BB000031CE62D5430840083130310800C0008BE
:100BC0000319E62DE42D0000800BE32DD30BD42D6B
:100BD000831686170330F700F70BEC2D8312861B64
:100BE000F42D0030F800042E2B30F700F70BF62D13
:100BF0005210861F52149F30F700F70BFD2D002E68
:100C0000003052180130F80008000130D3005308BA
:100C1000083C031C562E0310D20C00300318013080
:100C2000D4005408D50083168613861383128613C6
:100C30000630F700F70B1A2E0000D5080319302EE6
:100C4000831686138613831286170630F700F70B78
:100C5000272E0000861B2F2E0030F8004E2E3F2E30
:100C6000831686138613831286130630F700F70B5C
:100C7000372E0000861F3F2E0030F8004E2E213008
:100C8000F700F70B412E83168613861383128617FF
:100C90002130F700F70B4A2E0130F800F808031D49
:100CA000542E0030F800582ED30A072E0130F800D9
:100CB0000800D501D40155085302031C7B2E031DE7
:100CC000652E5208540203187B2EA70803196E2EB6
:100CD00083160612103083128606722E83160612B1
:100CE000831206164230F700F70B742E0000D40A68
:100CF0000319D50A5B2E08000130D4005408083CC3
:100D0000031CA72E831686138613831286130930BD
:100D1000F700F70B892E831686170330F700F70BC1
:100D20008F2E83125610861B56144230F700F70B95
:100D3000972E0000003056180130F800F808031D07
:100D4000A32E0310A42E0314D50CD40A7E2E55080E
:100D5000F8008A15652AD41BBE2E0F30F700530EFB
:100D6000F7050A3077020318B82E3030F707BA2E8D
:100D70005408F70777080C1EBB2E99000F30D305D7
:100D80000A3053020318C62E3030C82ED41354082C
:100D9000D30753080C1ECA2E99008A15B52A2808B5
:100DA00084008313291883175D088000840A80015A
:100DB000A80A0319A90A080080080319F12ED30113
:100DC0000408D2005310831B53140008DD00CF2603
:100DD00052088400831353188317840A0319850A61
:100DE000DC2E8A15DA2ADA010408D9005A10831B8E
:100DF0005A14530EF038D500D507E23ED600323EE5
:100E0000D80053080F39D607D607D807E93ED700D0
:100E1000D707D707520E0F39D707D807D70DD80DE8
:100E2000D809D80D52080F39D807D50D0730D4008E
:100E30000A30D807D703031C192FD707D603031C82
:100E40001D2FD607D503031C212FD507D403031C60
:100E5000252F543084008313073059055913840714
:100E600058300402031959170008F700031D402FDA
:100E7000591B402F591A522FD919402F2030432F78
:100E8000D91559123030F707D3010408D200531096
:100E9000831B53147708DD00CF2652088400831388
:100EA00053188317840A591F302F8A150B2BDC0126
:100EB0000408DB005C10831B5C14D51F672FDB1755
:100EC0005B1EDB0AD409D509D40A0319D50A550ECD
:100ED000F038D700D707E23ED800323EDA00550896
:100EE0000F39D807D807DA07E93ED900D907D9075B
:100EF000540E0F39D907DA07D90DDA0DDA09DA0DF0
:100F000054080F39DA07D70D0730D6000A30DA0750
:100F1000D903031C872FD907D803031C8B2FD807AD
:100F2000D703031C8F2FD707D603031C932F5630EC
:100F30008400831307305B055B1384035B05031D8B
:100F4000A82F5B1A840A5B1AA82F2030F700C52F40
:100F500084075A30040203195B170008F700031DC9
:100F6000B92F5B1BB92F5B1AD32FDB19B92F203098
:100F7000C42FDB1FC12F2D30F70084035B13DB135D
:100F8000C52FDB155B123030F707D5010408D400FC
:100F90005510831B55147708DD00CF2654088400B4
:100FA000831355188317840A5B1FA92F080055085F
:100FB000F80154020318DF2F5408F700EB2FF70154
:100FC0000830D600D40DF70D550877020318F70046
:080FD000F80DD60BE22F08001A
:10100000831603178C170C140000000083120C08C1
:101010007F39031948280313D20003170D0803135F
:10102000D30003170F080313D4005208DD008A1100
:10103000CF268A15530803178D000313540803178E
:101040008F0083168C170C140000000083120C0D07
:101050000E0D7F39031948280313D20003170D081A
:101060000313D30003170F080313D4005208DD0045
:101070008A11CF268A15530803178D0003135408CD
:1010800003178F008D0A03198F0A03130028031713
:1010900003138A15D52B530855068039D700D31F63
:1010A0005628D209D309D20A0319D30AD51F5D28BD
:1010B000D409D509D40A0319D50A1030D600F7018E
:1010C000FA01D30CD20C031C6B285408F707031841
:1010D000FA0A5508FA07FA0CF70CF90CF80CD60BBB
:1010E0006128D71F7828F809F909F80A0319F90ABD
:1010F0008A15DE2B550857068039D900D51F85285B
:10110000D409D509D40A0319D50AD71F8C28D609C2
:10111000D709D60A0319D70AF801F901F701FA012C
:101120005708031D962856080319B0281030D80018
:101130000310D40DD50DF70DFA0D57087A02031DD3
:10114000A32856087702031CAC285608F702031C94
:10115000FA035708FA020314F80DF90DD80B982872
:10116000D91FB728F809F909F80A0319F90A8A15E5
:10117000EA2B78085208D4006430D5008A11D727AA
:101180008A157708D20078083030031DCE28D31C8A
:10119000D728D319D728531A2030D128D311531266
:1011A0005314F8077808DD008A11CF268A155208F3
:1011B000D4000A30D5008A11D7278A157708D200C3
:1011C00078083030031DEA28D319F028531CF02882
:1011D000531A2030F8077808DD008A11CF268A15C7
:1011E0003030D2075208DD008A11CF268A15080058
:1011F000D31B0C290F30F700520EF7050A30770287
:10120000031805293030F70707295308F70777082F
:10121000DD008A11CF268A150F30D2050A3052021E
:101220000318142930301629D3135308D207520853
:10123000DD008A11CF268A158A158A2C8401831332
:101240001F308305723083168F000F0833309900EA
:10125000A230980090308312980083161F129F12BC
:101260001B0880399B0007309C008312A001A1015C
:101270003430A2002E30A3003130A400A501A80113
:10128000A90183160612831206168316861183128D
:1012900086110430D200FA30D3008A11FF218A155A
:1012A000D20B4B296400AB01AA01A601A7013B1494
:1012B0008A1111238A15D2010630D3008A11F12434
:1012C0008A157908AF007808AE00D2010730D30044
:1012D0008A11F1248A157908AD007808AC008A11CA
:1012E000CD258A15CC30D2008A1105268A154430C6
:1012F000D2008A1105268A150430D200FA30D300B4
:101300008A11FF218A15D20B7E2964005A30BA0057
:101310003A08593C0318BA0AD3016430D2008A1142
:1013200059268A153A08593C0318AA29A608031D0C
:10133000A603A708031DA703A6080319A42983165B
:10134000861183128615A8298316861183128611A9
:10135000BA0164008C1AAE293B1C882964006B30EA
:10136000BC008C1EB7298C1EB3291A08BC00633040
:101370003C02EA3E0318D929163EB72C1430A600C9
:10138000D929A601D9291430A700D9291430A700DA
:10139000A600D929A701D929A708031DD2298A1196
:1013A00011238A15D9293B14D9293B10D9298A013F
:1013B000002818121816AA0A0319AB0AD20106301F
:1013C000D3008A11F1248A157908AF007808AE009D
:1013D00003102E0DD2002F0DD300B3305202F700B0
:1013E0005308FA006A30031C6B30FA027708B00029
:1013F0007A08B100D2010730D3008A11F1248A158E
:101400007908AD007808AC0003102C0DD2002D0D2A
:10141000D300B3305202F7005308FA006A30031CBD
:101420006B30FA027708B2007A08B300D2010830B4
:10143000D3008A11F1248A157908AD007808AC0030
:1014400003102C0DD2002D0DD300B3305202F70043
:101450005308FA006A30031C6B30FA027708B400B4
:101460007A08B5008A11CD258A15CC30D2008A11B0
:1014700005268A154430D2008A1105268A15640093
:101480001730D3007030D2008A1159268A158A117C
:10149000CD258A15CC30D2008A1105268A15BE309A
:1014A000D2008A1105268A15C7014708083C031C8B
:1014B0006F2A3D304707F800FA010318FA0A780846
:1014C000D2007A08D3008A117C2E8A155208840033
:1014D00083135318831778088000C70A552A3D08DC
:1014E000B8003E08B900D3013D30D2000830D40026
:1014F000D501D601540856020318932A56085207FC
:10150000F8005308FA000318FA0A780884008313D5
:101510007A188317000855068A1104208A15F800E6
:10152000D500D60A7A2A5508F80078084502031D26
:10153000A22A4408103C031DA22A3908B700380823
:10154000B600A52A8330B700B601C7014708083C9A
:10155000031CBC2A3D304707840083130008D200D7
:10156000D3003730D4008A11AB2E8A1520300C1EE0
:10157000B72A9900C70AA62AD101D3013230D20076
:101580008A1159268A1524300C1EC42A9900D301C9
:101590003230D2008A1159268A15A9014830A80094
:1015A0004D30DD008A11CF268A1522308400831346
:1015B0008A11DC2E8A152030DD008A11CF268A158B
:1015C000D001483050078400831380080319002B92
:1015D000D3013230D2008A1159268A15483050077B
:1015E000840083130008D20052080C1EF52A9900CB
:1015F0005008D00A483E840083130008D106E12A2F
:10160000A9014830A800103084002B08D3002A0814
:10161000D2008A11F32E8A152030DD008A11CF26E0
:101620008A15D001483050078400831380080319BD
:10163000312BD3013230D2008A1159268A15483015
:101640005007840083130008D20052080C1E262B7A
:1016500099005008D00A483E840083130008D10640
:10166000122BA9014830A800103084003108D500A1
:101670003008D4008A1157278A152030DD008A11DE
:10168000CF268A15D0014830500784008313800884
:101690000319622BD3013230D2008A1159268A15E0
:1016A00048305007840083130008D20052080C1EF3
:1016B000572B99005008D00A483E84008313000835
:1016C000D106432BA9014830A8001030840033080C
:1016D000D5003208D4008A1157278A152030DD0042
:1016E0008A11CF268A15D001483050078400831311
:1016F00080080319932BD3013230D2008A11592666
:101700008A1548305007840083130008D20052081D
:101710000C1E882B99005008D00A483E8400831381
:101720000008D106742BA9014830A80010308400AD
:101730003508D5003408D4008A1157278A1520307F
:10174000DD008A11CF268A15D00148305007840069
:10175000831380080319C42BD3013230D2008A11BD
:1017600059268A1548305007840083130008D20098
:1017700052080C1EB92B99005008D00A483E84002C
:1017800083130008D106A52BB608031DD62B3708F6
:10179000833C031DD62BA9014830A800FA3003175B
:1017A0008D0001308F0003130028032C3708D3006D
:1017B0003608D200D5010630D4004B287908D30072
:1017C0007808D2003708D5003608D400D701043095
:1017D000D6007A287908FA007808D2077908031821
:1017E000790FD307A9014830A800103084005308AE
:1017F000D5005208D4008A1157278A152030DD0001
:101800008A11CF268A15D0014830500784008313EF
:1018100080080319232CD3013230D2008A115926B3
:101820008A1548305007840083130008D2005208FC
:101830000C1E182C99005008D00A483E84008313CF
:101840000008D106042CA9014830A8002608D200BF
:101850001B30D300B9202030DD008A11CF268A1535
:10186000D001483050078400831380080319502C9E
:10187000D3013230D2008A1159268A1548305007D8
:10188000840083130008D20052080C1E452C9900D6
:101890005008D00A483E840083130008D106312C3A
:1018A000A9014830A8002708D2001B30D300B92076
:1018B0002030DD008A11CF268A15D001483050072C
:1018C00084008313800803197D2CD3013230D200A9
:1018D0008A1159268A15483050078400831300085E
:1018E000D20052080C1E722C99005008D00A483EB3
:1018F000840083130008D1065E2CA9014830A8009B
:101900002A30DD008A11CF268A155108D2003730DF
:10191000D300F8280D30DD008A11CF268A150A3051
:10192000DD008A11CF268A15D00148305007840087
:10193000831380080319AE2CD3013230D2008A11F0
:1019400059268A155008D00A483E8400831300089F
:10195000D20052080C1EAA2C9900952CD3013230CB
:10196000D2008A1159268A156400862963000A105C
:101970008A100A158207C129D929D929D929D92933
:10198000BE29CC29D929D929CA29D929D929C32994
:10199000D929D929D329D529D929D729D929D92943
:0219A000C62956
:0C00000008308A00E728000020280800D3
:100040000A108A100A11273E03188A0A8200003417
:100050005E34BC34E23461343F34DD348334C23442
:100060009C347E342034A334FD341F3441349D3419
:10007000C33421347F34FC34A23440341E345F3422
:100080000134E334BD343E3460348234DC34233410
:100090007D349F34C13442341C34FE34A034E13406
:1000A000BF345D3403348034DE343C346234BE34D7
:1000B000E03402345C34DF34813463343D347C34E6
:1000C0002234C0349E341D344334A134FF344634CA
:1000D0001834FA34A434273479349B34C534843446
:1000E000DA3438346634E534BB3459340734DB341D
:1000F000853467343934BA34E43406345834193426
:100100004734A534FB3478342634C4349A34653407
:100110003B34D934873404345A34B834E634A73401
:10012000F9341B344534C63498347A342434F834E2
:10013000A63444341A349934C73425347B343A34E1
:1001400064348634D8345B340534E734B9348C34C1
:10015000D23430346E34ED34B33451340F344E3441
:100160001034F234AC342F3471349334CD34113430
:100170004F34AD34F33470342E34CC349234D33421
:100180008D346F343134B234EC340E345034AF34F7
:10019000F13413344D34CE34903472342C346D3405
:1001A0003334D1348F340C345234B034EE343234EE
:1001B0006C348E34D03453340D34EF34B134F034E5
:1001C000AE344C3412349134CF342D347334CA34B9
:1001D000943476342834AB34F53417344934083445
:1001E0005634B434EA3469343734D5348B34573424
:1001F0000934EB34B534363468348A34D434953425
:10020000CB3429347734F434AA3448341634E934FE
:10021000B73455340B348834D63434346A342B3400
:1002200075349734C9344A341434F634A8347434E9
:100230002A34C834963415344B34A934F734B634E0
:10024000E8340A345434D73489346B3435340D05EA
:100250000D0523104D39E135EF366539A0127310C5
:10026000A82129103218B01BA02A532A8A060000A0
:100270002310E337ED366137E439BA060A0023105C
:10028000E82FE5307416A031DF376C322C10EF2FD9
:10029000F0326E162036DF37E3352C10F82F6F382A
:1002A00065372C100001E92F6E336F162039DF32CD
:1002B000F032613A2C10E12F753A6F16A039DF3910
:1002C000693767366516A03A5F38E430F4320D05B9
:1002D000000123103C3B65393E10BC39E538F5324E
:1002E000EE31651F201E6937F334E432DB18AF1896
:1002F0003018A0215D1F201EF335F92DB1173118DC
:100300003010C32E3E10BC39EB3CDB18AF18301850
:10031000A0215D1F2000BC306D31E9326E3ADB1840
:10032000AF183018A0215D1F201EE832613A6937EE
:10033000E72DF32E3E103C32EF36E52DF32E3E1026
:10034000BC31E832E335BE068A060A005330840029
:10035000831300080319B9290230F800F701F70BDD
:10036000AF29F80BAE299730F700F70BB529800BB2
:10037000AC29080083165308D5005208D40055084C
:10038000FA005408840083137A188317800803192D
:10039000CD29D40A0319D50ABF2952085402F700FF
:1003A0005508FA005308031C530FFA027708F800A7
:1003B00083120800831603178C170C14000000002A
:1003C0000318112A83120C087F3983160313D300F4
:1003D000831203170D0883160313D4008312031727
:1003E0000F0883160313D500530883120C1EF62939
:1003F000990083165408831203178D008316031384
:100400005508831203178F0083168C170C140000F5
:1004100000000313D20B0D2A0F2A0317112A3C2ABE
:10042000031783120C0D0E0D7F3983160313D300AF
:10043000831203170D0883160313D40083120317C6
:100440000F0883160313D500530883120C1E262AA7
:10045000990083165408831203178D008316031323
:100460005508831203178F008D0A03198F0A031092
:1004700083160313D20BDB298312080080080319AB
:100480005B2A8316D3010408D2005310831B531434
:10049000000883120C1E4A2A990083165208840011
:1004A000831353188317840A031D592A8312850A5C
:1004B000831683123E2A0800831603178C170C1428
:1004C0000000000083120C087F390319B62A831636
:1004D0000313D200831203170D0883160313D300EE
:1004E000831203170F0883160313D40052088312D4
:1004F0000C1E782A990083165308831203178D0067
:10050000831603135408831203178F0083168C1766
:100510000C140000000083120C0D0E0D7F3903191E
:10052000B62A83160313D200831203170D0883160D
:100530000313D300831203170F0883160313D40089
:10054000520883120C1EA22A9900831653088312A4
:1005500003178D00831603135408831203178F00AB
:100560008D0A03198F0A03135C2A0317031308006B
:1005700024308316A0004930A1006430A2003A3034
:10058000A3002030A4006930A5007230A6006D30B1
:10059000A7007230A8006130A9006B30AA00343087
:1005A000AB002E30AC006330AD002030AE003130F7
:1005B000AF003730B0003030B1003330B2002030FF
:1005C000B3003230B4003030B5003130B6003030D6
:1005D000B7002D30B8003130B9003230BA002D30BC
:1005E000BB003030BC003530BD002030BE003130A3
:1005F000BF003230C0003A30C1003430C200333066
:10060000C3003A30C4003130C5003530C6005A301E
:10061000C7002030C8006B30C9006130CA006B30A1
:10062000CB006C30CC002030CD002430CE00CF0188
:10063000D301A030D2008312BA2101307802A03E4B
:10064000840083130008243C031D322B8316D3013E
:10065000A030D2008312BA2101307802A03E84007B
:1006600083138001273003178D0001308F000310A2
:100670000F3083160313D2008312DA212230840054
:1006800083133E222F3003178D0001308F00031497
:100690000F3083160313D2008312DA2123300C1E8D
:1006A0004F2B9900A430840083133E220D300C1E82
:1006B000572B99000A300C1E5B2B990023300C1E1F
:1006C0005F2B99000D300C1E632B99000A300C1E15
:1006D000672B9900383003178D0001308F0003130A
:1006E0005C223F3003178D0001308F0003135C2222
:1006F000533003178D0001308F0003135C22233029
:100700000C1E802B99000D300C1E842B99000A3092
:100710000C1E882B9900693003178D0001308F0063
:1007200003135C228B3003178D0001308F000313FD
:100730005C226400080083168614061083120610DB
:100740000D30F700F70BA22B83168610831286104C
:100750000D30F700F70BAA2B831606140D30F700A7
:10076000F70BB02B861483120800831686140D3005
:10077000F700F70BB92B06140D30F700F70BBE2B63
:100780008610831286100D30F700F70BC52B8316E9
:100790000610831206100D30F700F70BCD2B080062
:1007A000E208031DD82B8316861083128610DB2BDC
:1007B000831686148312DC2BDD2BDE2B83160614A6
:1007C0001A30F700F70BE22B000006108312061018
:1007D000A7080319F12B8316061210308312860620
:1007E000F52B83160612831206164230F700F70B1C
:1007F000F72B0000A7080319032C831606121030EC
:1008000083128606072C831606128312061608002A
:100810008316861406141A30F700F70B0D2C00000F
:1008200086148312861C172C0130E200182CE2017A
:100830008316061083120610A7080319252C8316A9
:100840000612103083128606292C83160612831294
:1008500006164230F700F70B2B2C0000A7080319EF
:10086000372C831606121030831286063B2C831613
:100870000612831206166208F80008000830DF002E
:10088000DF080319502CDE1F482C0130E100492CF1
:10089000E1016108E200D0230310DE0DDF03402CEC
:1008A00008247808E0006008F80008000830DF003D
:1008B000DF080319682C0824F8080319632C0310B7
:1008C000DE0D5E14662C0310DE0D5E10DF03582C67
:1008D0005D08E200D0235E08F80008000310D20D86
:1008E0009B23B5235208DE003E245308DD00DE00C2
:1008F0003E24B5235208DE003E24DD01562478084C
:10090000D600DD0156247808D5005508DC005608CD
:10091000DB000130DD0056247808DA009B23520802
:10092000D9005308D8005208D700D401DE01543052
:10093000DD002F30E500E401E301E201E1010130D7
:10094000E0000730DF002F30E500E6010530E7006A
:10095000E80167085D07840083135E1883170008A9
:10096000EA008030F7006808F8000319BB2C031078
:10097000F70CF80BB72C77086A05031DD92CE7088C
:100980000319D92CE5036808063C031CC92CE80AA6
:10099000CB2CE801E703A7080319D42C8316061211
:1009A000103083128606D82C831606128312061680
:1009B000A92C08306502E600E6080319112D053060
:1009C000E700670FE42C022D013067025F3E8400D0
:1009D0008313801FF12CE7080319F12C0130E90083
:1009E000F22CE9015F306707840083130310000DC8
:1009F00080005F3067078400831369080007800068
:100A0000E703E12CE603A70803190C2D8316061251
:100A1000103083128606102D8316061283120616D6
:100A2000DC2CE7016708053C031C342D67085D07D3
:100A3000F8005E08FA000318FA0A780884008313A5
:100A40007A1883170008EC005F306707840083136F
:100A500000086C06EC007808840083137A1883176A
:100A60006C088000E70A122D6508083C031C9B2CCB
:100A70005D08840083135E1883170008F800780867
:100A80005A020319452DDC01DB015B08F8005C0804
:100A9000F900080083168613861383128613A708AD
:100AA0000319582D831606121030831286065C2D0A
:100AB00083160612831206164230F700F70B5E2DDE
:100AC0000000A70803196A2D83160612103083123E
:100AD00086066E2D83160612831206164230F70024
:100AE000F70B702D0000A70803197C2D8316061242
:100AF000103083128606802D831606128312061686
:100B00004230F700F70B822D0000A70803198E2D45
:100B100083160612103083128606922D8316061253
:100B2000831206164230F700F70B942D0000A70839
:100B30000319A02D83160612103083128606A42DE9
:100B400083160612831206164230F700F70BA62D05
:100B50000000A7080319B22D831606121030831265
:100B60008606B62D8316061283120616831686177E
:100B70000330F700F70BBA2D8312861BC22D00300D
:100B8000F8001D2E2B30F700F70BC42DA708031912
:100B9000CF2D83160612103083128606D32D8316AE
:100BA0000612831206165210861F5214A708031944
:100BB000DF2D83160612103083128606E32D83166E
:100BC0000612831206164230F700F70BE52D0000DF
:100BD000A7080319F12D831606121030831286061A
:100BE000F52D83160612831206164230F700F70B16
:100BF000F72D0000A7080319032E831606121030E4
:100C000083128606072E83160612831206161330E9
:100C1000F700F70B092E0C2EA7080319152E8316C3
:100C20000612103083128606192E831606128312BE
:100C30000616003052180130F80008000130D300C9
:100C40005308083C031C7C2E0310D20C0030031800
:100C50000130D4005408D5008316861386138312FE
:100C600086130630F700F70B332E0000D508031962
:100C7000492E831686138613831286170630F700D3
:100C8000F70B402E0000861B482E0030F800742E13
:100C9000582E831686138613831286130630F700A8
:100CA000F70B502E0000861F582E0030F800742ECF
:100CB0002130F700F70B5A2E831686138613831202
:100CC0008617A70803196A2E83160612103083129E
:100CD00086066E2E83160612831206162130F70042
:100CE000F70B702E0130F800F808031D7A2E003043
:100CF000F8007E2ED30A202E0130F8000800D5011E
:100D0000D40155085302031CA12E031D8B2E52083B
:100D100054020318A12EA7080319942E8316061255
:100D2000103083128606982E83160612831206163A
:100D30004230F700F70B9A2E0000D40A0319D50AA7
:100D4000812E08000130D4005408083C031CDA2E20
:100D5000831686138613831286130930F700F70B68
:100D6000AF2E831686170330F700F70BB52E8312CC
:100D70005610861B56144230F700F70BBD2E0000AC
:100D8000A7080319C92E831606121030831286068F
:100D9000CD2E831606128312061600305618013027
:100DA000F800F808031DD62E0310D72E0314D50C17
:100DB000D40AA42E5508F8008A15382A5308550677
:100DC0008039D700D31FE92ED209D309D20A0319DB
:100DD000D30AD51FF02ED409D509D40A0319D50A90
:100DE0001030D600F701FA01D30CD20C031CFE2EF2
:100DF0005408F7070318FA0A5508FA07FA0CF70C13
:100E0000F90CF80CD60BF42ED71F0B2FF809F909A3
:100E1000F80A0319F90A8A157D2A550857068039F8
:100E2000D900D51F182FD409D509D40A0319D50A1A
:100E3000D71F1F2FD609D709D60A0319D70AF801D9
:100E4000F901F701FA015708031D292F5608031964
:100E5000432F1030D8000310D40DD50DF70DFA0D27
:100E600057087A02031D362F56087702031C3F2FBE
:100E70005608F702031CFA035708FA020314F80D88
:100E8000F90DD80B2B2FD91F4A2FF809F909F80AA9
:100E90000319F90A08002808840083132918831706
:100EA0005B088000840A8001A80A0319A90A0800C7
:100EB000800803196D2FD3010408D2005310831B3F
:100EC00053140008DB004B27520884008313531887
:100ED0008317840A0319850A582F8A15302BDA01E3
:100EE0000408D9005A10831B5A14530EF038D50049
:100EF000D507E23ED600323ED80053080F39D60758
:100F0000D607D807E93ED700D707D707520E0F39C3
:100F1000D707D807D70DD80DD809D80D52080F39E3
:100F2000D807D50D0730D4000A30D807D703031CE3
:100F3000952FD707D603031C992FD607D503031C7B
:100F40009D2FD507D403031CA12F54308400831395
:100F500007305905591384075830040203195917EB
:100F60000008F700031DBC2F591BBC2F591ACE2FA8
:100F7000D919BC2F2030BF2FD91559123030F7079F
:100F8000D3010408D2005310831B53147708DB00ED
:100F90004B2752088400831353188317840A591F60
:100FA000AC2F8A15612B5508F80154020318DB2F6A
:100FB0005408F700E72FF7010830D600D40DF70DDD
:100FC000550877020318F700F80DD60BDE2F08003E
:10100000DA010408D9005A10831B5A14D31F102880
:10101000D917591ED90AD209D309D20A0319D30AFA
:10102000530EF038D500D507E23ED600323ED80048
:1010300053080F39D607D607D807E93ED700D70798
:10104000D707520E0F39D707D807D70DD80DD809B3
:10105000D80D52080F39D807D50D0730D4000A3003
:10106000D807D703031C3028D707D603031C34281E
:10107000D607D503031C3828D507D403031C3C2806
:1010800054308400831307305905591384035905DC
:10109000031D5128591A840A591A51282030F70083
:1010A0006E28840758300402031959170008F70006
:1010B000031D6228591B6228591A7E28D9196228F3
:1010C00020306D28D91F6A282D30F700840359136A
:1010D000D9136E28D91559123030F707D3010408F7
:1010E000D2005310831B53147708DB008A114B275F
:1010F0008A1552088400831353188317840A591FD2
:101100005228080078085208D4006430D5008A11AB
:10111000D3278A157708D20078083030031D972826
:10112000D31CA028D319A028531A20309A28D311F1
:1011300053125314F8077808DB008A114B278A15DD
:101140005208D4000A30D5008A11D3278A157708AF
:10115000D20078083030031DB328D319B928531CA6
:10116000B928531A2030F8077808DB008A114B277A
:101170008A153030D2075208DB008A114B278A15B6
:101180000800D31BD5280F30F700520EF7050A30A0
:1011900077020318CE283030F707D0285308F70716
:1011A0007708DB008A114B278A150F30D2050A30E9
:1011B00052020318DD283030DF28D3135308D2073A
:1011C0005208DB008A114B278A158A15AA2C840144
:1011D00083131F308305723083168F000F0833305E
:1011E0009900A230980090308312980083161F1245
:1011F0009F121B0880399B0007309C008312A001BE
:10120000A1013430A2002E30A3003130A400A5018A
:10121000A801A901831606128312061683168611E9
:10122000831286110430D200FA30D3008A11A6212D
:101230008A15D20B14296400AB01AA01A601A701EB
:101240003B148A11B8228A15D2010630D3008A11C4
:101250006E248A157908AF007808AE00D2010730F5
:10126000D3008A116E248A157908AD007808AC0085
:101270008A114A258A15CC30D2008A111E268A1579
:101280004430D2008A111E268A150430D200FA306A
:10129000D3008A11A6218A15D20B472964005A303F
:1012A000BA003A08593C0318BA0AD3016430D20094
:1012B0008A117F268A153A08593C03187329A60813
:1012C000031DA603A708031DA703A60803196D297C
:1012D000831686118312861571298316861183124F
:1012E0008611BA0164008C1A77293B1C51296400CD
:1012F0006B30BC008C1E80298C1E7C291A08BC0017
:1013000061303C02E83E0318AC29183ED72C14305B
:10131000A600BB10AC29A601BB10AC291430A70055
:10132000BB10AC291430A700A600BB10AC29A70144
:10133000BB10AC29A708031DA0298A11B8228A1561
:10134000AC293B14BB10AC293B10BB10AC293B149F
:10135000BB14AC298A01002818121816AA0A03190E
:10136000AB0AD2010630D3008A116E248A1579089F
:10137000AF007808AE0003102E0DD2002F0DD30061
:10138000B3305202F7005308FA006A30031C6B3086
:10139000FA027708B0007A08B100D2010730D30012
:1013A0008A116E248A157908AD007808AC00031004
:1013B0002C0DD2002D0DD300B3305202F70053088C
:1013C000FA006A30031C6B30FA027708B2007A0820
:1013D000B300D2010830D3008A116E248A1579082F
:1013E000AD007808AC0003102C0DD2002D0DD300F9
:1013F000B3305202F7005308FA006A30031C6B3016
:10140000FA027708B4007A08B5008A114A258A15CD
:10141000CC30D2008A111E268A154430D2008A119F
:101420001E268A1564001730D3007030D2008A114E
:101430007F268A158A114A258A15CC30D2008A1156
:101440001E268A15BE30D2008A111E268A15C701B3
:101450004708083C031C422A3D304707F800FA01C0
:101460000318FA0A7808D2007A08D3008A11A22E4B
:101470008A15520884008313531883177808800054
:10148000C70A282A3D08B8003E08B900D3013D30FC
:10149000D2000830D400D501D601540856020318F2
:1014A000662A56085207F8005308FA000318FA0A89
:1014B0007808840083137A188317000855068A1168
:1014C00020208A15F800D500D60A4D2A5508F800C4
:1014D00078084502031D962A4408103C031D962AED
:1014E0003908B7003808B6003708D3003608D200EC
:1014F000D5010630D4008A11DE2E8A157908D30072
:101500007808D2003708D5003608D400D701043057
:10151000D6008A110D278A1578085207B60053089D
:10152000B70079080318790FB7079A2A9530B700E2
:101530004D30B600BB1C122BB11BA82A3108073C4A
:10154000031CAA2A031DA82A3008073C031CAA2A48
:101550001430A60034083202D2003308D300350814
:10156000031C350FD3025308FA005208D31FC12AB7
:101570005208003CF700FA015308031C530FFA020B
:101580007708D2007A08D300D31BCD2AD308031DD5
:10159000122B5208C73C031C122BB31FD22AB71FB1
:1015A000DE2AD42AB71B122B33083702031C122B56
:1015B000031DDE2A360832020318122B3708D50025
:1015C0003608D400D7010430D6008A110D278A15B9
:1015D0007908D3007808D2003208D2023308031CFD
:1015E000330FD3025308FA005208D31F002B5208BE
:1015F000003CF700FA015308031C530FFA02770866
:10160000D2007A08D300D31B122B5308003C0318D6
:10161000122BFF3A031D102B5208F43C0318122B17
:101620001430A700D101D3013230D2008A117F26B5
:101630008A1524300C1E1A2B9900D3013230D200A7
:101640008A117F268A15A9014830A8004D30DB0099
:101650008A114B278A152230840083138A11582F50
:101660008A152030DB008A114B278A15D0014830BB
:1016700050078400831380080319562BD30132309E
:10168000D2008A117F268A154830500784008313C0
:101690000008D20052080C1E4B2B99005008D00AAB
:1016A000483E840083130008D106372BA901483037
:1016B000A800103084002B08D3002A08D2008A1119
:1016C0006F2F8A152030DB008A114B278A15D00135
:1016D000483050078400831380080319872BD301F7
:1016E0003230D2008A117F268A1548305007840094
:1016F00083130008D20052080C1E7C2B990050085E
:10170000D00A483E840083130008D106682BA90143
:101710004830A800103084003108D3003008D200CF
:1017200000202030DB008A114B278A15D001483079
:1017300050078400831380080319B62BD30132307D
:10174000D2008A117F268A154830500784008313FF
:101750000008D20052080C1EAB2B99005008D00A8A
:10176000483E840083130008D106972BA901483016
:10177000A800103084003308D3003208D2000020C3
:101780002030DB008A114B278A15D00148305007E2
:101790008400831380080319E52BD3013230D20073
:1017A0008A117F268A154830500784008313000869
:1017B000D20052080C1EDA2B99005008D00A483E7D
:1017C000840083130008D106C62BA9014830A80065
:1017D000103084003508D3003408D20000202030B7
:1017E000DB008A114B278A15D0014830500784004E
:1017F000831380080319142CD3013230D2008A11CC
:101800007F268A1548305007840083130008D200D1
:1018100052080C1E092C99005008D00A483E84003A
:1018200083130008D106F52BA9014830A800103019
:1018300084003708D3003608D20000202030DB00B7
:101840008A114B278A15D001483050078400831332
:1018500080080319432CD3013230D2008A117F262D
:101860008A1548305007840083130008D2005208BC
:101870000C1E382C99005008D00A483E840083136F
:101880000008D106242CA9014830A8002608D2005F
:101890001B30D30082202030DB008A114B278A15B1
:1018A000D001483050078400831380080319702C3E
:1018B000D3013230D2008A117F268A154830500772
:1018C000840083130008D20052080C1E652C990076
:1018D0005008D00A483E840083130008D106512CDA
:1018E000A9014830A8002708D2001B30D30082206D
:1018F0002030DB008A114B278A15D0014830500771
:1019000084008313800803199D2CD3013230D20048
:101910008A117F268A1548305007840083130008F7
:10192000D20052080C1E922C99005008D00A483E52
:10193000840083130008D1067E2CA9014830A8003A
:101940002A30DB008A114B278A155108D200373024
:10195000D300C1280D30DB008A114B278A150A30CD
:10196000DB008A114B278A15D001483050078400CC
:10197000831380080319CE2CD3013230D2008A1190
:101980007F268A155008D00A483E84008313000839
:10199000D20052080C1ECA2C9900B52CD30132304B
:1019A000D2008A117F268A1564004F2963000A102D
:1019B0008A100A158207A729AC298B29AC29AC29E2
:1019C000AC29AC2987299A29AC29AC299729AC29BB
:1019D000AC298E29AC29AC29A129A429AC29AA2992
:0619E000AC29AC2992299C
:061A00008A010028080025
:04400E00143FFC3F20
:00000001FF
;PIC16F88
;CRC=98D6 CREATED="05-12-10 13:41"
;CRC=1F33 CREATED="05-12-10 20:17"
/Designs/MRAKOMER4/SW/bootloader/bloader.PJT
1,23 → 1,36
[Directories]
Include=C:\Program Files\PICC\Devices;C:\Program Files\PICC\Drivers;
Library=
LinkerScript=
[defines]
enabled=0
D1=
V1=
[fileformats]
forcecoff=0
debug=4
error=2
object=0
list=0
scratch=0
sta=1
tre=1
allerrors=1
allwarnings=1
stayupne=3
stayupoe=0
[PROJECT]
Target=main.HEX
Target=bloader.hex
Development_Mode=
Processor=0x688F
Processor_Text=PIC16F88
ToolSuite=CCS
Processor_Text=PIC16F88
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\dr
Library=
LinkerScript=
 
[Target Data]
FileList=C:\Dokumenty\MLAB\Designs\MRAKOMER4\SW\bootloader\bloader.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[main.c]
[bloader.c]
Type=4
Path=
FileList=
24,22 → 37,19
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=main.c
 
1=bloader.c
[Windows]
0=0000 main.c 0 0 796 451 3 0
 
0=0000 %S 0 0 796 451 3 0
[Units]
Link=0
Count=1
1=bloader.c
[Opened Files]
1=C:\Dokumenty\MLAB\Designs\MRAKOMER4\SW\bootloader\bloader.c
2=C:\Dokumenty\MLAB\Designs\MRAKOMER4\SW\bootloader\bloader.h
3=C:\Program Files\PICC\devices\16F88.h
4=C:\Dokumenty\MLAB\Designs\MRAKOMER4\SW\bootloader\bloader.lst
5=
6=
1=bloader.c
2=bloader.h
3=..\..\..\..\..\..\..\..\Program Files\PICC\Devices\16F88.h
4=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\string.h
5=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\stddef.h
6=..\..\..\..\..\..\..\..\Program Files\PICC\Drivers\ctype.h
7=
8=
[Units]
Count=1
1=C:\Dokumenty\MLAB\Designs\MRAKOMER4\SW\bootloader\bloader.c (main)
/Designs/MRAKOMER4/SW/bootloader/bloader.c
1,9 → 1,18
/**** BootLoader ****/
#define VERSION "1.0"
#define VERSION "1.1"
#define ID "$Id$"
 
#CASE // Case sensitive compiler
 
#define FLASH_BLOCK_SIZE 32
#define BLOADER_MAIN_LENGTH 139 // Rezervovane misto pro main BootLoaderu
#define RESERVED_BLOCKS 24 // Pocet rezervovanych bloku Flash pro BootLoader
#define LOADER_RESERVED getenv("PROGRAM_MEMORY")-RESERVED_BLOCKS*FLASH_BLOCK_SIZE
#define BUFFER_LEN_LOD 46
#if FLASH_BLOCK_SIZE != getenv("FLASH_ERASE_SIZE")/2
#error Wrong length of the Flash Block Size. getenv("FLASH_ERASE_SIZE")/getenv("FLASH_WRITE_SIZE")
#endif
 
#include "bloader.h"
#include <string.h>
 
14,7 → 23,7
 
 
#INT_RDA
rs232_handler()
void rs232_handler()
{
putchar(getc());
}
25,8 → 34,8
char VER[4]=VERSION; // Buffer for concatenate of a version string
 
if (REV[strlen(REV)-1]=='$') REV[strlen(REV)-1]=0;
printf("\n\r\n\r# BLoader %s (C) 2007 KAKL\n\r",VER); // Welcome message
printf("#%s\n\r",&REV[4]);
printf("\r\n\r\n# BLoader %s (C) 2007 KAKL\r\n",VER); // Welcome message
printf("#%s\r\n",&REV[4]);
}
 
 
38,7 → 47,9
 
welcome();
 
printf("# Boot Loader Test >>>\n\r# ");
printf("# Reserved: %Lu\r\n", RESERVED_BLOCKS*FLASH_BLOCK_SIZE);
printf("# Boot Loader Test >>>\r\n# ");
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
50,14 → 61,7
 
 
/*------------------- BOOT LOADER --------------------------------------------*/
#define FLASH_BLOCK_SIZE 32
#define LOADER_RESERVED getenv("PROGRAM_MEMORY")-26*FLASH_BLOCK_SIZE
#define BUFFER_LEN_LOD 46
#if FLASH_BLOCK_SIZE != getenv("FLASH_ERASE_SIZE")/2
#error Wrong length of the Flash Block Size. getenv("FLASH_ERASE_SIZE")/getenv("FLASH_WRITE_SIZE")
#endif
 
 
#BUILD(INTERRUPT=FLASH_BLOCK_SIZE) // Redirect Interrupt routine above first flash block
#ORG 4,5
void JumpToTheInterrupt() // Jump to the Interrupt Handler
72,7 → 76,7
real_main();
}
 
#ORG LOADER_RESERVED+FLASH_BLOCK_SIZE,getenv("PROGRAM_MEMORY")-130 auto=0 default
#ORG LOADER_RESERVED+FLASH_BLOCK_SIZE,getenv("PROGRAM_MEMORY")-BLOADER_MAIN_LENGTH auto=0 default
 
unsigned int atoi_b16(char *s) // Convert two hex characters to an int8
{
107,7 → 111,7
}
 
#SEPARATE
boot_loader()
void boot_loader()
{
int buffidx;
char buffer[BUFFER_LEN_LOD];
117,7 → 121,7
int16 addr;
int32 next_addr;
 
int8 dataidx, i, count;
int8 dataidx, i;
union program_data {
int8 i8[16];
int16 i16[8];
217,7 → 221,7
 
#ORG default
 
#ORG getenv("PROGRAM_MEMORY")-129,getenv("PROGRAM_MEMORY")-1 auto=0
#ORG getenv("PROGRAM_MEMORY")-BLOADER_MAIN_LENGTH+1,getenv("PROGRAM_MEMORY")-1 auto=0
void main()
{
int8 timeout;