Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 728 → Rev 729

/Transportables_Koptertool/tags/V-0.1/F8X6.c
0,0 → 1,290
/*******************************************************************************
;
; taskit Rechnertechnik Berlin GmbH
; Kaiser-Friedrich-Straáe 51
; 1000 Berlin 12
; Tel. 030-3245836
; FAX 030-3232649
;
;
; Projekt :
;
; Datei :
;
; Funktion :
;
; Version :
;
; Letzte Änderung : 06/28/95 - 15:04:59
;
; Info :
;
*******************************************************************************/
#include <avr/pgmspace.h>
 
//Die Bytes gehören zu jeweils einer Spalte des Buchstabens
//D7 ist dabei das unterste Bit. Es handelt sich um einen DOS-Font !
//DOS-Zeichensatz
 
prog_uchar f8x6[ 256 ][ 6 ] =
{
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0
{ 0x3E,0x5B,0x4F,0x5B,0x3E,0x00 }, // ASCII - 1
{ 0x3E,0x6B,0x4F,0x6B,0x3E,0x00 }, // ASCII - 2
{ 0x1C,0x3E,0x7C,0x3E,0x1C,0x00 }, // ASCII - 3
{ 0x18,0x3C,0x7E,0x3C,0x18,0x00 }, // ASCII - 4
{ 0x1C,0x57,0x7D,0x57,0x1C,0x00 }, // ASCII - 5
{ 0x1C,0x5E,0x7F,0x5E,0x1C,0x00 }, // ASCII - 6
{ 0x00,0x18,0x3C,0x18,0x00,0x00 }, // ASCII - 7
{ 0xFF,0xE7,0xC3,0xE7,0xFF,0x00 }, // ASCII - 8
{ 0x00,0x18,0x24,0x18,0x00,0x00 }, // ASCII - 9
{ 0xFF,0xE7,0xDB,0xE7,0xFF,0x00 }, // ASCII - 10
{ 0x30,0x48,0x3A,0x06,0x0E,0x00 }, // ASCII - 11
{ 0x26,0x29,0x79,0x29,0x26,0x00 }, // ASCII - 12
{ 0x40,0x7F,0x05,0x05,0x07,0x00 }, // ASCII - 13
{ 0x40,0x7F,0x05,0x25,0x3F,0x00 }, // ASCII - 14
{ 0x5A,0x3C,0xE7,0x3C,0x5A,0x00 }, // ASCII - 15
{ 0x7F,0x3E,0x1C,0x1C,0x08,0x00 }, // ASCII - 16
{ 0x08,0x1C,0x1C,0x3E,0x7F,0x00 }, // ASCII - 17
{ 0x14,0x22,0x7F,0x22,0x14,0x00 }, // ASCII - 18
{ 0x5F,0x5F,0x00,0x5F,0x5F,0x00 }, // ASCII - 19
{ 0x06,0x09,0x7F,0x01,0x7F,0x00 }, // ASCII - 20
{ 0x00,0x66,0x89,0x95,0x6A,0x00 }, // ASCII - 21
{ 0x60,0x60,0x60,0x60,0x60,0x60 }, // ASCII - 22
{ 0x94,0xA2,0xFF,0xA2,0x94,0x00 }, // ASCII - 23
{ 0x08,0x04,0x7E,0x04,0x08,0x00 }, // ASCII - 24
{ 0x10,0x20,0x7E,0x20,0x10,0x00 }, // ASCII - 25
{ 0x08,0x08,0x2A,0x1C,0x08,0x00 }, // ASCII - 26
{ 0x08,0x1C,0x2A,0x08,0x08,0x00 }, // ASCII - 27
{ 0x1E,0x10,0x10,0x10,0x10,0x00 }, // ASCII - 28
{ 0x0C,0x1E,0x0C,0x1E,0x0C,0x00 }, // ASCII - 29
{ 0x30,0x38,0x3E,0x38,0x30,0x00 }, // ASCII - 30
{ 0x06,0x0E,0x3E,0x0E,0x06,0x00 }, // ASCII - 31
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 32
{ 0x00,0x00,0x5F,0x00,0x00,0x00 }, // ASCII - 33
{ 0x00,0x07,0x00,0x07,0x00,0x00 }, // ASCII - 34
{ 0x14,0x7F,0x14,0x7F,0x14,0x00 }, // ASCII - 35
{ 0x24,0x2A,0x7F,0x2A,0x12,0x00 }, // ASCII - 36
{ 0x23,0x13,0x08,0x64,0x62,0x00 }, // ASCII - 37
{ 0x36,0x49,0x56,0x20,0x50,0x00 }, // ASCII - 38
{ 0x00,0x08,0x07,0x03,0x00,0x00 }, // ASCII - 39
{ 0x00,0x1C,0x22,0x41,0x00,0x00 }, // ASCII - 40
{ 0x00,0x41,0x22,0x1C,0x00,0x00 }, // ASCII - 41
{ 0x2A,0x1C,0x7F,0x1C,0x2A,0x00 }, // ASCII - 42
{ 0x08,0x08,0x3E,0x08,0x08,0x00 }, // ASCII - 43
{ 0x00,0x80,0x70,0x30,0x00,0x00 }, // ASCII - 44
{ 0x08,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 45
{ 0x00,0x00,0x60,0x60,0x00,0x00 }, // ASCII - 46
{ 0x20,0x10,0x08,0x04,0x02,0x00 }, // ASCII - 47
{ 0x3E,0x51,0x49,0x45,0x3E,0x00 }, // ASCII - 48
{ 0x00,0x42,0x7F,0x40,0x00,0x00 }, // ASCII - 49
{ 0x72,0x49,0x49,0x49,0x46,0x00 }, // ASCII - 50
{ 0x21,0x41,0x49,0x4D,0x33,0x00 }, // ASCII - 51
{ 0x18,0x14,0x12,0x7F,0x10,0x00 }, // ASCII - 52
{ 0x27,0x45,0x45,0x45,0x39,0x00 }, // ASCII - 53
{ 0x3C,0x4A,0x49,0x49,0x31,0x00 }, // ASCII - 54
{ 0x41,0x21,0x11,0x09,0x07,0x00 }, // ASCII - 55
{ 0x36,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 56
{ 0x46,0x49,0x49,0x29,0x1E,0x00 }, // ASCII - 57
{ 0x00,0x00,0x14,0x00,0x00,0x00 }, // ASCII - 58
{ 0x00,0x40,0x34,0x00,0x00,0x00 }, // ASCII - 59
{ 0x00,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 60
{ 0x14,0x14,0x14,0x14,0x14,0x00 }, // ASCII - 61
{ 0x00,0x41,0x22,0x14,0x08,0x00 }, // ASCII - 62
{ 0x02,0x01,0x59,0x09,0x06,0x00 }, // ASCII - 63
{ 0x3E,0x41,0x5D,0x59,0x4E,0x00 }, // ASCII - 64
{ 0x7C,0x12,0x11,0x12,0x7C,0x00 }, // ASCII - 65
{ 0x7F,0x49,0x49,0x49,0x36,0x00 }, // ASCII - 66
{ 0x3E,0x41,0x41,0x41,0x22,0x00 }, // ASCII - 67
{ 0x7F,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 68
{ 0x7F,0x49,0x49,0x49,0x41,0x00 }, // ASCII - 69
{ 0x7F,0x09,0x09,0x09,0x01,0x00 }, // ASCII - 70
{ 0x3E,0x41,0x41,0x51,0x73,0x00 }, // ASCII - 71
{ 0x7F,0x08,0x08,0x08,0x7F,0x00 }, // ASCII - 72
{ 0x00,0x41,0x7F,0x41,0x00,0x00 }, // ASCII - 73
{ 0x20,0x40,0x41,0x3F,0x01,0x00 }, // ASCII - 74
{ 0x7F,0x08,0x14,0x22,0x41,0x00 }, // ASCII - 75
{ 0x7F,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 76
{ 0x7F,0x02,0x1C,0x02,0x7F,0x00 }, // ASCII - 77
{ 0x7F,0x04,0x08,0x10,0x7F,0x00 }, // ASCII - 78
{ 0x3E,0x41,0x41,0x41,0x3E,0x00 }, // ASCII - 79
{ 0x7F,0x09,0x09,0x09,0x06,0x00 }, // ASCII - 80
{ 0x3E,0x41,0x51,0x21,0x5E,0x00 }, // ASCII - 81
{ 0x7F,0x09,0x19,0x29,0x46,0x00 }, // ASCII - 82
{ 0x26,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 83
{ 0x03,0x01,0x7F,0x01,0x03,0x00 }, // ASCII - 84
{ 0x3F,0x40,0x40,0x40,0x3F,0x00 }, // ASCII - 85
{ 0x1F,0x20,0x40,0x20,0x1F,0x00 }, // ASCII - 86
{ 0x3F,0x40,0x38,0x40,0x3F,0x00 }, // ASCII - 87
{ 0x63,0x14,0x08,0x14,0x63,0x00 }, // ASCII - 88
{ 0x03,0x04,0x78,0x04,0x03,0x00 }, // ASCII - 89
{ 0x61,0x59,0x49,0x4D,0x43,0x00 }, // ASCII - 90
{ 0x00,0x7F,0x41,0x41,0x41,0x00 }, // ASCII - 91
{ 0x02,0x04,0x08,0x10,0x20,0x00 }, // ASCII - 92
{ 0x00,0x41,0x41,0x41,0x7F,0x00 }, // ASCII - 93
{ 0x04,0x02,0x01,0x02,0x04,0x00 }, // ASCII - 94
{ 0x40,0x40,0x40,0x40,0x40,0x00 }, // ASCII - 95
{ 0x00,0x03,0x07,0x08,0x00,0x00 }, // ASCII - 96
{ 0x20,0x54,0x54,0x78,0x40,0x00 }, // ASCII - 97
{ 0x7F,0x28,0x44,0x44,0x38,0x00 }, // ASCII - 98
{ 0x38,0x44,0x44,0x44,0x28,0x00 }, // ASCII - 99
{ 0x38,0x44,0x44,0x28,0x7F,0x00 }, // ASCII - 100
{ 0x38,0x54,0x54,0x54,0x18,0x00 }, // ASCII - 101
{ 0x00,0x08,0x7E,0x09,0x02,0x00 }, // ASCII - 102
{ 0x18,0xA4,0xA4,0x9C,0x78,0x00 }, // ASCII - 103
{ 0x7F,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 104
{ 0x00,0x44,0x7D,0x40,0x00,0x00 }, // ASCII - 105
{ 0x20,0x40,0x40,0x3D,0x00,0x00 }, // ASCII - 106
{ 0x7F,0x10,0x28,0x44,0x00,0x00 }, // ASCII - 107
{ 0x00,0x41,0x7F,0x40,0x00,0x00 }, // ASCII - 108
{ 0x7C,0x04,0x78,0x04,0x78,0x00 }, // ASCII - 109
{ 0x7C,0x08,0x04,0x04,0x78,0x00 }, // ASCII - 110
{ 0x38,0x44,0x44,0x44,0x38,0x00 }, // ASCII - 111
{ 0xFC,0x18,0x24,0x24,0x18,0x00 }, // ASCII - 112
{ 0x18,0x24,0x24,0x18,0xFC,0x00 }, // ASCII - 113
{ 0x7C,0x08,0x04,0x04,0x08,0x00 }, // ASCII - 114
{ 0x48,0x54,0x54,0x54,0x24,0x00 }, // ASCII - 115
{ 0x04,0x04,0x3F,0x44,0x24,0x00 }, // ASCII - 116
{ 0x3C,0x40,0x40,0x20,0x7C,0x00 }, // ASCII - 117
{ 0x1C,0x20,0x40,0x20,0x1C,0x00 }, // ASCII - 118
{ 0x3C,0x40,0x30,0x40,0x3C,0x00 }, // ASCII - 119
{ 0x44,0x28,0x10,0x28,0x44,0x00 }, // ASCII - 120
{ 0x4C,0x90,0x90,0x90,0x7C,0x00 }, // ASCII - 121
{ 0x44,0x64,0x54,0x4C,0x44,0x00 }, // ASCII - 122
{ 0x00,0x08,0x36,0x41,0x00,0x00 }, // ASCII - 123
{ 0x00,0x00,0x77,0x00,0x00,0x00 }, // ASCII - 124
{ 0x00,0x41,0x36,0x08,0x00,0x00 }, // ASCII - 125
{ 0x02,0x01,0x02,0x04,0x02,0x00 }, // ASCII - 126
{ 0x3C,0x26,0x23,0x26,0x3C,0x00 }, // ASCII - 127
{ 0x1E,0xA1,0xA1,0x61,0x12,0x00 }, // ASCII - 128 80
{ 0x3A,0x40,0x40,0x20,0x7A,0x00 }, // ASCII - 129
{ 0x38,0x54,0x54,0x55,0x59,0x00 }, // ASCII - 130
{ 0x21,0x55,0x55,0x79,0x41,0x00 }, // ASCII - 131
{ 0x21,0x54,0x54,0x78,0x41,0x00 }, // ASCII - 132
{ 0x21,0x55,0x54,0x78,0x40,0x00 }, // ASCII - 133
{ 0x20,0x54,0x55,0x79,0x40,0x00 }, // ASCII - 134
{ 0x0C,0x1E,0x52,0x72,0x12,0x00 }, // ASCII - 135
{ 0x39,0x55,0x55,0x55,0x59,0x00 }, // ASCII - 136
{ 0x39,0x54,0x54,0x54,0x59,0x00 }, // ASCII - 137
{ 0x39,0x55,0x54,0x54,0x58,0x00 }, // ASCII - 138
{ 0x00,0x00,0x45,0x7C,0x41,0x00 }, // ASCII - 139
{ 0x00,0x02,0x45,0x7D,0x42,0x00 }, // ASCII - 140
{ 0x00,0x01,0x45,0x7C,0x40,0x00 }, // ASCII - 141
// { 0xF0,0x29,0x24,0x29,0xF0,0x00 }, // ASCII - 142 Ä
{ 0x79,0x14,0x12,0x14,0x79,0x00 }, // ASCII - 142 Ä korrigiert
{ 0xF0,0x28,0x25,0x28,0xF0,0x00 }, // ASCII - 143
{ 0x7C,0x54,0x55,0x45,0x00,0x00 }, // ASCII - 144 90
{ 0x20,0x54,0x54,0x7C,0x54,0x44 }, // ASCII - 145
{ 0x7C,0x0A,0x09,0x7F,0x49,0x41 }, // ASCII - 146
{ 0x32,0x49,0x49,0x49,0x32,0x00 }, // ASCII - 147
{ 0x32,0x48,0x48,0x48,0x32,0x00 }, // ASCII - 148
{ 0x32,0x4A,0x48,0x48,0x30,0x00 }, // ASCII - 149
{ 0x3A,0x41,0x41,0x21,0x7A,0x00 }, // ASCII - 150
{ 0x3A,0x42,0x40,0x20,0x78,0x00 }, // ASCII - 151
{ 0x00,0x9D,0xA0,0xA0,0x7D,0x00 }, // ASCII - 152
{ 0x39,0x44,0x44,0x44,0x39,0x00 }, // ASCII - 153
{ 0x3D,0x40,0x40,0x40,0x3D,0x00 }, // ASCII - 154
{ 0x3C,0x24,0xFF,0x24,0x24,0x00 }, // ASCII - 155
{ 0x48,0x7E,0x49,0x43,0x66,0x00 }, // ASCII - 156
{ 0x2B,0x2F,0xFC,0x2F,0x2B,0x00 }, // ASCII - 157
{ 0xFF,0x09,0x29,0xF6,0x20,0x00 }, // ASCII - 158
{ 0xC0,0x88,0x7E,0x09,0x03,0x00 }, // ASCII - 159
{ 0x20,0x54,0x54,0x79,0x41,0x00 }, // ASCII - 160
{ 0x00,0x00,0x44,0x7D,0x41,0x00 }, // ASCII - 161
{ 0x30,0x48,0x48,0x4A,0x32,0x00 }, // ASCII - 162
{ 0x38,0x40,0x40,0x22,0x7A,0x00 }, // ASCII - 163
{ 0x00,0x7A,0x0A,0x0A,0x72,0x00 }, // ASCII - 164
{ 0x7D,0x0D,0x19,0x31,0x7D,0x00 }, // ASCII - 165
{ 0x26,0x29,0x29,0x2F,0x28,0x00 }, // ASCII - 166
{ 0x26,0x29,0x29,0x29,0x26,0x00 }, // ASCII - 167
{ 0x30,0x48,0x4D,0x40,0x20,0x00 }, // ASCII - 168
{ 0x38,0x08,0x08,0x08,0x08,0x00 }, // ASCII - 169
{ 0x08,0x08,0x08,0x08,0x38,0x00 }, // ASCII - 170
{ 0x2F,0x10,0xC8,0xAC,0xBA,0x00 }, // ASCII - 171
{ 0x2F,0x10,0x28,0x34,0xFA,0x00 }, // ASCII - 172
{ 0x00,0x00,0x7B,0x00,0x00,0x00 }, // ASCII - 173
{ 0x08,0x14,0x2A,0x14,0x22,0x00 }, // ASCII - 174
{ 0x22,0x14,0x2A,0x14,0x08,0x00 }, // ASCII - 175
{ 0xAA,0x00,0x55,0x00,0xAA,0x00 }, // ASCII - 176
{ 0xAA,0x55,0xAA,0x55,0xAA,0x55 }, // ASCII - 177
{ 0x55,0xAA,0x55,0xAA,0x55,0xAA }, // ASCII - 178
{ 0x00,0x00,0x00,0xFF,0x00,0x00 }, // ASCII - 179
{ 0x10,0x10,0x10,0xFF,0x00,0x00 }, // ASCII - 180
{ 0x14,0x14,0x14,0xFF,0x00,0x00 }, // ASCII - 181
{ 0x10,0x10,0xFF,0x00,0xFF,0x00 }, // ASCII - 182
{ 0x10,0x10,0xF0,0x10,0xF0,0x00 }, // ASCII - 183
{ 0x14,0x14,0x14,0xFC,0x00,0x00 }, // ASCII - 184
{ 0x14,0x14,0xF7,0x00,0xFF,0x00 }, // ASCII - 185
{ 0x00,0x00,0xFF,0x00,0xFF,0x00 }, // ASCII - 186
{ 0x14,0x14,0xF4,0x04,0xFC,0x00 }, // ASCII - 187
{ 0x14,0x14,0x17,0x10,0x1F,0x00 }, // ASCII - 188
{ 0x10,0x10,0x1F,0x10,0x1F,0x00 }, // ASCII - 189
{ 0x14,0x14,0x14,0x1F,0x00,0x00 }, // ASCII - 190
{ 0x10,0x10,0x10,0xF0,0x00,0x00 }, // ASCII - 191
{ 0x00,0x00,0x00,0x1F,0x10,0x10 }, // ASCII - 192
{ 0x10,0x10,0x10,0x1F,0x10,0x10 }, // ASCII - 193
{ 0x10,0x10,0x10,0xF0,0x10,0x10 }, // ASCII - 194
{ 0x00,0x00,0x00,0xFF,0x10,0x10 }, // ASCII - 195
{ 0x10,0x10,0x10,0x10,0x10,0x10 }, // ASCII - 196
{ 0x10,0x10,0x10,0xFF,0x10,0x10 }, // ASCII - 197
{ 0x00,0x00,0x00,0xFF,0x14,0x14 }, // ASCII - 198
{ 0x00,0x00,0xFF,0x00,0xFF,0x10 }, // ASCII - 199
{ 0x00,0x00,0x1F,0x10,0x17,0x14 }, // ASCII - 200
{ 0x00,0x00,0xFC,0x04,0xF4,0x14 }, // ASCII - 201
{ 0x14,0x14,0x17,0x10,0x17,0x14 }, // ASCII - 202
{ 0x14,0x14,0xF4,0x04,0xF4,0x14 }, // ASCII - 203
{ 0x00,0x00,0xFF,0x00,0xF7,0x14 }, // ASCII - 204
{ 0x14,0x14,0x14,0x14,0x14,0x14 }, // ASCII - 205
{ 0x14,0x14,0xF7,0x00,0xF7,0x14 }, // ASCII - 206
{ 0x14,0x14,0x14,0x17,0x14,0x14 }, // ASCII - 207
{ 0x10,0x10,0x1F,0x10,0x1F,0x10 }, // ASCII - 208
{ 0x14,0x14,0x14,0xF4,0x14,0x14 }, // ASCII - 209
{ 0x10,0x10,0xF0,0x10,0xF0,0x10 }, // ASCII - 210
{ 0x00,0x00,0x1F,0x10,0x1F,0x10 }, // ASCII - 211
{ 0x00,0x00,0x00,0x1F,0x14,0x14 }, // ASCII - 212
{ 0x00,0x00,0x00,0xFC,0x14,0x14 }, // ASCII - 213
{ 0x00,0x00,0xF0,0x10,0xF0,0x10 }, // ASCII - 214
{ 0x10,0x10,0xFF,0x10,0xFF,0x10 }, // ASCII - 215
{ 0x14,0x14,0x14,0xFF,0x14,0x14 }, // ASCII - 216
{ 0x10,0x10,0x10,0x1F,0x00,0x00 }, // ASCII - 217
{ 0x00,0x00,0x00,0xF0,0x10,0x10 }, // ASCII - 218
{ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }, // ASCII - 219
{ 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0 }, // ASCII - 220
{ 0xFF,0xFF,0xFF,0x00,0x00,0x00 }, // ASCII - 221
{ 0x00,0x00,0x00,0xFF,0xFF,0xFF }, // ASCII - 222
{ 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F }, // ASCII - 223
{ 0x38,0x44,0x44,0x38,0x44,0x00 }, // ASCII - 224
{ 0x7C,0x2A,0x2A,0x3E,0x14,0x00 }, // ASCII - 225
{ 0x7E,0x02,0x02,0x06,0x06,0x00 }, // ASCII - 226
{ 0x02,0x7E,0x02,0x7E,0x02,0x00 }, // ASCII - 227
{ 0x63,0x55,0x49,0x41,0x63,0x00 }, // ASCII - 228
{ 0x38,0x44,0x44,0x3C,0x04,0x00 }, // ASCII - 229
{ 0x40,0x7E,0x20,0x1E,0x20,0x00 }, // ASCII - 230
{ 0x06,0x02,0x7E,0x02,0x02,0x00 }, // ASCII - 231
{ 0x99,0xA5,0xE7,0xA5,0x99,0x00 }, // ASCII - 232
{ 0x1C,0x2A,0x49,0x2A,0x1C,0x00 }, // ASCII - 233
{ 0x4C,0x72,0x01,0x72,0x4C,0x00 }, // ASCII - 234
{ 0x30,0x4A,0x4D,0x4D,0x30,0x00 }, // ASCII - 235
{ 0x30,0x48,0x78,0x48,0x30,0x00 }, // ASCII - 236
{ 0xBC,0x62,0x5A,0x46,0x3D,0x00 }, // ASCII - 237
{ 0x3E,0x49,0x49,0x49,0x00,0x00 }, // ASCII - 238
{ 0x7E,0x01,0x01,0x01,0x7E,0x00 }, // ASCII - 239
{ 0x2A,0x2A,0x2A,0x2A,0x2A,0x00 }, // ASCII - 240
{ 0x44,0x44,0x5F,0x44,0x44,0x00 }, // ASCII - 241
{ 0x40,0x51,0x4A,0x44,0x40,0x00 }, // ASCII - 242
{ 0x40,0x44,0x4A,0x51,0x40,0x00 }, // ASCII - 243
{ 0x00,0x00,0xFF,0x01,0x03,0x00 }, // ASCII - 244
{ 0xE0,0x80,0xFF,0x00,0x00,0x00 }, // ASCII - 245
{ 0x08,0x08,0x6B,0x6B,0x08,0x08 }, // ASCII - 246
{ 0x36,0x12,0x36,0x24,0x36,0x00 }, // ASCII - 247
{ 0x06,0x0F,0x09,0x0F,0x06,0x00 }, // ASCII - 248
{ 0x00,0x00,0x18,0x18,0x00,0x00 }, // ASCII - 249
{ 0x00,0x00,0x10,0x10,0x00,0x00 }, // ASCII - 250
{ 0x30,0x40,0xFF,0x01,0x01,0x00 }, // ASCII - 251
{ 0x00,0x1F,0x01,0x01,0x1E,0x00 }, // ASCII - 252
{ 0x00,0x19,0x1D,0x17,0x12,0x00 }, // ASCII - 253
{ 0x00,0x3C,0x3C,0x3C,0x3C,0x00 }, // ASCII - 254
{ 0x00,0x00,0x00,0x00,0x00,0x00 } // ASCII - 255
};
 
/************************ E n d o f F i l e ****************************/
/Transportables_Koptertool/tags/V-0.1/MMT.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>MMT</ProjectName><Created>16-May-2008 00:42:21</Created><LastEdit>22-May-2008 20:56:53</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>16-May-2008 00:42:21</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\MMT.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>D:\Develop\MMT\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>ICE50</CURRENT_TARGET><CURRENT_PART>ATmega32</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>1</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>base64.c</SOURCEFILE><SOURCEFILE>displ_val.c</SOURCEFILE><SOURCEFILE>display.c</SOURCEFILE><SOURCEFILE>F8X6.c</SOURCEFILE><SOURCEFILE>lcd.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>motortest.c</SOURCEFILE><SOURCEFILE>parameter.c</SOURCEFILE><SOURCEFILE>rs232.c</SOURCEFILE><SOURCEFILE>timer.c</SOURCEFILE><SOURCEFILE>settings.c</SOURCEFILE><SOURCEFILE>debug.c</SOURCEFILE><HEADERFILE>base64.h</HEADERFILE><HEADERFILE>displ_val.h</HEADERFILE><HEADERFILE>display.h</HEADERFILE><HEADERFILE>font8x6.h</HEADERFILE><HEADERFILE>lcd.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>motortest.h</HEADERFILE><HEADERFILE>parameter.h</HEADERFILE><HEADERFILE>rs232.h</HEADERFILE><HEADERFILE>timer.h</HEADERFILE><HEADERFILE>settings.h</HEADERFILE><HEADERFILE>debug.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega32</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>MMT.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\WinAVR-20070525\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>lcd.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>settings.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>settings.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>main.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>lcd.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>main.c</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.c</FileName><Status>1</Status></File00006></Files><Workspace><File00000><Position>270 211 1117 677</Position><LineCol>26 0</LineCol></File00000><File00001><Position>312 267 1159 733</Position><LineCol>9 0</LineCol></File00001><File00002><Position>179 65 1188 768</Position><LineCol>4 0</LineCol></File00002><File00003><Position>211 128 1058 594</Position><LineCol>43 0</LineCol></File00003><File00004><Position>255 186 1102 652</Position><LineCol>27 0</LineCol></File00004><File00005><Position>277 215 1124 681</Position><LineCol>88 0</LineCol></File00005><File00006><Position>188 71 1197 774</Position><LineCol>0 0</LineCol><State>Maximized</State></File00006></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/Transportables_Koptertool/tags/V-0.1/base64.c
0,0 → 1,116
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "rs232.h"
#include "base64.h"
#include "lcd.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
 
uint8_t get_message() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode(index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
r_buffer[1] = p_buffer[1];
r_buffer[2] = p_buffer[2];
 
bpointer = 3;
spointer = 3;
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
}
 
checksum = 0;
for(a=0;a<bpointer;a++)
checksum += r_buffer[a];
checksum %= 4096;
r_buffer[bpointer] = (checksum / 64) + 61;
r_buffer[bpointer + 1] = (checksum % 64) + 61;
r_buffer[bpointer + 2] = 13;
r_buffer[bpointer + 3] = 0;
bpointer += 3;
for(a=0;a<bpointer;a++)
RS232_send(r_buffer[a]);
}
/Transportables_Koptertool/tags/V-0.1/base64.h
0,0 → 1,12
#ifndef base64_h
#define base64_h
 
uint8_t base64_decode(uint8_t number);
void base64_send(uint8_t number);
uint8_t get_message(void);
 
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
 
#endif
/Transportables_Koptertool/tags/V-0.1/debug.c
0,0 → 1,228
// debug Data
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "debug.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
//uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
uint8_t base64_decode_debug(unsigned char *ptrOut, uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
ptrOut[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
ptrOut[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
ptrOut[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
uint8_t get_message_debug() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode_debug((unsigned char *) &DebugIn, index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
uint8_t read_debug(uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Debug-Daten anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'c';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message_debug() == 1)
timeout = 30;
timeout ++;
}
while ((r_buffer[1] != 'D') && (timeout < 30));
if (timeout >= 30)
return 1;
else
return 0;
}
 
#define isminus 65536 / 2
 
void decimal_int (unsigned int data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{
int sign = 0;
text[0] = 0x20; // (schneller/kleiner als printf())
if (data > isminus)
{
data = 65536 - data;
sign = 1;
text[0] = '-';
}
 
text[1] = data/10000;
data -= (text[1] * 10000);
text[2] = data/1000;
data -= (text[2] *1000);
 
text[3] = data/100;
data -= (text[3] * 100);
text[4] = data/10;
data -= (text[4] *10);
 
 
text[5] = data + 0x30;
text[1] += 0x30;
text[2] += 0x30;
text[3] += 0x30;
text[4] += 0x30;
 
 
if (text[1] == 0x30)
{
text[0] = 0x20;
if (sign == 1) text[1] = '-'; else text[1] = 0x20;
if (text[2] == 0x30)
{
text[1] = 0x20;
if (sign == 1) text[2] = '-'; else text[2] = 0x20;
if (text[3] == 0x30)
{
text[2] = 0x20;
if (sign == 1) text[3] = '-'; else text[3] = 0x20;
if (text[4] == 0x30)
{
text[3] = 0x20;
if (sign == 1) text[4] = '-'; else text[4] = 0x20;
}
}
}
}
// if (sign == 1) text[0] = '-';
text[6] = 0x00;
}
 
void display_debug(void)
{
uint8_t line;
uint8_t zeile;
uint8_t text[10];
 
lcd_cls();
zeile = 0;
lcd_printp(PSTR("Debug-Display"),0);
do
{
while (key != 0x00);
if (read_debug(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = p_buffer[2];
text[0] = line;
text[1] = 0x00;
lcd_print_at(15,0,text,0);
//lcd_print_at(0,++zeile,p_buffer,0);
 
decimal_int(DebugIn.Analog[0],text);
lcd_print_at(0,1,"Nick",0);
lcd_print_at(10,1,text,0);
decimal_int(DebugIn.Analog[1],text);
lcd_print_at(0,2,"Roll",0);
lcd_print_at(10,2,text,0);
decimal_int(DebugIn.Analog[2],text);
lcd_print_at(0,3,"ACC Nick",0);
lcd_print_at(10,3,text,0);
decimal_int(DebugIn.Analog[3],text);
lcd_print_at(0,4,"ACC Roll",0);
lcd_print_at(10,4,text,0);
decimal_int(DebugIn.Analog[4],text);
lcd_print_at(0,5,"Gier",0);
lcd_print_at(10,5,text,0);
decimal_int(DebugIn.Analog[5],text);
lcd_print_at(0,6,"ACC",0);
lcd_print_at(10,6,text,0);
 
decimal_int(DebugIn.Analog[9],text);
lcd_print_at(0,7,"Spannung",0);
lcd_print_at(10,7,text,0);
 
// decimal_int(DebugIn.Analog[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
 
// decimal(p_buffer[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
if (zeile > 5) zeile = 0;
 
timer = 10;
while(timer > 0);
// if (key == 0x01)
// read_debug(1);
// if (key == 0x02)
// read_debug(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/tags/V-0.1/debug.h
0,0 → 1,15
#ifndef debug_h
#define debug_h
 
void display_debug(void);
 
struct str_DebugIn
{
unsigned char Digital[2];
unsigned int Analog[32]; // Debugwerte
};
 
struct str_DebugIn DebugIn;
//extern struct str_DebugIn *p_buffer;
 
#endif
/Transportables_Koptertool/tags/V-0.1/default/MMT.eep
0,0 → 1,65
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:100080000000000000000000000000000000000070
:100090000000000000000000000000000000000060
:1000A0000000000000000000000000000000000050
:1000B0000000000000000000000000000000000040
:1000C0000000000000000000000000000000000030
:1000D0000000000000000000000000000000000020
:1000E0000000000000000000000000000000000010
:1000F0000000000000000000000000000000000000
:1001000000000000000000000000000000000000EF
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
:10016000000000000000000000000000000000008F
:10017000000000000000000000000000000000007F
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000000000000000000000000000000000CD
:1003300000000000000000000000000000000000BD
:1003400000000000000000000000000000000000AD
:10035000000000000000000000000000000000009D
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:00000001FF
/Transportables_Koptertool/tags/V-0.1/default/MMT.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1/default/MMT_Mega32_7.hex
0,0 → 1,716
:100000000C94C1060C94DE060C94DE060C94DE06FD
:100010000C94DE060C94DE060C94DE060C94DE06D0
:100020000C94DE060C94DE060C94CA120C94DE06C8
:100030000C94DE060C9470120C94DE060C94DE0612
:100040000C94DE060C94DE060C94DE060C94DE06A0
:100050000C94DE06202020202020000D0A54696D1B
:10006000656F75742100446973706C6179000000DC
:10007000000000003E5B4F5B3E003E6B4F6B3E005E
:100080001C3E7C3E1C00183C7E3C18001C577D57D3
:100090001C001C5E7F5E1C0000183C180000FFE77F
:1000A000C3E7FF00001824180000FFE7DBE7FF00AC
:1000B00030483A060E00262979292600407F05059A
:1000C0000700407F05253F005A3CE73C5A007F3E31
:1000D0001C1C0800081C1C3E7F0014227F221400F8
:1000E0005F5F005F5F0006097F017F000066899502
:1000F0006A0060606060606094A2FFA294000804DF
:100100007E04080010207E20100008082A1C080029
:10011000081C2A0808001E10101010000C1E0C1ECF
:100120000C0030383E383000060E3E0E060000004F
:100130000000000000005F00000000070007000052
:10014000147F147F1400242A7F2A120023130864CA
:100150006200364956205000000807030000001CCA
:10016000224100000041221C00002A1C7F1C2A00A2
:1001700008083E08080000807030000008080808E1
:1001800008000000606000002010080402003E51DA
:1001900049453E0000427F400000724949494600FF
:1001A0002141494D33001814127F10002745454561
:1001B00039003C4A494931004121110907003649BB
:1001C00049493600464949291E0000001400000034
:1001D00000403400000000081422410014141414DC
:1001E00014000041221408000201590906003E4192
:1001F0005D594E007C1211127C007F49494936003E
:100200003E41414122007F4141413E007F494949F1
:1002100041007F09090901003E41415173007F08F7
:1002200008087F0000417F4100002040413F01005D
:100230007F08142241007F40404040007F021C02A2
:100240007F007F0408107F003E4141413E007F094E
:10025000090906003E4151215E007F091929460027
:1002600026494949320003017F0103003F404040D5
:100270003F001F2040201F003F4038403F006314D4
:10028000081463000304780403006159494D4300D6
:10029000007F41414100020408102000004141411B
:1002A0007F0004020102040040404040400000037F
:1002B000070800002054547840007F284444380048
:1002C000384444442800384444287F003854545467
:1002D000180000087E09020018A4A49C78007F087A
:1002E0000404780000447D4000002040403D0000B0
:1002F0007F102844000000417F4000007C04780407
:1003000078007C0804047800384444443800FC1821
:100310002424180018242418FC007C080404080075
:1003200048545454240004043F4424003C404020DA
:100330007C001C2040201C003C4030403C004428F5
:10034000102844004C9090907C004464544C44002D
:100350000008364100000000770000000041360828
:1003600000000201020402003C2623263C001EA1DC
:10037000A16112003A4040207A0038545455590087
:100380002155557941002154547841002155547824
:1003900040002054557940000C1E5272120039550D
:1003A000555559003954545459003955545458002E
:1003B0000000457C41000002457D42000001457C73
:1003C0004000791412147900F0282528F0007C549C
:1003D000554500002054547C54447C0A097F49410F
:1003E000324949493200324848483200324A484886
:1003F00030003A4141217A003A4240207800009D85
:10040000A0A07D003944444439003D4040403D00B7
:100410003C24FF242400487E494366002B2FFC2FF8
:100420002B00FF0929F62000C0887E090300205414
:10043000547941000000447D41003048484A320070
:10044000384040227A00007A0A0A72007D0D193184
:100450007D002629292F2800262929292600304811
:100460004D4020003808080808000808080838002F
:100470002F10C8ACBA002F102834FA0000007B00FF
:10048000000008142A14220022142A140800AA00CA
:100490005500AA00AA55AA55AA5555AA55AA55AA63
:1004A000000000FF0000101010FF0000141414FFE3
:1004B00000001010FF00FF001010F010F0001414E6
:1004C00014FC00001414F700FF000000FF00FF0000
:1004D0001414F404FC00141417101F0010101F1043
:1004E0001F001414141F0000101010F00000000072
:1004F000001F10101010101F1010101010F010100E
:10050000000000FF1010101010101010101010FF3D
:100510001010000000FF14140000FF00FF10000086
:100520001F1017140000FC04F414141417101714EF
:100530001414F404F4140000FF00F7141414141439
:1005400014141414F700F7141414141714141010BE
:100550001F101F10141414F414141010F010F010C5
:1005600000001F101F100000001F1414000000FCEA
:1005700014140000F010F0101010FF10FF101414ED
:1005800014FF14141010101F0000000000F01010D1
:10059000FFFFFFFFFFFFF0F0F0F0F0F0FFFFFF00C4
:1005A0000000000000FFFFFF0F0F0F0F0F0F384478
:1005B000443844007C2A2A3E14007E0202060600CB
:1005C000027E027E02006355494163003844443C88
:1005D0000400407E201E200006027E02020099A533
:1005E000E7A599001C2A492A1C004C7201724C0094
:1005F000304A4D4D3000304878483000BC625A4691
:100600003D003E49494900007E0101017E002A2A41
:100610002A2A2A0044445F44440040514A4440008E
:1006200040444A5140000000FF010300E080FF0009
:10063000000008086B6B0808361236243600060FD7
:10064000090F06000000181800000000101000003C
:100650003040FF010100001F01011E0000191D179D
:100660001200003C3C3C3C000000000000004D6FCC
:1006700064206279204D696B656C6A6F2030352F7C
:1006800030380053657474696E67730D0A004465F1
:1006900062756720446174656E0D0A004D6F746F5A
:1006A00072746573740D0A00506172616D657465D2
:1006B000720D0A000D0A446973706C61790D0A00AD
:1006C00048617570746D656EFC2842455441205632
:1006D000302E31290D0A002A002000546173746500
:1006E000206472FC636B656E0D0A00436F6E666971
:1006F0006720202020004368616E6E656C732020A7
:1007000000537469636B202020202000486F6568C7
:10071000652020202020004779726F202020202093
:1007200020004C6F6F70696E672020200043616D60
:100730006572612020202000536F6E7374696765B5
:100740007320005573657220202020202000436F05
:1007500075706C696E67202000436F6E666967284C
:10076000322920004C6F6F70696E677365740002E8
:10077000020202020202020004040404040403034D
:1007800003080808080505080808000509090909FB
:100790000707070707070606060A0A0606050505EE
:1007A0000909090900070B0B0B0B0C0C0C0C0C0CAA
:1007B0000C0C0108020108020108020108020108EC
:1007C0000201080201080201080200000000FF0403
:1007D00000FF0400FF0400FF0400320400FF0400D7
:1007E000060300400300140300200821FA08003229
:1007F0000800FF0800000500000500FA0800FA08DC
:1008000000FA0800010000FF0500FF0900FF0900D1
:10081000FF0900FF0900FF0700FA0700FA0700FAC6
:100820000700190700FF0600FA0600FA0600FF0A93
:1008300000FF0A00FA0600FA0600FA0500FA0500B1
:10084000FF0500FF0900FF0900FF0900FF09000084
:10085000010001070000000000000000000000008F
:100860000000000000000000000000000000000088
:100870000000000000000000004C6F6F70207570D9
:100880002020202020202020004C6F6F7020646FDB
:10089000776E092020202000004C6F6F70206C655F
:1008A0006674202020202020004C6F6F7020726919
:1008B00067687420202020200048F668656E726505
:1008C000676C6572202020200048F668656E7363AF
:1008D00068616C74657220200048656164686F6CA3
:1008E0006409090000000000004B6F6D70617373B4
:1008F0000909000000000000004B6F6D7061737308
:1009000046697809090000000047505309090900A9
:1009100000000000000000000041636873656E6B1A
:100920006F70706C756E67200044726568726174D8
:100930006509090000000000004E69636B2020205B
:10094000202020202020202000526F6C6C202020AE
:1009500020202020202020200047617320202020FC
:1009600020202020202020200047696572090909E5
:10097000000000000000000000506F746931090998
:10098000090000000000000000506F74693209097E
:10099000090000000000000000506F74693309096D
:1009A000090000000000000000506F74693409095C
:1009B000090000000000000000436F6E66696709CF
:1009C000090900000000000000486F6568655F4D80
:1009D000696E476173202020004C756674647275DF
:1009E000636B5F4420202020004D6178486F65686C
:1009F000652020202020202000486F6568655F501A
:100A0000202020202020202000486F6568655F5648
:100A1000657273746165726B00486F6568655F41EC
:100A200043435F5769726B2E00537469636B5F5069
:100A3000202020202020202000537469636B5F4415
:100A4000202020202020202000476965725F502050
:100A50002020202020202020004761735F4D696EF8
:100A60002020202020202020004761735F4D6178E6
:100A70002020202020202020004779726F416363CE
:100A800046616B746F720900004B6F6D7061737318
:100A90005769726B756E6720004779726F5F5020DF
:100AA0000909000000000000004779726F5F4909E2
:100AB000090900000000000000556E746572737033
:100AC000616E6E756E672020004E6F74476173090A
:100AD0000909000000000000004E6F744761735A5E
:100AE00065697420202020200055666F417573725F
:100AF00069636874756E672000495F46616B746F47
:100B000072202020202020200055736572506172D1
:100B1000616D310909000000005573657250617202
:100B2000616D3209090000000055736572506172F1
:100B3000616D3309090000000055736572506172E0
:100B4000616D34090900000000536572766F4E69CB
:100B5000636B4374726C090000536572766F4E6963
:100B6000636B436F6D70090000536572766F4E6959
:100B7000636B4D696E09000000536572766F4E69B4
:100B8000636B4D617809000000536572766F4E69A2
:100B9000636B526566727368004C6F6F7047617368
:100BA0004C696D6974090000004C6F6F7054687275
:100BB0006573686F6C640900004C6F6F70487973DF
:100BC000746572657365090000416368734B6F70EB
:100BD000706C756E67090000004163687347656754
:100BE000656E4B6F70706C2E0057696E6B6C556D37
:100BF0007363686C4E69636B0057696E6B6C556DFF
:100C00007363686C526F6C6C004779726F416363F9
:100C10004162676C656963680044726966746B6FF2
:100C20006D700909000000000044796E616D696310
:100C300053746162696C69740055736572506172B6
:100C4000616D3509090000000055736572506172CD
:100C5000616D3609090000000055736572506172BC
:100C6000616D3709090000000055736572506172AB
:100C7000616D380909000000004C6F6F70436F6EA2
:100C8000666967090900000000536572766F4E6956
:100C9000636B436F6D70496E000D0A4E6963687433
:100CA000206765737065696368657274000D0A502A
:100CB0006172616D657465722067657370656963E3
:100CC00068657274000D0A2D2D2D3E005061726111
:100CD0006D657465722073706569636865726E3FD7
:100CE0000D0A20206A610D0A20206E65696E00548D
:100CF000696D656F75740020353A0D0A0020343A2D
:100D00000D0A0020333A0D0A0020323A0D0A002065
:100D1000313A0D0A004C61646520506172616D6565
:100D20007465720D0A002D002D002D004578697440
:100D30000D0A00526563687465636B0D0A004C69A7
:100D40006E69650D0A004F7269656E74696572752A
:100D50006E670D0A000D0A0045696E7374656C6C50
:100D6000756E67656E3A0D0A000D0A54696D656F00
:100D70007574210044656275672D446973706C61F8
:100D8000790011241FBECFE5D8E0DEBFCDBF10E053
:100D9000A0E6B0E0E8E7FCE202C005900D92AE38B4
:100DA000B107D9F715E0AEE8B0E001C01D92A83F49
:100DB000B107E1F70E94DC0D0C943B160C94000087
:100DC000782F52E060E026C0E52FFF27EC5EFA4F57
:100DD00021812D5332813D5343814D535C5FDC01B2
:100DE000AF56BB4F80818D53880F880F922F9295FD
:100DF0009F70892B8C932295207F832F86958695D3
:100E0000282BFD0121833295330F330F307C342B97
:100E100032836D5F862F99275717B0F208950F938D
:100E20001F93B82F809191048093140580919204B0
:100E3000809315058091930480931605A3E073E0D9
:100E400035C0E72FFF27EF56FB4F8081418162813C
:100E50007D5FEA2FFF27EC5EFA4F282F2695269517
:100E6000235C2083552799278370907024E0880F96
:100E7000991F2A95E1F79A0104E0369527950A957E
:100E8000E1F7822B835C81834F705070440F551FB4
:100E9000440F551F862F8295869586958370842BE7
:100EA000835C82836F73635C6383AC5F7B1748F200
:100EB00090E020E030E008C0E92FFF27EC5EFA4F19
:100EC0008081280F311D9F5F9A17B1F73F70EA2F7D
:100ED000FF27EC5EFA4FC90136E0969587953A9563
:100EE000E1F7835C80832F73235C21838DE0828311
:100EF00013820A2F0D5F10E008C0E12FFF27EC5E80
:100F0000FA4F80810E94BC121F5F1017B1F71F912A
:100F10000F9108951F9384E1809397050E94971283
:100F2000833221F0809197058823C1F7809197053E
:100F3000882319F481E090E017C00E9497128093F3
:100F4000140511E00AC00E949712E12FFF27EC5E02
:100F5000FA4F80831F5F17FD1FE78D30A1F7812FA8
:100F60000E94E00680E090E01F9108951F93CF93C8
:100F7000DF93CDB7DEB761970FB6F894DEBF0FBE33
:100F8000CDBF182F83E28093910481E68093920471
:100F900080939304109394041092950410929604F5
:100FA00086E00E940F070E948A0780911505813410
:100FB000D1F7E1E9F4E0DE01119681918D9384E0AF
:100FC000E13AF807D1F7198A177020E0AE014F5FB8
:100FD0005F4F612F80E00E94DA0A61960FB6F894A5
:100FE000DEBF0FBECDBFDF91CF911F9108959F92BD
:100FF000AF92BF92CF92DF92EF92FF920F931F9327
:10100000CF93DF93CDB7DEB761970FB6F894DEBF0D
:101010000FBECDBF0E9438099924A92CBB2453E0F0
:10102000AA0CBB1C5A95E1F7FA2C00E010E08F2DBA
:10103000800F0E94B6070F5F1F4F08301105B9F7E8
:101040000E948A0780911505843489F57501EE0C9C
:10105000FF1C83E994E0E80EF91ECC24DD248E0108
:101060000F5F1F4FF701208181819927982F8827D3
:101070004AE050E0B801820F911D0E94AD1520E0BA
:1010800044E550E06C2D8EE00E94A40A20E0A80107
:101090006C2D8EE00E94DA0A0894C11CD11C82E0FB
:1010A00090E0E80EF91E98E0C916D104C1F68091CF
:1010B0009A05882329F280919A05813009F4939446
:1010C00080919A05823009F49A9480919A0588302B
:1010D00019F0E3E09E22A1CF61960FB6F894DEBF2F
:1010E0000FBECDBFDF91CF911F910F91FF90EF9079
:1010F000DF90CF90BF90AF909F9008951F9393E2A1
:101100009093910491E69093920498E690939304BF
:1011100080939404109295041092960486E00E94A5
:101120000F0710E00E948A07813009F41AE01F5F60
:10113000809115058053853018F01A3098F304C05B
:1011400080E090E01A3010F081E090E01F91089567
:101150001F93CF93DF93CDB7DEB72A970FB6F894DE
:10116000DEBF0FBECDBF0E94380960E086E690E08A
:101170000E94760A80919A058823E1F70E947E08F2
:10118000813069F460E08BE590E00E94760A88EC9B
:101190008093970580919705882369F1FBCF109183
:1011A000150519831A8220E0AE014F5F5F4F60E0A2
:1011B0008AE00E94DA0A1F5F20E041E954E0612FD3
:1011C00080E00E94DA0A8AE0809397058091970573
:1011D0008823E1F780919A05813011F40E947E08FE
:1011E00080919A05823011F40E947E0880919A05C0
:1011F000843009F0BFCF2A960FB6F894DEBF0FBE39
:10120000CDBFDF91CF911F910895C4988FB9779B7F
:10121000FECF8EB18EB9C49A08951F93CF93DF93FA
:10122000E0E9F0E0119284E0E039F807D9F710EB3B
:10123000C398812F0E94050980E10E9405098091D1
:101240008F000E940509C39AC0E0D0E080E00E94B0
:1012500005092196C038D105C9F71F5F183B41F732
:101260001092950510929605DF91CF911F910895E8
:101270000E940D09089583E397E00197F1F708951F
:101280000F931F93CF93DF938C01C0E0D0E003C096
:101290000E943B092196C017D107D1F7DF91CF916A
:1012A0001F910F91089510929505109296058FEF5A
:1012B00087BB8EE58DB9C49AC2988AE090E00E94FF
:1012C0004009C29AC498C39880E40E94050980919D
:1012D0008F00882329F481EA0E94050980EC04C06C
:1012E00080EA0E94050988EC0E94050986EA0E94AE
:1012F000050982EA0E9405098FE20E94050988EF2C
:101300000E94050980E00E94050987E20E94050904
:1013100081E80E94050986E10E9405098CEA0E9485
:10132000050980E00E9405098FEA0E9405090E94D4
:101330000D090895FF920F931F938C01F62EC39809
:10134000880F892F881F990B919580550E94050958
:1013500080918F000F77080F802F82958F70805FAC
:101360000E940509802F8F700E940509C39A8F2D56
:101370000E9405091F910F91FF900895EF92FF922F
:101380000F931F93CF93DF93C0E0D0E000E910E00C
:1013900030E1E32E31E0F32EF70181917F01F80176
:1013A000808361918F01CE010E949A092196F3E01A
:1013B000C038DF0789F700E114E0F80111928F01CE
:1013C00060E0CE010E949A092196F4E0C030DF0768
:1013D000A1F7DF91CF911F910F91FF90EF900895AA
:1013E000CF92DF92EF92FF920F931F93CF93DF93F1
:1013F000D22E4F3D81F0403E38F4463DB1F04C3D99
:10140000B1F0443CA9F40FC0463F49F04C3F49F0CD
:10141000443E71F402C041EE0BC044E809C044E907
:1014200007C041E805C04EE803C049E901C04AE9E8
:10143000062F11271695102F00271795079526E0E0
:10144000829FC0011124080F191F1370429F700161
:1014500011248EE690E0E80EF91ECC24E801C05776
:10146000DF4FF7019491F2E0DF16A1F0FD1530F0A7
:10147000DD2059F081E0D816B1F409C0E3E0DE16B2
:1014800061F0F4E0DF1679F40AC098830CC088811B
:10149000892B08C08881892705C0888102C088817E
:1014A0009095892388836991C8010E949A09C39401
:1014B0000894E11CF11C0F5F1F4F86E0C81689F6E7
:1014C000DF91CF911F910F91FF90EF90DF90CF9020
:1014D0000895809196058F5F80939605883028F057
:1014E0000E94BE0987E08093960508951F93CF93CD
:1014F000DF93EC01162F20C04032A0F02196212F5F
:1015000060919605809195050E94F009809195055E
:101510008F5F80939505853178F0109295050E9434
:10152000690A0AC04A3029F04D3029F41092950515
:1015300002C00E94690A2196FE0144914423E1F60B
:10154000DF91CF911F910895809395056093960543
:10155000622FCA010E94760A08951F93CF93DF93EA
:10156000EC01162F20C04032A0F02196212F60916F
:101570009605809195050E94F009809195058F5FF1
:1015800080939505853178F0109295050E94690A3F
:101590000AC04A3029F04D3029F41092950502C056
:1015A0000E94690A219648814423E9F6DF91CF9190
:1015B0001F9108958093950560939605622FCA0147
:1015C0000E94AD0A0895982F87FD39C06034B8F5A0
:1015D000862F869586958695282F33273695322F28
:1015E000222737952795290F311D677081E090E0FC
:1015F00001C0880F6A95EAF7682F3370413061F0B7
:10160000413018F04230A1F40DC0F901E057FF4F0E
:101610008081609586230BC0F901E057FF4F8081E0
:10162000862B05C0F901E057FF4F80818627808314
:10163000F901E057FF4F6081C9010E949A0908959E
:101640002F923F924F925F926F927F928F929F92D2
:10165000AF92BF92CF92DF92EF92FF920F931F93C0
:10166000CF93DF93CDB7DEB728970FB6F894DEBFE0
:101670000FBECDBF8D83162F0E83682E7724862E46
:101680009924842F99279C838B8386199709E22FAD
:10169000FF27FA83E9839F012819390997FF04C0BE
:1016A000FFEF2F2E3F2E07C040E050E0009711F0D3
:1016B00041E050E01A0137FF04C0EFEF4E2E5E2EDE
:1016C00008C040E050E02115310511F041E050E044
:1016D0002A016C0197FF04C0D094C194D108D3941F
:1016E000790137FF04C0F094E194F108F3944E813E
:1016F000682D862D0E94E30AEC14FD047CF5C601DA
:1017000062E070E00E94141644275527461B570BD1
:1017100058874F83A22CB62CB20C5D81052F112760
:1017200017C08F8198858E0D9F1D98878F831816FF
:10173000190634F4840C951C8C199D0998878F83A5
:101740004E81682D8B2D0E94E30A020D131DBA0CE9
:10175000EB81FC810E171F0721F72DC0C70162E046
:1017600070E00E94141644275527461B570B5887D4
:101770004F83A42CB82CB40C012F112717C08F81D4
:1017800098858C0D9D1D98878F831816190634F443
:10179000620C731C8E199F0998878F834E816B2D65
:1017A000862D0E94E30A040D151DBA0CE981FA8109
:1017B0000E171F0721F728960FB6F894DEBF0FBE4D
:1017C000CDBFDF91CF911F910F91FF90EF90DF90F0
:1017D000CF90BF90AF909F908F907F906F905F90D1
:1017E0004F903F902F900895BF92CF92DF92EF924B
:1017F000FF920F931F93CF93DF93182FB02E87FD87
:101800001FE7603408F06FE37727CB01820F911D4B
:101810009C01812F840F912D911D6C0191E8C916B7
:10182000D10418F0B0E8CB2ED12C79012134310548
:1018300018F0A0E4EA2EF12CEB0108C00B2D2C2FA0
:101840004C2D6C2F812F0E94200B2196EC16FD064B
:10185000A8F7DF91CF911F910F91FF90EF90DF904C
:10186000CF90BF900895CF92DF92EF92FF920F93A7
:101870001F93CF93DF93D82EC02E87FF02C08FE730
:10188000D82E162F603408F01FE3812F820F912D80
:10189000911DEC018D2D840F912D911D7C0191E8FE
:1018A000E916F10418F000E8E02EF12C0C2D212FA0
:1018B0004E2D612F8D2D0E94200BC134D10510F0CB
:1018C000C0E4D0E00C2D2C2F4E2D612F8E2D0E94C8
:1018D000200B2C2F4D2D6C2F8E2D0E94200B212F95
:1018E0004D2D6C2F8D2D0E94200BDF91CF911F91DC
:1018F0000F91FF90EF90DF90CF9008952F923F923D
:101900004F925F926F927F928F929F92AF92BF920F
:10191000CF92DF92EF92FF920F931F93CF93DF93BB
:10192000CDB7DEB724970FB6F894DEBF0FBECDBF9C
:101930008C016B017A01A22E21E030E0241B350BD3
:101940003C832B83CA01880F991F66247724681A69
:10195000790A462E502E640F4A2D802F0E94E30AEA
:101960006C2D6E194A2D802F0E94E30A4A2D6C2D92
:10197000802F8E0D0E94E30A4A2D6C2D802F8E1928
:101980000E94E30A4701222433241A82198258C094
:101990008B819C8197FD0BC0089481089108E2E03F
:1019A000F0E06E0E7F1E860D971D9C838B8308943E
:1019B000211C311C29813A812E5F3F4F3A832983B4
:1019C0008B819C810196820F931F9C838B83142DA6
:1019D000180DD52CD20C4A2D612F8D2D0E94E30AB3
:1019E000E52CE2184A2D612F8E2D0E94E30A142D5A
:1019F00018194A2D612F8D2D0E94E30A4A2D612F5F
:101A00008E2D0E94E30A142D120DE52CE80C4A2DB0
:101A1000612F8E2D0E94E30A952D9819092F4A2DCA
:101A2000612F892F0E94E30A142D12194A2D612F6C
:101A30008E2D0E94E30A4A2D612F802F0E94E30A17
:101A4000281439040CF4A4CF24960FB6F894DEBF02
:101A50000FBECDBFDF91CF911F910F91FF90EF90FF
:101A6000DF90CF90BF90AF909F908F907F906F90BE
:101A70005F904F903F902F9008952F923F924F92FA
:101A80005F926F927F928F929F92AF92BF92CF920E
:101A9000DF92EF92FF920F931F93CF93DF936B012F
:101AA0007A0151E0A52EB12CAE18BF089701220F84
:101AB000331F88249924821A930A662E782E262FA3
:101AC0002E196E0D01E0482F0E94200B472D4E1954
:101AD0002C2D6C2D872D8E0D0E94200BE7014424A8
:101AE0005524222433243AC0B7FC07C0219782E052
:101AF00090E0880E991EA80CB91C0894411C511C3A
:101B000082E090E0280E391E0894A11CB11CA20CA2
:101B1000B31C1C2F662D6C0FE72CE418D72CD40CAB
:101B200001E0262F4E2D8D2D0E94200B662D6C1B63
:101B3000262F4E2D8D2D0E94200B662D640DE72C37
:101B4000EC1A170D262F4E2D812F0E94200B662D8B
:101B50006419262F4E2D812F0E94200B4C165D06F6
:101B60001CF2DF91CF911F910F91FF90EF90DF90CA
:101B7000CF90BF90AF909F908F907F906F905F902D
:101B80004F903F902F900895A2E0B0E00E9427165A
:101B9000802D992780938F00089581E021E030E027
:101BA000D901082E0E942F1680E02F5F3F4FD901E8
:101BB000082E0E942F1608958FEF8BBB83E488BBFD
:101BC0008CEF85BB8CE782BB83E084BB80E881BB64
:101BD00021E030E0D9010E942716802D813071F07C
:101BE00081E0D901082E0E942F1680E02F5F3F4F21
:101BF000D901082E0E942F16215030402F5F3F4FF1
:101C0000D9010E942716802D992780938F000E946A
:101C100053090E9492120E94091378940E94650E43
:101C2000FDCF0F931F93062F142F20E049ED56E0B0
:101C3000682F812F0E94A40A20E047ED56E0602F14
:101C4000812F0E94A40A1F910F910895EF92FF9295
:101C50000F931F93082FE62EF42E682F0E94110E6B
:101C6000102F912F80919A058823E1F780919A0592
:101C70008823E1F380919A05823019F41E1508F447
:101C80001F5F80919A05813019F4011708F41150F3
:101C90004F2D612F892F0E94110E80919A05883057
:101CA00021F080919A058430E1F680919A05843084
:101CB00009F41FEF80919A058823E1F7812F992776
:101CC0001F910F91FF90EF9008950E94380960E0F6
:101CD00080EC96E00E94760A60E084EB96E00E9439
:101CE000760A60E088EA96E00E94760A60E08CE975
:101CF00096E00E94760A60E08EE896E00E94760AFE
:101D000060E083E896E00E94760A60E08EE696E066
:101D10000E94760A4CE066E082E00E94260E843043
:101D200091F0853028F4823041F08330A1F408C06E
:101D3000853061F0863079F40CC00E94A8080895BF
:101D40000E94BD1108950E94AC0E08950E94D41403
:101D500008950E94271308950E94380980919A05DA
:101D60008823E1F760E08BED96E00E94760A80918F
:101D70009A058823E1F380919A058830C9F483E2BB
:101D80008093910481E68093920484E78093930486
:101D90008AE08093940480939504809396048093C2
:101DA0009704109298041092990489E00E940F07FA
:101DB00080919A058823E1F780919A058823E1F3C1
:101DC00083E28093910481E68093920484E7809378
:101DD0009304109294041092950410929604109219
:101DE0009704109298041092990489E00E940F07BA
:101DF0000895FB0120E030E0482F552761E0CA013B
:101E0000022E02C0959587950A94E2F780FF02C0E2
:101E1000608301C010822F5F3F4F3196283031051B
:101E200071F7089540E020E030E061E070E0FC01EF
:101E30008191813041F4CB01022E02C0880F991F9D
:101E40000A94E2F7480F2F5F3F4F2830310581F7A2
:101E5000842F99270895482FFB0164E60E94F4150A
:101E6000808324E6829FC0011124481B842F6AE0EE
:101E70000E94F4152AE0829F90011124421B405DCC
:101E800042839081905D9083805D8183903329F4BB
:101E900090E29083803309F4918313820895CF9266
:101EA000DF92EF92FF920F931F93CF93DF93CDB703
:101EB000DEB762970FB6F894DEBF0FBECDBF82309B
:101EC00008F455C0615044E080E00E94260EC82E00
:101ED0008FEFC81609F421C1EC2CFF24F701E25260
:101EE000FA4FE081FF27EF56FB4FD08020E04AE217
:101EF0005DE06C2D84E00E94A40A80919A058823FD
:101F0000E1F780919A05813009F4DA9480919A057D
:101F1000823009F4D3948E01075F1F4FB8018D2DD5
:101F20000E942B0F20E0A8016C2D80E00E94DA0AAD
:101F300084E180939705809197058823E1F780914C
:101F40009A05843021F080919A058830D1F68091ED
:101F50009A05883009F0E1C0AEEDB5E0EA0EFB1E4F
:101F6000D701EC91FF27EF56FB4FD082D6C08130CE
:101F700009F069C08E010F5F1F4FB8018091C50441
:101F80000E94F90E1A8644E063E080E00E94260E6B
:101F9000D82EBFEF8B1709F4C0C0E82EFF240E0D1A
:101FA0001F1DF801008120E048E25DE0682F84E019
:101FB0000E94A40A80919A05813009F400E0809182
:101FC0009A05823009F401E0005D0987005320E0A2
:101FD000AE01475F5F4F6D2D80E00E94DA0A84E119
:101FE00080939705809197058823E1F780919A0562
:101FF000883021F080919A058430E1F680919A052D
:10200000883051F4CE010196E80EF91ED7010C93E9
:102010000E94120F8093C5040E9438098E01075F49
:102020001F4FB8018091C5040E942B0F60E0C801CA
:102030000E94AD0A88EC80939705809197058823CC
:1020400009F46BC0FACF882309F067C08E010F5FD7
:102050001F4FB801809199040E94F90E1A8644E03E
:1020600067E080E00E94260ED82EBFEF8B1709F4A0
:1020700054C0E82EFF240E0D1F1DF801008120E042
:1020800046E25DE0682F84E00E94A40A80919A05F0
:10209000813009F400E080919A05823009F401E072
:1020A000005D0987005320E0AE01475F5F4F6D2D53
:1020B00080E00E94DA0A84E1809397058091970579
:1020C0008823E1F780919A05883021F080919A0564
:1020D0008430E1F680919A05883051F4CE01019662
:1020E000E80EF91ED7010C930E94120F80939904F9
:1020F0000E9438098E01075F1F4FB8018091990433
:102100000E942B0F60E0C8010E94AD0A88EC80930A
:102110009705809197058823E1F762960FB6F894AA
:10212000DEBF0FBECDBFDF91CF911F910F91FF900A
:10213000EF90DF90CF9008956F927F928F929F9251
:10214000AF92BF92CF92DF92EF92FF920F931F93C5
:10215000CF93DF93CDB7DEB7A1970FB6F894DEBF6C
:102160000FBECDBFE82E81E08E1508F044C044EBD1
:10217000A42E47E0B42E39E3632E39E0732EFF24FA
:10218000CC24DD2421E9822E24E0922EF5018491D5
:102190008E15E9F4EF2DFF27E252FA4FC0828E012F
:1021A000075F1F4FB801F40180810E942B0F20E0D0
:1021B000A8016F2D80E00E94DA0A20E0A3016F2DB4
:1021C00085E00E94A40AF7E0FF1508F0F394089454
:1021D000C11CD11C83E090E0A80EB91E0894811C9C
:1021E000911CE0E1F0E06E0E7F1EF2E4CF16D10408
:1021F00009F463C0CBCF81E0E81679F58E010F5F5B
:102200001F4FB8018091C5040E94F90E1A8699E704
:10221000A92E98E0B92E6801CE0101961C2D181B3D
:10222000F60181916F01805D898720E0AE01475FF3
:102230005F4F612F80E00E94DA0A20E0A501612F44
:1022400085E00E94A40A80E190E0A80EB91ECE01AC
:102250000596C816D90681F1DFCFEE2069F58E010B
:102260000F5F1F4FB801809199040E94F90E1A86E2
:10227000680189EBA82E88E0B82ECE010196FC2CCF
:10228000F81AF60181916F01805D89878E01075FE1
:102290001F4F20E0A8016F2D80E00E94DA0A20E0A5
:1022A000A5016F2D85E00E94A40A80E190E0A80EB0
:1022B000B91EC016D10609F7FF248F2D9927A196C4
:1022C0000FB6F894DEBF0FBECDBFDF91CF911F9147
:1022D0000F91FF90EF90DF90CF90BF90AF909F90C5
:1022E0008F907F906F900895982F8630D8F426E4D1
:1022F00030E0E7EDF4E08081838321503040319776
:102300008FEF2F3F3807B9F783E28093910481E67E
:10231000809392049559909393041092DB048BE47C
:102320000E940F0708951F9393E29093910491E602
:102330009093920491E79093930480939404109265
:1023400095041092960486E00E940F0710E00E9408
:102350008A07813009F41EE11F5F809115058C54B6
:10236000853018F01E3198F304C080E090E01E31F3
:1023700010F081E090E01F910895FF920F931F935A
:10238000CF93DF93CDB7DEB72F970FB6F894DEBFAC
:102390000FBECDBF0E94380960E085E19DE00E943C
:1023A000760A60E08FE09DE00E94760A60E089E0B6
:1023B0009DE00E94760A60E083E09DE00E94760A3C
:1023C00060E08DEF9CE00E94760A60E087EF9CE081
:1023D0000E94760A40E065E081E00E94260E0E949D
:1023E0009311813041F420E04FEE5CE066E080E044
:1023F0000E94A40A62C062E0F62E0E9438098E0193
:102400000F5F1F4F4AE050E0B8018F2D99270E94BF
:10241000CE1560E0C8010E94AD0A82E38093970563
:10242000809197058823E1F70E9438098F2D0E943B
:102430009C10682F80919A058823E1F380919A057A
:10244000823009F4F39480919A05813009F4FA946A
:102450008FEFF81619F45CE0F52E04C08CE08F15B0
:1024600008F4FF2480919A05883019F48F2D0E947A
:102470004F0F80919A05843009F0BFCF0E94380930
:1024800060E08CEC9CE00E94760A40E062E081E033
:102490000E94260E813061F460E085EC9CE00E9491
:1024A000760A85E00E94741160E08DEA9CE003C02A
:1024B00060E089E99CE00E94760A84E680939705B3
:1024C000809197058823E1F72F960FB6F894DEBF29
:1024D0000FBECDBFDF91CF911F910F91FF90089557
:1024E0001F920F920FB60F9211248F939F93EF9329
:1024F000FF938091E6059CB1E8EEF5E0E80FF11D51
:1025000090838F5F8093E6058091E6058F708093BE
:10251000E605FF91EF919F918F910F900FBE0F9065
:102520001F90189588E98AB987E089B908958AE0EB
:10253000809399059091E7058091E605981721F41D
:10254000809199058823B1F780919905882311F42A
:10255000E0E00FC08091E705E82FFF27E851FA4F30
:10256000E0818F5F8093E7058091E7058F7080930E
:10257000E7058E2F992708955D9BFECF8CB90895AE
:10258000FC0104C05D9BFECF8CB93196808188230D
:10259000C9F708951F920F920FB60F9211248F93CF
:1025A0009F9380919805882331F080919805815000
:1025B0008093980515C08AE08093980589B3992780
:1025C00080959095689413F8959587951694E1F702
:1025D0008F7080939A0580919B058F5F80939B05F8
:1025E00080919705882329F08091970581508093E9
:1025F000970580919905882329F08091990581504C
:10260000809399059F918F910F900FBE0F901F900F
:1026100018958DE083BF88E48CBF89B7826089BF3D
:102620000895F89480918F00882321F484E08093AA
:102630008F0002C010928F0080918F00A2E0B0E066
:10264000082E0E942F160E945309789408950F9324
:102650001F9311E00E94380960E088E59DE00E9428
:10266000760A60E085E59DE00E94760A60E086E4F7
:102670009DE00E94760A60E08EE39DE00E94760A6B
:1026800060E083E39DE00E94760A60E08CE29DE0DA
:102690000E94760A4FE065E082E00E94260E8330B9
:1026A00049F08430C9F0823011F010E026C00E9459
:1026B000111323C00E94380901E022E344E664E1DB
:1026C0008AE00E94200B80919A058830B1F08091B9
:1026D0009A05843091F0F7CF0E94380901E028E292
:1026E00044E664E18AE00E94330C80919A058830C8
:1026F00021F080919A058430C1F7112309F0AACF07
:102700001F910F910895CF93DF93EC0152E070E099
:1027100026C0E52FFF27EC5EFA4F21812D53328131
:102720003D5343814D535C5FDE01A80FB91F80818B
:102730008D53880F880F922F92959F70892B8C93C1
:102740002295207F832F86958695282BFD01218356
:102750003295330F330F307C342B32837D5F872FDC
:1027600099275617B0F2DF91CF9108954F925F925B
:102770006F927F928F929F92AF92BF92CF92DF9291
:10278000EF92FF920F931F93CF93DF93FC01EB0126
:1027900080E2888340E8E130F40718F46624772467
:1027A00008C0F095E195FF4F8DE2888351E0652EDA
:1027B000712C2E010894411C511CCF0160E177E27D
:1027C0000E9400168B01262F332780E197E2BC017F
:1027D000269FC001279F900D369F900D11249F01C9
:1027E000281B390B42E0C42ED12CCC0EDD1EC901B2
:1027F00068EE73E00E9400167B01462F552788EE95
:1028000093E0FC014E9FC0014F9F900D5E9F900D85
:102810001124281B390B93E0A92EB12CAC0EBD1E40
:10282000C90164E670E00E940016FB0184E6689F1F
:10283000C0011124281B390B84E0882E912C8C0EAA
:102840009D1EC9016AE070E00E9400168AE0689F40
:10285000C0011124281B390B205D2D83005D0983E5
:10286000F0E3EF0EEA82E05DEB83605D6C830033A2
:1028700091F580E2888341E06416710409F48DE2E9
:102880008983F6018081803331F580E2F201808313
:10289000F1E06F16710409F48DE2F6018083F50111
:1028A00080818033C1F480E2F6018083F1E06F160D
:1028B000710409F48DE2F5018083F4018081803395
:1028C00051F480E2F5018083F1E06F16710409F4A0
:1028D0008DE2F40180831E82DF91CF911F910F91D1
:1028E000FF90EF90DF90CF90BF90AF909F908F9030
:1028F0007F906F905F904F9008951F9384E1809335
:1029000097050E949712833221F0809197058823C2
:10291000C1F780919705882319F481E090E019C0F0
:102920000E9497128093140511E00AC00E9497122A
:10293000E12FFF27EC5EFA4F80831F5F17FD1FE733
:102940008D30A1F7612F8CE995E00E94831380E020
:1029500090E01F9108951F9393E29093910491E664
:102960009093920493E6909393048093940410922E
:1029700095041092960486E00E940F0710E00E94D2
:102980007D14813009F41EE11F5F809115058434A8
:1029900019F01E31A0F304C080E090E01E3110F069
:1029A00081E090E01F9108950F931F93CF93DF93E1
:1029B000CDB7DEB72A970FB6F894DEBF0FBECDBFF6
:1029C0000E94380960E084E79DE00E94760A8091C9
:1029D0009A058823E1F70E94AB14813071F460E01E
:1029E00089E69DE00E94760A88EC809397058091A5
:1029F0009705882309F4A6C0FACF809193048983B0
:102A00001A8220E08E010F5F1F4FA80160E08FE067
:102A10000E94DA0AB80180919E0590919F050E945C
:102A2000B61320E040E650E061E080E00E94DA0A60
:102A300020E0A80161E08AE00E94DA0AB8018091F2
:102A4000A0059091A1050E94B61320E045E650E054
:102A500062E080E00E94DA0A20E0A80162E08AE0F9
:102A60000E94DA0AB8018091A2059091A3050E9404
:102A7000B61320E04AE650E063E080E00E94DA0A04
:102A800020E0A80163E08AE00E94DA0AB8018091A0
:102A9000A4059091A5050E94B61320E043E750E0FD
:102AA00064E080E00E94DA0A20E0A80164E08AE0A5
:102AB0000E94DA0AB8018091A6059091A7050E94AC
:102AC000B61320E04CE750E065E080E00E94DA0AAF
:102AD00020E0A80165E08AE00E94DA0AB80180914E
:102AE000A8059091A9050E94B61320E041E850E0A6
:102AF00066E080E00E94DA0A20E0A80166E08AE051
:102B00000E94DA0AB8018091B0059091B1050E9447
:102B1000B61320E045E850E067E080E00E94DA0A62
:102B200020E0A80167E08AE00E94DA0A8AE0809348
:102B30009705809197058823E1F780919A05843065
:102B400009F045CF2A960FB6F894DEBF0FBECDBF71
:102B5000DF91CF911F910F910895FB019F01E894A0
:102B60004230C4F04532B4F44A3029F497FB1EF4E5
:102B7000909581959F4F642F77270E940016805D66
:102B80008A330CF0895D8193CB010097A1F716F48D
:102B90005DE251931082C9010C94E415FB019F0181
:102BA000423074F0453264F4642F77270E94001697
:102BB000805D8A330CF0895D8193CB010097A1F78A
:102BC0001082C9010C94E415DC01FC01672F71919E
:102BD0007723E1F7329704C07C916D937083629103
:102BE000AE17BF07C8F30895991B79E004C0991F79
:102BF000961708F0961B881F7A95C9F78095089557
:102C0000AA1BBB1B51E107C0AA1FBB1FA617B70712
:102C100010F0A61BB70B881F991F5A95A9F780952E
:102C20009095BC01CD01089597FB092E07260AD087
:102C300077FD04D0E5DF06D000201AF47095619589
:102C40007F4F0895F6F7909581959F4F0895E199EC
:102C5000FECFBFBBAEBBE09A11960DB20895E199CD
:102C6000FECFBFBBAEBB0DBA11960FB6F894E29A79
:082C7000E19A0FBE0895FFCFA9
:102C78004E69636B00526F6C6C00414343204E6990
:102C8800636B0041434320526F6C6C004769657267
:0E2C980000414343005370616E6E756E67001D
:00000001FF
/Transportables_Koptertool/tags/V-0.1/default/Makefile
0,0 → 1,110
###############################################################################
# Makefile for the project MMT
###############################################################################
 
## General Flags
PROJECT = MMT
MCU = atmega32
TARGET = MMT.elf
CC = avr-gcc.exe
 
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
 
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
 
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
 
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=
 
 
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
 
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
 
 
## Objects that must be built in order to link
OBJECTS = base64.o displ_val.o display.o F8X6.o lcd.o main.o menu.o motortest.o parameter.o rs232.o timer.o settings.o debug.o
 
## Objects explicitly added by the user
LINKONLYOBJECTS =
 
## Build
all: $(TARGET) MMT.hex MMT.eep size
 
## Compile
base64.o: ../base64.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
displ_val.o: ../displ_val.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
display.o: ../display.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
F8X6.o: ../F8X6.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
lcd.o: ../lcd.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
menu.o: ../menu.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
motortest.o: ../motortest.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
parameter.o: ../parameter.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
rs232.o: ../rs232.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
timer.o: ../timer.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
settings.o: ../settings.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
debug.o: ../debug.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
 
##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
 
%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
 
%.eep: $(TARGET)
-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
 
%.lss: $(TARGET)
avr-objdump -h -S $< > $@
 
size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}
 
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) MMT.elf dep/* MMT.hex MMT.eep
 
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
 
/Transportables_Koptertool/tags/V-0.1/displ_val.c
0,0 → 1,83
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "base64.h"
#include "lcd.h"
#include "rs232.h"
 
// Insgesamt 32 Werte können angezeigt werden
// jeweils 8 Stück werden gleichzeitg angezeigt
// Auswahl über Tasten
 
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
p_buffer[1] = 'a';
p_buffer[2] = 'a';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do
{
get_message();
}
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
text[16] = 0x00;
lcd_print_at(0,(number & 0x07),text,0);
}
 
void displ_values(void)
{
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
lcd_cls(); // LCD löschen
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
displ_get_text(i+displ_page*8);
do
{
get_message();
if(r_buffer[1] == 'D')
{
for (i=0;i<8;i++)
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
itoa(value,text,10);
lcd_print_atp(14,i,PSTR(" "),0);
lcd_print_at(14,i,text,0);
}
}
}
while (key == 0x00);
if (key == 0x01)
displ_page++;
if (key == 0x02)
displ_page--;
displ_page &= 0x03;
}
while(key != 0x08);
}
 
/Transportables_Koptertool/tags/V-0.1/displ_val.h
0,0 → 1,6
#ifndef displ_val_h
#define displ_val_h
 
void displ_values(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/display.c
0,0 → 1,78
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Display-Zeile anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'h';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
timeout = 10;
timeout ++;
}
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
return 1;
else
return 0;
}
 
void display_data (void)
{
uint8_t line;
uint8_t text[10];
 
lcd_cls();
lcd_printp(PSTR("Display"),0);
do
{
while (key != 0x00);
if (read_display(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = r_buffer[1];
text[0] = line;
text[1] = 0x00;
lcd_print_at(10,0,text,0);
lcd_print_at(0,line+1,p_buffer,0);
timer = 10;
while(timer > 0);
if (key == 0x01)
read_display(1);
if (key == 0x02)
read_display(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/tags/V-0.1/display.h
0,0 → 1,6
#ifndef display_h
#define display_h
 
void display_data (void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/font8x6.h
0,0 → 1,9
 
#ifndef font8x6_h
#define font8x6_h
 
#include <avr/pgmspace.h>
 
extern prog_uint8_t f8x6[256][6];
 
#endif
/Transportables_Koptertool/tags/V-0.1/lcd.c
0,0 → 1,557
 
#define F_CPU 7372800UL
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
 
#include "font8x6.h"
#include "main.h"
#include "lcd.h"
 
#define DISP_W 128
#define DISP_H 64
// #define LCD_ORIENTATION 0 // 0 MJ Tasten unten / 4 Original Tasten oben
 
 
uint8_t lcd_xpos;
uint8_t lcd_ypos;
//volatile uint8_t display_buffer[1024]; // Display-Puffer, weil nicht zurückgelesen werden kann
//volatile uint16_t display_buffer_pointer; // Pointer auf das aktuell übertragene Byte
//volatile uint8_t display_buffer_counter; // Hilfszähler zur Selektierung der Page
//volatile uint8_t display_page_counter; // aktuelle Page-Nummer
//volatile uint8_t display_mode; // Modus für State-Machine
 
 
void send_byte (uint8_t data)
{
clr_cs();
SPDR = data;
while(!(SPSR & (1<<SPIF)));
SPSR = SPSR;
set_cs();
}
 
void cls (void)
{
uint16_t i,j;
for (i=0;i<1024;i++)
display_buffer[i] = 0x00;
for (i=0;i<8;i++)
{
clr_A0();
send_byte(0xB0+i); //1011xxxx
send_byte(0x10); //00010000
// send_byte(0x04); //00000100 gedreht plus 4 Byte
// send_byte(0x00); //00000000
send_byte(LCD_ORIENTATION); //00000000
 
set_A0();
for (j=0;j<128;j++)
send_byte(0x00);
}
lcd_xpos = 0;
lcd_ypos = 0;
}
 
void lcd_cls (void)
{
cls();
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
uint16_t i;
for (i=0; i<time; i++)
wait_1ms();
}
 
void lcd_init (void)
{
lcd_xpos = 0;
lcd_ypos = 0;
 
DDRB = 0xFF;
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
set_cs();
clr_reset();
wait_ms(10);
set_reset();
clr_cs();
clr_A0();
send_byte(0x40);
 
if (LCD_ORIENTATION == 0)
{
send_byte(0xA1); // A1 normal A0 reverse(original)
send_byte(0xC0); // C0 normal C8 reverse(original)
}
else
{
send_byte(0xA0); // A1 normal A0 reverse(original)
send_byte(0xC8); // C0 normal C8 reverse(original)
}
send_byte(0xA6);
send_byte(0xA2);
send_byte(0x2F);
send_byte(0xF8);
send_byte(0x00);
send_byte(0x27);
send_byte(0x81);
send_byte(0x16);
send_byte(0xAC);
send_byte(0x00);
send_byte(0xAF);
cls();
 
}
 
void set_adress (uint16_t adress, uint8_t data)
{
uint8_t page;
uint8_t column;
page = adress >> 7;
clr_A0();
send_byte(0xB0 + page);
// column = (adress & 0x7F) + 4; Wenn gedreht
// column = (adress & 0x7F);
column = (adress & 0x7F) + LCD_ORIENTATION;
 
send_byte(0x10 + (column >> 4));
send_byte(column & 0x0F);
set_A0();
send_byte(data);
}
 
void scroll (void)
{
uint16_t adress;
for (adress=0;adress<896;adress++)
{
display_buffer[adress] = display_buffer[adress+128];
set_adress(adress,display_buffer[adress]);
}
for (adress=896;adress<1024;adress++)
{
display_buffer[adress] = 0;
set_adress(adress,0);
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
{
case 'ä':
c = 0x84;
break;
case 'ö':
c = 0x94;
break;
case 'ü':
c = 0x81;
break;
case 'Ä':
c = 0x8E;
break;
case 'Ö':
c = 0x99;
break;
case 'Ü':
c = 0x9A;
break;
case 'ß':
c = 0xE1;
break;
}
adress = y*128 + x*6;
adress &= 0x3FF;
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[0][0] + i + c * 6);
switch (mode)
{
case 0:
display_buffer[adress+i] = ch;
break;
case 1:
display_buffer[adress+i] |= ch;
break;
case 2:
display_buffer[adress+i] ^= ch;
break;
case 3:
display_buffer[adress+i] &= ch;
break;
case 4:
display_buffer[adress+i] &= ~ch;
break;
}
set_adress(adress+i,display_buffer[adress+i]);
}
}
 
void new_line (void)
{
lcd_ypos++;
if (lcd_ypos > 7)
{
scroll();
lcd_ypos = 7;
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode)
{
lcd_xpos = x;
lcd_ypos = y;
lcd_printp (text, mode);
}
 
 
void lcd_print (uint8_t *text, uint8_t mode)
{
while (*text)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
}
}
}
 
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode)
{
lcd_xpos = x;
lcd_ypos = y;
lcd_print(text, mode);
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Plot (set one Pixel)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// mode:
// 0=Clear, 1=Set, 2=XOR
void lcd_plot (uint8_t xpos, uint8_t ypos, uint8_t mode)
{
uint16_t adress;
uint8_t mask;
if ((xpos < 128) && (ypos < 64))
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
adress &= 0x3FF;
switch (mode)
{
case 0:
display_buffer[adress] &=~mask;
break;
case 1:
display_buffer[adress] |= mask;
break;
case 2:
display_buffer[adress] ^= mask;
break;
}
set_adress(adress,display_buffer[adress]);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Line (draws a line from x1,y1 to x2,y2
// + Based on Bresenham line-Algorithm
// + found in the internet, modified by thkais 2007
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode)
 
{
int x,y,count,xs,ys,xm,ym;
 
x=(int)x1;
y=(int)y1;
xs=(int)x2 - (int)x1;
ys=(int)y2 - (int)y1;
if(xs < 0)
xm= -1;
else
if(xs > 0)
xm= 1;
else
xm= 0;
if(ys < 0)
ym= -1;
else
if(ys > 0)
ym= 1;
else
ym= 0;
if(xs < 0)
xs= -xs;
if(ys < 0)
ys= -ys;
 
lcd_plot((unsigned char)x, (unsigned char)y, mode);
 
if(xs > ys) // Flat Line <45 degrees
{
count= -(xs / 2);
while(x != x2)
{
count= count + ys;
x= x + xm;
if(count > 0)
{
y= y + ym;
count= count - xs;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
}
}
else // Line >=45 degrees
{
count=- (ys / 2);
while(y != y2)
{
count= count + xs;
y= y + ym;
if(count > 0)
{
x= x + xm;
count= count - ys;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
}
}
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Filled rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
uint16_t x2, y2;
uint16_t i;
 
if (x1 >= DISP_W)
x1 = DISP_W - 1;
if (y1 >= DISP_H)
y1 = DISP_H - 1;
x2 = x1 + widthx;
y2 = y1 + widthy;
if (x2 > DISP_W)
x2 = DISP_W;
if (y2 > DISP_H)
y2 = DISP_H;
for (i=y1;i<=y2;i++)
{
lcd_line(x1,i,x2,i,mode);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
uint16_t x2, y2;
 
if (x1 >= DISP_W)
x1 = DISP_W - 1;
if (y1 >= DISP_H)
y1 = DISP_H - 1;
x2 = x1 + widthx;
y2 = y1 + widthy;
if (x2 > DISP_W)
x2 = DISP_W;
if (y2 > DISP_H)
y2 = DISP_H;
 
lcd_line (x1, y1, x2, y1, mode);
lcd_line (x2, y1, x2, y2, mode);
lcd_line (x2, y2, x1, y2, mode);
lcd_line (x1, y2, x1, y1, mode);
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of a circle
// + Based on Bresenham-algorithm found in wikipedia
// + modified by thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode)
{
int16_t f = 1 - radius;
int16_t ddF_x = 0;
int16_t ddF_y = -2 * radius;
int16_t x = 0;
int16_t y = radius;
 
lcd_plot(x0, y0 + radius, mode);
lcd_plot(x0, y0 - radius, mode);
lcd_plot(x0 + radius, y0, mode);
lcd_plot(x0 - radius, y0, mode);
 
while(x < y)
{
if(f >= 0)
{
y --;
ddF_y += 2;
f += ddF_y;
}
x ++;
ddF_x += 2;
f += ddF_x + 1;
 
lcd_plot(x0 + x, y0 + y, mode);
lcd_plot(x0 - x, y0 + y, mode);
lcd_plot(x0 + x, y0 - y, mode);
lcd_plot(x0 - x, y0 - y, mode);
lcd_plot(x0 + y, y0 + x, mode);
lcd_plot(x0 - y, y0 + x, mode);
lcd_plot(x0 + y, y0 - x, mode);
lcd_plot(x0 - y, y0 - x, mode);
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + filled Circle
// + modified circle-algorithm thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius)
{
int16_t f = 1 - radius;
int16_t ddF_x = 0;
int16_t ddF_y = -2 * radius;
int16_t x = 0;
int16_t y = radius;
lcd_line(x0, y0 + radius,x0, y0 - radius,1);
lcd_line(x0 + radius, y0,x0 - radius, y0,1);
while(x < y)
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x + 1;
lcd_line(x0 + x, y0 + y,x0 - x, y0 + y,1);
lcd_line(x0 + x, y0 - y,x0 - x, y0 - y,1);
lcd_line(x0 + y, y0 + x,x0 - y, y0 + x,1);
lcd_line(x0 + y, y0 - x,x0 - y, y0 - x,1);
}
}
/Transportables_Koptertool/tags/V-0.1/lcd.h
0,0 → 1,27
 
#ifndef graphics_h
#define graphics_h
 
void lcd_init (void);
void lcd_plot (uint8_t x, uint8_t y, uint8_t mode);
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy,uint8_t mode);
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t mode);
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode);
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius);
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode);
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode);
void send_byte (uint8_t data);
void lcd_print(uint8_t *text, uint8_t mode);
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode);
void lcd_printp (const char *text, uint8_t mode);
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode);
void lcd_cls (void);
 
volatile uint8_t display_buffer[1024]; // Display-Puffer, weil nicht zurückgelesen werden kann
volatile uint16_t display_buffer_pointer; // Pointer auf das aktuell übertragene Byte
volatile uint8_t display_buffer_counter; // Hilfszähler zur Selektierung der Page
volatile uint8_t display_page_counter; // aktuelle Page-Nummer
volatile uint8_t display_mode; // Modus für State-Machine
volatile uint8_t LCD_ORIENTATION;
 
#endif
/Transportables_Koptertool/tags/V-0.1/main.c
0,0 → 1,88
/*
Mobiles Mikrokopter-Tool
+++++ BETA 0.1 +++++
Diese Software ist Open-Source und darf nicht für kommerzielle Zwecke verwendet werden.
Die Software darf kopiert, verändert und weitergegeben werden, unter der Bedingung,
dass immer der komplette Source inklusive dieser Lizenz weitergegeben wird.
Für den LCD-Font gilt das dort angegebene Copyright.
(C) 2008 Thomas Kaiser, thomas@ft-fanpage.de
 
Die Software wird "so wie sie ist" geliefert.
Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.
Benutzung auf eigene Gefahr.
Ich übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.
Dies gilt insbesondere für die vorliegende Beta-Version.
 
Teile des Source (z.B. die base64-Funktionen) sind abgewandelte Funktionen aus dem Mikrokopter-Source,
siehe http://www.mikrokopter.de
 
*/
 
//#define F_CPU 7378200ul
 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "base64.h"
#include "timer.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
void ReadParameter(void)
{
// unsigned char *buffer;
 
LCD_ORIENTATION = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ORIENTATION]);
 
// set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
// if (number > 5) number = 5;
// eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
}
 
void WriteParameterset(void)
{
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], 0);
 
// if(number > 5) number = 5;
// eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
// eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
 
int main (void)
{
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
PORTB = 0x43;
PORTC = 0xFC;
PORTD = 0x7C;
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
DDRD = 0x80;
 
if ((eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID])) != 1)
WriteParameterset();
 
ReadParameter();
// LCD_ORIENTATION = 0;
 
lcd_init();
RS232_init();
timer_init();
sei();
 
for (;;)
main_menu();
}
/Transportables_Koptertool/tags/V-0.1/main.eep
0,0 → 1,0
:00000001FF
/Transportables_Koptertool/tags/V-0.1/main.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Transportables_Koptertool/tags/V-0.1/main.h
0,0 → 1,45
 
#ifndef main_h
#define main_h
 
#include <avr/eeprom.h>
 
#define set_cs() PORTB |= (1<<4)
#define clr_cs() PORTB &=~(1<<4)
#define set_reset() PORTB |= (1<<2)
#define clr_reset() PORTB &=~(1<<2)
#define set_A0() PORTB |= (1<<3) // Data
#define clr_A0() PORTB &=~(1<<3) // Command
#define set_scl() PORTB |= (1<<7)
#define clr_scl() PORTB &=~(1<<7)
#define set_si() PORTB |= (1<<5)
#define clr_si() PORTB &=~(1<<5)
 
#define key_enter 0x08
#define key_esc 0x04
#define key_plus 0x02
#define key_minus 0x01
#define key_nokey 0x00
 
extern uint8_t r_buffer[128];
extern uint8_t p_buffer[128];
//extern struct str_DebugIn *p_buffer;
 
extern volatile uint8_t key;
 
extern volatile uint8_t timer;
extern volatile uint8_t rs232_timer;
 
#endif
 
//#define EEPROM_ADR_VALID 1
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ORIENTATION 2
 
 
extern unsigned char EEPromArray[];
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
/Transportables_Koptertool/tags/V-0.1/main.hex
0,0 → 1,616
:100000000C947E060C9499060C9499060C9499060F
:100010000C9499060C9499060C9499060C949906E4
:100020000C9499060C9499060C94B5060C949906B8
:100030000C9499060C94F80B0C9499060C94990660
:100040000C9499060C9499060C9499060C949906B4
:100050000C9499060000000000003E5B4F5B3E00E0
:100060003E6B4F6B3E001C3E7C3E1C00183C7E3CB1
:1000700018001C577D571C001C5E7F5E1C0000187A
:100080003C180000FFE7C3E7FF0000182418000039
:10009000FFE7DBE7FF0030483A060E002629792902
:1000A0002600407F05050700407F05253F005A3C9C
:1000B000E73C5A007F3E1C1C0800081C1C3E7F00C9
:1000C00014227F2214005F5F005F5F0006097F013A
:1000D0007F00006689956A0060606060606094A23D
:1000E000FFA2940008047E04080010207E20100067
:1000F00008082A1C0800081C2A0808001E101010F6
:1001000010000C1E0C1E0C0030383E383000060E5D
:100110003E0E060000000000000000005F0000002E
:10012000000700070000147F147F1400242A7F2A90
:10013000120023130864620036495620500000085C
:1001400007030000001C224100000041221C0000A7
:100150002A1C7F1C2A0008083E0808000080703016
:100160000000080808080800000060600000201077
:10017000080402003E5149453E0000427F40000015
:100180007249494946002141494D33001814127FF4
:1001900010002745454539003C4A49493100412175
:1001A00011090700364949493600464949291E00C8
:1001B0000000140000000040340000000008142279
:1001C0004100141414141400004122140800020108
:1001D000590906003E415D594E007C1211127C0007
:1001E0007F49494936003E41414122007F4141411A
:1001F0003E007F49494941007F09090901003E410C
:10020000415173007F0808087F0000417F410000D2
:100210002040413F01007F08142241007F404040C0
:1002200040007F021C027F007F0408107F003E41D7
:1002300041413E007F09090906003E4151215E000F
:100240007F091929460026494949320003017F01E7
:1002500003003F4040403F001F2040201F003F4020
:1002600038403F006314081463000304780403005B
:100270006159494D4300007F41414100020408108B
:100280002000004141417F0004020102040040407F
:10029000404040000003070800002054547840000C
:1002A0007F284444380038444444280038444428D3
:1002B0007F0038545454180000087E09020018A426
:1002C000A49C78007F080404780000447D4000006E
:1002D0002040403D00007F102844000000417F4046
:1002E00000007C04780478007C080404780038441A
:1002F00044443800FC182424180018242418FC0056
:100300007C080404080048545454240004043F4466
:1003100024003C4040207C001C2040201C003C402D
:1003200030403C004428102844004C9090907C00C1
:100330004464544C4400000836410000000077003B
:1003400000000041360800000201020402003C26C1
:1003500023263C001EA1A16112003A4040207A00F1
:100360003854545559002155557941002154547839
:1003700041002155547840002054557940000C1E0E
:100380005272120039555555590039545454590078
:100390003955545458000000457C41000002457D09
:1003A00042000001457C4000791412147900F028C5
:1003B0002528F0007C54554500002054547C5444BA
:1003C0007C0A097F4941324949493200324848484C
:1003D0003200324A484830003A4141217A003A42DC
:1003E00040207800009DA0A07D003944444439009D
:1003F0003D4040403D003C24FF242400487E4943CA
:1004000066002B2FFC2F2B00FF0929F62000C08847
:100410007E0903002054547941000000447D4100CE
:100420003048484A3200384040227A00007A0A0AAE
:1004300072007D0D19317D002629292F28002629DB
:100440002929260030484D402000380808080800B7
:100450000808080838002F10C8ACBA002F1028343C
:10046000FA0000007B00000008142A142200221465
:100470002A140800AA005500AA00AA55AA55AA5590
:1004800055AA55AA55AA000000FF0000101010FF41
:100490000000141414FF00001010FF00FF001010E3
:1004A000F010F000141414FC00001414F700FF0006
:1004B0000000FF00FF001414F404FC0014141710D3
:1004C0001F0010101F101F001414141F0000101024
:1004D00010F000000000001F10101010101F10106E
:1004E000101010F01010000000FF1010101010106D
:1004F0001010101010FF1010000000FF1414000066
:10050000FF00FF1000001F1017140000FC04F4147B
:100510001414171017141414F404F4140000FF003A
:10052000F7141414141414141414F700F7141414F6
:100530001417141410101F101F10141414F4141492
:100540001010F010F01000001F101F100000001F0E
:100550001414000000FC14140000F010F01010102F
:10056000FF10FF10141414FF14141010101F0000BB
:10057000000000F01010FFFFFFFFFFFFF0F0F0F0B1
:10058000F0F0FFFFFF000000000000FFFFFF0F0F73
:100590000F0F0F0F3844443844007C2A2A3E1400C1
:1005A0007E0202060600027E027E02006355494179
:1005B00063003844443C0400407E201E20000602B4
:1005C0007E02020099A5E7A599001C2A492A1C0071
:1005D0004C7201724C00304A4D4D30003048784822
:1005E0003000BC625A463D003E49494900007E0148
:1005F00001017E002A2A2A2A2A0044445F4444003A
:1006000040514A44400040444A5140000000FF012C
:100610000300E080FF00000008086B6B080836123A
:1006200036243600060F090F0600000018180000D7
:100630000000101000003040FF010100001F010108
:100640001E0000191D171200003C3C3C3C0000003D
:1006500000000000202020202020004E69636B2035
:100660002020202020202020202000526F6C6C2091
:1006700020202020202020202020004761732020DF
:10068000202020202020202020200047696572099A
:100690000909000000000000000000506F7469317B
:1006A0000909090000000000000000506F74693261
:1006B0000909090000000000000000506F74693350
:1006C0000909090000000000000000506F7469343F
:1006D0000909090000000000000000436F6E666910
:1006E0006709090900000000000000486F6568659F
:1006F0005F4D696E476173202020004C75667464FD
:100700007275636B5F4420202020004D6178486F34
:100710006568652020202020202000486F656865DE
:100720005F50202020202020202000486F65686531
:100730005F56657273746165726B00486F656865BA
:100740005F4143435F5769726B2E00537469636B5B
:100750005F50202020202020202000537469636BEC
:100760005F44202020202020202000476965725F00
:1007700050202020202020202020004761735F4D42
:10078000696E2020202020202020004761735F4DCB
:1007900061782020202020202020004779726F419E
:1007A000636346616B746F720900004B6F6D70611B
:1007B00073735769726B756E6720004779726F5F4C
:1007C00050200909000000000000004779726F5FA7
:1007D0004909090900000000000000556E746572A7
:1007E0007370616E6E756E672020004E6F74476186
:1007F00073090909000000000000004E6F74476192
:10080000735A65697420202020200055666F417559
:10081000737269636874756E672000495F46616B27
:10082000746F7220202020202020005573657250A4
:100830006172616D310909000000005573657250E5
:100840006172616D320909000000005573657250D4
:100850006172616D330909000000005573657250C3
:100860006172616D34090900000000536572766F92
:100870004E69636B4374726C090000536572766F46
:100880004E69636B436F6D70090000536572766F3C
:100890004E69636B4D696E09000000536572766F97
:1008A0004E69636B4D617809000000536572766F85
:1008B0004E69636B526566727368004C6F6F704768
:1008C00061734C696D6974090000004C6F6F70545E
:1008D00068726573686F6C640900004C6F6F7048D4
:1008E0007973746572657365090000416368734BC1
:1008F0006F70706C756E6709000000416368734724
:100900006567656E4B6F70706C2E0057696E6B6C0F
:10091000556D7363686C4E69636B0057696E6B6CE1
:10092000556D7363686C526F6C6C004779726F41E0
:1009300063634162676C65696368004472696674E9
:100940006B6F6D700909000000000044796E616DE5
:10095000696353746162696C6974005573657250A0
:100960006172616D350909000000005573657250B0
:100970006172616D3609090000000055736572509F
:100980006172616D3709090000000055736572508E
:100990006172616D380909000000004C6F6F70438F
:1009A0006F6E666967090900000000536572766F13
:1009B0004E69636B436F6D70496E004C6F6F7020B2
:1009C00075702020202020202020004C6F6F702088
:1009D000646F776E092020202000004C6F6F70201C
:1009E0006C656674202020202020004C6F6F7020E2
:1009F000726967687420202020200048F668656EC0
:100A00007265676C6572202020200048F668656E6C
:100A1000736368616C746572202000486561646866
:100A20006F6C6409090000000000004B6F6D70617D
:100A300073730909000000000000004B6F6D7061C6
:100A4000737346697809090000000047505309098B
:100A500009000000000000000000004163687365A9
:100A60006E6B6F70706C756E672000447265687293
:100A70006174650909000000000000010802010816
:100A8000020108020108020108020108020108022D
:100A900001080200000000FF0400FF0400FF040042
:100AA000FF0400320400FF040006030040030014AA
:100AB0000300200821FA0800320800FF08000005A2
:100AC00000000500FA0800FA0800FA08000100001A
:100AD000FF0500FF0900FF0900FF0900FF0900FFF3
:100AE0000700FA0700FA0700FA0700190700FF06D7
:100AF00000FA0600FA0600FF0A00FF0A00FA0600E4
:100B0000FA0600FA0500FA0500FF0500FF0900FFDC
:100B10000900FF0900FF09000001000107000000B3
:100B200000000000000000000000000000000000C5
:100B300000000000000000000000000000000000B5
:100B40000000020202020202020200040404040481
:100B50000403030308080808050508080800050938
:100B60000909090707070707070606060A0A06060E
:100B70000505050909090900070B0B0B0B0C0C0CEB
:100B80000C0C0C0C0C436F6E666967202020200053
:100B90004368616E6E656C73202000537469636BEB
:100BA000202020202000486F65686520202020201C
:100BB000004779726F202020202020004C6F6F703A
:100BC000696E672020200043616D657261202020DE
:100BD0002000536F6E7374696765732000557365E9
:100BE0007220202020202000436F75706C696E6792
:100BF000202000436F6E66696728322920004C6F01
:100C00006F70696E67736574002D002D002D004CA8
:100C100061646520506172616D657465720D0A00D2
:100C200020313A0D0A0020323A0D0A0020333A0DE5
:100C30000A0020343A0D0A0020353A0D0A005469A2
:100C40006D656F757400506172616D6574657220B9
:100C500073706569636865726E3F0D0A20206A6172
:100C60000D0A20206E65696E000D0A2D2D2D3E00A7
:100C70000D0A506172616D657465722067657370ED
:100C800065696368657274000D0A4E696368742053
:100C900067657370656963686572740020002A0077
:100CA00048617570746D656EFC284245544120564C
:100CB000302E31290D0A000D0A446973706C617978
:100CC0000D0A00506172616D657465720D0A004D08
:100CD0006F746F727465737400446973706C6179BA
:100CE000000D0A54696D656F757421005461737449
:100CF00065206472FC636B656E0D0A0011241FBED3
:100D0000CFE5D8E0DEBFCDBF10E0A0E6B0E0ECE676
:100D1000F6E202C005900D92A036B107D9F715E0B2
:100D2000A0E6B0E001C01D92A738B107E1F70C942E
:100D30009B060C940000CFE5D8E0DEBFCDBF8FEF5F
:100D40008BBB83E488BB8CEF85BB8CE782BB83E0E5
:100D500084BB80E881BB0E9453070E941A0C0E944A
:100D6000F40678940E94C811FDCF1F920F920FB61F
:100D70000F9211248F939F938091E404882331F084
:100D80008091E40481508093E40415C08AE080934C
:100D9000E40489B3992780959095689413F8959504
:100DA00087951694E1F78F708093E604809169052A
:100DB0008F5F8093690580916100882329F080917D
:100DC00061008150809361008091E504882329F0BF
:100DD0008091E50481508093E5049F918F910F905D
:100DE0000FBE0F901F9018958DE083BF88E48CBFD5
:100DF00089B7826089BF0895C4988FB9779BFECF69
:100E00008EB18EB9C49A08950F931F93CF93DF9339
:100E100082E690E0FC011192019624E0813692076F
:100E2000D1F3C8F300E010E0C398802F80550E94F2
:100E3000FC0680E10E94FC0684E00E94FC06C39A46
:100E4000CFE7D0E080E00E94FC062197D7FFFACFE1
:100E50000F5F1F4F0830110538F310926A0510928A
:100E60006B05DF91CF911F910F9108950E940407A8
:100E7000089583E397E00197F1F708950F931F9387
:100E8000CF93DF938C01C0E0D0E0C817D90730F4CE
:100E90000E9439072196C017D107D0F3DF91CF9177
:100EA0001F910F91089510926A0510926B058FEFB4
:100EB00087BB8EE58DB9C49AC2988AE090E00E9403
:100EC0003E07C29AC498C39880E40E94FC0680EA58
:100ED0000E94FC0688EC0E94FC0686EA0E94FC0642
:100EE00082EA0E94FC068FE20E94FC0688EF0E94C4
:100EF000FC0680E00E94FC0687E20E94FC0681E876
:100F00000E94FC0686E10E94FC068CEA0E94FC0618
:100F100080E00E94FC068FEA0E94FC060E94040703
:100F20000895FF920F931F938C01F62E880F892F3F
:100F3000881F990B9195C39880550E94FC06102F2D
:100F40001F771C5F812F82958F70805F0E94FC0647
:100F5000812F8F700E94FC06C39A8F2D0E94FC0681
:100F60001F910F91FF900895EF92FF920F931F939F
:100F7000CF93DF93C0E0D0E032EEE32E30E0F32EEB
:100F8000870100581040F70181917F01F8018083AB
:100F900061918F01CE010E9491072196F3E0C03844
:100FA000DF0788F3C0E8D3E002EE13E0F801119206
:100FB0008F0160E0CE010E9491072196F4E0C030DD
:100FC000DF07A0F3DF91CF911F910F91FF90EF907A
:100FD0000895BF92CF92DF92EF92FF920F931F93EB
:100FE000CF93DF93382FF42EB22E842F99278F3D85
:100FF000910589F1803E910574F4863D910529F1B2
:10100000873D910524F4843C9105E1F026C08C3D98
:101010009105F1F022C0863F910571F0873F91055F
:1010200024F4843E910529F018C08C3F910539F0D5
:1010300014C014E8F12E11C0C4E9FC2E0EC0B1E8B2
:10104000FB2E0BC0AEE8FA2E08C0F9E9FF2E05C052
:10105000EAE9FE2E02C071EEF72EC62FDD27D695E7
:10106000DC2FCC27D795C79586E0389FC001112487
:10107000C80FD91FD3706E0100E010E045E0E42EE8
:1010800086E0F89EF0011124E00FF11FEC5AFF4FAB
:1010900024918B2D992782309105E9F083309105B9
:1010A0002CF4009749F0019771F02CC08330910522
:1010B000D1F00497F1F026C0FE01EE59FF4FE00F8A
:1010C000F11F20831FC0FE01EE59FF4FE00FF11FFB
:1010D0008081822B16C0FE01EE59FF4FE00FF11FF9
:1010E000808182270EC0FE01EE59FF4FE00FF11FF5
:1010F00006C0FE01EE59FF4FE00FF11F20958081E1
:1011000082238083FE01EE59FF4FE00FF11F6081C3
:10111000C6010E949107EA940F5F1F4F0894C11CFB
:10112000D11CE7FEADCFDF91CF911F910F91FF90C2
:10113000EF90DF90CF90BF90089580916B058F5F07
:1011400080936B05883028F00E94B40787E0809375
:101150006B0508951F93CF93DF93EC01162FFC01CD
:101160008491882351F1FE0184918032B0F0219660
:101170008491212F482F60916B0580916A050E9410
:10118000E90780916A058F5F80936A05853188F051
:1011900010926A050E949D080CC099278A3091051B
:1011A00029F00D9729F410926A0502C00E949D084B
:1011B0002196FE0184918823B1F6DF91CF911F9192
:1011C000089580936A0560936B05622FCA010E949F
:1011D000AA0808951F93CF93DF93EC01162F8881FF
:1011E000882339F148814032A0F02196212F609167
:1011F0006B0580916A050E94E90780916A058F5FFF
:1012000080936A05853190F010926A050E949D08CE
:101210000DC055274A30510531F04D30510529F4A4
:1012200010926A0502C00E949D0821968881882339
:10123000C9F6DF91CF911F91089580936A0560935D
:101240006B05622FCA010E94EA080895982F87FD56
:1012500045C0603408F042C0862F869586958695F5
:10126000A82FBB27B695BA2FAA27B795A795A90F80
:10127000B11D262F33272770307081E090E002C027
:10128000880F991F2A95E2F7982FB37055274130A0
:10129000510589F0423051051CF4452B29F017C047
:1012A0004230510571F013C0FD01EE59FF4F90958A
:1012B000808189230BC0FD01EE59FF4F8081892B6E
:1012C00005C0FD01EE59FF4F808189278083FD0114
:1012D000EE59FF4F6081CD010E94910708952F9232
:1012E0003F924F925F926F927F928F929F92AF92B6
:1012F000BF92CF92DF92EF92FF920F931F93CF9303
:10130000DF93CDB7DEB723970FB6F894DEBF0FBEDD
:10131000CDBF0983A82EBB24C62EDD24642E7724DE
:101320007301EA18FB08822E992484010C191D0907
:10133000F7FE04C07FEF272E372E09C01E141F04AE
:1013400024F461E0262E312C02C02224332417FF1E
:1013500004C05FEF452E552E09C01016110624F467
:1013600041E0442E512C02C044245524F7FE04C011
:10137000F094E194F108F39417FF03C010950195E0
:101380001F4F49816C2D8A2D0E9426090E151F05BD
:101390004CF5C701F7FC01969595879522273327D1
:1013A000281B390B3B832A83A614B70409F441C0D8
:1013B0008A819B81800F911F9B838A83A20CB31C1F
:1013C0001816190634F4C40CD51C8E199F099B837A
:1013D0008A8349816C2D8A2D0E942609A614B704A0
:1013E00039F727C0C80117FD019695958795EE2717
:1013F000FF27E81BF90BFB83EA83C814D904C9F063
:101400002A813B812E0D3F1D3B832A83C40CD51CB2
:101410001216130634F4A20CB31C201B310B3B83B1
:101420002A8349816C2D8A2D0E942609C814D9046B
:1014300039F723960FB6F894DEBF0FBECDBFDF910C
:10144000CF911F910F91FF90EF90DF90CF90BF90C1
:10145000AF909F908F907F906F905F904F903F9054
:101460002F900895BF92CF92DF92EF92FF920F9349
:101470001F93CF93DF93182F822FB02E17FD1FE7F6
:10148000603408F06FE3212F240F312D311D6901E5
:10149000262F33277901E80EF11C81E8C816D10404
:1014A00018F0F0E8CF2ED12C81E4E816F10418F002
:1014B000E0E4EE2EF12CE901E216F30658F00B2DD4
:1014C0002C2F4C2D6C2F812F0E946F092196EC162A
:1014D000FD06A8F7DF91CF911F910F91FF90EF903C
:1014E000DF90CF90BF900895CF92DF92EF92FF925E
:1014F0000F931F93CF93DF93D82E162FC02E87FF05
:1015000002C0BFE7DB2E103408F01FE38D2D840FDF
:10151000912D911DEC01812F820F912D911D7C0148
:10152000C138D10510F0C0E8D0E091E4E916F1042B
:1015300018F0A0E4EA2EF12C0C2D212F4C2F612F56
:101540008D2D0E946F092E2D4C2F612F8C2F0E9404
:101550006F092E2D4D2D6E2D8C2F0E946F09212F7E
:101560004D2D6E2D8D2D0E946F09DF91CF911F9112
:101570000F91FF90EF90DF90CF9008952F923F92C0
:101580004F925F926F927F928F929F92AF92BF9293
:10159000CF92DF92EF92FF920F931F93CF93DF933F
:1015A0005C016B01E22EC1E08C2E912C841A950A0D
:1015B000222433248EEF9FEF489F2001499F500C37
:1015C000589F500C11243101EA01862F840F422FBD
:1015D000682F8A2D0E9426098C2D8C1B4E2D682F7A
:1015E0008A2D0E9426094E2D6C2D8A2D8C0F0E946B
:1015F00026094E2D6C2D8A2D8C1B0E9426092C1637
:101600003D060CF051C097FC07C0219782E090E0A6
:10161000480E591E840C951C0894611C711C82E0B4
:1016200090E0280E391E820C931C0894811C911C9A
:101630001C2D1C0FFA2CF60C4E2D612F8F2D0E94A5
:1016400026090A2D06194E2D612F802F0E9426098A
:101650001C2D1C1B4E2D612F8F2D0E9426094E2DF7
:10166000612F802F0E9426091C2D160DFA2CFC0ECE
:101670004E2D612F8F2D0E9426090A2D0C1B4E2DF9
:10168000612F802F0E9426091C2D16194E2D612FC7
:101690008F2D0E9426094E2D612F802F0E94260932
:1016A0006C167D060CF4AFCFDF91CF911F910F9197
:1016B000FF90EF90DF90CF90BF90AF909F908F9072
:1016C0007F906F905F904F903F902F9008952F9252
:1016D0003F924F925F926F927F928F929F92AF92C2
:1016E000BF92CF92DF92FF920F931F93CF93DF931E
:1016F0005C016B0111E0612E712C641A750A2224C1
:1017000033248EEF9FEF489F2001499F500C589F34
:10171000500C11244101EA01862F841B962F940F4F
:1017200001E0282F4A2D692F8A2D0E946F098A2DEA
:101730008C1B2C2D482F6C2D8A2D8C0F0E946F092D
:101740002C163D060CF042C077FC07C0219782E0C2
:1017500090E0480E591E640C751C0894811C911C65
:1017600082E090E0280E391E620C731C0894611C04
:10177000711C8C2D8C0F1A2D1819FA2CF80C01E005
:10178000282F412F682F8F2D0E946F098C2D8C1BC5
:10179000282F412F682F8F2D0E946F098C2D880DC7
:1017A0001A2D1C1BFA2CFC0E282F412F682F8F2D71
:1017B0000E946F098C2D8819282F412F682F8F2D9B
:1017C0000E946F098C169D060CF4BECFDF91CF915D
:1017D0001F910F91FF90DF90CF90BF90AF909F909F
:1017E0008F907F906F905F904F903F902F900895D3
:1017F0001F920F920FB60F9211248F939F93EF9326
:10180000FF9390916C05EEE6F5E0E90FF11D8CB1C8
:1018100080839F5F90936C0580916C058F7080939F
:101820006C05FF91EF919F918F910F900FBE0F90DC
:101830001F90189588E98AB987E089B908958AE0E8
:101840008093E50490916D0580916C05981721F4C3
:101850008091E5048823B1F78091E504882381F025
:1018600080916D05E82FFF27E259FA4F8F5F809333
:101870006D05E08180916D058F7080936D0501C0CD
:10188000E82F8E2F992708955D9BFECF8CB9089580
:10189000CF93DF93EC018881882331F089910E94F6
:1018A000440C88818823D1F7DF91CF910895A82F28
:1018B00062E070E06A17B0F5E62FFF27E751FB4FB3
:1018C00080818D5331813D5352815D5343814D530E
:1018D0006C5FE72FFF27ED59FB4F9927880F991F62
:1018E000880F991F232F22952F70282B2083832F59
:1018F00099278F70907034E0880F991F3A95E1F71F
:10190000252F26952695282B2183852F99278370AF
:10191000907026E0880F991F2A95E1F7482B4283A3
:101920007D5FC8CF872F99270895CF9384E1809357
:1019300061000E941F0C833221F080916100882396
:10194000C1F780916100882399F0C0E00E941F0CCC
:10195000EC2FFF27E751FB4F8083CF5FC7FDCFE719
:101960008D30A1F78C2F0E94570C80E090E002C0D0
:1019700081E090E0CF910895FF920F931F93CF9352
:10198000A82F809163048093E9048091640480937C
:10199000EA04809165048093EB0443E0F42E7F2DEC
:1019A000FA16E0F5E72FFF27ED59FB4F90812181D3
:1019B00062817D5FEF2DFF27E751FB4F892F8695D1
:1019C0008695835C8083892F99278370907034E09B
:1019D000880F991F3A95E1F7422F55279A0194E015
:1019E000369527959A95E1F7822B835C81834F701A
:1019F0005070440F551F440F551F862F992716E02E
:101A0000969587951A95E1F7842B835C82836F7393
:101A1000635C638384E0F80E7A1720F220E030E004
:101A2000C0E0CF1540F4E9EEF4E08191280F311DBC
:101A3000CF5FCF15D0F33F70EF2DFF27E751FB4F5E
:101A4000C901C6E096958795CA95E1F7835C8083C6
:101A50002F733070822F835C81838DE082831382A9
:101A600083E0F80EC381CF1550F409EE14E0F801BD
:101A700081918F010E94440CCF5FCF15C0F3CF91AD
:101A80001F910F91FF9008951F93CF93DF93CDB7D0
:101A9000DEB761970FB6F894DEBF0FBECDBF182F2B
:101AA00083E28093630481E68093640480936504F9
:101AB00010936604109267041092680486E00E94F6
:101AC000BC0C0E94950C8091EA048134D1F7DE01B0
:101AD0001196E3E6F4E09FE081918D93915097FF9A
:101AE000FBCF198A17702989AE014F5F5F4F612FB5
:101AF000822F0E941D0961960FB6F894DEBF0FBEBB
:101B0000CDBFDF91CF911F910895CF92DF92EF92D9
:101B1000FF920F931F93CF93DF93CDB7DEB76197FB
:101B20000FB6F894DEBF0FBECDBF00E00E943607AF
:101B300010E0C02EDD24C60153E0880F991F5A958E
:101B4000E1F7810F0E94440D1F5F183090F30E944F
:101B5000950C8091EA04843491F510E0EE24FF2482
:101B6000F60143E0EE0FFF1F4A95E1F7EE0DFF1D72
:101B7000EE0FFF1FED59FB4F228183819927982F8C
:101B800088274AE050E0BE016F5F7F4F820F911DB2
:101B90000E94CF1220E044E556E0612F8EE00E94C3
:101BA000E10820E0AE014F5F5F4F612F8EE00E94A1
:101BB0001D091F5F0894E11CF11C183088F2809108
:101BC000E604882321F28091E604813009F40F5F56
:101BD0008091E604823009F4015003708091E6049C
:101BE000883009F0A5CF61960FB6F894DEBF0FBE1E
:101BF000CDBFDF91CF911F910F91FF90EF90DF90BC
:101C0000CF900895CF93C0E093E29093630491E660
:101C10009093640491E79093650480936604C09365
:101C20006704C093680486E00E94BC0C0E94950C77
:101C3000813009F4CEE1CF5F8091EA048C54853085
:101C400010F0CE3198F3CE3118F081E090E002C070
:101C500080E090E0CF910895982F8630B8F4E9EABB
:101C6000F4E026E4808183832150319727FFFACF67
:101C700083E28093630481E6809364049559909392
:101C800065041092AD048BE40E94BC0C08959B0186
:101C9000682F772751E0F90120E030E047E0CB01E1
:101CA000022E02C0959587950A94E2F780FF02C044
:101CB000508301C0108241502F5F3F4F319647FF44
:101CC000EECF089550E061E070E0FC0120E030E0EC
:101CD00047E08191813041F4CB01022E02C0880F90
:101CE000991F0A94E2F7580F41502F5F3F4F47FF6B
:101CF000F0CF852F99270895282FFB0134E6632F15
:101D00000E941613582F839FC0011124281B3AE00C
:101D1000822F632F0E941613482F839FC001112426
:101D2000281B205D2283852F805D8083405D418359
:101D3000803329F480E28083403309F48183138265
:101D400008959F92AF92BF92CF92DF92EF92FF924F
:101D50000F931F93CF93DF93CDB7DEB7A1970FB645
:101D6000F894DEBF0FBECDBF082F9924823008F44F
:101D70003EC0192D4BE5A42E46E0B42E33E6C32E0B
:101D800034E0D32E2DE7E22E2AE0F22EF7018491E3
:101D90008017F1F4E92DFF27E158FA4F1083BE01B7
:101DA0006F5F7F4FF60180810E947C0E20E0AE01C4
:101DB0004F5F5F4F692D822F0E941D0920E0A50112
:101DC000692D85E00E94E108F7E0F91508F0939489
:101DD0001F5F83E090E0E80EF91E0894C11CD11C3F
:101DE000E0E1F0E0AE0EBF1E123480F25FC0813041
:101DF00071F5BE01665E7F4F809197040E94470E89
:101E00009A82192D9BEBC92E99E0D92EEE24FF243E
:101E1000CE010196F701E80FF91F218D205D29837E
:101E200020E0AC01612F822F0E941D0920E0A60155
:101E3000612F85E00E94E1081F5F0894E11CF11CFE
:101E400080E190E0C80ED91E143010F32FC0882313
:101E500069F5BE01665E7F4F80916B040E94470E5C
:101E60009A82192D8BEFC82E89E0D82EEE24FF24FC
:101E7000CE010196F701E80FF91F218D205D29831E
:101E800020E0AC01612F822F0E941D0920E0A601F5
:101E9000612F85E00E94E1081F5F0894E11CF11C9E
:101EA000E0E1F0E0CE0EDF1E183010F3892D992707
:101EB000A1960FB6F894DEBF0FBECDBFDF91CF91D4
:101EC0001F910F91FF90EF90DF90CF90BF90AF9058
:101ED0009F9008958F929F92AF92BF92DF92EF9260
:101EE000FF920F931F93CF93DF93CDB7DEB7629727
:101EF0000FB6F894DEBF0FBECDBFD82E81E08D1592
:101F000008F055C0615044E080E00E948611082F1F
:101F10008F3F09F44CC0E82EFF24F701E158FA4F37
:101F20008081E82FFF27ED59FB4F108120E049E029
:101F30005CE0602F84E00E94E1088091E604882341
:101F4000E1F78091E604813009F411508091E604B4
:101F5000823009F41F5FBE016F5F7F4F812F0E94A7
:101F60007C0E20E0AE014F5F5F4F602F822F0E94FA
:101F70001D0984E180936100809161008823E1F76D
:101F80008091E604843021F08091E6048830C9F61F
:101F90008091E604883059F4EFE7F5E0EE0EFF1E7D
:101FA000F7018081E82FFF27ED59FB4F1083F1E007
:101FB000DF1609F06CC06BE0862E912C8C0E9D1EF6
:101FC000B401809197040E94470E1A8244E063E0B6
:101FD0008A810E948611082F8F3F09F4C6C0E82E1F
:101FE000FF245E010894A11CB11CF701EA0DFB1D42
:101FF000128520E04BE05CE0682F84E00E94E1085D
:102000008091E604813009F410E08091E60482308A
:1020100009F411E0105D1983105320E0AE014F5F09
:102020005F4F602F822F0E941D0984E18093610021
:10203000D0906100DD20E1F78091E604883021F046
:102040008091E6048430E1F68091E604883049F41A
:10205000EA0CFB1CF7011287C4010E94620E8093F8
:1020600097040E943607BE016F5F7F4F80919704EF
:102070000E947C0E6D2DCE0101960E94EA0888EC2C
:1020800080936100809161008823E1F76EC0DD20BC
:1020900009F06BC05BE0852E912C8C0E9D1EB40167
:1020A00080916B040E94470EDA8244E067E08D2D38
:1020B0000E948611082F8F3F09F457C0E82EFF2495
:1020C0005E010894A11CB11CF701EA0DFB1D1285ED
:1020D0002D2D4DE05CE0682F84E00E94E1088091A6
:1020E000E604813009F410E08091E604823009F4BE
:1020F00011E0105D1983105320E0AE014F5F5F4F78
:10210000602F822F0E941D0984E180936100D0908E
:102110006100DD20E1F78091E604883021F08091B4
:10212000E6048430E1F68091E604883049F4EA0C54
:10213000FB1CF7011287C4010E94620E80936B049E
:102140000E943607BE016F5F7F4F80916B040E9433
:102150007C0E6D2DCE0101960E94EA0888EC8093DA
:102160006100809161008823E1F762960FB6F894D0
:10217000DEBF0FBECDBFDF91CF911F910F91FF90BA
:10218000EF90DF90BF90AF909F908F9008951F9336
:10219000CF93DF93CDB7DEB72F970FB6F894DEBF9E
:1021A0000FBECDBF0E94360760E08FE09CE00E942A
:1021B000AA0860E080E29CE00E94AA0860E086E253
:1021C0009CE00E94AA0860E08CE29CE00E94AA08C1
:1021D00060E082E39CE00E94AA0860E088E39CE063
:1021E0000E94AA0840E065E081E00E94861112E0AA
:1021F0000E94020E813041F420E04EE35CE066E094
:10220000822F0E94E1085CC00E9436074AE050E03D
:10221000BE016F5F7F4F812F99270E94F01260E00F
:10222000CE0101960E94EA0882E3809361008091CA
:1022300061008823E1F70E943607812F0E94A10EDA
:10224000682F8091E6048823E1F38091E6048230D0
:1022500009F41F5F8091E604813009F411501F3F9B
:1022600011F41CE003C01D3008F010E08091E6047A
:10227000883019F4812F0E946A0F8091E60484301F
:1022800019F60E94360760E086E49CE00E94AA08E6
:1022900040E062E081E00E948611813061F460E0FC
:1022A00089E69CE00E94AA0885E00E942C0E60E06E
:1022B00080E79CE003C060E088E89CE00E94AA08F8
:1022C00084E680936100809161008823E1F72F9676
:1022D0000FB6F894DEBF0FBECDBFDF91CF911F9137
:1022E00008950F931F93062F142F20E04CE95CE014
:1022F000682F812F0E94E10820E04EE95CE0602F0A
:10230000812F0E94E1081F910F910895EF92FF9293
:102310000F931F93CF93F82EE62E042FC82F182F5C
:10232000682F0E9471118091E6048823E1F7809163
:10233000E6048823E1F38091E604823019F4CE1597
:1023400008F4CF5F8091E604813019F4FC1608F49C
:10235000C150402F6C2F812F0E9471111C2F809132
:10236000E604883021F08091E6048430E1F6809123
:10237000E604843009F4CFEF8091E6048823E1F786
:102380008C2F9927CF911F910F91FF90EF90089577
:102390000E94360760E080EA9CE00E94AA0860E0A4
:1023A00087EB9CE00E94AA0860E083EC9CE00E941E
:1023B000AA0860E08FEC9CE00E94AA084AE064E072
:1023C00082E00E94861199278330910561F0843064
:1023D00091051CF4029721F00895049739F00895AF
:1023E0000E94231208950E94C71008950E9483122C
:1023F0000895CF93C0E093E29093630491E69093A5
:10240000640498E69093650480936604C09367041F
:10241000C093680486E00E94BC0C0E94950C813039
:1024200009F4CAE0CF5F8091EA048053853010F050
:10243000CA3098F3CA3018F081E090E002C080E022
:1024400090E0CF9108950F931F93CF93DF93CDB773
:10245000DEB72A970FB6F894DEBF0FBECDBF0E943D
:10246000360760E089ED9CE00E94AA080091E6042E
:102470000023E1F7802F0E94F911813069F4602F69
:1024800081EE9CE00E94AA0888EC80936100809114
:1024900061008823E1F72CC01091EA0419830A83B4
:1024A000202FAE014F5F5F4F602F8AE00E941D0911
:1024B0001F5F202F43E654E0612F802F0E941D09EB
:1024C0008AE080936100809161008823E1F7809128
:1024D000E604813011F40E94F9118091E604823003
:1024E00011F40E94F9118091E604843009F0BECF06
:1024F0002A960FB6F894DEBF0FBECDBFDF91CF9105
:102500001F910F9108950E9436076091E60466239B
:10251000E1F78CEE9CE00E94AA088091E6048823F3
:10252000E1F38091E6048830C9F483E28093630488
:1025300081E68093640484E7809365048AE0809355
:102540006604809367048093680480936904109202
:102550006A0410926B0489E00E94BC0C8091E6042E
:102560008823E1F78091E6048823E1F383E28093F6
:10257000630481E68093640484E780936504109289
:102580006604109267041092680410926904109215
:102590006A0410926B0489E00E94BC0C0895FB0150
:1025A0009F01E8944230C4F04532B4F44A3029F433
:1025B00097FB1EF4909581959F4F642F77270E947B
:1025C0002213805D8A330CF0895D8193CB010097E3
:1025D000A1F716F45DE251931082C9010C94061321
:1025E000FB019F01423074F0453264F4642F772779
:1025F0000E942213805D8A330CF0895D8193CB01A8
:102600000097A1F71082C9010C940613DC01FC01AC
:1026100001900020E9F73297AE17BF0730F47C91A4
:102620006081708331976D93F7CF0895991B79E09E
:1026300004C0991F961708F0961B881F7A95C9F752
:1026400080950895AA1BBB1B51E107C0AA1FBB1FA1
:10265000A617B70710F0A61BB70B881F991F5A952E
:0C266000A9F780959095BC01CD0108956C
:00000001FF
/Transportables_Koptertool/tags/V-0.1/main.lss
0,0 → 1,5331
 
main.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000266c 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 0000266c 00002700 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000527 00800060 00800060 00002700 2**0
ALLOC
3 .noinit 00000000 00800587 00800587 00002700 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00002700 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00002700 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00002a6c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 000000c8 00000000 00000000 00002af0 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 00000902 00000000 00000000 00002bb8 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00001dfa 00000000 00000000 000034ba 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 0000098e 00000000 00000000 000052b4 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 00001982 00000000 00000000 00005c42 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000004dc 00000000 00000000 000075c4 2**0
CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 0000000c 0000266c 0000266c 00007aa0 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 0c 94 7e 06 jmp 0xcfc <__init>
4: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
8: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
10: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
14: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
18: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
1c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
20: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
24: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
28: 0c 94 b5 06 jmp 0xd6a <__vector_10>
2c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
30: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
34: 0c 94 f8 0b jmp 0x17f0 <__vector_13>
38: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
3c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
40: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
44: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
48: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
4c: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
50: 0c 94 99 06 jmp 0xd32 <__bad_interrupt>
 
00000054 <__ctors_end>:
54: 00 00 nop
56: 00 00 nop
58: 00 00 nop
5a: 3e 5b subi r19, 0xBE ; 190
5c: 4f 5b subi r20, 0xBF ; 191
5e: 3e 00 .word 0x003e ; ????
60: 3e 6b ori r19, 0xBE ; 190
62: 4f 6b ori r20, 0xBF ; 191
64: 3e 00 .word 0x003e ; ????
66: 1c 3e cpi r17, 0xEC ; 236
68: 7c 3e cpi r23, 0xEC ; 236
6a: 1c 00 .word 0x001c ; ????
6c: 18 3c cpi r17, 0xC8 ; 200
6e: 7e 3c cpi r23, 0xCE ; 206
70: 18 00 .word 0x0018 ; ????
72: 1c 57 subi r17, 0x7C ; 124
74: 7d 57 subi r23, 0x7D ; 125
76: 1c 00 .word 0x001c ; ????
78: 1c 5e subi r17, 0xEC ; 236
7a: 7f 5e subi r23, 0xEF ; 239
7c: 1c 00 .word 0x001c ; ????
7e: 00 18 sub r0, r0
80: 3c 18 sub r3, r12
82: 00 00 nop
84: ff e7 ldi r31, 0x7F ; 127
86: c3 e7 ldi r28, 0x73 ; 115
88: ff 00 .word 0x00ff ; ????
8a: 00 18 sub r0, r0
8c: 24 18 sub r2, r4
8e: 00 00 nop
90: ff e7 ldi r31, 0x7F ; 127
92: db e7 ldi r29, 0x7B ; 123
94: ff 00 .word 0x00ff ; ????
96: 30 48 sbci r19, 0x80 ; 128
98: 3a 06 cpc r3, r26
9a: 0e 00 .word 0x000e ; ????
9c: 26 29 or r18, r6
9e: 79 29 or r23, r9
a0: 26 00 .word 0x0026 ; ????
a2: 40 7f andi r20, 0xF0 ; 240
a4: 05 05 cpc r16, r5
a6: 07 00 .word 0x0007 ; ????
a8: 40 7f andi r20, 0xF0 ; 240
aa: 05 25 eor r16, r5
ac: 3f 00 .word 0x003f ; ????
ae: 5a 3c cpi r21, 0xCA ; 202
b0: e7 3c cpi r30, 0xC7 ; 199
b2: 5a 00 .word 0x005a ; ????
b4: 7f 3e cpi r23, 0xEF ; 239
b6: 1c 1c adc r1, r12
b8: 08 00 .word 0x0008 ; ????
ba: 08 1c adc r0, r8
bc: 1c 3e cpi r17, 0xEC ; 236
be: 7f 00 .word 0x007f ; ????
c0: 14 22 and r1, r20
c2: 7f 22 and r7, r31
c4: 14 00 .word 0x0014 ; ????
c6: 5f 5f subi r21, 0xFF ; 255
c8: 00 5f subi r16, 0xF0 ; 240
ca: 5f 00 .word 0x005f ; ????
cc: 06 09 sbc r16, r6
ce: 7f 01 movw r14, r30
d0: 7f 00 .word 0x007f ; ????
d2: 00 66 ori r16, 0x60 ; 96
d4: 89 95 .word 0x9589 ; ????
d6: 6a 00 .word 0x006a ; ????
d8: 60 60 ori r22, 0x00 ; 0
da: 60 60 ori r22, 0x00 ; 0
dc: 60 60 ori r22, 0x00 ; 0
de: 94 a2 std Z+36, r9 ; 0x24
e0: ff a2 std Y+39, r15 ; 0x27
e2: 94 00 .word 0x0094 ; ????
e4: 08 04 cpc r0, r8
e6: 7e 04 cpc r7, r14
e8: 08 00 .word 0x0008 ; ????
ea: 10 20 and r1, r0
ec: 7e 20 and r7, r14
ee: 10 00 .word 0x0010 ; ????
f0: 08 08 sbc r0, r8
f2: 2a 1c adc r2, r10
f4: 08 00 .word 0x0008 ; ????
f6: 08 1c adc r0, r8
f8: 2a 08 sbc r2, r10
fa: 08 00 .word 0x0008 ; ????
fc: 1e 10 cpse r1, r14
fe: 10 10 cpse r1, r0
100: 10 00 .word 0x0010 ; ????
102: 0c 1e adc r0, r28
104: 0c 1e adc r0, r28
106: 0c 00 .word 0x000c ; ????
108: 30 38 cpi r19, 0x80 ; 128
10a: 3e 38 cpi r19, 0x8E ; 142
10c: 30 00 .word 0x0030 ; ????
10e: 06 0e add r0, r22
110: 3e 0e add r3, r30
112: 06 00 .word 0x0006 ; ????
...
11c: 5f 00 .word 0x005f ; ????
11e: 00 00 nop
120: 00 07 cpc r16, r16
122: 00 07 cpc r16, r16
124: 00 00 nop
126: 14 7f andi r17, 0xF4 ; 244
128: 14 7f andi r17, 0xF4 ; 244
12a: 14 00 .word 0x0014 ; ????
12c: 24 2a or r2, r20
12e: 7f 2a or r7, r31
130: 12 00 .word 0x0012 ; ????
132: 23 13 cpse r18, r19
134: 08 64 ori r16, 0x48 ; 72
136: 62 00 .word 0x0062 ; ????
138: 36 49 sbci r19, 0x96 ; 150
13a: 56 20 and r5, r6
13c: 50 00 .word 0x0050 ; ????
13e: 00 08 sbc r0, r0
140: 07 03 mulsu r16, r23
142: 00 00 nop
144: 00 1c adc r0, r0
146: 22 41 sbci r18, 0x12 ; 18
148: 00 00 nop
14a: 00 41 sbci r16, 0x10 ; 16
14c: 22 1c adc r2, r2
14e: 00 00 nop
150: 2a 1c adc r2, r10
152: 7f 1c adc r7, r15
154: 2a 00 .word 0x002a ; ????
156: 08 08 sbc r0, r8
158: 3e 08 sbc r3, r14
15a: 08 00 .word 0x0008 ; ????
15c: 00 80 ld r0, Z
15e: 70 30 cpi r23, 0x00 ; 0
160: 00 00 nop
162: 08 08 sbc r0, r8
164: 08 08 sbc r0, r8
166: 08 00 .word 0x0008 ; ????
168: 00 00 nop
16a: 60 60 ori r22, 0x00 ; 0
16c: 00 00 nop
16e: 20 10 cpse r2, r0
170: 08 04 cpc r0, r8
172: 02 00 .word 0x0002 ; ????
174: 3e 51 subi r19, 0x1E ; 30
176: 49 45 sbci r20, 0x59 ; 89
178: 3e 00 .word 0x003e ; ????
17a: 00 42 sbci r16, 0x20 ; 32
17c: 7f 40 sbci r23, 0x0F ; 15
17e: 00 00 nop
180: 72 49 sbci r23, 0x92 ; 146
182: 49 49 sbci r20, 0x99 ; 153
184: 46 00 .word 0x0046 ; ????
186: 21 41 sbci r18, 0x11 ; 17
188: 49 4d sbci r20, 0xD9 ; 217
18a: 33 00 .word 0x0033 ; ????
18c: 18 14 cp r1, r8
18e: 12 7f andi r17, 0xF2 ; 242
190: 10 00 .word 0x0010 ; ????
192: 27 45 sbci r18, 0x57 ; 87
194: 45 45 sbci r20, 0x55 ; 85
196: 39 00 .word 0x0039 ; ????
198: 3c 4a sbci r19, 0xAC ; 172
19a: 49 49 sbci r20, 0x99 ; 153
19c: 31 00 .word 0x0031 ; ????
19e: 41 21 and r20, r1
1a0: 11 09 sbc r17, r1
1a2: 07 00 .word 0x0007 ; ????
1a4: 36 49 sbci r19, 0x96 ; 150
1a6: 49 49 sbci r20, 0x99 ; 153
1a8: 36 00 .word 0x0036 ; ????
1aa: 46 49 sbci r20, 0x96 ; 150
1ac: 49 29 or r20, r9
1ae: 1e 00 .word 0x001e ; ????
1b0: 00 00 nop
1b2: 14 00 .word 0x0014 ; ????
1b4: 00 00 nop
1b6: 00 40 sbci r16, 0x00 ; 0
1b8: 34 00 .word 0x0034 ; ????
1ba: 00 00 nop
1bc: 00 08 sbc r0, r0
1be: 14 22 and r1, r20
1c0: 41 00 .word 0x0041 ; ????
1c2: 14 14 cp r1, r4
1c4: 14 14 cp r1, r4
1c6: 14 00 .word 0x0014 ; ????
1c8: 00 41 sbci r16, 0x10 ; 16
1ca: 22 14 cp r2, r2
1cc: 08 00 .word 0x0008 ; ????
1ce: 02 01 movw r0, r4
1d0: 59 09 sbc r21, r9
1d2: 06 00 .word 0x0006 ; ????
1d4: 3e 41 sbci r19, 0x1E ; 30
1d6: 5d 59 subi r21, 0x9D ; 157
1d8: 4e 00 .word 0x004e ; ????
1da: 7c 12 cpse r7, r28
1dc: 11 12 cpse r1, r17
1de: 7c 00 .word 0x007c ; ????
1e0: 7f 49 sbci r23, 0x9F ; 159
1e2: 49 49 sbci r20, 0x99 ; 153
1e4: 36 00 .word 0x0036 ; ????
1e6: 3e 41 sbci r19, 0x1E ; 30
1e8: 41 41 sbci r20, 0x11 ; 17
1ea: 22 00 .word 0x0022 ; ????
1ec: 7f 41 sbci r23, 0x1F ; 31
1ee: 41 41 sbci r20, 0x11 ; 17
1f0: 3e 00 .word 0x003e ; ????
1f2: 7f 49 sbci r23, 0x9F ; 159
1f4: 49 49 sbci r20, 0x99 ; 153
1f6: 41 00 .word 0x0041 ; ????
1f8: 7f 09 sbc r23, r15
1fa: 09 09 sbc r16, r9
1fc: 01 00 .word 0x0001 ; ????
1fe: 3e 41 sbci r19, 0x1E ; 30
200: 41 51 subi r20, 0x11 ; 17
202: 73 00 .word 0x0073 ; ????
204: 7f 08 sbc r7, r15
206: 08 08 sbc r0, r8
208: 7f 00 .word 0x007f ; ????
20a: 00 41 sbci r16, 0x10 ; 16
20c: 7f 41 sbci r23, 0x1F ; 31
20e: 00 00 nop
210: 20 40 sbci r18, 0x00 ; 0
212: 41 3f cpi r20, 0xF1 ; 241
214: 01 00 .word 0x0001 ; ????
216: 7f 08 sbc r7, r15
218: 14 22 and r1, r20
21a: 41 00 .word 0x0041 ; ????
21c: 7f 40 sbci r23, 0x0F ; 15
21e: 40 40 sbci r20, 0x00 ; 0
220: 40 00 .word 0x0040 ; ????
222: 7f 02 muls r23, r31
224: 1c 02 muls r17, r28
226: 7f 00 .word 0x007f ; ????
228: 7f 04 cpc r7, r15
22a: 08 10 cpse r0, r8
22c: 7f 00 .word 0x007f ; ????
22e: 3e 41 sbci r19, 0x1E ; 30
230: 41 41 sbci r20, 0x11 ; 17
232: 3e 00 .word 0x003e ; ????
234: 7f 09 sbc r23, r15
236: 09 09 sbc r16, r9
238: 06 00 .word 0x0006 ; ????
23a: 3e 41 sbci r19, 0x1E ; 30
23c: 51 21 and r21, r1
23e: 5e 00 .word 0x005e ; ????
240: 7f 09 sbc r23, r15
242: 19 29 or r17, r9
244: 46 00 .word 0x0046 ; ????
246: 26 49 sbci r18, 0x96 ; 150
248: 49 49 sbci r20, 0x99 ; 153
24a: 32 00 .word 0x0032 ; ????
24c: 03 01 movw r0, r6
24e: 7f 01 movw r14, r30
250: 03 00 .word 0x0003 ; ????
252: 3f 40 sbci r19, 0x0F ; 15
254: 40 40 sbci r20, 0x00 ; 0
256: 3f 00 .word 0x003f ; ????
258: 1f 20 and r1, r15
25a: 40 20 and r4, r0
25c: 1f 00 .word 0x001f ; ????
25e: 3f 40 sbci r19, 0x0F ; 15
260: 38 40 sbci r19, 0x08 ; 8
262: 3f 00 .word 0x003f ; ????
264: 63 14 cp r6, r3
266: 08 14 cp r0, r8
268: 63 00 .word 0x0063 ; ????
26a: 03 04 cpc r0, r3
26c: 78 04 cpc r7, r8
26e: 03 00 .word 0x0003 ; ????
270: 61 59 subi r22, 0x91 ; 145
272: 49 4d sbci r20, 0xD9 ; 217
274: 43 00 .word 0x0043 ; ????
276: 00 7f andi r16, 0xF0 ; 240
278: 41 41 sbci r20, 0x11 ; 17
27a: 41 00 .word 0x0041 ; ????
27c: 02 04 cpc r0, r2
27e: 08 10 cpse r0, r8
280: 20 00 .word 0x0020 ; ????
282: 00 41 sbci r16, 0x10 ; 16
284: 41 41 sbci r20, 0x11 ; 17
286: 7f 00 .word 0x007f ; ????
288: 04 02 muls r16, r20
28a: 01 02 muls r16, r17
28c: 04 00 .word 0x0004 ; ????
28e: 40 40 sbci r20, 0x00 ; 0
290: 40 40 sbci r20, 0x00 ; 0
292: 40 00 .word 0x0040 ; ????
294: 00 03 mulsu r16, r16
296: 07 08 sbc r0, r7
298: 00 00 nop
29a: 20 54 subi r18, 0x40 ; 64
29c: 54 78 andi r21, 0x84 ; 132
29e: 40 00 .word 0x0040 ; ????
2a0: 7f 28 or r7, r15
2a2: 44 44 sbci r20, 0x44 ; 68
2a4: 38 00 .word 0x0038 ; ????
2a6: 38 44 sbci r19, 0x48 ; 72
2a8: 44 44 sbci r20, 0x44 ; 68
2aa: 28 00 .word 0x0028 ; ????
2ac: 38 44 sbci r19, 0x48 ; 72
2ae: 44 28 or r4, r4
2b0: 7f 00 .word 0x007f ; ????
2b2: 38 54 subi r19, 0x48 ; 72
2b4: 54 54 subi r21, 0x44 ; 68
2b6: 18 00 .word 0x0018 ; ????
2b8: 00 08 sbc r0, r0
2ba: 7e 09 sbc r23, r14
2bc: 02 00 .word 0x0002 ; ????
2be: 18 a4 ldd r1, Y+40 ; 0x28
2c0: a4 9c mul r10, r4
2c2: 78 00 .word 0x0078 ; ????
2c4: 7f 08 sbc r7, r15
2c6: 04 04 cpc r0, r4
2c8: 78 00 .word 0x0078 ; ????
2ca: 00 44 sbci r16, 0x40 ; 64
2cc: 7d 40 sbci r23, 0x0D ; 13
2ce: 00 00 nop
2d0: 20 40 sbci r18, 0x00 ; 0
2d2: 40 3d cpi r20, 0xD0 ; 208
2d4: 00 00 nop
2d6: 7f 10 cpse r7, r15
2d8: 28 44 sbci r18, 0x48 ; 72
2da: 00 00 nop
2dc: 00 41 sbci r16, 0x10 ; 16
2de: 7f 40 sbci r23, 0x0F ; 15
2e0: 00 00 nop
2e2: 7c 04 cpc r7, r12
2e4: 78 04 cpc r7, r8
2e6: 78 00 .word 0x0078 ; ????
2e8: 7c 08 sbc r7, r12
2ea: 04 04 cpc r0, r4
2ec: 78 00 .word 0x0078 ; ????
2ee: 38 44 sbci r19, 0x48 ; 72
2f0: 44 44 sbci r20, 0x44 ; 68
2f2: 38 00 .word 0x0038 ; ????
2f4: fc 18 sub r15, r12
2f6: 24 24 eor r2, r4
2f8: 18 00 .word 0x0018 ; ????
2fa: 18 24 eor r1, r8
2fc: 24 18 sub r2, r4
2fe: fc 00 .word 0x00fc ; ????
300: 7c 08 sbc r7, r12
302: 04 04 cpc r0, r4
304: 08 00 .word 0x0008 ; ????
306: 48 54 subi r20, 0x48 ; 72
308: 54 54 subi r21, 0x44 ; 68
30a: 24 00 .word 0x0024 ; ????
30c: 04 04 cpc r0, r4
30e: 3f 44 sbci r19, 0x4F ; 79
310: 24 00 .word 0x0024 ; ????
312: 3c 40 sbci r19, 0x0C ; 12
314: 40 20 and r4, r0
316: 7c 00 .word 0x007c ; ????
318: 1c 20 and r1, r12
31a: 40 20 and r4, r0
31c: 1c 00 .word 0x001c ; ????
31e: 3c 40 sbci r19, 0x0C ; 12
320: 30 40 sbci r19, 0x00 ; 0
322: 3c 00 .word 0x003c ; ????
324: 44 28 or r4, r4
326: 10 28 or r1, r0
328: 44 00 .word 0x0044 ; ????
32a: 4c 90 ld r4, X
32c: 90 90 7c 00 lds r9, 0x007C
330: 44 64 ori r20, 0x44 ; 68
332: 54 4c sbci r21, 0xC4 ; 196
334: 44 00 .word 0x0044 ; ????
336: 00 08 sbc r0, r0
338: 36 41 sbci r19, 0x16 ; 22
33a: 00 00 nop
33c: 00 00 nop
33e: 77 00 .word 0x0077 ; ????
340: 00 00 nop
342: 00 41 sbci r16, 0x10 ; 16
344: 36 08 sbc r3, r6
346: 00 00 nop
348: 02 01 movw r0, r4
34a: 02 04 cpc r0, r2
34c: 02 00 .word 0x0002 ; ????
34e: 3c 26 eor r3, r28
350: 23 26 eor r2, r19
352: 3c 00 .word 0x003c ; ????
354: 1e a1 ldd r17, Y+38 ; 0x26
356: a1 61 ori r26, 0x11 ; 17
358: 12 00 .word 0x0012 ; ????
35a: 3a 40 sbci r19, 0x0A ; 10
35c: 40 20 and r4, r0
35e: 7a 00 .word 0x007a ; ????
360: 38 54 subi r19, 0x48 ; 72
362: 54 55 subi r21, 0x54 ; 84
364: 59 00 .word 0x0059 ; ????
366: 21 55 subi r18, 0x51 ; 81
368: 55 79 andi r21, 0x95 ; 149
36a: 41 00 .word 0x0041 ; ????
36c: 21 54 subi r18, 0x41 ; 65
36e: 54 78 andi r21, 0x84 ; 132
370: 41 00 .word 0x0041 ; ????
372: 21 55 subi r18, 0x51 ; 81
374: 54 78 andi r21, 0x84 ; 132
376: 40 00 .word 0x0040 ; ????
378: 20 54 subi r18, 0x40 ; 64
37a: 55 79 andi r21, 0x95 ; 149
37c: 40 00 .word 0x0040 ; ????
37e: 0c 1e adc r0, r28
380: 52 72 andi r21, 0x22 ; 34
382: 12 00 .word 0x0012 ; ????
384: 39 55 subi r19, 0x59 ; 89
386: 55 55 subi r21, 0x55 ; 85
388: 59 00 .word 0x0059 ; ????
38a: 39 54 subi r19, 0x49 ; 73
38c: 54 54 subi r21, 0x44 ; 68
38e: 59 00 .word 0x0059 ; ????
390: 39 55 subi r19, 0x59 ; 89
392: 54 54 subi r21, 0x44 ; 68
394: 58 00 .word 0x0058 ; ????
396: 00 00 nop
398: 45 7c andi r20, 0xC5 ; 197
39a: 41 00 .word 0x0041 ; ????
39c: 00 02 muls r16, r16
39e: 45 7d andi r20, 0xD5 ; 213
3a0: 42 00 .word 0x0042 ; ????
3a2: 00 01 movw r0, r0
3a4: 45 7c andi r20, 0xC5 ; 197
3a6: 40 00 .word 0x0040 ; ????
3a8: 79 14 cp r7, r9
3aa: 12 14 cp r1, r2
3ac: 79 00 .word 0x0079 ; ????
3ae: f0 28 or r15, r0
3b0: 25 28 or r2, r5
3b2: f0 00 .word 0x00f0 ; ????
3b4: 7c 54 subi r23, 0x4C ; 76
3b6: 55 45 sbci r21, 0x55 ; 85
3b8: 00 00 nop
3ba: 20 54 subi r18, 0x40 ; 64
3bc: 54 7c andi r21, 0xC4 ; 196
3be: 54 44 sbci r21, 0x44 ; 68
3c0: 7c 0a sbc r7, r28
3c2: 09 7f andi r16, 0xF9 ; 249
3c4: 49 41 sbci r20, 0x19 ; 25
3c6: 32 49 sbci r19, 0x92 ; 146
3c8: 49 49 sbci r20, 0x99 ; 153
3ca: 32 00 .word 0x0032 ; ????
3cc: 32 48 sbci r19, 0x82 ; 130
3ce: 48 48 sbci r20, 0x88 ; 136
3d0: 32 00 .word 0x0032 ; ????
3d2: 32 4a sbci r19, 0xA2 ; 162
3d4: 48 48 sbci r20, 0x88 ; 136
3d6: 30 00 .word 0x0030 ; ????
3d8: 3a 41 sbci r19, 0x1A ; 26
3da: 41 21 and r20, r1
3dc: 7a 00 .word 0x007a ; ????
3de: 3a 42 sbci r19, 0x2A ; 42
3e0: 40 20 and r4, r0
3e2: 78 00 .word 0x0078 ; ????
3e4: 00 9d mul r16, r0
3e6: a0 a0 ldd r10, Z+32 ; 0x20
3e8: 7d 00 .word 0x007d ; ????
3ea: 39 44 sbci r19, 0x49 ; 73
3ec: 44 44 sbci r20, 0x44 ; 68
3ee: 39 00 .word 0x0039 ; ????
3f0: 3d 40 sbci r19, 0x0D ; 13
3f2: 40 40 sbci r20, 0x00 ; 0
3f4: 3d 00 .word 0x003d ; ????
3f6: 3c 24 eor r3, r12
3f8: ff 24 eor r15, r15
3fa: 24 00 .word 0x0024 ; ????
3fc: 48 7e andi r20, 0xE8 ; 232
3fe: 49 43 sbci r20, 0x39 ; 57
400: 66 00 .word 0x0066 ; ????
402: 2b 2f mov r18, r27
404: fc 2f mov r31, r28
406: 2b 00 .word 0x002b ; ????
408: ff 09 sbc r31, r15
40a: 29 f6 brne .-118 ; 0x396 <__ctors_end+0x342>
40c: 20 00 .word 0x0020 ; ????
40e: c0 88 ldd r12, Z+16 ; 0x10
410: 7e 09 sbc r23, r14
412: 03 00 .word 0x0003 ; ????
414: 20 54 subi r18, 0x40 ; 64
416: 54 79 andi r21, 0x94 ; 148
418: 41 00 .word 0x0041 ; ????
41a: 00 00 nop
41c: 44 7d andi r20, 0xD4 ; 212
41e: 41 00 .word 0x0041 ; ????
420: 30 48 sbci r19, 0x80 ; 128
422: 48 4a sbci r20, 0xA8 ; 168
424: 32 00 .word 0x0032 ; ????
426: 38 40 sbci r19, 0x08 ; 8
428: 40 22 and r4, r16
42a: 7a 00 .word 0x007a ; ????
42c: 00 7a andi r16, 0xA0 ; 160
42e: 0a 0a sbc r0, r26
430: 72 00 .word 0x0072 ; ????
432: 7d 0d add r23, r13
434: 19 31 cpi r17, 0x19 ; 25
436: 7d 00 .word 0x007d ; ????
438: 26 29 or r18, r6
43a: 29 2f mov r18, r25
43c: 28 00 .word 0x0028 ; ????
43e: 26 29 or r18, r6
440: 29 29 or r18, r9
442: 26 00 .word 0x0026 ; ????
444: 30 48 sbci r19, 0x80 ; 128
446: 4d 40 sbci r20, 0x0D ; 13
448: 20 00 .word 0x0020 ; ????
44a: 38 08 sbc r3, r8
44c: 08 08 sbc r0, r8
44e: 08 00 .word 0x0008 ; ????
450: 08 08 sbc r0, r8
452: 08 08 sbc r0, r8
454: 38 00 .word 0x0038 ; ????
456: 2f 10 cpse r2, r15
458: c8 ac ldd r12, Y+56 ; 0x38
45a: ba 00 .word 0x00ba ; ????
45c: 2f 10 cpse r2, r15
45e: 28 34 cpi r18, 0x48 ; 72
460: fa 00 .word 0x00fa ; ????
462: 00 00 nop
464: 7b 00 .word 0x007b ; ????
466: 00 00 nop
468: 08 14 cp r0, r8
46a: 2a 14 cp r2, r10
46c: 22 00 .word 0x0022 ; ????
46e: 22 14 cp r2, r2
470: 2a 14 cp r2, r10
472: 08 00 .word 0x0008 ; ????
474: aa 00 .word 0x00aa ; ????
476: 55 00 .word 0x0055 ; ????
478: aa 00 .word 0x00aa ; ????
47a: aa 55 subi r26, 0x5A ; 90
47c: aa 55 subi r26, 0x5A ; 90
47e: aa 55 subi r26, 0x5A ; 90
480: 55 aa std Z+53, r5 ; 0x35
482: 55 aa std Z+53, r5 ; 0x35
484: 55 aa std Z+53, r5 ; 0x35
486: 00 00 nop
488: 00 ff sbrs r16, 0
48a: 00 00 nop
48c: 10 10 cpse r1, r0
48e: 10 ff sbrs r17, 0
490: 00 00 nop
492: 14 14 cp r1, r4
494: 14 ff sbrs r17, 4
496: 00 00 nop
498: 10 10 cpse r1, r0
49a: ff 00 .word 0x00ff ; ????
49c: ff 00 .word 0x00ff ; ????
49e: 10 10 cpse r1, r0
4a0: f0 10 cpse r15, r0
4a2: f0 00 .word 0x00f0 ; ????
4a4: 14 14 cp r1, r4
4a6: 14 fc sbrc r1, 4
4a8: 00 00 nop
4aa: 14 14 cp r1, r4
4ac: f7 00 .word 0x00f7 ; ????
4ae: ff 00 .word 0x00ff ; ????
4b0: 00 00 nop
4b2: ff 00 .word 0x00ff ; ????
4b4: ff 00 .word 0x00ff ; ????
4b6: 14 14 cp r1, r4
4b8: f4 04 cpc r15, r4
4ba: fc 00 .word 0x00fc ; ????
4bc: 14 14 cp r1, r4
4be: 17 10 cpse r1, r7
4c0: 1f 00 .word 0x001f ; ????
4c2: 10 10 cpse r1, r0
4c4: 1f 10 cpse r1, r15
4c6: 1f 00 .word 0x001f ; ????
4c8: 14 14 cp r1, r4
4ca: 14 1f adc r17, r20
4cc: 00 00 nop
4ce: 10 10 cpse r1, r0
4d0: 10 f0 brcs .+4 ; 0x4d6 <__ctors_end+0x482>
4d2: 00 00 nop
4d4: 00 00 nop
4d6: 00 1f adc r16, r16
4d8: 10 10 cpse r1, r0
4da: 10 10 cpse r1, r0
4dc: 10 1f adc r17, r16
4de: 10 10 cpse r1, r0
4e0: 10 10 cpse r1, r0
4e2: 10 f0 brcs .+4 ; 0x4e8 <__ctors_end+0x494>
4e4: 10 10 cpse r1, r0
4e6: 00 00 nop
4e8: 00 ff sbrs r16, 0
4ea: 10 10 cpse r1, r0
4ec: 10 10 cpse r1, r0
4ee: 10 10 cpse r1, r0
4f0: 10 10 cpse r1, r0
4f2: 10 10 cpse r1, r0
4f4: 10 ff sbrs r17, 0
4f6: 10 10 cpse r1, r0
4f8: 00 00 nop
4fa: 00 ff sbrs r16, 0
4fc: 14 14 cp r1, r4
4fe: 00 00 nop
500: ff 00 .word 0x00ff ; ????
502: ff 10 cpse r15, r15
504: 00 00 nop
506: 1f 10 cpse r1, r15
508: 17 14 cp r1, r7
50a: 00 00 nop
50c: fc 04 cpc r15, r12
50e: f4 14 cp r15, r4
510: 14 14 cp r1, r4
512: 17 10 cpse r1, r7
514: 17 14 cp r1, r7
516: 14 14 cp r1, r4
518: f4 04 cpc r15, r4
51a: f4 14 cp r15, r4
51c: 00 00 nop
51e: ff 00 .word 0x00ff ; ????
520: f7 14 cp r15, r7
522: 14 14 cp r1, r4
524: 14 14 cp r1, r4
526: 14 14 cp r1, r4
528: 14 14 cp r1, r4
52a: f7 00 .word 0x00f7 ; ????
52c: f7 14 cp r15, r7
52e: 14 14 cp r1, r4
530: 14 17 cp r17, r20
532: 14 14 cp r1, r4
534: 10 10 cpse r1, r0
536: 1f 10 cpse r1, r15
538: 1f 10 cpse r1, r15
53a: 14 14 cp r1, r4
53c: 14 f4 brge .+4 ; 0x542 <__ctors_end+0x4ee>
53e: 14 14 cp r1, r4
540: 10 10 cpse r1, r0
542: f0 10 cpse r15, r0
544: f0 10 cpse r15, r0
546: 00 00 nop
548: 1f 10 cpse r1, r15
54a: 1f 10 cpse r1, r15
54c: 00 00 nop
54e: 00 1f adc r16, r16
550: 14 14 cp r1, r4
552: 00 00 nop
554: 00 fc sbrc r0, 0
556: 14 14 cp r1, r4
558: 00 00 nop
55a: f0 10 cpse r15, r0
55c: f0 10 cpse r15, r0
55e: 10 10 cpse r1, r0
560: ff 10 cpse r15, r15
562: ff 10 cpse r15, r15
564: 14 14 cp r1, r4
566: 14 ff sbrs r17, 4
568: 14 14 cp r1, r4
56a: 10 10 cpse r1, r0
56c: 10 1f adc r17, r16
56e: 00 00 nop
570: 00 00 nop
572: 00 f0 brcs .+0 ; 0x574 <__ctors_end+0x520>
574: 10 10 cpse r1, r0
576: ff ff .word 0xffff ; ????
578: ff ff .word 0xffff ; ????
57a: ff ff .word 0xffff ; ????
57c: f0 f0 brcs .+60 ; 0x5ba <__ctors_end+0x566>
57e: f0 f0 brcs .+60 ; 0x5bc <__ctors_end+0x568>
580: f0 f0 brcs .+60 ; 0x5be <__ctors_end+0x56a>
582: ff ff .word 0xffff ; ????
584: ff 00 .word 0x00ff ; ????
586: 00 00 nop
588: 00 00 nop
58a: 00 ff sbrs r16, 0
58c: ff ff .word 0xffff ; ????
58e: 0f 0f add r16, r31
590: 0f 0f add r16, r31
592: 0f 0f add r16, r31
594: 38 44 sbci r19, 0x48 ; 72
596: 44 38 cpi r20, 0x84 ; 132
598: 44 00 .word 0x0044 ; ????
59a: 7c 2a or r7, r28
59c: 2a 3e cpi r18, 0xEA ; 234
59e: 14 00 .word 0x0014 ; ????
5a0: 7e 02 muls r23, r30
5a2: 02 06 cpc r0, r18
5a4: 06 00 .word 0x0006 ; ????
5a6: 02 7e andi r16, 0xE2 ; 226
5a8: 02 7e andi r16, 0xE2 ; 226
5aa: 02 00 .word 0x0002 ; ????
5ac: 63 55 subi r22, 0x53 ; 83
5ae: 49 41 sbci r20, 0x19 ; 25
5b0: 63 00 .word 0x0063 ; ????
5b2: 38 44 sbci r19, 0x48 ; 72
5b4: 44 3c cpi r20, 0xC4 ; 196
5b6: 04 00 .word 0x0004 ; ????
5b8: 40 7e andi r20, 0xE0 ; 224
5ba: 20 1e adc r2, r16
5bc: 20 00 .word 0x0020 ; ????
5be: 06 02 muls r16, r22
5c0: 7e 02 muls r23, r30
5c2: 02 00 .word 0x0002 ; ????
5c4: 99 a5 ldd r25, Y+41 ; 0x29
5c6: e7 a5 ldd r30, Z+47 ; 0x2f
5c8: 99 00 .word 0x0099 ; ????
5ca: 1c 2a or r1, r28
5cc: 49 2a or r4, r25
5ce: 1c 00 .word 0x001c ; ????
5d0: 4c 72 andi r20, 0x2C ; 44
5d2: 01 72 andi r16, 0x21 ; 33
5d4: 4c 00 .word 0x004c ; ????
5d6: 30 4a sbci r19, 0xA0 ; 160
5d8: 4d 4d sbci r20, 0xDD ; 221
5da: 30 00 .word 0x0030 ; ????
5dc: 30 48 sbci r19, 0x80 ; 128
5de: 78 48 sbci r23, 0x88 ; 136
5e0: 30 00 .word 0x0030 ; ????
5e2: bc 62 ori r27, 0x2C ; 44
5e4: 5a 46 sbci r21, 0x6A ; 106
5e6: 3d 00 .word 0x003d ; ????
5e8: 3e 49 sbci r19, 0x9E ; 158
5ea: 49 49 sbci r20, 0x99 ; 153
5ec: 00 00 nop
5ee: 7e 01 movw r14, r28
5f0: 01 01 movw r0, r2
5f2: 7e 00 .word 0x007e ; ????
5f4: 2a 2a or r2, r26
5f6: 2a 2a or r2, r26
5f8: 2a 00 .word 0x002a ; ????
5fa: 44 44 sbci r20, 0x44 ; 68
5fc: 5f 44 sbci r21, 0x4F ; 79
5fe: 44 00 .word 0x0044 ; ????
600: 40 51 subi r20, 0x10 ; 16
602: 4a 44 sbci r20, 0x4A ; 74
604: 40 00 .word 0x0040 ; ????
606: 40 44 sbci r20, 0x40 ; 64
608: 4a 51 subi r20, 0x1A ; 26
60a: 40 00 .word 0x0040 ; ????
60c: 00 00 nop
60e: ff 01 movw r30, r30
610: 03 00 .word 0x0003 ; ????
612: e0 80 ld r14, Z
614: ff 00 .word 0x00ff ; ????
616: 00 00 nop
618: 08 08 sbc r0, r8
61a: 6b 6b ori r22, 0xBB ; 187
61c: 08 08 sbc r0, r8
61e: 36 12 cpse r3, r22
620: 36 24 eor r3, r6
622: 36 00 .word 0x0036 ; ????
624: 06 0f add r16, r22
626: 09 0f add r16, r25
628: 06 00 .word 0x0006 ; ????
62a: 00 00 nop
62c: 18 18 sub r1, r8
62e: 00 00 nop
630: 00 00 nop
632: 10 10 cpse r1, r0
634: 00 00 nop
636: 30 40 sbci r19, 0x00 ; 0
638: ff 01 movw r30, r30
63a: 01 00 .word 0x0001 ; ????
63c: 00 1f adc r16, r16
63e: 01 01 movw r0, r2
640: 1e 00 .word 0x001e ; ????
642: 00 19 sub r16, r0
644: 1d 17 cp r17, r29
646: 12 00 .word 0x0012 ; ????
648: 00 3c cpi r16, 0xC0 ; 192
64a: 3c 3c cpi r19, 0xCC ; 204
64c: 3c 00 .word 0x003c ; ????
64e: 00 00 nop
650: 00 00 nop
...
 
00000654 <__c.0>:
654: 20 20 20 20 20 20 00 .
 
0000065b <parameter>:
65b: 4e 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 00 Nick .
66b: 52 6f 6c 6c 20 20 20 20 20 20 20 20 20 20 20 00 Roll .
67b: 47 61 73 20 20 20 20 20 20 20 20 20 20 20 20 00 Gas .
68b: 47 69 65 72 09 09 09 00 00 00 00 00 00 00 00 00 Gier............
69b: 50 6f 74 69 31 09 09 09 00 00 00 00 00 00 00 00 Poti1...........
6ab: 50 6f 74 69 32 09 09 09 00 00 00 00 00 00 00 00 Poti2...........
6bb: 50 6f 74 69 33 09 09 09 00 00 00 00 00 00 00 00 Poti3...........
6cb: 50 6f 74 69 34 09 09 09 00 00 00 00 00 00 00 00 Poti4...........
6db: 43 6f 6e 66 69 67 09 09 09 00 00 00 00 00 00 00 Config..........
6eb: 48 6f 65 68 65 5f 4d 69 6e 47 61 73 20 20 20 00 Hoehe_MinGas .
6fb: 4c 75 66 74 64 72 75 63 6b 5f 44 20 20 20 20 00 Luftdruck_D .
70b: 4d 61 78 48 6f 65 68 65 20 20 20 20 20 20 20 00 MaxHoehe .
71b: 48 6f 65 68 65 5f 50 20 20 20 20 20 20 20 20 00 Hoehe_P .
72b: 48 6f 65 68 65 5f 56 65 72 73 74 61 65 72 6b 00 Hoehe_Verstaerk.
73b: 48 6f 65 68 65 5f 41 43 43 5f 57 69 72 6b 2e 00 Hoehe_ACC_Wirk..
74b: 53 74 69 63 6b 5f 50 20 20 20 20 20 20 20 20 00 Stick_P .
75b: 53 74 69 63 6b 5f 44 20 20 20 20 20 20 20 20 00 Stick_D .
76b: 47 69 65 72 5f 50 20 20 20 20 20 20 20 20 20 00 Gier_P .
77b: 47 61 73 5f 4d 69 6e 20 20 20 20 20 20 20 20 00 Gas_Min .
78b: 47 61 73 5f 4d 61 78 20 20 20 20 20 20 20 20 00 Gas_Max .
79b: 47 79 72 6f 41 63 63 46 61 6b 74 6f 72 09 00 00 GyroAccFaktor...
7ab: 4b 6f 6d 70 61 73 73 57 69 72 6b 75 6e 67 20 00 KompassWirkung .
7bb: 47 79 72 6f 5f 50 20 09 09 00 00 00 00 00 00 00 Gyro_P .........
7cb: 47 79 72 6f 5f 49 09 09 09 00 00 00 00 00 00 00 Gyro_I..........
7db: 55 6e 74 65 72 73 70 61 6e 6e 75 6e 67 20 20 00 Unterspannung .
7eb: 4e 6f 74 47 61 73 09 09 09 00 00 00 00 00 00 00 NotGas..........
7fb: 4e 6f 74 47 61 73 5a 65 69 74 20 20 20 20 20 00 NotGasZeit .
80b: 55 66 6f 41 75 73 72 69 63 68 74 75 6e 67 20 00 UfoAusrichtung .
81b: 49 5f 46 61 6b 74 6f 72 20 20 20 20 20 20 20 00 I_Faktor .
82b: 55 73 65 72 50 61 72 61 6d 31 09 09 00 00 00 00 UserParam1......
83b: 55 73 65 72 50 61 72 61 6d 32 09 09 00 00 00 00 UserParam2......
84b: 55 73 65 72 50 61 72 61 6d 33 09 09 00 00 00 00 UserParam3......
85b: 55 73 65 72 50 61 72 61 6d 34 09 09 00 00 00 00 UserParam4......
86b: 53 65 72 76 6f 4e 69 63 6b 43 74 72 6c 09 00 00 ServoNickCtrl...
87b: 53 65 72 76 6f 4e 69 63 6b 43 6f 6d 70 09 00 00 ServoNickComp...
88b: 53 65 72 76 6f 4e 69 63 6b 4d 69 6e 09 00 00 00 ServoNickMin....
89b: 53 65 72 76 6f 4e 69 63 6b 4d 61 78 09 00 00 00 ServoNickMax....
8ab: 53 65 72 76 6f 4e 69 63 6b 52 65 66 72 73 68 00 ServoNickRefrsh.
8bb: 4c 6f 6f 70 47 61 73 4c 69 6d 69 74 09 00 00 00 LoopGasLimit....
8cb: 4c 6f 6f 70 54 68 72 65 73 68 6f 6c 64 09 00 00 LoopThreshold...
8db: 4c 6f 6f 70 48 79 73 74 65 72 65 73 65 09 00 00 LoopHysterese...
8eb: 41 63 68 73 4b 6f 70 70 6c 75 6e 67 09 00 00 00 AchsKopplung....
8fb: 41 63 68 73 47 65 67 65 6e 4b 6f 70 70 6c 2e 00 AchsGegenKoppl..
90b: 57 69 6e 6b 6c 55 6d 73 63 68 6c 4e 69 63 6b 00 WinklUmschlNick.
91b: 57 69 6e 6b 6c 55 6d 73 63 68 6c 52 6f 6c 6c 00 WinklUmschlRoll.
92b: 47 79 72 6f 41 63 63 41 62 67 6c 65 69 63 68 00 GyroAccAbgleich.
93b: 44 72 69 66 74 6b 6f 6d 70 09 09 00 00 00 00 00 Driftkomp.......
94b: 44 79 6e 61 6d 69 63 53 74 61 62 69 6c 69 74 00 DynamicStabilit.
95b: 55 73 65 72 50 61 72 61 6d 35 09 09 00 00 00 00 UserParam5......
96b: 55 73 65 72 50 61 72 61 6d 36 09 09 00 00 00 00 UserParam6......
97b: 55 73 65 72 50 61 72 61 6d 37 09 09 00 00 00 00 UserParam7......
98b: 55 73 65 72 50 61 72 61 6d 38 09 09 00 00 00 00 UserParam8......
99b: 4c 6f 6f 70 43 6f 6e 66 69 67 09 09 00 00 00 00 LoopConfig......
9ab: 53 65 72 76 6f 4e 69 63 6b 43 6f 6d 70 49 6e 00 ServoNickCompIn.
 
000009bb <bin_parameter>:
9bb: 4c 6f 6f 70 20 75 70 20 20 20 20 20 20 20 20 00 Loop up .
9cb: 4c 6f 6f 70 20 64 6f 77 6e 09 20 20 20 20 00 00 Loop down. ..
9db: 4c 6f 6f 70 20 6c 65 66 74 20 20 20 20 20 20 00 Loop left .
9eb: 4c 6f 6f 70 20 72 69 67 68 74 20 20 20 20 20 00 Loop right .
9fb: 48 f6 68 65 6e 72 65 67 6c 65 72 20 20 20 20 00 H.henregler .
a0b: 48 f6 68 65 6e 73 63 68 61 6c 74 65 72 20 20 00 H.henschalter .
a1b: 48 65 61 64 68 6f 6c 64 09 09 00 00 00 00 00 00 Headhold........
a2b: 4b 6f 6d 70 61 73 73 09 09 00 00 00 00 00 00 00 Kompass.........
a3b: 4b 6f 6d 70 61 73 73 46 69 78 09 09 00 00 00 00 KompassFix......
a4b: 47 50 53 09 09 09 00 00 00 00 00 00 00 00 00 00 GPS.............
a5b: 41 63 68 73 65 6e 6b 6f 70 70 6c 75 6e 67 20 00 Achsenkopplung .
a6b: 44 72 65 68 72 61 74 65 09 09 00 00 00 00 00 00 Drehrate........
 
00000a7b <p_limits>:
a7b: 01 08 02 01 08 02 01 08 02 01 08 02 01 08 02 01 ................
a8b: 08 02 01 08 02 01 08 02 00 00 00 00 ff 04 00 ff ................
a9b: 04 00 ff 04 00 ff 04 00 32 04 00 ff 04 00 06 03 ........2.......
aab: 00 40 03 00 14 03 00 20 08 21 fa 08 00 32 08 00 .@..... .!...2..
abb: ff 08 00 00 05 00 00 05 00 fa 08 00 fa 08 00 fa ................
acb: 08 00 01 00 00 ff 05 00 ff 09 00 ff 09 00 ff 09 ................
adb: 00 ff 09 00 ff 07 00 fa 07 00 fa 07 00 fa 07 00 ................
aeb: 19 07 00 ff 06 00 fa 06 00 fa 06 00 ff 0a 00 ff ................
afb: 0a 00 fa 06 00 fa 06 00 fa 05 00 fa 05 00 ff 05 ................
b0b: 00 ff 09 00 ff 09 00 ff 09 00 ff 09 00 00 01 00 ................
b1b: 01 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
 
00000b42 <p_menu_number>:
b42: 02 02 02 02 02 02 02 02 00 04 04 04 04 04 04 03 ................
b52: 03 03 08 08 08 08 05 05 08 08 08 00 05 09 09 09 ................
b62: 09 07 07 07 07 07 07 06 06 06 0a 0a 06 06 05 05 ................
b72: 05 09 09 09 09 00 07 0b 0b 0b 0b 0c 0c 0c 0c 0c ................
b82: 0c 0c 0c ...
 
00000b85 <p_menus>:
b85: 43 6f 6e 66 69 67 20 20 20 20 00 43 68 61 6e 6e Config .Chann
b95: 65 6c 73 20 20 00 53 74 69 63 6b 20 20 20 20 20 els .Stick
ba5: 00 48 6f 65 68 65 20 20 20 20 20 00 47 79 72 6f .Hoehe .Gyro
bb5: 20 20 20 20 20 20 00 4c 6f 6f 70 69 6e 67 20 20 .Looping
bc5: 20 00 43 61 6d 65 72 61 20 20 20 20 00 53 6f 6e .Camera .Son
bd5: 73 74 69 67 65 73 20 00 55 73 65 72 20 20 20 20 stiges .User
be5: 20 20 00 43 6f 75 70 6c 69 6e 67 20 20 00 43 6f .Coupling .Co
bf5: 6e 66 69 67 28 32 29 20 00 4c 6f 6f 70 69 6e 67 nfig(2) .Looping
c05: 73 65 74 00 set.
 
00000c09 <__c.11>:
c09: 2d 00 -.
 
00000c0b <__c.12>:
c0b: 2d 00 -.
 
00000c0d <__c.13>:
c0d: 2d 00 -.
 
00000c0f <__c.0>:
c0f: 4c 61 64 65 20 50 61 72 61 6d 65 74 65 72 0d 0a Lade Parameter..
...
 
00000c20 <__c.1>:
c20: 20 31 3a 0d 0a 00 1:...
 
00000c26 <__c.2>:
c26: 20 32 3a 0d 0a 00 2:...
 
00000c2c <__c.3>:
c2c: 20 33 3a 0d 0a 00 3:...
 
00000c32 <__c.4>:
c32: 20 34 3a 0d 0a 00 4:...
 
00000c38 <__c.5>:
c38: 20 35 3a 0d 0a 00 5:...
 
00000c3e <__c.6>:
c3e: 54 69 6d 65 6f 75 74 00 Timeout.
 
00000c46 <__c.7>:
c46: 50 61 72 61 6d 65 74 65 72 20 73 70 65 69 63 68 Parameter speich
c56: 65 72 6e 3f 0d 0a 20 20 6a 61 0d 0a 20 20 6e 65 ern?.. ja.. ne
c66: 69 6e 00 in.
 
00000c69 <__c.8>:
c69: 0d 0a 2d 2d 2d 3e 00 ..--->.
 
00000c70 <__c.9>:
c70: 0d 0a 50 61 72 61 6d 65 74 65 72 20 67 65 73 70 ..Parameter gesp
c80: 65 69 63 68 65 72 74 00 eichert.
 
00000c88 <__c.10>:
c88: 0d 0a 4e 69 63 68 74 20 67 65 73 70 65 69 63 68 ..Nicht gespeich
c98: 65 72 74 00 ert.
 
00000c9c <__c.4>:
c9c: 20 00 .
 
00000c9e <__c.5>:
c9e: 2a 00 *.
 
00000ca0 <__c.0>:
ca0: 48 61 75 70 74 6d 65 6e fc 28 42 45 54 41 20 56 Hauptmen.(BETA V
cb0: 30 2e 31 29 0d 0a 00 0.1)...
 
00000cb7 <__c.1>:
cb7: 0d 0a 44 69 73 70 6c 61 79 0d 0a 00 ..Display...
 
00000cc3 <__c.2>:
cc3: 50 61 72 61 6d 65 74 65 72 0d 0a 00 Parameter...
 
00000ccf <__c.3>:
ccf: 4d 6f 74 6f 72 74 65 73 74 00 Motortest.
 
00000cd9 <__c.0>:
cd9: 44 69 73 70 6c 61 79 00 Display.
 
00000ce1 <__c.1>:
ce1: 0d 0a 54 69 6d 65 6f 75 74 21 00 ..Timeout!.
 
00000cec <__c.0>:
cec: 54 61 73 74 65 20 64 72 fc 63 6b 65 6e 0d 0a 00 Taste dr.cken...
 
00000cfc <__init>:
cfc: 11 24 eor r1, r1
cfe: 1f be out 0x3f, r1 ; 63
d00: cf e5 ldi r28, 0x5F ; 95
d02: d8 e0 ldi r29, 0x08 ; 8
d04: de bf out 0x3e, r29 ; 62
d06: cd bf out 0x3d, r28 ; 61
 
00000d08 <__do_copy_data>:
d08: 10 e0 ldi r17, 0x00 ; 0
d0a: a0 e6 ldi r26, 0x60 ; 96
d0c: b0 e0 ldi r27, 0x00 ; 0
d0e: ec e6 ldi r30, 0x6C ; 108
d10: f6 e2 ldi r31, 0x26 ; 38
d12: 02 c0 rjmp .+4 ; 0xd18 <.do_copy_data_start>
 
00000d14 <.do_copy_data_loop>:
d14: 05 90 lpm r0, Z+
d16: 0d 92 st X+, r0
 
00000d18 <.do_copy_data_start>:
d18: a0 36 cpi r26, 0x60 ; 96
d1a: b1 07 cpc r27, r17
d1c: d9 f7 brne .-10 ; 0xd14 <.do_copy_data_loop>
 
00000d1e <__do_clear_bss>:
d1e: 15 e0 ldi r17, 0x05 ; 5
d20: a0 e6 ldi r26, 0x60 ; 96
d22: b0 e0 ldi r27, 0x00 ; 0
d24: 01 c0 rjmp .+2 ; 0xd28 <.do_clear_bss_start>
 
00000d26 <.do_clear_bss_loop>:
d26: 1d 92 st X+, r1
 
00000d28 <.do_clear_bss_start>:
d28: a7 38 cpi r26, 0x87 ; 135
d2a: b1 07 cpc r27, r17
d2c: e1 f7 brne .-8 ; 0xd26 <.do_clear_bss_loop>
d2e: 0c 94 9b 06 jmp 0xd36 <main>
 
00000d32 <__bad_interrupt>:
d32: 0c 94 00 00 jmp 0x0 <__vectors>
 
00000d36 <main>:
#include "timer.h"
 
 
int main (void)
{
d36: cf e5 ldi r28, 0x5F ; 95
d38: d8 e0 ldi r29, 0x08 ; 8
d3a: de bf out 0x3e, r29 ; 62
d3c: cd bf out 0x3d, r28 ; 61
PORTA = 0xFF; // unbenutzte Pins auf Pull-Up
d3e: 8f ef ldi r24, 0xFF ; 255
d40: 8b bb out 0x1b, r24 ; 27
PORTB = 0x43;
d42: 83 e4 ldi r24, 0x43 ; 67
d44: 88 bb out 0x18, r24 ; 24
PORTC = 0xFC;
d46: 8c ef ldi r24, 0xFC ; 252
d48: 85 bb out 0x15, r24 ; 21
PORTD = 0x7C;
d4a: 8c e7 ldi r24, 0x7C ; 124
d4c: 82 bb out 0x12, r24 ; 18
DDRC = 0x03; // Pins für Beleuchtung auf Ausgang
d4e: 83 e0 ldi r24, 0x03 ; 3
d50: 84 bb out 0x14, r24 ; 20
DDRD = 0x80;
d52: 80 e8 ldi r24, 0x80 ; 128
d54: 81 bb out 0x11, r24 ; 17
 
lcd_init();
d56: 0e 94 53 07 call 0xea6 <lcd_init>
RS232_init();
d5a: 0e 94 1a 0c call 0x1834 <RS232_init>
timer_init();
d5e: 0e 94 f4 06 call 0xde8 <timer_init>
sei();
d62: 78 94 sei
 
for (;;)
main_menu();
d64: 0e 94 c8 11 call 0x2390 <main_menu>
d68: fd cf rjmp .-6 ; 0xd64 <main+0x2e>
 
00000d6a <__vector_10>:
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
d6a: 1f 92 push r1
d6c: 0f 92 push r0
d6e: 0f b6 in r0, 0x3f ; 63
d70: 0f 92 push r0
d72: 11 24 eor r1, r1
d74: 8f 93 push r24
d76: 9f 93 push r25
if (counter > 0)
d78: 80 91 e4 04 lds r24, 0x04E4
d7c: 88 23 and r24, r24
d7e: 31 f0 breq .+12 ; 0xd8c <__vector_10+0x22>
counter --;
d80: 80 91 e4 04 lds r24, 0x04E4
d84: 81 50 subi r24, 0x01 ; 1
d86: 80 93 e4 04 sts 0x04E4, r24
d8a: 15 c0 rjmp .+42 ; 0xdb6 <__vector_10+0x4c>
else
{
counter = 10;
d8c: 8a e0 ldi r24, 0x0A ; 10
d8e: 80 93 e4 04 sts 0x04E4, r24
key = (~PINA >> 4) & 0x0F;
d92: 89 b3 in r24, 0x19 ; 25
d94: 99 27 eor r25, r25
d96: 80 95 com r24
d98: 90 95 com r25
d9a: 68 94 set
d9c: 13 f8 bld r1, 3
d9e: 95 95 asr r25
da0: 87 95 ror r24
da2: 16 94 lsr r1
da4: e1 f7 brne .-8 ; 0xd9e <__vector_10+0x34>
da6: 8f 70 andi r24, 0x0F ; 15
da8: 80 93 e6 04 sts 0x04E6, r24
counter2 ++;
dac: 80 91 69 05 lds r24, 0x0569
db0: 8f 5f subi r24, 0xFF ; 255
db2: 80 93 69 05 sts 0x0569, r24
}
if (timer > 0)
db6: 80 91 61 00 lds r24, 0x0061
dba: 88 23 and r24, r24
dbc: 29 f0 breq .+10 ; 0xdc8 <__vector_10+0x5e>
timer --;
dbe: 80 91 61 00 lds r24, 0x0061
dc2: 81 50 subi r24, 0x01 ; 1
dc4: 80 93 61 00 sts 0x0061, r24
if (rs232_timer > 0)
dc8: 80 91 e5 04 lds r24, 0x04E5
dcc: 88 23 and r24, r24
dce: 29 f0 breq .+10 ; 0xdda <__vector_10+0x70>
rs232_timer --;
dd0: 80 91 e5 04 lds r24, 0x04E5
dd4: 81 50 subi r24, 0x01 ; 1
dd6: 80 93 e5 04 sts 0x04E5, r24
dda: 9f 91 pop r25
ddc: 8f 91 pop r24
dde: 0f 90 pop r0
de0: 0f be out 0x3f, r0 ; 63
de2: 0f 90 pop r0
de4: 1f 90 pop r1
de6: 18 95 reti
 
00000de8 <timer_init>:
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
de8: 8d e0 ldi r24, 0x0D ; 13
dea: 83 bf out 0x33, r24 ; 51
OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
dec: 88 e4 ldi r24, 0x48 ; 72
dee: 8c bf out 0x3c, r24 ; 60
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
df0: 89 b7 in r24, 0x39 ; 57
df2: 82 60 ori r24, 0x02 ; 2
df4: 89 bf out 0x39, r24 ; 57
df6: 08 95 ret
 
00000df8 <send_byte>:
 
 
void send_byte (uint8_t data)
{
clr_cs();
df8: c4 98 cbi 0x18, 4 ; 24
SPDR = data;
dfa: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF)));
dfc: 77 9b sbis 0x0e, 7 ; 14
dfe: fe cf rjmp .-4 ; 0xdfc <send_byte+0x4>
SPSR = SPSR;
e00: 8e b1 in r24, 0x0e ; 14
e02: 8e b9 out 0x0e, r24 ; 14
set_cs();
e04: c4 9a sbi 0x18, 4 ; 24
e06: 08 95 ret
 
00000e08 <cls>:
}
 
void cls (void)
{
e08: 0f 93 push r16
e0a: 1f 93 push r17
e0c: cf 93 push r28
e0e: df 93 push r29
e10: 82 e6 ldi r24, 0x62 ; 98
e12: 90 e0 ldi r25, 0x00 ; 0
e14: fc 01 movw r30, r24
uint16_t i,j;
for (i=0;i<1024;i++)
display_buffer[i] = 0x00;
e16: 11 92 st Z+, r1
e18: 01 96 adiw r24, 0x01 ; 1
e1a: 24 e0 ldi r18, 0x04 ; 4
e1c: 81 36 cpi r24, 0x61 ; 97
e1e: 92 07 cpc r25, r18
e20: d1 f3 breq .-12 ; 0xe16 <cls+0xe>
e22: c8 f3 brcs .-14 ; 0xe16 <cls+0xe>
for (i=0;i<8;i++)
e24: 00 e0 ldi r16, 0x00 ; 0
e26: 10 e0 ldi r17, 0x00 ; 0
{
clr_A0();
e28: c3 98 cbi 0x18, 3 ; 24
send_byte(0xB0+i);
e2a: 80 2f mov r24, r16
e2c: 80 55 subi r24, 0x50 ; 80
e2e: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x10);
e32: 80 e1 ldi r24, 0x10 ; 16
e34: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x04);
e38: 84 e0 ldi r24, 0x04 ; 4
e3a: 0e 94 fc 06 call 0xdf8 <send_byte>
set_A0();
e3e: c3 9a sbi 0x18, 3 ; 24
e40: cf e7 ldi r28, 0x7F ; 127
e42: d0 e0 ldi r29, 0x00 ; 0
for (j=0;j<128;j++)
send_byte(0x00);
e44: 80 e0 ldi r24, 0x00 ; 0
e46: 0e 94 fc 06 call 0xdf8 <send_byte>
e4a: 21 97 sbiw r28, 0x01 ; 1
e4c: d7 ff sbrs r29, 7
e4e: fa cf rjmp .-12 ; 0xe44 <cls+0x3c>
e50: 0f 5f subi r16, 0xFF ; 255
e52: 1f 4f sbci r17, 0xFF ; 255
e54: 08 30 cpi r16, 0x08 ; 8
e56: 11 05 cpc r17, r1
e58: 38 f3 brcs .-50 ; 0xe28 <cls+0x20>
}
lcd_xpos = 0;
e5a: 10 92 6a 05 sts 0x056A, r1
lcd_ypos = 0;
e5e: 10 92 6b 05 sts 0x056B, r1
e62: df 91 pop r29
e64: cf 91 pop r28
e66: 1f 91 pop r17
e68: 0f 91 pop r16
e6a: 08 95 ret
 
00000e6c <lcd_cls>:
}
 
void lcd_cls (void)
{
cls();
e6c: 0e 94 04 07 call 0xe08 <cls>
e70: 08 95 ret
 
00000e72 <wait_1ms>:
__ticks = 1;
else if (__tmp > 65535)
__ticks = 0; /* i.e. 65536 */
else
__ticks = (uint16_t)__tmp;
e72: 83 e3 ldi r24, 0x33 ; 51
e74: 97 e0 ldi r25, 0x07 ; 7
e76: 01 97 sbiw r24, 0x01 ; 1
e78: f1 f7 brne .-4 ; 0xe76 <wait_1ms+0x4>
e7a: 08 95 ret
 
00000e7c <wait_ms>:
}
 
void wait_1ms(void)
{
_delay_ms (1.0);
}
 
void wait_ms (uint16_t time)
{
e7c: 0f 93 push r16
e7e: 1f 93 push r17
e80: cf 93 push r28
e82: df 93 push r29
e84: 8c 01 movw r16, r24
uint16_t i;
for (i=0; i<time; i++)
e86: c0 e0 ldi r28, 0x00 ; 0
e88: d0 e0 ldi r29, 0x00 ; 0
e8a: c8 17 cp r28, r24
e8c: d9 07 cpc r29, r25
e8e: 30 f4 brcc .+12 ; 0xe9c <wait_ms+0x20>
wait_1ms();
e90: 0e 94 39 07 call 0xe72 <wait_1ms>
e94: 21 96 adiw r28, 0x01 ; 1
e96: c0 17 cp r28, r16
e98: d1 07 cpc r29, r17
e9a: d0 f3 brcs .-12 ; 0xe90 <wait_ms+0x14>
e9c: df 91 pop r29
e9e: cf 91 pop r28
ea0: 1f 91 pop r17
ea2: 0f 91 pop r16
ea4: 08 95 ret
 
00000ea6 <lcd_init>:
}
 
void lcd_init (void)
{
lcd_xpos = 0;
ea6: 10 92 6a 05 sts 0x056A, r1
lcd_ypos = 0;
eaa: 10 92 6b 05 sts 0x056B, r1
DDRB = 0xFF;
eae: 8f ef ldi r24, 0xFF ; 255
eb0: 87 bb out 0x17, r24 ; 23
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL)|(1<<SPR1);
eb2: 8e e5 ldi r24, 0x5E ; 94
eb4: 8d b9 out 0x0d, r24 ; 13
set_cs();
eb6: c4 9a sbi 0x18, 4 ; 24
clr_reset();
eb8: c2 98 cbi 0x18, 2 ; 24
wait_ms(10);
eba: 8a e0 ldi r24, 0x0A ; 10
ebc: 90 e0 ldi r25, 0x00 ; 0
ebe: 0e 94 3e 07 call 0xe7c <wait_ms>
set_reset();
ec2: c2 9a sbi 0x18, 2 ; 24
clr_cs();
ec4: c4 98 cbi 0x18, 4 ; 24
clr_A0();
ec6: c3 98 cbi 0x18, 3 ; 24
send_byte(0x40);
ec8: 80 e4 ldi r24, 0x40 ; 64
eca: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA0); // A1
ece: 80 ea ldi r24, 0xA0 ; 160
ed0: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xC8); // C0
ed4: 88 ec ldi r24, 0xC8 ; 200
ed6: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA6);
eda: 86 ea ldi r24, 0xA6 ; 166
edc: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xA2);
ee0: 82 ea ldi r24, 0xA2 ; 162
ee2: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x2F);
ee6: 8f e2 ldi r24, 0x2F ; 47
ee8: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xF8);
eec: 88 ef ldi r24, 0xF8 ; 248
eee: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x00);
ef2: 80 e0 ldi r24, 0x00 ; 0
ef4: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x27);
ef8: 87 e2 ldi r24, 0x27 ; 39
efa: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x81);
efe: 81 e8 ldi r24, 0x81 ; 129
f00: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x16);
f04: 86 e1 ldi r24, 0x16 ; 22
f06: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xAC);
f0a: 8c ea ldi r24, 0xAC ; 172
f0c: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0x00);
f10: 80 e0 ldi r24, 0x00 ; 0
f12: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(0xAF);
f16: 8f ea ldi r24, 0xAF ; 175
f18: 0e 94 fc 06 call 0xdf8 <send_byte>
cls();
f1c: 0e 94 04 07 call 0xe08 <cls>
f20: 08 95 ret
 
00000f22 <set_adress>:
 
}
 
void set_adress (uint16_t adress, uint8_t data)
{
f22: ff 92 push r15
f24: 0f 93 push r16
f26: 1f 93 push r17
f28: 8c 01 movw r16, r24
f2a: f6 2e mov r15, r22
uint8_t page;
uint8_t column;
page = adress >> 7;
f2c: 88 0f add r24, r24
f2e: 89 2f mov r24, r25
f30: 88 1f adc r24, r24
f32: 99 0b sbc r25, r25
f34: 91 95 neg r25
clr_A0();
f36: c3 98 cbi 0x18, 3 ; 24
send_byte(0xB0 + page);
f38: 80 55 subi r24, 0x50 ; 80
f3a: 0e 94 fc 06 call 0xdf8 <send_byte>
column = (adress & 0x7F) + 4;
f3e: 10 2f mov r17, r16
f40: 1f 77 andi r17, 0x7F ; 127
f42: 1c 5f subi r17, 0xFC ; 252
send_byte(0x10 + (column >> 4));
f44: 81 2f mov r24, r17
f46: 82 95 swap r24
f48: 8f 70 andi r24, 0x0F ; 15
f4a: 80 5f subi r24, 0xF0 ; 240
f4c: 0e 94 fc 06 call 0xdf8 <send_byte>
send_byte(column & 0x0F);
f50: 81 2f mov r24, r17
f52: 8f 70 andi r24, 0x0F ; 15
f54: 0e 94 fc 06 call 0xdf8 <send_byte>
set_A0();
f58: c3 9a sbi 0x18, 3 ; 24
send_byte(data);
f5a: 8f 2d mov r24, r15
f5c: 0e 94 fc 06 call 0xdf8 <send_byte>
f60: 1f 91 pop r17
f62: 0f 91 pop r16
f64: ff 90 pop r15
f66: 08 95 ret
 
00000f68 <scroll>:
}
 
void scroll (void)
{
f68: ef 92 push r14
f6a: ff 92 push r15
f6c: 0f 93 push r16
f6e: 1f 93 push r17
f70: cf 93 push r28
f72: df 93 push r29
uint16_t adress;
for (adress=0;adress<896;adress++)
f74: c0 e0 ldi r28, 0x00 ; 0
f76: d0 e0 ldi r29, 0x00 ; 0
f78: 32 ee ldi r19, 0xE2 ; 226
f7a: e3 2e mov r14, r19
f7c: 30 e0 ldi r19, 0x00 ; 0
f7e: f3 2e mov r15, r19
f80: 87 01 movw r16, r14
f82: 00 58 subi r16, 0x80 ; 128
f84: 10 40 sbci r17, 0x00 ; 0
{
display_buffer[adress] = display_buffer[adress+128];
f86: f7 01 movw r30, r14
f88: 81 91 ld r24, Z+
f8a: 7f 01 movw r14, r30
f8c: f8 01 movw r30, r16
f8e: 80 83 st Z, r24
set_adress(adress,display_buffer[adress]);
f90: 61 91 ld r22, Z+
f92: 8f 01 movw r16, r30
f94: ce 01 movw r24, r28
f96: 0e 94 91 07 call 0xf22 <set_adress>
f9a: 21 96 adiw r28, 0x01 ; 1
f9c: f3 e0 ldi r31, 0x03 ; 3
f9e: c0 38 cpi r28, 0x80 ; 128
fa0: df 07 cpc r29, r31
fa2: 88 f3 brcs .-30 ; 0xf86 <scroll+0x1e>
fa4: c0 e8 ldi r28, 0x80 ; 128
fa6: d3 e0 ldi r29, 0x03 ; 3
fa8: 02 ee ldi r16, 0xE2 ; 226
faa: 13 e0 ldi r17, 0x03 ; 3
}
for (adress=896;adress<1024;adress++)
{
display_buffer[adress] = 0;
fac: f8 01 movw r30, r16
fae: 11 92 st Z+, r1
fb0: 8f 01 movw r16, r30
set_adress(adress,0);
fb2: 60 e0 ldi r22, 0x00 ; 0
fb4: ce 01 movw r24, r28
fb6: 0e 94 91 07 call 0xf22 <set_adress>
fba: 21 96 adiw r28, 0x01 ; 1
fbc: f4 e0 ldi r31, 0x04 ; 4
fbe: c0 30 cpi r28, 0x00 ; 0
fc0: df 07 cpc r29, r31
fc2: a0 f3 brcs .-24 ; 0xfac <scroll+0x44>
fc4: df 91 pop r29
fc6: cf 91 pop r28
fc8: 1f 91 pop r17
fca: 0f 91 pop r16
fcc: ff 90 pop r15
fce: ef 90 pop r14
fd0: 08 95 ret
 
00000fd2 <put_char>:
}
}
 
//
// x,y = character-Pos. !
//
// mode: 0=Overwrite, 1 = OR, 2 = XOR, 3 = AND, 4 = Delete
void put_char (uint8_t x, uint8_t y, uint8_t c, uint8_t mode)
{
fd2: bf 92 push r11
fd4: cf 92 push r12
fd6: df 92 push r13
fd8: ef 92 push r14
fda: ff 92 push r15
fdc: 0f 93 push r16
fde: 1f 93 push r17
fe0: cf 93 push r28
fe2: df 93 push r29
fe4: 38 2f mov r19, r24
fe6: f4 2e mov r15, r20
fe8: b2 2e mov r11, r18
uint8_t ch;
uint8_t i;
uint16_t adress;
 
switch(c)
fea: 84 2f mov r24, r20
fec: 99 27 eor r25, r25
fee: 8f 3d cpi r24, 0xDF ; 223
ff0: 91 05 cpc r25, r1
ff2: 89 f1 breq .+98 ; 0x1056 <put_char+0x84>
ff4: 80 3e cpi r24, 0xE0 ; 224
ff6: 91 05 cpc r25, r1
ff8: 74 f4 brge .+28 ; 0x1016 <put_char+0x44>
ffa: 86 3d cpi r24, 0xD6 ; 214
ffc: 91 05 cpc r25, r1
ffe: 29 f1 breq .+74 ; 0x104a <put_char+0x78>
1000: 87 3d cpi r24, 0xD7 ; 215
1002: 91 05 cpc r25, r1
1004: 24 f4 brge .+8 ; 0x100e <put_char+0x3c>
1006: 84 3c cpi r24, 0xC4 ; 196
1008: 91 05 cpc r25, r1
100a: e1 f0 breq .+56 ; 0x1044 <put_char+0x72>
100c: 26 c0 rjmp .+76 ; 0x105a <put_char+0x88>
100e: 8c 3d cpi r24, 0xDC ; 220
1010: 91 05 cpc r25, r1
1012: f1 f0 breq .+60 ; 0x1050 <put_char+0x7e>
1014: 22 c0 rjmp .+68 ; 0x105a <put_char+0x88>
1016: 86 3f cpi r24, 0xF6 ; 246
1018: 91 05 cpc r25, r1
101a: 71 f0 breq .+28 ; 0x1038 <put_char+0x66>
101c: 87 3f cpi r24, 0xF7 ; 247
101e: 91 05 cpc r25, r1
1020: 24 f4 brge .+8 ; 0x102a <put_char+0x58>
1022: 84 3e cpi r24, 0xE4 ; 228
1024: 91 05 cpc r25, r1
1026: 29 f0 breq .+10 ; 0x1032 <put_char+0x60>
1028: 18 c0 rjmp .+48 ; 0x105a <put_char+0x88>
102a: 8c 3f cpi r24, 0xFC ; 252
102c: 91 05 cpc r25, r1
102e: 39 f0 breq .+14 ; 0x103e <put_char+0x6c>
1030: 14 c0 rjmp .+40 ; 0x105a <put_char+0x88>
{
case 'ä':
c = 0x84;
1032: 14 e8 ldi r17, 0x84 ; 132
1034: f1 2e mov r15, r17
break;
1036: 11 c0 rjmp .+34 ; 0x105a <put_char+0x88>
case 'ö':
c = 0x94;
1038: c4 e9 ldi r28, 0x94 ; 148
103a: fc 2e mov r15, r28
break;
103c: 0e c0 rjmp .+28 ; 0x105a <put_char+0x88>
case 'ü':
c = 0x81;
103e: b1 e8 ldi r27, 0x81 ; 129
1040: fb 2e mov r15, r27
break;
1042: 0b c0 rjmp .+22 ; 0x105a <put_char+0x88>
case 'Ä':
c = 0x8E;
1044: ae e8 ldi r26, 0x8E ; 142
1046: fa 2e mov r15, r26
break;
1048: 08 c0 rjmp .+16 ; 0x105a <put_char+0x88>
case 'Ö':
c = 0x99;
104a: f9 e9 ldi r31, 0x99 ; 153
104c: ff 2e mov r15, r31
break;
104e: 05 c0 rjmp .+10 ; 0x105a <put_char+0x88>
case 'Ü':
c = 0x9A;
1050: ea e9 ldi r30, 0x9A ; 154
1052: fe 2e mov r15, r30
break;
1054: 02 c0 rjmp .+4 ; 0x105a <put_char+0x88>
case 'ß':
c = 0xE1;
1056: 71 ee ldi r23, 0xE1 ; 225
1058: f7 2e mov r15, r23
break;
}
adress = y*128 + x*6;
105a: c6 2f mov r28, r22
105c: dd 27 eor r29, r29
105e: d6 95 lsr r29
1060: dc 2f mov r29, r28
1062: cc 27 eor r28, r28
1064: d7 95 ror r29
1066: c7 95 ror r28
1068: 86 e0 ldi r24, 0x06 ; 6
106a: 38 9f mul r19, r24
106c: c0 01 movw r24, r0
106e: 11 24 eor r1, r1
1070: c8 0f add r28, r24
1072: d9 1f adc r29, r25
adress &= 0x3FF;
1074: d3 70 andi r29, 0x03 ; 3
1076: 6e 01 movw r12, r28
1078: 00 e0 ldi r16, 0x00 ; 0
107a: 10 e0 ldi r17, 0x00 ; 0
107c: 45 e0 ldi r20, 0x05 ; 5
107e: e4 2e mov r14, r20
for (i=0;i<6;i++)
{
ch = pgm_read_byte (&f8x6[0][0] + i + c * 6);
1080: 86 e0 ldi r24, 0x06 ; 6
1082: f8 9e mul r15, r24
1084: f0 01 movw r30, r0
1086: 11 24 eor r1, r1
1088: e0 0f add r30, r16
108a: f1 1f adc r31, r17
108c: ec 5a subi r30, 0xAC ; 172
108e: ff 4f sbci r31, 0xFF ; 255
1090: 24 91 lpm r18, Z
switch (mode)
1092: 8b 2d mov r24, r11
1094: 99 27 eor r25, r25
1096: 82 30 cpi r24, 0x02 ; 2
1098: 91 05 cpc r25, r1
109a: e9 f0 breq .+58 ; 0x10d6 <put_char+0x104>
109c: 83 30 cpi r24, 0x03 ; 3
109e: 91 05 cpc r25, r1
10a0: 2c f4 brge .+10 ; 0x10ac <put_char+0xda>
10a2: 00 97 sbiw r24, 0x00 ; 0
10a4: 49 f0 breq .+18 ; 0x10b8 <put_char+0xe6>
10a6: 01 97 sbiw r24, 0x01 ; 1
10a8: 71 f0 breq .+28 ; 0x10c6 <put_char+0xf4>
10aa: 2c c0 rjmp .+88 ; 0x1104 <put_char+0x132>
10ac: 83 30 cpi r24, 0x03 ; 3
10ae: 91 05 cpc r25, r1
10b0: d1 f0 breq .+52 ; 0x10e6 <put_char+0x114>
10b2: 04 97 sbiw r24, 0x04 ; 4
10b4: f1 f0 breq .+60 ; 0x10f2 <put_char+0x120>
10b6: 26 c0 rjmp .+76 ; 0x1104 <put_char+0x132>
{
case 0:
display_buffer[adress+i] = ch;
10b8: fe 01 movw r30, r28
10ba: ee 59 subi r30, 0x9E ; 158
10bc: ff 4f sbci r31, 0xFF ; 255
10be: e0 0f add r30, r16
10c0: f1 1f adc r31, r17
10c2: 20 83 st Z, r18
break;
10c4: 1f c0 rjmp .+62 ; 0x1104 <put_char+0x132>
case 1:
display_buffer[adress+i] |= ch;
10c6: fe 01 movw r30, r28
10c8: ee 59 subi r30, 0x9E ; 158
10ca: ff 4f sbci r31, 0xFF ; 255
10cc: e0 0f add r30, r16
10ce: f1 1f adc r31, r17
10d0: 80 81 ld r24, Z
10d2: 82 2b or r24, r18
10d4: 16 c0 rjmp .+44 ; 0x1102 <put_char+0x130>
break;
case 2:
display_buffer[adress+i] ^= ch;
10d6: fe 01 movw r30, r28
10d8: ee 59 subi r30, 0x9E ; 158
10da: ff 4f sbci r31, 0xFF ; 255
10dc: e0 0f add r30, r16
10de: f1 1f adc r31, r17
10e0: 80 81 ld r24, Z
10e2: 82 27 eor r24, r18
10e4: 0e c0 rjmp .+28 ; 0x1102 <put_char+0x130>
break;
case 3:
display_buffer[adress+i] &= ch;
10e6: fe 01 movw r30, r28
10e8: ee 59 subi r30, 0x9E ; 158
10ea: ff 4f sbci r31, 0xFF ; 255
10ec: e0 0f add r30, r16
10ee: f1 1f adc r31, r17
10f0: 06 c0 rjmp .+12 ; 0x10fe <put_char+0x12c>
break;
case 4:
display_buffer[adress+i] &= ~ch;
10f2: fe 01 movw r30, r28
10f4: ee 59 subi r30, 0x9E ; 158
10f6: ff 4f sbci r31, 0xFF ; 255
10f8: e0 0f add r30, r16
10fa: f1 1f adc r31, r17
10fc: 20 95 com r18
10fe: 80 81 ld r24, Z
1100: 82 23 and r24, r18
1102: 80 83 st Z, r24
break;
}
set_adress(adress+i,display_buffer[adress+i]);
1104: fe 01 movw r30, r28
1106: ee 59 subi r30, 0x9E ; 158
1108: ff 4f sbci r31, 0xFF ; 255
110a: e0 0f add r30, r16
110c: f1 1f adc r31, r17
110e: 60 81 ld r22, Z
1110: c6 01 movw r24, r12
1112: 0e 94 91 07 call 0xf22 <set_adress>
1116: ea 94 dec r14
1118: 0f 5f subi r16, 0xFF ; 255
111a: 1f 4f sbci r17, 0xFF ; 255
111c: 08 94 sec
111e: c1 1c adc r12, r1
1120: d1 1c adc r13, r1
1122: e7 fe sbrs r14, 7
1124: ad cf rjmp .-166 ; 0x1080 <put_char+0xae>
1126: df 91 pop r29
1128: cf 91 pop r28
112a: 1f 91 pop r17
112c: 0f 91 pop r16
112e: ff 90 pop r15
1130: ef 90 pop r14
1132: df 90 pop r13
1134: cf 90 pop r12
1136: bf 90 pop r11
1138: 08 95 ret
 
0000113a <new_line>:
}
}
 
void new_line (void)
{
lcd_ypos++;
113a: 80 91 6b 05 lds r24, 0x056B
113e: 8f 5f subi r24, 0xFF ; 255
1140: 80 93 6b 05 sts 0x056B, r24
if (lcd_ypos > 7)
1144: 88 30 cpi r24, 0x08 ; 8
1146: 28 f0 brcs .+10 ; 0x1152 <new_line+0x18>
{
scroll();
1148: 0e 94 b4 07 call 0xf68 <scroll>
lcd_ypos = 7;
114c: 87 e0 ldi r24, 0x07 ; 7
114e: 80 93 6b 05 sts 0x056B, r24
1152: 08 95 ret
 
00001154 <lcd_printp>:
}
}
 
 
void lcd_printp (const char *text, uint8_t mode)
{
1154: 1f 93 push r17
1156: cf 93 push r28
1158: df 93 push r29
115a: ec 01 movw r28, r24
115c: 16 2f mov r17, r22
while (pgm_read_byte(text))
{
if (pgm_read_byte(text) > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,pgm_read_byte(text++),mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (pgm_read_byte(text))
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
115e: fc 01 movw r30, r24
1160: 84 91 lpm r24, Z
1162: 88 23 and r24, r24
1164: 51 f1 breq .+84 ; 0x11ba <lcd_printp+0x66>
1166: fe 01 movw r30, r28
1168: 84 91 lpm r24, Z
116a: 80 32 cpi r24, 0x20 ; 32
116c: b0 f0 brcs .+44 ; 0x119a <lcd_printp+0x46>
116e: 21 96 adiw r28, 0x01 ; 1
1170: 84 91 lpm r24, Z
1172: 21 2f mov r18, r17
1174: 48 2f mov r20, r24
1176: 60 91 6b 05 lds r22, 0x056B
117a: 80 91 6a 05 lds r24, 0x056A
117e: 0e 94 e9 07 call 0xfd2 <put_char>
1182: 80 91 6a 05 lds r24, 0x056A
1186: 8f 5f subi r24, 0xFF ; 255
1188: 80 93 6a 05 sts 0x056A, r24
118c: 85 31 cpi r24, 0x15 ; 21
118e: 88 f0 brcs .+34 ; 0x11b2 <lcd_printp+0x5e>
1190: 10 92 6a 05 sts 0x056A, r1
1194: 0e 94 9d 08 call 0x113a <new_line>
1198: 0c c0 rjmp .+24 ; 0x11b2 <lcd_printp+0x5e>
119a: 99 27 eor r25, r25
119c: 8a 30 cpi r24, 0x0A ; 10
119e: 91 05 cpc r25, r1
11a0: 29 f0 breq .+10 ; 0x11ac <lcd_printp+0x58>
11a2: 0d 97 sbiw r24, 0x0d ; 13
11a4: 29 f4 brne .+10 ; 0x11b0 <lcd_printp+0x5c>
11a6: 10 92 6a 05 sts 0x056A, r1
11aa: 02 c0 rjmp .+4 ; 0x11b0 <lcd_printp+0x5c>
11ac: 0e 94 9d 08 call 0x113a <new_line>
11b0: 21 96 adiw r28, 0x01 ; 1
11b2: fe 01 movw r30, r28
11b4: 84 91 lpm r24, Z
11b6: 88 23 and r24, r24
11b8: b1 f6 brne .-84 ; 0x1166 <lcd_printp+0x12>
11ba: df 91 pop r29
11bc: cf 91 pop r28
11be: 1f 91 pop r17
11c0: 08 95 ret
 
000011c2 <lcd_print_atp>:
}
}
}
 
void lcd_print_atp (uint8_t x, uint8_t y, const char *text, uint8_t mode)
{
lcd_xpos = x;
11c2: 80 93 6a 05 sts 0x056A, r24
lcd_ypos = y;
11c6: 60 93 6b 05 sts 0x056B, r22
lcd_printp (text, mode);
11ca: 62 2f mov r22, r18
11cc: ca 01 movw r24, r20
11ce: 0e 94 aa 08 call 0x1154 <lcd_printp>
11d2: 08 95 ret
 
000011d4 <lcd_print>:
}
 
 
void lcd_print (uint8_t *text, uint8_t mode)
{
11d4: 1f 93 push r17
11d6: cf 93 push r28
11d8: df 93 push r29
11da: ec 01 movw r28, r24
11dc: 16 2f mov r17, r22
while (*text)
{
if (*text > 0x1F)
{
put_char(lcd_xpos,lcd_ypos,*text++,mode);
lcd_xpos++;
if (lcd_xpos > 20)
{
lcd_xpos = 0;
new_line();
}
}
else
{
switch (*text)
{
case 0x0D:
lcd_xpos = 0;
break;
case 0x0A:
new_line();
break;
}
text++;
11de: 88 81 ld r24, Y
11e0: 88 23 and r24, r24
11e2: 39 f1 breq .+78 ; 0x1232 <lcd_print+0x5e>
11e4: 48 81 ld r20, Y
11e6: 40 32 cpi r20, 0x20 ; 32
11e8: a0 f0 brcs .+40 ; 0x1212 <lcd_print+0x3e>
11ea: 21 96 adiw r28, 0x01 ; 1
11ec: 21 2f mov r18, r17
11ee: 60 91 6b 05 lds r22, 0x056B
11f2: 80 91 6a 05 lds r24, 0x056A
11f6: 0e 94 e9 07 call 0xfd2 <put_char>
11fa: 80 91 6a 05 lds r24, 0x056A
11fe: 8f 5f subi r24, 0xFF ; 255
1200: 80 93 6a 05 sts 0x056A, r24
1204: 85 31 cpi r24, 0x15 ; 21
1206: 90 f0 brcs .+36 ; 0x122c <lcd_print+0x58>
1208: 10 92 6a 05 sts 0x056A, r1
120c: 0e 94 9d 08 call 0x113a <new_line>
1210: 0d c0 rjmp .+26 ; 0x122c <lcd_print+0x58>
1212: 55 27 eor r21, r21
1214: 4a 30 cpi r20, 0x0A ; 10
1216: 51 05 cpc r21, r1
1218: 31 f0 breq .+12 ; 0x1226 <lcd_print+0x52>
121a: 4d 30 cpi r20, 0x0D ; 13
121c: 51 05 cpc r21, r1
121e: 29 f4 brne .+10 ; 0x122a <lcd_print+0x56>
1220: 10 92 6a 05 sts 0x056A, r1
1224: 02 c0 rjmp .+4 ; 0x122a <lcd_print+0x56>
1226: 0e 94 9d 08 call 0x113a <new_line>
122a: 21 96 adiw r28, 0x01 ; 1
122c: 88 81 ld r24, Y
122e: 88 23 and r24, r24
1230: c9 f6 brne .-78 ; 0x11e4 <lcd_print+0x10>
1232: df 91 pop r29
1234: cf 91 pop r28
1236: 1f 91 pop r17
1238: 08 95 ret
 
0000123a <lcd_print_at>:
}
}
}
 
void lcd_print_at (uint8_t x, uint8_t y, uint8_t *text, uint8_t mode)
{
lcd_xpos = x;
123a: 80 93 6a 05 sts 0x056A, r24
lcd_ypos = y;
123e: 60 93 6b 05 sts 0x056B, r22
lcd_print(text, mode);
1242: 62 2f mov r22, r18
1244: ca 01 movw r24, r20
1246: 0e 94 ea 08 call 0x11d4 <lcd_print>
124a: 08 95 ret
 
0000124c <lcd_plot>:
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Plot (set one Pixel)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// mode:
// 0=Clear, 1=Set, 2=XOR
void lcd_plot (uint8_t xpos, uint8_t ypos, uint8_t mode)
{
124c: 98 2f mov r25, r24
uint16_t adress;
uint8_t mask;
if ((xpos < 128) && (ypos < 64))
124e: 87 fd sbrc r24, 7
1250: 45 c0 rjmp .+138 ; 0x12dc <lcd_plot+0x90>
1252: 60 34 cpi r22, 0x40 ; 64
1254: 08 f0 brcs .+2 ; 0x1258 <lcd_plot+0xc>
1256: 42 c0 rjmp .+132 ; 0x12dc <lcd_plot+0x90>
{
adress = (ypos/8) * 128 + xpos; // adress = 0/8 * 128 + 0 = 0
1258: 86 2f mov r24, r22
125a: 86 95 lsr r24
125c: 86 95 lsr r24
125e: 86 95 lsr r24
1260: a8 2f mov r26, r24
1262: bb 27 eor r27, r27
1264: b6 95 lsr r27
1266: ba 2f mov r27, r26
1268: aa 27 eor r26, r26
126a: b7 95 ror r27
126c: a7 95 ror r26
126e: a9 0f add r26, r25
1270: b1 1d adc r27, r1
mask = 1<<(ypos & 0x07); // mask = 1<<0 = 1
1272: 26 2f mov r18, r22
1274: 33 27 eor r19, r19
1276: 27 70 andi r18, 0x07 ; 7
1278: 30 70 andi r19, 0x00 ; 0
127a: 81 e0 ldi r24, 0x01 ; 1
127c: 90 e0 ldi r25, 0x00 ; 0
127e: 02 c0 rjmp .+4 ; 0x1284 <lcd_plot+0x38>
1280: 88 0f add r24, r24
1282: 99 1f adc r25, r25
1284: 2a 95 dec r18
1286: e2 f7 brpl .-8 ; 0x1280 <lcd_plot+0x34>
1288: 98 2f mov r25, r24
adress &= 0x3FF;
128a: b3 70 andi r27, 0x03 ; 3
switch (mode)
128c: 55 27 eor r21, r21
128e: 41 30 cpi r20, 0x01 ; 1
1290: 51 05 cpc r21, r1
1292: 89 f0 breq .+34 ; 0x12b6 <lcd_plot+0x6a>
1294: 42 30 cpi r20, 0x02 ; 2
1296: 51 05 cpc r21, r1
1298: 1c f4 brge .+6 ; 0x12a0 <lcd_plot+0x54>
129a: 45 2b or r20, r21
129c: 29 f0 breq .+10 ; 0x12a8 <lcd_plot+0x5c>
129e: 17 c0 rjmp .+46 ; 0x12ce <lcd_plot+0x82>
12a0: 42 30 cpi r20, 0x02 ; 2
12a2: 51 05 cpc r21, r1
12a4: 71 f0 breq .+28 ; 0x12c2 <lcd_plot+0x76>
12a6: 13 c0 rjmp .+38 ; 0x12ce <lcd_plot+0x82>
{
case 0:
display_buffer[adress] &=~mask;
12a8: fd 01 movw r30, r26
12aa: ee 59 subi r30, 0x9E ; 158
12ac: ff 4f sbci r31, 0xFF ; 255
12ae: 90 95 com r25
12b0: 80 81 ld r24, Z
12b2: 89 23 and r24, r25
12b4: 0b c0 rjmp .+22 ; 0x12cc <lcd_plot+0x80>
break;
case 1:
display_buffer[adress] |= mask;
12b6: fd 01 movw r30, r26
12b8: ee 59 subi r30, 0x9E ; 158
12ba: ff 4f sbci r31, 0xFF ; 255
12bc: 80 81 ld r24, Z
12be: 89 2b or r24, r25
12c0: 05 c0 rjmp .+10 ; 0x12cc <lcd_plot+0x80>
break;
case 2:
display_buffer[adress] ^= mask;
12c2: fd 01 movw r30, r26
12c4: ee 59 subi r30, 0x9E ; 158
12c6: ff 4f sbci r31, 0xFF ; 255
12c8: 80 81 ld r24, Z
12ca: 89 27 eor r24, r25
12cc: 80 83 st Z, r24
break;
}
set_adress(adress,display_buffer[adress]);
12ce: fd 01 movw r30, r26
12d0: ee 59 subi r30, 0x9E ; 158
12d2: ff 4f sbci r31, 0xFF ; 255
12d4: 60 81 ld r22, Z
12d6: cd 01 movw r24, r26
12d8: 0e 94 91 07 call 0xf22 <set_adress>
12dc: 08 95 ret
 
000012de <lcd_line>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Line (draws a line from x1,y1 to x2,y2
// + Based on Bresenham line-Algorithm
// + found in the internet, modified by thkais 2007
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uint8_t mode)
 
{
12de: 2f 92 push r2
12e0: 3f 92 push r3
12e2: 4f 92 push r4
12e4: 5f 92 push r5
12e6: 6f 92 push r6
12e8: 7f 92 push r7
12ea: 8f 92 push r8
12ec: 9f 92 push r9
12ee: af 92 push r10
12f0: bf 92 push r11
12f2: cf 92 push r12
12f4: df 92 push r13
12f6: ef 92 push r14
12f8: ff 92 push r15
12fa: 0f 93 push r16
12fc: 1f 93 push r17
12fe: cf 93 push r28
1300: df 93 push r29
1302: cd b7 in r28, 0x3d ; 61
1304: de b7 in r29, 0x3e ; 62
1306: 23 97 sbiw r28, 0x03 ; 3
1308: 0f b6 in r0, 0x3f ; 63
130a: f8 94 cli
130c: de bf out 0x3e, r29 ; 62
130e: 0f be out 0x3f, r0 ; 63
1310: cd bf out 0x3d, r28 ; 61
1312: 09 83 std Y+1, r16 ; 0x01
int x,y,count,xs,ys,xm,ym;
 
x=(int)x1;
1314: a8 2e mov r10, r24
1316: bb 24 eor r11, r11
y=(int)y1;
1318: c6 2e mov r12, r22
131a: dd 24 eor r13, r13
xs=(int)x2 - (int)x1;
131c: 64 2e mov r6, r20
131e: 77 24 eor r7, r7
1320: 73 01 movw r14, r6
1322: ea 18 sub r14, r10
1324: fb 08 sbc r15, r11
ys=(int)y2 - (int)y1;
1326: 82 2e mov r8, r18
1328: 99 24 eor r9, r9
132a: 84 01 movw r16, r8
132c: 0c 19 sub r16, r12
132e: 1d 09 sbc r17, r13
if(xs < 0)
1330: f7 fe sbrs r15, 7
1332: 04 c0 rjmp .+8 ; 0x133c <lcd_line+0x5e>
xm= -1;
1334: 7f ef ldi r23, 0xFF ; 255
1336: 27 2e mov r2, r23
1338: 37 2e mov r3, r23
133a: 09 c0 rjmp .+18 ; 0x134e <lcd_line+0x70>
else
if(xs > 0)
133c: 1e 14 cp r1, r14
133e: 1f 04 cpc r1, r15
1340: 24 f4 brge .+8 ; 0x134a <lcd_line+0x6c>
xm= 1;
1342: 61 e0 ldi r22, 0x01 ; 1
1344: 26 2e mov r2, r22
1346: 31 2c mov r3, r1
1348: 02 c0 rjmp .+4 ; 0x134e <lcd_line+0x70>
else
xm= 0;
134a: 22 24 eor r2, r2
134c: 33 24 eor r3, r3
if(ys < 0)
134e: 17 ff sbrs r17, 7
1350: 04 c0 rjmp .+8 ; 0x135a <lcd_line+0x7c>
ym= -1;
1352: 5f ef ldi r21, 0xFF ; 255
1354: 45 2e mov r4, r21
1356: 55 2e mov r5, r21
1358: 09 c0 rjmp .+18 ; 0x136c <lcd_line+0x8e>
else
if(ys > 0)
135a: 10 16 cp r1, r16
135c: 11 06 cpc r1, r17
135e: 24 f4 brge .+8 ; 0x1368 <lcd_line+0x8a>
ym= 1;
1360: 41 e0 ldi r20, 0x01 ; 1
1362: 44 2e mov r4, r20
1364: 51 2c mov r5, r1
1366: 02 c0 rjmp .+4 ; 0x136c <lcd_line+0x8e>
else
ym= 0;
1368: 44 24 eor r4, r4
136a: 55 24 eor r5, r5
if(xs < 0)
136c: f7 fe sbrs r15, 7
136e: 04 c0 rjmp .+8 ; 0x1378 <lcd_line+0x9a>
xs= -xs;
1370: f0 94 com r15
1372: e1 94 neg r14
1374: f1 08 sbc r15, r1
1376: f3 94 inc r15
if(ys < 0)
1378: 17 ff sbrs r17, 7
137a: 03 c0 rjmp .+6 ; 0x1382 <lcd_line+0xa4>
ys= -ys;
137c: 10 95 com r17
137e: 01 95 neg r16
1380: 1f 4f sbci r17, 0xFF ; 255
 
lcd_plot((unsigned char)x, (unsigned char)y, mode);
1382: 49 81 ldd r20, Y+1 ; 0x01
1384: 6c 2d mov r22, r12
1386: 8a 2d mov r24, r10
1388: 0e 94 26 09 call 0x124c <lcd_plot>
 
if(xs > ys) // Flat Line <45 degrees
138c: 0e 15 cp r16, r14
138e: 1f 05 cpc r17, r15
1390: 4c f5 brge .+82 ; 0x13e4 <lcd_line+0x106>
{
count= -(xs / 2);
1392: c7 01 movw r24, r14
1394: f7 fc sbrc r15, 7
1396: 01 96 adiw r24, 0x01 ; 1
1398: 95 95 asr r25
139a: 87 95 ror r24
139c: 22 27 eor r18, r18
139e: 33 27 eor r19, r19
13a0: 28 1b sub r18, r24
13a2: 39 0b sbc r19, r25
13a4: 3b 83 std Y+3, r19 ; 0x03
13a6: 2a 83 std Y+2, r18 ; 0x02
while(x != x2)
{
count= count + ys;
x= x + xm;
if(count > 0)
{
y= y + ym;
count= count - xs;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
13a8: a6 14 cp r10, r6
13aa: b7 04 cpc r11, r7
13ac: 09 f4 brne .+2 ; 0x13b0 <lcd_line+0xd2>
13ae: 41 c0 rjmp .+130 ; 0x1432 <lcd_line+0x154>
13b0: 8a 81 ldd r24, Y+2 ; 0x02
13b2: 9b 81 ldd r25, Y+3 ; 0x03
13b4: 80 0f add r24, r16
13b6: 91 1f adc r25, r17
13b8: 9b 83 std Y+3, r25 ; 0x03
13ba: 8a 83 std Y+2, r24 ; 0x02
13bc: a2 0c add r10, r2
13be: b3 1c adc r11, r3
13c0: 18 16 cp r1, r24
13c2: 19 06 cpc r1, r25
13c4: 34 f4 brge .+12 ; 0x13d2 <lcd_line+0xf4>
13c6: c4 0c add r12, r4
13c8: d5 1c adc r13, r5
13ca: 8e 19 sub r24, r14
13cc: 9f 09 sbc r25, r15
13ce: 9b 83 std Y+3, r25 ; 0x03
13d0: 8a 83 std Y+2, r24 ; 0x02
13d2: 49 81 ldd r20, Y+1 ; 0x01
13d4: 6c 2d mov r22, r12
13d6: 8a 2d mov r24, r10
13d8: 0e 94 26 09 call 0x124c <lcd_plot>
13dc: a6 14 cp r10, r6
13de: b7 04 cpc r11, r7
13e0: 39 f7 brne .-50 ; 0x13b0 <lcd_line+0xd2>
13e2: 27 c0 rjmp .+78 ; 0x1432 <lcd_line+0x154>
}
}
else // Line >=45 degrees
{
count=- (ys / 2);
13e4: c8 01 movw r24, r16
13e6: 17 fd sbrc r17, 7
13e8: 01 96 adiw r24, 0x01 ; 1
13ea: 95 95 asr r25
13ec: 87 95 ror r24
13ee: ee 27 eor r30, r30
13f0: ff 27 eor r31, r31
13f2: e8 1b sub r30, r24
13f4: f9 0b sbc r31, r25
13f6: fb 83 std Y+3, r31 ; 0x03
13f8: ea 83 std Y+2, r30 ; 0x02
while(y != y2)
{
count= count + xs;
y= y + ym;
if(count > 0)
{
x= x + xm;
count= count - ys;
}
lcd_plot((unsigned char)x, (unsigned char)y, mode);
13fa: c8 14 cp r12, r8
13fc: d9 04 cpc r13, r9
13fe: c9 f0 breq .+50 ; 0x1432 <lcd_line+0x154>
1400: 2a 81 ldd r18, Y+2 ; 0x02
1402: 3b 81 ldd r19, Y+3 ; 0x03
1404: 2e 0d add r18, r14
1406: 3f 1d adc r19, r15
1408: 3b 83 std Y+3, r19 ; 0x03
140a: 2a 83 std Y+2, r18 ; 0x02
140c: c4 0c add r12, r4
140e: d5 1c adc r13, r5
1410: 12 16 cp r1, r18
1412: 13 06 cpc r1, r19
1414: 34 f4 brge .+12 ; 0x1422 <lcd_line+0x144>
1416: a2 0c add r10, r2
1418: b3 1c adc r11, r3
141a: 20 1b sub r18, r16
141c: 31 0b sbc r19, r17
141e: 3b 83 std Y+3, r19 ; 0x03
1420: 2a 83 std Y+2, r18 ; 0x02
1422: 49 81 ldd r20, Y+1 ; 0x01
1424: 6c 2d mov r22, r12
1426: 8a 2d mov r24, r10
1428: 0e 94 26 09 call 0x124c <lcd_plot>
142c: c8 14 cp r12, r8
142e: d9 04 cpc r13, r9
1430: 39 f7 brne .-50 ; 0x1400 <lcd_line+0x122>
1432: 23 96 adiw r28, 0x03 ; 3
1434: 0f b6 in r0, 0x3f ; 63
1436: f8 94 cli
1438: de bf out 0x3e, r29 ; 62
143a: 0f be out 0x3f, r0 ; 63
143c: cd bf out 0x3d, r28 ; 61
143e: df 91 pop r29
1440: cf 91 pop r28
1442: 1f 91 pop r17
1444: 0f 91 pop r16
1446: ff 90 pop r15
1448: ef 90 pop r14
144a: df 90 pop r13
144c: cf 90 pop r12
144e: bf 90 pop r11
1450: af 90 pop r10
1452: 9f 90 pop r9
1454: 8f 90 pop r8
1456: 7f 90 pop r7
1458: 6f 90 pop r6
145a: 5f 90 pop r5
145c: 4f 90 pop r4
145e: 3f 90 pop r3
1460: 2f 90 pop r2
1462: 08 95 ret
 
00001464 <lcd_frect>:
}
}
}
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Filled rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_frect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
1464: bf 92 push r11
1466: cf 92 push r12
1468: df 92 push r13
146a: ef 92 push r14
146c: ff 92 push r15
146e: 0f 93 push r16
1470: 1f 93 push r17
1472: cf 93 push r28
1474: df 93 push r29
1476: 18 2f mov r17, r24
1478: 82 2f mov r24, r18
147a: b0 2e mov r11, r16
uint16_t x2, y2;
uint16_t i;
 
if (x1 >= DISP_W)
147c: 17 fd sbrc r17, 7
x1 = DISP_W - 1;
147e: 1f e7 ldi r17, 0x7F ; 127
if (y1 >= DISP_H)
1480: 60 34 cpi r22, 0x40 ; 64
1482: 08 f0 brcs .+2 ; 0x1486 <lcd_frect+0x22>
y1 = DISP_H - 1;
1484: 6f e3 ldi r22, 0x3F ; 63
x2 = x1 + widthx;
1486: 21 2f mov r18, r17
1488: 24 0f add r18, r20
148a: 31 2d mov r19, r1
148c: 31 1d adc r19, r1
148e: 69 01 movw r12, r18
y2 = y1 + widthy;
1490: 26 2f mov r18, r22
1492: 33 27 eor r19, r19
1494: 79 01 movw r14, r18
1496: e8 0e add r14, r24
1498: f1 1c adc r15, r1
if (x2 > DISP_W)
149a: 81 e8 ldi r24, 0x81 ; 129
149c: c8 16 cp r12, r24
149e: d1 04 cpc r13, r1
14a0: 18 f0 brcs .+6 ; 0x14a8 <lcd_frect+0x44>
x2 = DISP_W;
14a2: f0 e8 ldi r31, 0x80 ; 128
14a4: cf 2e mov r12, r31
14a6: d1 2c mov r13, r1
if (y2 > DISP_H)
14a8: 81 e4 ldi r24, 0x41 ; 65
14aa: e8 16 cp r14, r24
14ac: f1 04 cpc r15, r1
14ae: 18 f0 brcs .+6 ; 0x14b6 <lcd_frect+0x52>
y2 = DISP_H;
14b0: e0 e4 ldi r30, 0x40 ; 64
14b2: ee 2e mov r14, r30
14b4: f1 2c mov r15, r1
for (i=y1;i<=y2;i++)
14b6: e9 01 movw r28, r18
14b8: e2 16 cp r14, r18
14ba: f3 06 cpc r15, r19
14bc: 58 f0 brcs .+22 ; 0x14d4 <lcd_frect+0x70>
{
lcd_line(x1,i,x2,i,mode);
14be: 0b 2d mov r16, r11
14c0: 2c 2f mov r18, r28
14c2: 4c 2d mov r20, r12
14c4: 6c 2f mov r22, r28
14c6: 81 2f mov r24, r17
14c8: 0e 94 6f 09 call 0x12de <lcd_line>
14cc: 21 96 adiw r28, 0x01 ; 1
14ce: ec 16 cp r14, r28
14d0: fd 06 cpc r15, r29
14d2: a8 f7 brcc .-22 ; 0x14be <lcd_frect+0x5a>
14d4: df 91 pop r29
14d6: cf 91 pop r28
14d8: 1f 91 pop r17
14da: 0f 91 pop r16
14dc: ff 90 pop r15
14de: ef 90 pop r14
14e0: df 90 pop r13
14e2: cf 90 pop r12
14e4: bf 90 pop r11
14e6: 08 95 ret
 
000014e8 <lcd_rect>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of rectangle
// + x1, y1 = upper left corner
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void lcd_rect (uint8_t x1, uint8_t y1, uint8_t widthx, uint8_t widthy, uint8_t mode)
{
14e8: cf 92 push r12
14ea: df 92 push r13
14ec: ef 92 push r14
14ee: ff 92 push r15
14f0: 0f 93 push r16
14f2: 1f 93 push r17
14f4: cf 93 push r28
14f6: df 93 push r29
14f8: d8 2e mov r13, r24
14fa: 16 2f mov r17, r22
14fc: c0 2e mov r12, r16
uint16_t x2, y2;
 
if (x1 >= DISP_W)
14fe: 87 ff sbrs r24, 7
1500: 02 c0 rjmp .+4 ; 0x1506 <lcd_rect+0x1e>
x1 = DISP_W - 1;
1502: bf e7 ldi r27, 0x7F ; 127
1504: db 2e mov r13, r27
if (y1 >= DISP_H)
1506: 10 34 cpi r17, 0x40 ; 64
1508: 08 f0 brcs .+2 ; 0x150c <lcd_rect+0x24>
y1 = DISP_H - 1;
150a: 1f e3 ldi r17, 0x3F ; 63
x2 = x1 + widthx;
150c: 8d 2d mov r24, r13
150e: 84 0f add r24, r20
1510: 91 2d mov r25, r1
1512: 91 1d adc r25, r1
1514: ec 01 movw r28, r24
y2 = y1 + widthy;
1516: 81 2f mov r24, r17
1518: 82 0f add r24, r18
151a: 91 2d mov r25, r1
151c: 91 1d adc r25, r1
151e: 7c 01 movw r14, r24
if (x2 > DISP_W)
1520: c1 38 cpi r28, 0x81 ; 129
1522: d1 05 cpc r29, r1
1524: 10 f0 brcs .+4 ; 0x152a <lcd_rect+0x42>
x2 = DISP_W;
1526: c0 e8 ldi r28, 0x80 ; 128
1528: d0 e0 ldi r29, 0x00 ; 0
if (y2 > DISP_H)
152a: 91 e4 ldi r25, 0x41 ; 65
152c: e9 16 cp r14, r25
152e: f1 04 cpc r15, r1
1530: 18 f0 brcs .+6 ; 0x1538 <lcd_rect+0x50>
y2 = DISP_H;
1532: a0 e4 ldi r26, 0x40 ; 64
1534: ea 2e mov r14, r26
1536: f1 2c mov r15, r1
 
lcd_line (x1, y1, x2, y1, mode);
1538: 0c 2d mov r16, r12
153a: 21 2f mov r18, r17
153c: 4c 2f mov r20, r28
153e: 61 2f mov r22, r17
1540: 8d 2d mov r24, r13
1542: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x2, y1, x2, y2, mode);
1546: 2e 2d mov r18, r14
1548: 4c 2f mov r20, r28
154a: 61 2f mov r22, r17
154c: 8c 2f mov r24, r28
154e: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x2, y2, x1, y2, mode);
1552: 2e 2d mov r18, r14
1554: 4d 2d mov r20, r13
1556: 6e 2d mov r22, r14
1558: 8c 2f mov r24, r28
155a: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line (x1, y2, x1, y1, mode);
155e: 21 2f mov r18, r17
1560: 4d 2d mov r20, r13
1562: 6e 2d mov r22, r14
1564: 8d 2d mov r24, r13
1566: 0e 94 6f 09 call 0x12de <lcd_line>
156a: df 91 pop r29
156c: cf 91 pop r28
156e: 1f 91 pop r17
1570: 0f 91 pop r16
1572: ff 90 pop r15
1574: ef 90 pop r14
1576: df 90 pop r13
1578: cf 90 pop r12
157a: 08 95 ret
 
0000157c <draw_circle>:
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + outline of a circle
// + Based on Bresenham-algorithm found in wikipedia
// + modified by thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
void draw_circle(int16_t x0, int16_t y0, int16_t radius, uint8_t mode)
{
157c: 2f 92 push r2
157e: 3f 92 push r3
1580: 4f 92 push r4
1582: 5f 92 push r5
1584: 6f 92 push r6
1586: 7f 92 push r7
1588: 8f 92 push r8
158a: 9f 92 push r9
158c: af 92 push r10
158e: bf 92 push r11
1590: cf 92 push r12
1592: df 92 push r13
1594: ef 92 push r14
1596: ff 92 push r15
1598: 0f 93 push r16
159a: 1f 93 push r17
159c: cf 93 push r28
159e: df 93 push r29
15a0: 5c 01 movw r10, r24
15a2: 6b 01 movw r12, r22
15a4: e2 2e mov r14, r18
int16_t f = 1 - radius;
15a6: c1 e0 ldi r28, 0x01 ; 1
15a8: 8c 2e mov r8, r28
15aa: 91 2c mov r9, r1
15ac: 84 1a sub r8, r20
15ae: 95 0a sbc r9, r21
int16_t ddF_x = 0;
15b0: 22 24 eor r2, r2
15b2: 33 24 eor r3, r3
int16_t ddF_y = -2 * radius;
15b4: 8e ef ldi r24, 0xFE ; 254
15b6: 9f ef ldi r25, 0xFF ; 255
15b8: 48 9f mul r20, r24
15ba: 20 01 movw r4, r0
15bc: 49 9f mul r20, r25
15be: 50 0c add r5, r0
15c0: 58 9f mul r21, r24
15c2: 50 0c add r5, r0
15c4: 11 24 eor r1, r1
int16_t x = 0;
15c6: 31 01 movw r6, r2
int16_t y = radius;
15c8: ea 01 movw r28, r20
 
lcd_plot(x0, y0 + radius, mode);
15ca: 86 2f mov r24, r22
15cc: 84 0f add r24, r20
15ce: 42 2f mov r20, r18
15d0: 68 2f mov r22, r24
15d2: 8a 2d mov r24, r10
15d4: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0, y0 - radius, mode);
15d8: 8c 2d mov r24, r12
15da: 8c 1b sub r24, r28
15dc: 4e 2d mov r20, r14
15de: 68 2f mov r22, r24
15e0: 8a 2d mov r24, r10
15e2: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0 + radius, y0, mode);
15e6: 4e 2d mov r20, r14
15e8: 6c 2d mov r22, r12
15ea: 8a 2d mov r24, r10
15ec: 8c 0f add r24, r28
15ee: 0e 94 26 09 call 0x124c <lcd_plot>
lcd_plot(x0 - radius, y0, mode);
15f2: 4e 2d mov r20, r14
15f4: 6c 2d mov r22, r12
15f6: 8a 2d mov r24, r10
15f8: 8c 1b sub r24, r28
15fa: 0e 94 26 09 call 0x124c <lcd_plot>
 
while(x < y)
{
if(f >= 0)
{
y --;
ddF_y += 2;
f += ddF_y;
}
x ++;
ddF_x += 2;
f += ddF_x + 1;
 
lcd_plot(x0 + x, y0 + y, mode);
lcd_plot(x0 - x, y0 + y, mode);
lcd_plot(x0 + x, y0 - y, mode);
lcd_plot(x0 - x, y0 - y, mode);
lcd_plot(x0 + y, y0 + x, mode);
lcd_plot(x0 - y, y0 + x, mode);
lcd_plot(x0 + y, y0 - x, mode);
lcd_plot(x0 - y, y0 - x, mode);
15fe: 2c 16 cp r2, r28
1600: 3d 06 cpc r3, r29
1602: 0c f0 brlt .+2 ; 0x1606 <draw_circle+0x8a>
1604: 51 c0 rjmp .+162 ; 0x16a8 <draw_circle+0x12c>
1606: 97 fc sbrc r9, 7
1608: 07 c0 rjmp .+14 ; 0x1618 <draw_circle+0x9c>
160a: 21 97 sbiw r28, 0x01 ; 1
160c: 82 e0 ldi r24, 0x02 ; 2
160e: 90 e0 ldi r25, 0x00 ; 0
1610: 48 0e add r4, r24
1612: 59 1e adc r5, r25
1614: 84 0c add r8, r4
1616: 95 1c adc r9, r5
1618: 08 94 sec
161a: 61 1c adc r6, r1
161c: 71 1c adc r7, r1
161e: 82 e0 ldi r24, 0x02 ; 2
1620: 90 e0 ldi r25, 0x00 ; 0
1622: 28 0e add r2, r24
1624: 39 1e adc r3, r25
1626: 82 0c add r8, r2
1628: 93 1c adc r9, r3
162a: 08 94 sec
162c: 81 1c adc r8, r1
162e: 91 1c adc r9, r1
1630: 1c 2d mov r17, r12
1632: 1c 0f add r17, r28
1634: fa 2c mov r15, r10
1636: f6 0c add r15, r6
1638: 4e 2d mov r20, r14
163a: 61 2f mov r22, r17
163c: 8f 2d mov r24, r15
163e: 0e 94 26 09 call 0x124c <lcd_plot>
1642: 0a 2d mov r16, r10
1644: 06 19 sub r16, r6
1646: 4e 2d mov r20, r14
1648: 61 2f mov r22, r17
164a: 80 2f mov r24, r16
164c: 0e 94 26 09 call 0x124c <lcd_plot>
1650: 1c 2d mov r17, r12
1652: 1c 1b sub r17, r28
1654: 4e 2d mov r20, r14
1656: 61 2f mov r22, r17
1658: 8f 2d mov r24, r15
165a: 0e 94 26 09 call 0x124c <lcd_plot>
165e: 4e 2d mov r20, r14
1660: 61 2f mov r22, r17
1662: 80 2f mov r24, r16
1664: 0e 94 26 09 call 0x124c <lcd_plot>
1668: 1c 2d mov r17, r12
166a: 16 0d add r17, r6
166c: fa 2c mov r15, r10
166e: fc 0e add r15, r28
1670: 4e 2d mov r20, r14
1672: 61 2f mov r22, r17
1674: 8f 2d mov r24, r15
1676: 0e 94 26 09 call 0x124c <lcd_plot>
167a: 0a 2d mov r16, r10
167c: 0c 1b sub r16, r28
167e: 4e 2d mov r20, r14
1680: 61 2f mov r22, r17
1682: 80 2f mov r24, r16
1684: 0e 94 26 09 call 0x124c <lcd_plot>
1688: 1c 2d mov r17, r12
168a: 16 19 sub r17, r6
168c: 4e 2d mov r20, r14
168e: 61 2f mov r22, r17
1690: 8f 2d mov r24, r15
1692: 0e 94 26 09 call 0x124c <lcd_plot>
1696: 4e 2d mov r20, r14
1698: 61 2f mov r22, r17
169a: 80 2f mov r24, r16
169c: 0e 94 26 09 call 0x124c <lcd_plot>
16a0: 6c 16 cp r6, r28
16a2: 7d 06 cpc r7, r29
16a4: 0c f4 brge .+2 ; 0x16a8 <draw_circle+0x12c>
16a6: af cf rjmp .-162 ; 0x1606 <draw_circle+0x8a>
16a8: df 91 pop r29
16aa: cf 91 pop r28
16ac: 1f 91 pop r17
16ae: 0f 91 pop r16
16b0: ff 90 pop r15
16b2: ef 90 pop r14
16b4: df 90 pop r13
16b6: cf 90 pop r12
16b8: bf 90 pop r11
16ba: af 90 pop r10
16bc: 9f 90 pop r9
16be: 8f 90 pop r8
16c0: 7f 90 pop r7
16c2: 6f 90 pop r6
16c4: 5f 90 pop r5
16c6: 4f 90 pop r4
16c8: 3f 90 pop r3
16ca: 2f 90 pop r2
16cc: 08 95 ret
 
000016ce <draw_fcircle>:
}
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + filled Circle
// + modified circle-algorithm thkais (2007)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
void draw_fcircle(int16_t x0, int16_t y0, int16_t radius)
{
16ce: 2f 92 push r2
16d0: 3f 92 push r3
16d2: 4f 92 push r4
16d4: 5f 92 push r5
16d6: 6f 92 push r6
16d8: 7f 92 push r7
16da: 8f 92 push r8
16dc: 9f 92 push r9
16de: af 92 push r10
16e0: bf 92 push r11
16e2: cf 92 push r12
16e4: df 92 push r13
16e6: ff 92 push r15
16e8: 0f 93 push r16
16ea: 1f 93 push r17
16ec: cf 93 push r28
16ee: df 93 push r29
16f0: 5c 01 movw r10, r24
16f2: 6b 01 movw r12, r22
int16_t f = 1 - radius;
16f4: 11 e0 ldi r17, 0x01 ; 1
16f6: 61 2e mov r6, r17
16f8: 71 2c mov r7, r1
16fa: 64 1a sub r6, r20
16fc: 75 0a sbc r7, r21
int16_t ddF_x = 0;
16fe: 22 24 eor r2, r2
1700: 33 24 eor r3, r3
int16_t ddF_y = -2 * radius;
1702: 8e ef ldi r24, 0xFE ; 254
1704: 9f ef ldi r25, 0xFF ; 255
1706: 48 9f mul r20, r24
1708: 20 01 movw r4, r0
170a: 49 9f mul r20, r25
170c: 50 0c add r5, r0
170e: 58 9f mul r21, r24
1710: 50 0c add r5, r0
1712: 11 24 eor r1, r1
int16_t x = 0;
1714: 41 01 movw r8, r2
int16_t y = radius;
1716: ea 01 movw r28, r20
lcd_line(x0, y0 + radius,x0, y0 - radius,1);
1718: 86 2f mov r24, r22
171a: 84 1b sub r24, r20
171c: 96 2f mov r25, r22
171e: 94 0f add r25, r20
1720: 01 e0 ldi r16, 0x01 ; 1
1722: 28 2f mov r18, r24
1724: 4a 2d mov r20, r10
1726: 69 2f mov r22, r25
1728: 8a 2d mov r24, r10
172a: 0e 94 6f 09 call 0x12de <lcd_line>
lcd_line(x0 + radius, y0,x0 - radius, y0,1);
172e: 8a 2d mov r24, r10
1730: 8c 1b sub r24, r28
1732: 2c 2d mov r18, r12
1734: 48 2f mov r20, r24
1736: 6c 2d mov r22, r12
1738: 8a 2d mov r24, r10
173a: 8c 0f add r24, r28
173c: 0e 94 6f 09 call 0x12de <lcd_line>
while(x < y)
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x + 1;
lcd_line(x0 + x, y0 + y,x0 - x, y0 + y,1);
lcd_line(x0 + x, y0 - y,x0 - x, y0 - y,1);
lcd_line(x0 + y, y0 + x,x0 - y, y0 + x,1);
lcd_line(x0 + y, y0 - x,x0 - y, y0 - x,1);
1740: 2c 16 cp r2, r28
1742: 3d 06 cpc r3, r29
1744: 0c f0 brlt .+2 ; 0x1748 <draw_fcircle+0x7a>
1746: 42 c0 rjmp .+132 ; 0x17cc <draw_fcircle+0xfe>
1748: 77 fc sbrc r7, 7
174a: 07 c0 rjmp .+14 ; 0x175a <draw_fcircle+0x8c>
174c: 21 97 sbiw r28, 0x01 ; 1
174e: 82 e0 ldi r24, 0x02 ; 2
1750: 90 e0 ldi r25, 0x00 ; 0
1752: 48 0e add r4, r24
1754: 59 1e adc r5, r25
1756: 64 0c add r6, r4
1758: 75 1c adc r7, r5
175a: 08 94 sec
175c: 81 1c adc r8, r1
175e: 91 1c adc r9, r1
1760: 82 e0 ldi r24, 0x02 ; 2
1762: 90 e0 ldi r25, 0x00 ; 0
1764: 28 0e add r2, r24
1766: 39 1e adc r3, r25
1768: 62 0c add r6, r2
176a: 73 1c adc r7, r3
176c: 08 94 sec
176e: 61 1c adc r6, r1
1770: 71 1c adc r7, r1
1772: 8c 2d mov r24, r12
1774: 8c 0f add r24, r28
1776: 1a 2d mov r17, r10
1778: 18 19 sub r17, r8
177a: fa 2c mov r15, r10
177c: f8 0c add r15, r8
177e: 01 e0 ldi r16, 0x01 ; 1
1780: 28 2f mov r18, r24
1782: 41 2f mov r20, r17
1784: 68 2f mov r22, r24
1786: 8f 2d mov r24, r15
1788: 0e 94 6f 09 call 0x12de <lcd_line>
178c: 8c 2d mov r24, r12
178e: 8c 1b sub r24, r28
1790: 28 2f mov r18, r24
1792: 41 2f mov r20, r17
1794: 68 2f mov r22, r24
1796: 8f 2d mov r24, r15
1798: 0e 94 6f 09 call 0x12de <lcd_line>
179c: 8c 2d mov r24, r12
179e: 88 0d add r24, r8
17a0: 1a 2d mov r17, r10
17a2: 1c 1b sub r17, r28
17a4: fa 2c mov r15, r10
17a6: fc 0e add r15, r28
17a8: 28 2f mov r18, r24
17aa: 41 2f mov r20, r17
17ac: 68 2f mov r22, r24
17ae: 8f 2d mov r24, r15
17b0: 0e 94 6f 09 call 0x12de <lcd_line>
17b4: 8c 2d mov r24, r12
17b6: 88 19 sub r24, r8
17b8: 28 2f mov r18, r24
17ba: 41 2f mov r20, r17
17bc: 68 2f mov r22, r24
17be: 8f 2d mov r24, r15
17c0: 0e 94 6f 09 call 0x12de <lcd_line>
17c4: 8c 16 cp r8, r28
17c6: 9d 06 cpc r9, r29
17c8: 0c f4 brge .+2 ; 0x17cc <draw_fcircle+0xfe>
17ca: be cf rjmp .-132 ; 0x1748 <draw_fcircle+0x7a>
17cc: df 91 pop r29
17ce: cf 91 pop r28
17d0: 1f 91 pop r17
17d2: 0f 91 pop r16
17d4: ff 90 pop r15
17d6: df 90 pop r13
17d8: cf 90 pop r12
17da: bf 90 pop r11
17dc: af 90 pop r10
17de: 9f 90 pop r9
17e0: 8f 90 pop r8
17e2: 7f 90 pop r7
17e4: 6f 90 pop r6
17e6: 5f 90 pop r5
17e8: 4f 90 pop r4
17ea: 3f 90 pop r3
17ec: 2f 90 pop r2
17ee: 08 95 ret
 
000017f0 <__vector_13>:
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
17f0: 1f 92 push r1
17f2: 0f 92 push r0
17f4: 0f b6 in r0, 0x3f ; 63
17f6: 0f 92 push r0
17f8: 11 24 eor r1, r1
17fa: 8f 93 push r24
17fc: 9f 93 push r25
17fe: ef 93 push r30
1800: ff 93 push r31
rs232_buffer[write_index++] = UDR;
1802: 90 91 6c 05 lds r25, 0x056C
1806: ee e6 ldi r30, 0x6E ; 110
1808: f5 e0 ldi r31, 0x05 ; 5
180a: e9 0f add r30, r25
180c: f1 1d adc r31, r1
180e: 8c b1 in r24, 0x0c ; 12
1810: 80 83 st Z, r24
1812: 9f 5f subi r25, 0xFF ; 255
1814: 90 93 6c 05 sts 0x056C, r25
write_index &= 15;
1818: 80 91 6c 05 lds r24, 0x056C
181c: 8f 70 andi r24, 0x0F ; 15
181e: 80 93 6c 05 sts 0x056C, r24
1822: ff 91 pop r31
1824: ef 91 pop r30
1826: 9f 91 pop r25
1828: 8f 91 pop r24
182a: 0f 90 pop r0
182c: 0f be out 0x3f, r0 ; 63
182e: 0f 90 pop r0
1830: 1f 90 pop r1
1832: 18 95 reti
 
00001834 <RS232_init>:
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
1834: 88 e9 ldi r24, 0x98 ; 152
1836: 8a b9 out 0x0a, r24 ; 10
UBRRL = 7; // 57600 Baud @ 7,372800 MHz
1838: 87 e0 ldi r24, 0x07 ; 7
183a: 89 b9 out 0x09, r24 ; 9
183c: 08 95 ret
 
0000183e <RS232_get>:
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
183e: 8a e0 ldi r24, 0x0A ; 10
1840: 80 93 e5 04 sts 0x04E5, r24
while ((read_index == write_index) && (rs232_timer > 0));
1844: 90 91 6d 05 lds r25, 0x056D
1848: 80 91 6c 05 lds r24, 0x056C
184c: 98 17 cp r25, r24
184e: 21 f4 brne .+8 ; 0x1858 <RS232_get+0x1a>
1850: 80 91 e5 04 lds r24, 0x04E5
1854: 88 23 and r24, r24
1856: b1 f7 brne .-20 ; 0x1844 <RS232_get+0x6>
if (rs232_timer != 0)
1858: 80 91 e5 04 lds r24, 0x04E5
185c: 88 23 and r24, r24
185e: 81 f0 breq .+32 ; 0x1880 <RS232_get+0x42>
{
c = rs232_buffer[read_index++];
1860: 80 91 6d 05 lds r24, 0x056D
1864: e8 2f mov r30, r24
1866: ff 27 eor r31, r31
1868: e2 59 subi r30, 0x92 ; 146
186a: fa 4f sbci r31, 0xFA ; 250
186c: 8f 5f subi r24, 0xFF ; 255
186e: 80 93 6d 05 sts 0x056D, r24
1872: e0 81 ld r30, Z
read_index &= 15;
1874: 80 91 6d 05 lds r24, 0x056D
1878: 8f 70 andi r24, 0x0F ; 15
187a: 80 93 6d 05 sts 0x056D, r24
187e: 01 c0 rjmp .+2 ; 0x1882 <RS232_get+0x44>
}
else
{
c=0;
1880: e8 2f mov r30, r24
}
return c;
}
1882: 8e 2f mov r24, r30
1884: 99 27 eor r25, r25
1886: 08 95 ret
 
00001888 <RS232_send>:
void RS232_send (uint8_t data)
{
while ((UCSRA & (1<<UDRE)) == 0);
1888: 5d 9b sbis 0x0b, 5 ; 11
188a: fe cf rjmp .-4 ; 0x1888 <RS232_send>
UDR = data;
188c: 8c b9 out 0x0c, r24 ; 12
188e: 08 95 ret
 
00001890 <RS232_text>:
}
void RS232_text (uint8_t *text)
{
1890: cf 93 push r28
1892: df 93 push r29
1894: ec 01 movw r28, r24
while (*text)
{
RS232_send(*text);
text++;
1896: 88 81 ld r24, Y
1898: 88 23 and r24, r24
189a: 31 f0 breq .+12 ; 0x18a8 <RS232_text+0x18>
189c: 89 91 ld r24, Y+
189e: 0e 94 44 0c call 0x1888 <RS232_send>
18a2: 88 81 ld r24, Y
18a4: 88 23 and r24, r24
18a6: d1 f7 brne .-12 ; 0x189c <RS232_text+0xc>
18a8: df 91 pop r29
18aa: cf 91 pop r28
18ac: 08 95 ret
 
000018ae <base64_decode>:
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
18ae: a8 2f mov r26, r24
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
18b0: 62 e0 ldi r22, 0x02 ; 2
q = 0;
18b2: 70 e0 ldi r23, 0x00 ; 0
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
18b4: 6a 17 cp r22, r26
18b6: b0 f5 brcc .+108 ; 0x1924 <base64_decode+0x76>
18b8: e6 2f mov r30, r22
18ba: ff 27 eor r31, r31
18bc: e7 51 subi r30, 0x17 ; 23
18be: fb 4f sbci r31, 0xFB ; 251
18c0: 80 81 ld r24, Z
18c2: 8d 53 subi r24, 0x3D ; 61
18c4: 31 81 ldd r19, Z+1 ; 0x01
18c6: 3d 53 subi r19, 0x3D ; 61
18c8: 52 81 ldd r21, Z+2 ; 0x02
18ca: 5d 53 subi r21, 0x3D ; 61
18cc: 43 81 ldd r20, Z+3 ; 0x03
18ce: 4d 53 subi r20, 0x3D ; 61
18d0: 6c 5f subi r22, 0xFC ; 252
18d2: e7 2f mov r30, r23
18d4: ff 27 eor r31, r31
18d6: ed 59 subi r30, 0x9D ; 157
18d8: fb 4f sbci r31, 0xFB ; 251
18da: 99 27 eor r25, r25
18dc: 88 0f add r24, r24
18de: 99 1f adc r25, r25
18e0: 88 0f add r24, r24
18e2: 99 1f adc r25, r25
18e4: 23 2f mov r18, r19
18e6: 22 95 swap r18
18e8: 2f 70 andi r18, 0x0F ; 15
18ea: 28 2b or r18, r24
18ec: 20 83 st Z, r18
18ee: 83 2f mov r24, r19
18f0: 99 27 eor r25, r25
18f2: 8f 70 andi r24, 0x0F ; 15
18f4: 90 70 andi r25, 0x00 ; 0
18f6: 34 e0 ldi r19, 0x04 ; 4
18f8: 88 0f add r24, r24
18fa: 99 1f adc r25, r25
18fc: 3a 95 dec r19
18fe: e1 f7 brne .-8 ; 0x18f8 <base64_decode+0x4a>
1900: 25 2f mov r18, r21
1902: 26 95 lsr r18
1904: 26 95 lsr r18
1906: 28 2b or r18, r24
1908: 21 83 std Z+1, r18 ; 0x01
190a: 85 2f mov r24, r21
190c: 99 27 eor r25, r25
190e: 83 70 andi r24, 0x03 ; 3
1910: 90 70 andi r25, 0x00 ; 0
1912: 26 e0 ldi r18, 0x06 ; 6
1914: 88 0f add r24, r24
1916: 99 1f adc r25, r25
1918: 2a 95 dec r18
191a: e1 f7 brne .-8 ; 0x1914 <base64_decode+0x66>
191c: 48 2b or r20, r24
191e: 42 83 std Z+2, r20 ; 0x02
1920: 7d 5f subi r23, 0xFD ; 253
1922: c8 cf rjmp .-112 ; 0x18b4 <base64_decode+0x6>
}
return q; // Rückgabe der Anzahl der Datenbytes
}
1924: 87 2f mov r24, r23
1926: 99 27 eor r25, r25
1928: 08 95 ret
 
0000192a <get_message>:
192a: cf 93 push r28
192c: 84 e1 ldi r24, 0x14 ; 20
192e: 80 93 61 00 sts 0x0061, r24
1932: 0e 94 1f 0c call 0x183e <RS232_get>
1936: 83 32 cpi r24, 0x23 ; 35
1938: 21 f0 breq .+8 ; 0x1942 <get_message+0x18>
193a: 80 91 61 00 lds r24, 0x0061
193e: 88 23 and r24, r24
1940: c1 f7 brne .-16 ; 0x1932 <get_message+0x8>
1942: 80 91 61 00 lds r24, 0x0061
1946: 88 23 and r24, r24
1948: 99 f0 breq .+38 ; 0x1970 <get_message+0x46>
194a: c0 e0 ldi r28, 0x00 ; 0
194c: 0e 94 1f 0c call 0x183e <RS232_get>
1950: ec 2f mov r30, r28
1952: ff 27 eor r31, r31
1954: e7 51 subi r30, 0x17 ; 23
1956: fb 4f sbci r31, 0xFB ; 251
1958: 80 83 st Z, r24
195a: cf 5f subi r28, 0xFF ; 255
195c: c7 fd sbrc r28, 7
195e: cf e7 ldi r28, 0x7F ; 127
1960: 8d 30 cpi r24, 0x0D ; 13
1962: a1 f7 brne .-24 ; 0x194c <get_message+0x22>
1964: 8c 2f mov r24, r28
1966: 0e 94 57 0c call 0x18ae <base64_decode>
196a: 80 e0 ldi r24, 0x00 ; 0
196c: 90 e0 ldi r25, 0x00 ; 0
196e: 02 c0 rjmp .+4 ; 0x1974 <get_message+0x4a>
1970: 81 e0 ldi r24, 0x01 ; 1
1972: 90 e0 ldi r25, 0x00 ; 0
1974: cf 91 pop r28
1976: 08 95 ret
 
00001978 <base64_send>:
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
1978: ff 92 push r15
197a: 0f 93 push r16
197c: 1f 93 push r17
197e: cf 93 push r28
1980: a8 2f mov r26, r24
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
1982: 80 91 63 04 lds r24, 0x0463
1986: 80 93 e9 04 sts 0x04E9, r24
r_buffer[1] = p_buffer[1];
198a: 80 91 64 04 lds r24, 0x0464
198e: 80 93 ea 04 sts 0x04EA, r24
r_buffer[2] = p_buffer[2];
1992: 80 91 65 04 lds r24, 0x0465
1996: 80 93 eb 04 sts 0x04EB, r24
 
bpointer = 3;
199a: 43 e0 ldi r20, 0x03 ; 3
199c: f4 2e mov r15, r20
spointer = 3;
199e: 7f 2d mov r23, r15
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
19a0: fa 16 cp r15, r26
19a2: e0 f5 brcc .+120 ; 0x1a1c <base64_send+0xa4>
19a4: e7 2f mov r30, r23
19a6: ff 27 eor r31, r31
19a8: ed 59 subi r30, 0x9D ; 157
19aa: fb 4f sbci r31, 0xFB ; 251
19ac: 90 81 ld r25, Z
19ae: 21 81 ldd r18, Z+1 ; 0x01
19b0: 62 81 ldd r22, Z+2 ; 0x02
19b2: 7d 5f subi r23, 0xFD ; 253
19b4: ef 2d mov r30, r15
19b6: ff 27 eor r31, r31
19b8: e7 51 subi r30, 0x17 ; 23
19ba: fb 4f sbci r31, 0xFB ; 251
19bc: 89 2f mov r24, r25
19be: 86 95 lsr r24
19c0: 86 95 lsr r24
19c2: 83 5c subi r24, 0xC3 ; 195
19c4: 80 83 st Z, r24
19c6: 89 2f mov r24, r25
19c8: 99 27 eor r25, r25
19ca: 83 70 andi r24, 0x03 ; 3
19cc: 90 70 andi r25, 0x00 ; 0
19ce: 34 e0 ldi r19, 0x04 ; 4
19d0: 88 0f add r24, r24
19d2: 99 1f adc r25, r25
19d4: 3a 95 dec r19
19d6: e1 f7 brne .-8 ; 0x19d0 <base64_send+0x58>
19d8: 42 2f mov r20, r18
19da: 55 27 eor r21, r21
19dc: 9a 01 movw r18, r20
19de: 94 e0 ldi r25, 0x04 ; 4
19e0: 36 95 lsr r19
19e2: 27 95 ror r18
19e4: 9a 95 dec r25
19e6: e1 f7 brne .-8 ; 0x19e0 <base64_send+0x68>
19e8: 82 2b or r24, r18
19ea: 83 5c subi r24, 0xC3 ; 195
19ec: 81 83 std Z+1, r24 ; 0x01
19ee: 4f 70 andi r20, 0x0F ; 15
19f0: 50 70 andi r21, 0x00 ; 0
19f2: 44 0f add r20, r20
19f4: 55 1f adc r21, r21
19f6: 44 0f add r20, r20
19f8: 55 1f adc r21, r21
19fa: 86 2f mov r24, r22
19fc: 99 27 eor r25, r25
19fe: 16 e0 ldi r17, 0x06 ; 6
1a00: 96 95 lsr r25
1a02: 87 95 ror r24
1a04: 1a 95 dec r17
1a06: e1 f7 brne .-8 ; 0x1a00 <base64_send+0x88>
1a08: 84 2b or r24, r20
1a0a: 83 5c subi r24, 0xC3 ; 195
1a0c: 82 83 std Z+2, r24 ; 0x02
1a0e: 6f 73 andi r22, 0x3F ; 63
1a10: 63 5c subi r22, 0xC3 ; 195
1a12: 63 83 std Z+3, r22 ; 0x03
1a14: 84 e0 ldi r24, 0x04 ; 4
1a16: f8 0e add r15, r24
1a18: 7a 17 cp r23, r26
1a1a: 20 f2 brcs .-120 ; 0x19a4 <base64_send+0x2c>
}
 
checksum = 0;
1a1c: 20 e0 ldi r18, 0x00 ; 0
1a1e: 30 e0 ldi r19, 0x00 ; 0
for(a=0;a<bpointer;a++)
1a20: c0 e0 ldi r28, 0x00 ; 0
1a22: cf 15 cp r28, r15
1a24: 40 f4 brcc .+16 ; 0x1a36 <base64_send+0xbe>
1a26: e9 ee ldi r30, 0xE9 ; 233
1a28: f4 e0 ldi r31, 0x04 ; 4
checksum += r_buffer[a];
1a2a: 81 91 ld r24, Z+
1a2c: 28 0f add r18, r24
1a2e: 31 1d adc r19, r1
1a30: cf 5f subi r28, 0xFF ; 255
1a32: cf 15 cp r28, r15
1a34: d0 f3 brcs .-12 ; 0x1a2a <base64_send+0xb2>
checksum %= 4096;
1a36: 3f 70 andi r19, 0x0F ; 15
r_buffer[bpointer] = (checksum / 64) + 61;
1a38: ef 2d mov r30, r15
1a3a: ff 27 eor r31, r31
1a3c: e7 51 subi r30, 0x17 ; 23
1a3e: fb 4f sbci r31, 0xFB ; 251
1a40: c9 01 movw r24, r18
1a42: c6 e0 ldi r28, 0x06 ; 6
1a44: 96 95 lsr r25
1a46: 87 95 ror r24
1a48: ca 95 dec r28
1a4a: e1 f7 brne .-8 ; 0x1a44 <base64_send+0xcc>
1a4c: 83 5c subi r24, 0xC3 ; 195
1a4e: 80 83 st Z, r24
r_buffer[bpointer + 1] = (checksum % 64) + 61;
1a50: 2f 73 andi r18, 0x3F ; 63
1a52: 30 70 andi r19, 0x00 ; 0
1a54: 82 2f mov r24, r18
1a56: 83 5c subi r24, 0xC3 ; 195
1a58: 81 83 std Z+1, r24 ; 0x01
r_buffer[bpointer + 2] = 13;
1a5a: 8d e0 ldi r24, 0x0D ; 13
1a5c: 82 83 std Z+2, r24 ; 0x02
r_buffer[bpointer + 3] = 0;
1a5e: 13 82 std Z+3, r1 ; 0x03
bpointer += 3;
1a60: 83 e0 ldi r24, 0x03 ; 3
1a62: f8 0e add r15, r24
for(a=0;a<bpointer;a++)
1a64: c3 81 ldd r28, Z+3 ; 0x03
1a66: cf 15 cp r28, r15
1a68: 50 f4 brcc .+20 ; 0x1a7e <base64_send+0x106>
1a6a: 09 ee ldi r16, 0xE9 ; 233
1a6c: 14 e0 ldi r17, 0x04 ; 4
RS232_send(r_buffer[a]);
1a6e: f8 01 movw r30, r16
1a70: 81 91 ld r24, Z+
1a72: 8f 01 movw r16, r30
1a74: 0e 94 44 0c call 0x1888 <RS232_send>
1a78: cf 5f subi r28, 0xFF ; 255
1a7a: cf 15 cp r28, r15
1a7c: c0 f3 brcs .-16 ; 0x1a6e <base64_send+0xf6>
1a7e: cf 91 pop r28
1a80: 1f 91 pop r17
1a82: 0f 91 pop r16
1a84: ff 90 pop r15
1a86: 08 95 ret
 
00001a88 <displ_get_text>:
uint8_t displ_page;
 
 
void displ_get_text(uint8_t number)
{
1a88: 1f 93 push r17
1a8a: cf 93 push r28
1a8c: df 93 push r29
1a8e: cd b7 in r28, 0x3d ; 61
1a90: de b7 in r29, 0x3e ; 62
1a92: 61 97 sbiw r28, 0x11 ; 17
1a94: 0f b6 in r0, 0x3f ; 63
1a96: f8 94 cli
1a98: de bf out 0x3e, r29 ; 62
1a9a: 0f be out 0x3f, r0 ; 63
1a9c: cd bf out 0x3d, r28 ; 61
1a9e: 18 2f mov r17, r24
uint8_t text[17];
uint8_t i;
p_buffer[0] = '#';
1aa0: 83 e2 ldi r24, 0x23 ; 35
1aa2: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
1aa6: 81 e6 ldi r24, 0x61 ; 97
1aa8: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 'a';
1aac: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = number;
1ab0: 10 93 66 04 sts 0x0466, r17
p_buffer[4] = 0;
1ab4: 10 92 67 04 sts 0x0467, r1
p_buffer[5] = 0;
1ab8: 10 92 68 04 sts 0x0468, r1
base64_send(6);
1abc: 86 e0 ldi r24, 0x06 ; 6
1abe: 0e 94 bc 0c call 0x1978 <base64_send>
 
do
{
get_message();
1ac2: 0e 94 95 0c call 0x192a <get_message>
}
1ac6: 80 91 ea 04 lds r24, 0x04EA
1aca: 81 34 cpi r24, 0x41 ; 65
1acc: d1 f7 brne .-12 ; 0x1ac2 <displ_get_text+0x3a>
1ace: de 01 movw r26, r28
1ad0: 11 96 adiw r26, 0x01 ; 1
1ad2: e3 e6 ldi r30, 0x63 ; 99
1ad4: f4 e0 ldi r31, 0x04 ; 4
1ad6: 9f e0 ldi r25, 0x0F ; 15
while (r_buffer[1] != 'A');
 
for (i=0;i<16;i++)
text[i] = p_buffer[i];
1ad8: 81 91 ld r24, Z+
1ada: 8d 93 st X+, r24
1adc: 91 50 subi r25, 0x01 ; 1
1ade: 97 ff sbrs r25, 7
1ae0: fb cf rjmp .-10 ; 0x1ad8 <displ_get_text+0x50>
text[16] = 0x00;
1ae2: 19 8a std Y+17, r1 ; 0x11
lcd_print_at(0,(number & 0x07),text,0);
1ae4: 17 70 andi r17, 0x07 ; 7
1ae6: 29 89 ldd r18, Y+17 ; 0x11
1ae8: ae 01 movw r20, r28
1aea: 4f 5f subi r20, 0xFF ; 255
1aec: 5f 4f sbci r21, 0xFF ; 255
1aee: 61 2f mov r22, r17
1af0: 82 2f mov r24, r18
1af2: 0e 94 1d 09 call 0x123a <lcd_print_at>
1af6: 61 96 adiw r28, 0x11 ; 17
1af8: 0f b6 in r0, 0x3f ; 63
1afa: f8 94 cli
1afc: de bf out 0x3e, r29 ; 62
1afe: 0f be out 0x3f, r0 ; 63
1b00: cd bf out 0x3d, r28 ; 61
1b02: df 91 pop r29
1b04: cf 91 pop r28
1b06: 1f 91 pop r17
1b08: 08 95 ret
 
00001b0a <displ_values>:
}
 
void displ_values(void)
{
1b0a: cf 92 push r12
1b0c: df 92 push r13
1b0e: ef 92 push r14
1b10: ff 92 push r15
1b12: 0f 93 push r16
1b14: 1f 93 push r17
1b16: cf 93 push r28
1b18: df 93 push r29
1b1a: cd b7 in r28, 0x3d ; 61
1b1c: de b7 in r29, 0x3e ; 62
1b1e: 61 97 sbiw r28, 0x11 ; 17
1b20: 0f b6 in r0, 0x3f ; 63
1b22: f8 94 cli
1b24: de bf out 0x3e, r29 ; 62
1b26: 0f be out 0x3f, r0 ; 63
1b28: cd bf out 0x3d, r28 ; 61
uint8_t displ_page, i;
int16_t value;
uint8_t text[17];
 
displ_page = 0; // Page 0..3 (4 Pages zu je 8 Werte)
1b2a: 00 e0 ldi r16, 0x00 ; 0
lcd_cls(); // LCD löschen
1b2c: 0e 94 36 07 call 0xe6c <lcd_cls>
do
{
for (i=0;i<8;i++) // Texte lesen und anzeigen
1b30: 10 e0 ldi r17, 0x00 ; 0
displ_get_text(i+displ_page*8);
1b32: c0 2e mov r12, r16
1b34: dd 24 eor r13, r13
1b36: c6 01 movw r24, r12
1b38: 53 e0 ldi r21, 0x03 ; 3
1b3a: 88 0f add r24, r24
1b3c: 99 1f adc r25, r25
1b3e: 5a 95 dec r21
1b40: e1 f7 brne .-8 ; 0x1b3a <displ_values+0x30>
1b42: 81 0f add r24, r17
1b44: 0e 94 44 0d call 0x1a88 <displ_get_text>
1b48: 1f 5f subi r17, 0xFF ; 255
1b4a: 18 30 cpi r17, 0x08 ; 8
1b4c: 90 f3 brcs .-28 ; 0x1b32 <displ_values+0x28>
do
{
get_message();
1b4e: 0e 94 95 0c call 0x192a <get_message>
if(r_buffer[1] == 'D')
1b52: 80 91 ea 04 lds r24, 0x04EA
1b56: 84 34 cpi r24, 0x44 ; 68
1b58: 91 f5 brne .+100 ; 0x1bbe <displ_values+0xb4>
{
for (i=0;i<8;i++)
1b5a: 10 e0 ldi r17, 0x00 ; 0
1b5c: ee 24 eor r14, r14
1b5e: ff 24 eor r15, r15
{
value = p_buffer[i*2+displ_page*16+2] + 256*p_buffer[i*2+displ_page*16+3];
1b60: f6 01 movw r30, r12
1b62: 43 e0 ldi r20, 0x03 ; 3
1b64: ee 0f add r30, r30
1b66: ff 1f adc r31, r31
1b68: 4a 95 dec r20
1b6a: e1 f7 brne .-8 ; 0x1b64 <displ_values+0x5a>
1b6c: ee 0d add r30, r14
1b6e: ff 1d adc r31, r15
1b70: ee 0f add r30, r30
1b72: ff 1f adc r31, r31
1b74: ed 59 subi r30, 0x9D ; 157
1b76: fb 4f sbci r31, 0xFB ; 251
1b78: 22 81 ldd r18, Z+2 ; 0x02
1b7a: 83 81 ldd r24, Z+3 ; 0x03
1b7c: 99 27 eor r25, r25
1b7e: 98 2f mov r25, r24
1b80: 88 27 eor r24, r24
itoa(value,text,10);
1b82: 4a e0 ldi r20, 0x0A ; 10
1b84: 50 e0 ldi r21, 0x00 ; 0
1b86: be 01 movw r22, r28
1b88: 6f 5f subi r22, 0xFF ; 255
1b8a: 7f 4f sbci r23, 0xFF ; 255
1b8c: 82 0f add r24, r18
1b8e: 91 1d adc r25, r1
1b90: 0e 94 cf 12 call 0x259e <itoa>
lcd_print_atp(14,i,PSTR(" "),0);
1b94: 20 e0 ldi r18, 0x00 ; 0
1b96: 44 e5 ldi r20, 0x54 ; 84
1b98: 56 e0 ldi r21, 0x06 ; 6
1b9a: 61 2f mov r22, r17
1b9c: 8e e0 ldi r24, 0x0E ; 14
1b9e: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
lcd_print_at(14,i,text,0);
1ba2: 20 e0 ldi r18, 0x00 ; 0
1ba4: ae 01 movw r20, r28
1ba6: 4f 5f subi r20, 0xFF ; 255
1ba8: 5f 4f sbci r21, 0xFF ; 255
1baa: 61 2f mov r22, r17
1bac: 8e e0 ldi r24, 0x0E ; 14
1bae: 0e 94 1d 09 call 0x123a <lcd_print_at>
1bb2: 1f 5f subi r17, 0xFF ; 255
1bb4: 08 94 sec
1bb6: e1 1c adc r14, r1
1bb8: f1 1c adc r15, r1
1bba: 18 30 cpi r17, 0x08 ; 8
1bbc: 88 f2 brcs .-94 ; 0x1b60 <displ_values+0x56>
}
}
}
1bbe: 80 91 e6 04 lds r24, 0x04E6
1bc2: 88 23 and r24, r24
1bc4: 21 f2 breq .-120 ; 0x1b4e <displ_values+0x44>
while (key == 0x00);
if (key == 0x01)
1bc6: 80 91 e6 04 lds r24, 0x04E6
1bca: 81 30 cpi r24, 0x01 ; 1
1bcc: 09 f4 brne .+2 ; 0x1bd0 <displ_values+0xc6>
displ_page++;
1bce: 0f 5f subi r16, 0xFF ; 255
if (key == 0x02)
1bd0: 80 91 e6 04 lds r24, 0x04E6
1bd4: 82 30 cpi r24, 0x02 ; 2
1bd6: 09 f4 brne .+2 ; 0x1bda <displ_values+0xd0>
displ_page--;
1bd8: 01 50 subi r16, 0x01 ; 1
displ_page &= 0x03;
1bda: 03 70 andi r16, 0x03 ; 3
}
1bdc: 80 91 e6 04 lds r24, 0x04E6
1be0: 88 30 cpi r24, 0x08 ; 8
1be2: 09 f0 breq .+2 ; 0x1be6 <displ_values+0xdc>
1be4: a5 cf rjmp .-182 ; 0x1b30 <displ_values+0x26>
1be6: 61 96 adiw r28, 0x11 ; 17
1be8: 0f b6 in r0, 0x3f ; 63
1bea: f8 94 cli
1bec: de bf out 0x3e, r29 ; 62
1bee: 0f be out 0x3f, r0 ; 63
1bf0: cd bf out 0x3d, r28 ; 61
1bf2: df 91 pop r29
1bf4: cf 91 pop r28
1bf6: 1f 91 pop r17
1bf8: 0f 91 pop r16
1bfa: ff 90 pop r15
1bfc: ef 90 pop r14
1bfe: df 90 pop r13
1c00: cf 90 pop r12
1c02: 08 95 ret
 
00001c04 <read_parameter>:
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
1c04: cf 93 push r28
uint8_t timeout;
timeout = 0;
1c06: c0 e0 ldi r28, 0x00 ; 0
p_buffer[0] = '#'; // Parameter anfordern
1c08: 93 e2 ldi r25, 0x23 ; 35
1c0a: 90 93 63 04 sts 0x0463, r25
p_buffer[1] = 'a';
1c0e: 91 e6 ldi r25, 0x61 ; 97
1c10: 90 93 64 04 sts 0x0464, r25
p_buffer[2] = 'q';
1c14: 91 e7 ldi r25, 0x71 ; 113
1c16: 90 93 65 04 sts 0x0465, r25
p_buffer[3] = number;
1c1a: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 0;
1c1e: c0 93 67 04 sts 0x0467, r28
p_buffer[5] = 0;
1c22: c0 93 68 04 sts 0x0468, r28
base64_send(6);
1c26: 86 e0 ldi r24, 0x06 ; 6
1c28: 0e 94 bc 0c call 0x1978 <base64_send>
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
1c2c: 0e 94 95 0c call 0x192a <get_message>
1c30: 81 30 cpi r24, 0x01 ; 1
1c32: 09 f4 brne .+2 ; 0x1c36 <read_parameter+0x32>
timeout = 30; // Timeout sofort auf Endwert setzen
1c34: ce e1 ldi r28, 0x1E ; 30
timeout ++;
1c36: cf 5f subi r28, 0xFF ; 255
}
1c38: 80 91 ea 04 lds r24, 0x04EA
1c3c: 8c 54 subi r24, 0x4C ; 76
1c3e: 85 30 cpi r24, 0x05 ; 5
1c40: 10 f0 brcs .+4 ; 0x1c46 <read_parameter+0x42>
1c42: ce 31 cpi r28, 0x1E ; 30
1c44: 98 f3 brcs .-26 ; 0x1c2c <read_parameter+0x28>
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
1c46: ce 31 cpi r28, 0x1E ; 30
1c48: 18 f0 brcs .+6 ; 0x1c50 <read_parameter+0x4c>
return 1;
1c4a: 81 e0 ldi r24, 0x01 ; 1
1c4c: 90 e0 ldi r25, 0x00 ; 0
1c4e: 02 c0 rjmp .+4 ; 0x1c54 <read_parameter+0x50>
else
return 0;
1c50: 80 e0 ldi r24, 0x00 ; 0
1c52: 90 e0 ldi r25, 0x00 ; 0
1c54: cf 91 pop r28
1c56: 08 95 ret
 
00001c58 <write_parameter>:
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
1c58: 98 2f mov r25, r24
uint8_t i;
if (number <= 5)
1c5a: 86 30 cpi r24, 0x06 ; 6
1c5c: b8 f4 brcc .+46 ; 0x1c8c <write_parameter+0x34>
1c5e: e9 ea ldi r30, 0xA9 ; 169
1c60: f4 e0 ldi r31, 0x04 ; 4
1c62: 26 e4 ldi r18, 0x46 ; 70
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
1c64: 80 81 ld r24, Z
1c66: 83 83 std Z+3, r24 ; 0x03
1c68: 21 50 subi r18, 0x01 ; 1
1c6a: 31 97 sbiw r30, 0x01 ; 1
1c6c: 27 ff sbrs r18, 7
1c6e: fa cf rjmp .-12 ; 0x1c64 <write_parameter+0xc>
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
1c70: 83 e2 ldi r24, 0x23 ; 35
1c72: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
1c76: 81 e6 ldi r24, 0x61 ; 97
1c78: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = number + 'k'; // Nummer des Parameters
1c7c: 95 59 subi r25, 0x95 ; 149
1c7e: 90 93 65 04 sts 0x0465, r25
p_buffer[74] = 0;
1c82: 10 92 ad 04 sts 0x04AD, r1
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
1c86: 8b e4 ldi r24, 0x4B ; 75
1c88: 0e 94 bc 0c call 0x1978 <base64_send>
1c8c: 08 95 ret
 
00001c8e <binary>:
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
1c8e: 9b 01 movw r18, r22
1c90: 68 2f mov r22, r24
1c92: 77 27 eor r23, r23
1c94: 51 e0 ldi r21, 0x01 ; 1
1c96: f9 01 movw r30, r18
1c98: 20 e0 ldi r18, 0x00 ; 0
1c9a: 30 e0 ldi r19, 0x00 ; 0
1c9c: 47 e0 ldi r20, 0x07 ; 7
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
1c9e: cb 01 movw r24, r22
1ca0: 02 2e mov r0, r18
1ca2: 02 c0 rjmp .+4 ; 0x1ca8 <binary+0x1a>
1ca4: 95 95 asr r25
1ca6: 87 95 ror r24
1ca8: 0a 94 dec r0
1caa: e2 f7 brpl .-8 ; 0x1ca4 <binary+0x16>
1cac: 80 ff sbrs r24, 0
1cae: 02 c0 rjmp .+4 ; 0x1cb4 <binary+0x26>
feld[i] = 1;
1cb0: 50 83 st Z, r21
1cb2: 01 c0 rjmp .+2 ; 0x1cb6 <binary+0x28>
else
feld[i] = 0;
1cb4: 10 82 st Z, r1
1cb6: 41 50 subi r20, 0x01 ; 1
1cb8: 2f 5f subi r18, 0xFF ; 255
1cba: 3f 4f sbci r19, 0xFF ; 255
1cbc: 31 96 adiw r30, 0x01 ; 1
1cbe: 47 ff sbrs r20, 7
1cc0: ee cf rjmp .-36 ; 0x1c9e <binary+0x10>
1cc2: 08 95 ret
 
00001cc4 <bindec>:
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
1cc4: 50 e0 ldi r21, 0x00 ; 0
1cc6: 61 e0 ldi r22, 0x01 ; 1
1cc8: 70 e0 ldi r23, 0x00 ; 0
1cca: fc 01 movw r30, r24
1ccc: 20 e0 ldi r18, 0x00 ; 0
1cce: 30 e0 ldi r19, 0x00 ; 0
1cd0: 47 e0 ldi r20, 0x07 ; 7
for (i=0;i<8;i++)
{
if (feld[i] == 1)
1cd2: 81 91 ld r24, Z+
1cd4: 81 30 cpi r24, 0x01 ; 1
1cd6: 41 f4 brne .+16 ; 0x1ce8 <bindec+0x24>
result += 1<<i;
1cd8: cb 01 movw r24, r22
1cda: 02 2e mov r0, r18
1cdc: 02 c0 rjmp .+4 ; 0x1ce2 <bindec+0x1e>
1cde: 88 0f add r24, r24
1ce0: 99 1f adc r25, r25
1ce2: 0a 94 dec r0
1ce4: e2 f7 brpl .-8 ; 0x1cde <bindec+0x1a>
1ce6: 58 0f add r21, r24
1ce8: 41 50 subi r20, 0x01 ; 1
1cea: 2f 5f subi r18, 0xFF ; 255
1cec: 3f 4f sbci r19, 0xFF ; 255
1cee: 47 ff sbrs r20, 7
1cf0: f0 cf rjmp .-32 ; 0x1cd2 <bindec+0xe>
}
return result;
}
1cf2: 85 2f mov r24, r21
1cf4: 99 27 eor r25, r25
1cf6: 08 95 ret
 
00001cf8 <decimal>:
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
1cf8: 28 2f mov r18, r24
1cfa: fb 01 movw r30, r22
text[0] = data/100;
1cfc: 34 e6 ldi r19, 0x64 ; 100
1cfe: 63 2f mov r22, r19
1d00: 0e 94 16 13 call 0x262c <__udivmodqi4>
1d04: 58 2f mov r21, r24
data -= (text[0] * 100);
1d06: 83 9f mul r24, r19
1d08: c0 01 movw r24, r0
1d0a: 11 24 eor r1, r1
1d0c: 28 1b sub r18, r24
text[1] = data/10;
1d0e: 3a e0 ldi r19, 0x0A ; 10
1d10: 82 2f mov r24, r18
1d12: 63 2f mov r22, r19
1d14: 0e 94 16 13 call 0x262c <__udivmodqi4>
1d18: 48 2f mov r20, r24
data -= (text[1] *10);
1d1a: 83 9f mul r24, r19
1d1c: c0 01 movw r24, r0
1d1e: 11 24 eor r1, r1
1d20: 28 1b sub r18, r24
text[2] = data + 0x30;
1d22: 20 5d subi r18, 0xD0 ; 208
1d24: 22 83 std Z+2, r18 ; 0x02
text[0] += 0x30;
1d26: 85 2f mov r24, r21
1d28: 80 5d subi r24, 0xD0 ; 208
1d2a: 80 83 st Z, r24
text[1] += 0x30;
1d2c: 40 5d subi r20, 0xD0 ; 208
1d2e: 41 83 std Z+1, r20 ; 0x01
 
if (text[0] == 0x30)
1d30: 80 33 cpi r24, 0x30 ; 48
1d32: 29 f4 brne .+10 ; 0x1d3e <decimal+0x46>
{
text[0] = 0x20;
1d34: 80 e2 ldi r24, 0x20 ; 32
1d36: 80 83 st Z, r24
if (text[1] == 0x30)
1d38: 40 33 cpi r20, 0x30 ; 48
1d3a: 09 f4 brne .+2 ; 0x1d3e <decimal+0x46>
text[1] = 0x20;
1d3c: 81 83 std Z+1, r24 ; 0x01
}
text[3] = 0x00;
1d3e: 13 82 std Z+3, r1 ; 0x03
1d40: 08 95 ret
 
00001d42 <show_parameter>:
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
1d42: 9f 92 push r9
1d44: af 92 push r10
1d46: bf 92 push r11
1d48: cf 92 push r12
1d4a: df 92 push r13
1d4c: ef 92 push r14
1d4e: ff 92 push r15
1d50: 0f 93 push r16
1d52: 1f 93 push r17
1d54: cf 93 push r28
1d56: df 93 push r29
1d58: cd b7 in r28, 0x3d ; 61
1d5a: de b7 in r29, 0x3e ; 62
1d5c: a1 97 sbiw r28, 0x21 ; 33
1d5e: 0f b6 in r0, 0x3f ; 63
1d60: f8 94 cli
1d62: de bf out 0x3e, r29 ; 62
1d64: 0f be out 0x3f, r0 ; 63
1d66: cd bf out 0x3d, r28 ; 61
1d68: 08 2f mov r16, r24
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
1d6a: 99 24 eor r9, r9
if (number > 1)
1d6c: 82 30 cpi r24, 0x02 ; 2
1d6e: 08 f4 brcc .+2 ; 0x1d72 <show_parameter+0x30>
1d70: 3e c0 rjmp .+124 ; 0x1dee <show_parameter+0xac>
{
for (i = 0; i<66; i++)
1d72: 19 2d mov r17, r9
1d74: 4b e5 ldi r20, 0x5B ; 91
1d76: a4 2e mov r10, r20
1d78: 46 e0 ldi r20, 0x06 ; 6
1d7a: b4 2e mov r11, r20
1d7c: 33 e6 ldi r19, 0x63 ; 99
1d7e: c3 2e mov r12, r19
1d80: 34 e0 ldi r19, 0x04 ; 4
1d82: d3 2e mov r13, r19
1d84: 2d e7 ldi r18, 0x7D ; 125
1d86: e2 2e mov r14, r18
1d88: 2a e0 ldi r18, 0x0A ; 10
1d8a: f2 2e mov r15, r18
{
if (pgm_read_byte(p_limits+i*3+2) == number)
1d8c: f7 01 movw r30, r14
1d8e: 84 91 lpm r24, Z
1d90: 80 17 cp r24, r16
1d92: f1 f4 brne .+60 ; 0x1dd0 <show_parameter+0x8e>
{
array[line] = i;
1d94: e9 2d mov r30, r9
1d96: ff 27 eor r31, r31
1d98: e1 58 subi r30, 0x81 ; 129
1d9a: fa 4f sbci r31, 0xFA ; 250
1d9c: 10 83 st Z, r17
decimal(p_buffer[i],text);
1d9e: be 01 movw r22, r28
1da0: 6f 5f subi r22, 0xFF ; 255
1da2: 7f 4f sbci r23, 0xFF ; 255
1da4: f6 01 movw r30, r12
1da6: 80 81 ld r24, Z
1da8: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print_at(0,line,text,0);
1dac: 20 e0 ldi r18, 0x00 ; 0
1dae: ae 01 movw r20, r28
1db0: 4f 5f subi r20, 0xFF ; 255
1db2: 5f 4f sbci r21, 0xFF ; 255
1db4: 69 2d mov r22, r9
1db6: 82 2f mov r24, r18
1db8: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,line,parameter[i],0);
1dbc: 20 e0 ldi r18, 0x00 ; 0
1dbe: a5 01 movw r20, r10
1dc0: 69 2d mov r22, r9
1dc2: 85 e0 ldi r24, 0x05 ; 5
1dc4: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
if (line <= 7)
1dc8: f7 e0 ldi r31, 0x07 ; 7
1dca: f9 15 cp r31, r9
1dcc: 08 f0 brcs .+2 ; 0x1dd0 <show_parameter+0x8e>
line++;
1dce: 93 94 inc r9
1dd0: 1f 5f subi r17, 0xFF ; 255
1dd2: 83 e0 ldi r24, 0x03 ; 3
1dd4: 90 e0 ldi r25, 0x00 ; 0
1dd6: e8 0e add r14, r24
1dd8: f9 1e adc r15, r25
1dda: 08 94 sec
1ddc: c1 1c adc r12, r1
1dde: d1 1c adc r13, r1
1de0: e0 e1 ldi r30, 0x10 ; 16
1de2: f0 e0 ldi r31, 0x00 ; 0
1de4: ae 0e add r10, r30
1de6: bf 1e adc r11, r31
1de8: 12 34 cpi r17, 0x42 ; 66
1dea: 80 f2 brcs .-96 ; 0x1d8c <show_parameter+0x4a>
1dec: 5f c0 rjmp .+190 ; 0x1eac <show_parameter+0x16a>
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
1dee: 81 30 cpi r24, 0x01 ; 1
1df0: 71 f5 brne .+92 ; 0x1e4e <show_parameter+0x10c>
{
binary(p_buffer[52],bin); // Loop-Config
1df2: be 01 movw r22, r28
1df4: 66 5e subi r22, 0xE6 ; 230
1df6: 7f 4f sbci r23, 0xFF ; 255
1df8: 80 91 97 04 lds r24, 0x0497
1dfc: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1e00: 9a 82 std Y+2, r9 ; 0x02
for (i=0;i<4;i++)
1e02: 19 2d mov r17, r9
1e04: 9b eb ldi r25, 0xBB ; 187
1e06: c9 2e mov r12, r25
1e08: 99 e0 ldi r25, 0x09 ; 9
1e0a: d9 2e mov r13, r25
1e0c: ee 24 eor r14, r14
1e0e: ff 24 eor r15, r15
{
text[0] = bin[i] + 0x30;
1e10: ce 01 movw r24, r28
1e12: 01 96 adiw r24, 0x01 ; 1
1e14: f7 01 movw r30, r14
1e16: e8 0f add r30, r24
1e18: f9 1f adc r31, r25
1e1a: 21 8d ldd r18, Z+25 ; 0x19
1e1c: 20 5d subi r18, 0xD0 ; 208
1e1e: 29 83 std Y+1, r18 ; 0x01
lcd_print_at(0,i,text,0);
1e20: 20 e0 ldi r18, 0x00 ; 0
1e22: ac 01 movw r20, r24
1e24: 61 2f mov r22, r17
1e26: 82 2f mov r24, r18
1e28: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,i,bin_parameter[i],0);
1e2c: 20 e0 ldi r18, 0x00 ; 0
1e2e: a6 01 movw r20, r12
1e30: 61 2f mov r22, r17
1e32: 85 e0 ldi r24, 0x05 ; 5
1e34: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
1e38: 1f 5f subi r17, 0xFF ; 255
1e3a: 08 94 sec
1e3c: e1 1c adc r14, r1
1e3e: f1 1c adc r15, r1
1e40: 80 e1 ldi r24, 0x10 ; 16
1e42: 90 e0 ldi r25, 0x00 ; 0
1e44: c8 0e add r12, r24
1e46: d9 1e adc r13, r25
1e48: 14 30 cpi r17, 0x04 ; 4
1e4a: 10 f3 brcs .-60 ; 0x1e10 <show_parameter+0xce>
1e4c: 2f c0 rjmp .+94 ; 0x1eac <show_parameter+0x16a>
}
}
if (number == 0)
1e4e: 88 23 and r24, r24
1e50: 69 f5 brne .+90 ; 0x1eac <show_parameter+0x16a>
{
binary(p_buffer[8],bin); // Config
1e52: be 01 movw r22, r28
1e54: 66 5e subi r22, 0xE6 ; 230
1e56: 7f 4f sbci r23, 0xFF ; 255
1e58: 80 91 6b 04 lds r24, 0x046B
1e5c: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1e60: 9a 82 std Y+2, r9 ; 0x02
for (i=0;i<8;i++)
1e62: 19 2d mov r17, r9
1e64: 8b ef ldi r24, 0xFB ; 251
1e66: c8 2e mov r12, r24
1e68: 89 e0 ldi r24, 0x09 ; 9
1e6a: d8 2e mov r13, r24
1e6c: ee 24 eor r14, r14
1e6e: ff 24 eor r15, r15
{
text[0] = bin[i] + 0x30;
1e70: ce 01 movw r24, r28
1e72: 01 96 adiw r24, 0x01 ; 1
1e74: f7 01 movw r30, r14
1e76: e8 0f add r30, r24
1e78: f9 1f adc r31, r25
1e7a: 21 8d ldd r18, Z+25 ; 0x19
1e7c: 20 5d subi r18, 0xD0 ; 208
1e7e: 29 83 std Y+1, r18 ; 0x01
lcd_print_at(0,i,text,0);
1e80: 20 e0 ldi r18, 0x00 ; 0
1e82: ac 01 movw r20, r24
1e84: 61 2f mov r22, r17
1e86: 82 2f mov r24, r18
1e88: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_atp(5,i,bin_parameter[i+4],0);
1e8c: 20 e0 ldi r18, 0x00 ; 0
1e8e: a6 01 movw r20, r12
1e90: 61 2f mov r22, r17
1e92: 85 e0 ldi r24, 0x05 ; 5
1e94: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
1e98: 1f 5f subi r17, 0xFF ; 255
1e9a: 08 94 sec
1e9c: e1 1c adc r14, r1
1e9e: f1 1c adc r15, r1
1ea0: e0 e1 ldi r30, 0x10 ; 16
1ea2: f0 e0 ldi r31, 0x00 ; 0
1ea4: ce 0e add r12, r30
1ea6: df 1e adc r13, r31
1ea8: 18 30 cpi r17, 0x08 ; 8
1eaa: 10 f3 brcs .-60 ; 0x1e70 <show_parameter+0x12e>
}
}
 
}
return line;
}
1eac: 89 2d mov r24, r9
1eae: 99 27 eor r25, r25
1eb0: a1 96 adiw r28, 0x21 ; 33
1eb2: 0f b6 in r0, 0x3f ; 63
1eb4: f8 94 cli
1eb6: de bf out 0x3e, r29 ; 62
1eb8: 0f be out 0x3f, r0 ; 63
1eba: cd bf out 0x3d, r28 ; 61
1ebc: df 91 pop r29
1ebe: cf 91 pop r28
1ec0: 1f 91 pop r17
1ec2: 0f 91 pop r16
1ec4: ff 90 pop r15
1ec6: ef 90 pop r14
1ec8: df 90 pop r13
1eca: cf 90 pop r12
1ecc: bf 90 pop r11
1ece: af 90 pop r10
1ed0: 9f 90 pop r9
1ed2: 08 95 ret
 
00001ed4 <edit_parameter2>:
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
1ed4: 8f 92 push r8
1ed6: 9f 92 push r9
1ed8: af 92 push r10
1eda: bf 92 push r11
1edc: df 92 push r13
1ede: ef 92 push r14
1ee0: ff 92 push r15
1ee2: 0f 93 push r16
1ee4: 1f 93 push r17
1ee6: cf 93 push r28
1ee8: df 93 push r29
1eea: cd b7 in r28, 0x3d ; 61
1eec: de b7 in r29, 0x3e ; 62
1eee: 62 97 sbiw r28, 0x12 ; 18
1ef0: 0f b6 in r0, 0x3f ; 63
1ef2: f8 94 cli
1ef4: de bf out 0x3e, r29 ; 62
1ef6: 0f be out 0x3f, r0 ; 63
1ef8: cd bf out 0x3d, r28 ; 61
1efa: d8 2e mov r13, r24
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
1efc: 81 e0 ldi r24, 0x01 ; 1
1efe: 8d 15 cp r24, r13
1f00: 08 f0 brcs .+2 ; 0x1f04 <edit_parameter2+0x30>
1f02: 55 c0 rjmp .+170 ; 0x1fae <edit_parameter2+0xda>
{
line = menu_choose(0,lines-1,4);
1f04: 61 50 subi r22, 0x01 ; 1
1f06: 44 e0 ldi r20, 0x04 ; 4
1f08: 80 e0 ldi r24, 0x00 ; 0
1f0a: 0e 94 86 11 call 0x230c <menu_choose>
1f0e: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
1f10: 8f 3f cpi r24, 0xFF ; 255
1f12: 09 f4 brne .+2 ; 0x1f16 <edit_parameter2+0x42>
1f14: 4c c0 rjmp .+152 ; 0x1fae <edit_parameter2+0xda>
{
par = p_buffer[array[line]];
1f16: e8 2e mov r14, r24
1f18: ff 24 eor r15, r15
1f1a: f7 01 movw r30, r14
1f1c: e1 58 subi r30, 0x81 ; 129
1f1e: fa 4f sbci r31, 0xFA ; 250
1f20: 80 81 ld r24, Z
1f22: e8 2f mov r30, r24
1f24: ff 27 eor r31, r31
1f26: ed 59 subi r30, 0x9D ; 157
1f28: fb 4f sbci r31, 0xFB ; 251
1f2a: 10 81 ld r17, Z
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
1f2c: 20 e0 ldi r18, 0x00 ; 0
1f2e: 49 e0 ldi r20, 0x09 ; 9
1f30: 5c e0 ldi r21, 0x0C ; 12
1f32: 60 2f mov r22, r16
1f34: 84 e0 ldi r24, 0x04 ; 4
1f36: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
while (key != key_nokey);
1f3a: 80 91 e6 04 lds r24, 0x04E6
1f3e: 88 23 and r24, r24
1f40: e1 f7 brne .-8 ; 0x1f3a <edit_parameter2+0x66>
do
{
if (key == key_minus)
1f42: 80 91 e6 04 lds r24, 0x04E6
1f46: 81 30 cpi r24, 0x01 ; 1
1f48: 09 f4 brne .+2 ; 0x1f4c <edit_parameter2+0x78>
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
1f4a: 11 50 subi r17, 0x01 ; 1
}
if (key == key_plus)
1f4c: 80 91 e6 04 lds r24, 0x04E6
1f50: 82 30 cpi r24, 0x02 ; 2
1f52: 09 f4 brne .+2 ; 0x1f56 <edit_parameter2+0x82>
{
//if (par < max)
par ++;
1f54: 1f 5f subi r17, 0xFF ; 255
}
decimal(par,text);
1f56: be 01 movw r22, r28
1f58: 6f 5f subi r22, 0xFF ; 255
1f5a: 7f 4f sbci r23, 0xFF ; 255
1f5c: 81 2f mov r24, r17
1f5e: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print_at(0,line,text,0);
1f62: 20 e0 ldi r18, 0x00 ; 0
1f64: ae 01 movw r20, r28
1f66: 4f 5f subi r20, 0xFF ; 255
1f68: 5f 4f sbci r21, 0xFF ; 255
1f6a: 60 2f mov r22, r16
1f6c: 82 2f mov r24, r18
1f6e: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
1f72: 84 e1 ldi r24, 0x14 ; 20
1f74: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
1f78: 80 91 61 00 lds r24, 0x0061
1f7c: 88 23 and r24, r24
1f7e: e1 f7 brne .-8 ; 0x1f78 <edit_parameter2+0xa4>
}
1f80: 80 91 e6 04 lds r24, 0x04E6
1f84: 84 30 cpi r24, 0x04 ; 4
1f86: 21 f0 breq .+8 ; 0x1f90 <edit_parameter2+0xbc>
1f88: 80 91 e6 04 lds r24, 0x04E6
1f8c: 88 30 cpi r24, 0x08 ; 8
1f8e: c9 f6 brne .-78 ; 0x1f42 <edit_parameter2+0x6e>
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
1f90: 80 91 e6 04 lds r24, 0x04E6
1f94: 88 30 cpi r24, 0x08 ; 8
1f96: 59 f4 brne .+22 ; 0x1fae <edit_parameter2+0xda>
p_buffer[array[line]] = par;
1f98: ef e7 ldi r30, 0x7F ; 127
1f9a: f5 e0 ldi r31, 0x05 ; 5
1f9c: ee 0e add r14, r30
1f9e: ff 1e adc r15, r31
1fa0: f7 01 movw r30, r14
1fa2: 80 81 ld r24, Z
1fa4: e8 2f mov r30, r24
1fa6: ff 27 eor r31, r31
1fa8: ed 59 subi r30, 0x9D ; 157
1faa: fb 4f sbci r31, 0xFB ; 251
1fac: 10 83 st Z, r17
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
1fae: f1 e0 ldi r31, 0x01 ; 1
1fb0: df 16 cp r13, r31
1fb2: 09 f0 breq .+2 ; 0x1fb6 <edit_parameter2+0xe2>
1fb4: 6c c0 rjmp .+216 ; 0x208e <edit_parameter2+0x1ba>
{
binary(p_buffer[52],bin);
1fb6: 6b e0 ldi r22, 0x0B ; 11
1fb8: 86 2e mov r8, r22
1fba: 91 2c mov r9, r1
1fbc: 8c 0e add r8, r28
1fbe: 9d 1e adc r9, r29
1fc0: b4 01 movw r22, r8
1fc2: 80 91 97 04 lds r24, 0x0497
1fc6: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
1fca: 1a 82 std Y+2, r1 ; 0x02
 
line = menu_choose(0,3,4);
1fcc: 44 e0 ldi r20, 0x04 ; 4
1fce: 63 e0 ldi r22, 0x03 ; 3
1fd0: 8a 81 ldd r24, Y+2 ; 0x02
1fd2: 0e 94 86 11 call 0x230c <menu_choose>
1fd6: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
1fd8: 8f 3f cpi r24, 0xFF ; 255
1fda: 09 f4 brne .+2 ; 0x1fde <edit_parameter2+0x10a>
1fdc: c6 c0 rjmp .+396 ; 0x216a <edit_parameter2+0x296>
{
par = bin[line];
1fde: e8 2e mov r14, r24
1fe0: ff 24 eor r15, r15
1fe2: 5e 01 movw r10, r28
1fe4: 08 94 sec
1fe6: a1 1c adc r10, r1
1fe8: b1 1c adc r11, r1
1fea: f7 01 movw r30, r14
1fec: ea 0d add r30, r10
1fee: fb 1d adc r31, r11
1ff0: 12 85 ldd r17, Z+10 ; 0x0a
lcd_print_atp(4,line,PSTR("-"),0);
1ff2: 20 e0 ldi r18, 0x00 ; 0
1ff4: 4b e0 ldi r20, 0x0B ; 11
1ff6: 5c e0 ldi r21, 0x0C ; 12
1ff8: 68 2f mov r22, r24
1ffa: 84 e0 ldi r24, 0x04 ; 4
1ffc: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
do
{
if (key == key_minus)
2000: 80 91 e6 04 lds r24, 0x04E6
2004: 81 30 cpi r24, 0x01 ; 1
2006: 09 f4 brne .+2 ; 0x200a <edit_parameter2+0x136>
{
par = 0x00;
2008: 10 e0 ldi r17, 0x00 ; 0
}
if (key == key_plus)
200a: 80 91 e6 04 lds r24, 0x04E6
200e: 82 30 cpi r24, 0x02 ; 2
2010: 09 f4 brne .+2 ; 0x2014 <edit_parameter2+0x140>
{
par = 0x01;
2012: 11 e0 ldi r17, 0x01 ; 1
}
text[0] = par+0x30;
2014: 10 5d subi r17, 0xD0 ; 208
2016: 19 83 std Y+1, r17 ; 0x01
2018: 10 53 subi r17, 0x30 ; 48
lcd_print_at(0,line,text,0);
201a: 20 e0 ldi r18, 0x00 ; 0
201c: ae 01 movw r20, r28
201e: 4f 5f subi r20, 0xFF ; 255
2020: 5f 4f sbci r21, 0xFF ; 255
2022: 60 2f mov r22, r16
2024: 82 2f mov r24, r18
2026: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
202a: 84 e1 ldi r24, 0x14 ; 20
202c: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
2030: d0 90 61 00 lds r13, 0x0061
2034: dd 20 and r13, r13
2036: e1 f7 brne .-8 ; 0x2030 <edit_parameter2+0x15c>
}
2038: 80 91 e6 04 lds r24, 0x04E6
203c: 88 30 cpi r24, 0x08 ; 8
203e: 21 f0 breq .+8 ; 0x2048 <edit_parameter2+0x174>
2040: 80 91 e6 04 lds r24, 0x04E6
2044: 84 30 cpi r24, 0x04 ; 4
2046: e1 f6 brne .-72 ; 0x2000 <edit_parameter2+0x12c>
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
2048: 80 91 e6 04 lds r24, 0x04E6
204c: 88 30 cpi r24, 0x08 ; 8
204e: 49 f4 brne .+18 ; 0x2062 <edit_parameter2+0x18e>
{
bin[line] = par;
2050: ea 0c add r14, r10
2052: fb 1c adc r15, r11
2054: f7 01 movw r30, r14
2056: 12 87 std Z+10, r17 ; 0x0a
p_buffer[52] = bindec(bin);
2058: c4 01 movw r24, r8
205a: 0e 94 62 0e call 0x1cc4 <bindec>
205e: 80 93 97 04 sts 0x0497, r24
}
lcd_cls();
2062: 0e 94 36 07 call 0xe6c <lcd_cls>
decimal(p_buffer[52],text);
2066: be 01 movw r22, r28
2068: 6f 5f subi r22, 0xFF ; 255
206a: 7f 4f sbci r23, 0xFF ; 255
206c: 80 91 97 04 lds r24, 0x0497
2070: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print(text,0);
2074: 6d 2d mov r22, r13
2076: ce 01 movw r24, r28
2078: 01 96 adiw r24, 0x01 ; 1
207a: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 200;
207e: 88 ec ldi r24, 0xC8 ; 200
2080: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
2084: 80 91 61 00 lds r24, 0x0061
2088: 88 23 and r24, r24
208a: e1 f7 brne .-8 ; 0x2084 <edit_parameter2+0x1b0>
208c: 6e c0 rjmp .+220 ; 0x216a <edit_parameter2+0x296>
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
208e: dd 20 and r13, r13
2090: 09 f0 breq .+2 ; 0x2094 <edit_parameter2+0x1c0>
2092: 6b c0 rjmp .+214 ; 0x216a <edit_parameter2+0x296>
{
binary(p_buffer[8],bin);
2094: 5b e0 ldi r21, 0x0B ; 11
2096: 85 2e mov r8, r21
2098: 91 2c mov r9, r1
209a: 8c 0e add r8, r28
209c: 9d 1e adc r9, r29
209e: b4 01 movw r22, r8
20a0: 80 91 6b 04 lds r24, 0x046B
20a4: 0e 94 47 0e call 0x1c8e <binary>
text[1] = 0x00;
20a8: da 82 std Y+2, r13 ; 0x02
 
line = menu_choose(0,7,4);
20aa: 44 e0 ldi r20, 0x04 ; 4
20ac: 67 e0 ldi r22, 0x07 ; 7
20ae: 8d 2d mov r24, r13
20b0: 0e 94 86 11 call 0x230c <menu_choose>
20b4: 08 2f mov r16, r24
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
20b6: 8f 3f cpi r24, 0xFF ; 255
20b8: 09 f4 brne .+2 ; 0x20bc <edit_parameter2+0x1e8>
20ba: 57 c0 rjmp .+174 ; 0x216a <edit_parameter2+0x296>
{
par = bin[line];
20bc: e8 2e mov r14, r24
20be: ff 24 eor r15, r15
20c0: 5e 01 movw r10, r28
20c2: 08 94 sec
20c4: a1 1c adc r10, r1
20c6: b1 1c adc r11, r1
20c8: f7 01 movw r30, r14
20ca: ea 0d add r30, r10
20cc: fb 1d adc r31, r11
20ce: 12 85 ldd r17, Z+10 ; 0x0a
lcd_print_atp(4,line,PSTR("-"),0);
20d0: 2d 2d mov r18, r13
20d2: 4d e0 ldi r20, 0x0D ; 13
20d4: 5c e0 ldi r21, 0x0C ; 12
20d6: 68 2f mov r22, r24
20d8: 84 e0 ldi r24, 0x04 ; 4
20da: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
do
{
if (key == key_minus)
20de: 80 91 e6 04 lds r24, 0x04E6
20e2: 81 30 cpi r24, 0x01 ; 1
20e4: 09 f4 brne .+2 ; 0x20e8 <edit_parameter2+0x214>
{
par = 0x00;
20e6: 10 e0 ldi r17, 0x00 ; 0
}
if (key == key_plus)
20e8: 80 91 e6 04 lds r24, 0x04E6
20ec: 82 30 cpi r24, 0x02 ; 2
20ee: 09 f4 brne .+2 ; 0x20f2 <edit_parameter2+0x21e>
{
par = 0x01;
20f0: 11 e0 ldi r17, 0x01 ; 1
}
text[0] = par+0x30;
20f2: 10 5d subi r17, 0xD0 ; 208
20f4: 19 83 std Y+1, r17 ; 0x01
20f6: 10 53 subi r17, 0x30 ; 48
lcd_print_at(0,line,text,0);
20f8: 20 e0 ldi r18, 0x00 ; 0
20fa: ae 01 movw r20, r28
20fc: 4f 5f subi r20, 0xFF ; 255
20fe: 5f 4f sbci r21, 0xFF ; 255
2100: 60 2f mov r22, r16
2102: 82 2f mov r24, r18
2104: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 20;
2108: 84 e1 ldi r24, 0x14 ; 20
210a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
210e: d0 90 61 00 lds r13, 0x0061
2112: dd 20 and r13, r13
2114: e1 f7 brne .-8 ; 0x210e <edit_parameter2+0x23a>
}
2116: 80 91 e6 04 lds r24, 0x04E6
211a: 88 30 cpi r24, 0x08 ; 8
211c: 21 f0 breq .+8 ; 0x2126 <edit_parameter2+0x252>
211e: 80 91 e6 04 lds r24, 0x04E6
2122: 84 30 cpi r24, 0x04 ; 4
2124: e1 f6 brne .-72 ; 0x20de <edit_parameter2+0x20a>
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
2126: 80 91 e6 04 lds r24, 0x04E6
212a: 88 30 cpi r24, 0x08 ; 8
212c: 49 f4 brne .+18 ; 0x2140 <edit_parameter2+0x26c>
{
bin[line] = par;
212e: ea 0c add r14, r10
2130: fb 1c adc r15, r11
2132: f7 01 movw r30, r14
2134: 12 87 std Z+10, r17 ; 0x0a
p_buffer[8] = bindec(bin);
2136: c4 01 movw r24, r8
2138: 0e 94 62 0e call 0x1cc4 <bindec>
213c: 80 93 6b 04 sts 0x046B, r24
}
lcd_cls();
2140: 0e 94 36 07 call 0xe6c <lcd_cls>
decimal(p_buffer[8],text);
2144: be 01 movw r22, r28
2146: 6f 5f subi r22, 0xFF ; 255
2148: 7f 4f sbci r23, 0xFF ; 255
214a: 80 91 6b 04 lds r24, 0x046B
214e: 0e 94 7c 0e call 0x1cf8 <decimal>
lcd_print(text,0);
2152: 6d 2d mov r22, r13
2154: ce 01 movw r24, r28
2156: 01 96 adiw r24, 0x01 ; 1
2158: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 200;
215c: 88 ec ldi r24, 0xC8 ; 200
215e: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
2162: 80 91 61 00 lds r24, 0x0061
2166: 88 23 and r24, r24
2168: e1 f7 brne .-8 ; 0x2162 <edit_parameter2+0x28e>
216a: 62 96 adiw r28, 0x12 ; 18
216c: 0f b6 in r0, 0x3f ; 63
216e: f8 94 cli
2170: de bf out 0x3e, r29 ; 62
2172: 0f be out 0x3f, r0 ; 63
2174: cd bf out 0x3d, r28 ; 61
2176: df 91 pop r29
2178: cf 91 pop r28
217a: 1f 91 pop r17
217c: 0f 91 pop r16
217e: ff 90 pop r15
2180: ef 90 pop r14
2182: df 90 pop r13
2184: bf 90 pop r11
2186: af 90 pop r10
2188: 9f 90 pop r9
218a: 8f 90 pop r8
218c: 08 95 ret
 
0000218e <edit_parameter>:
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
218e: 1f 93 push r17
2190: cf 93 push r28
2192: df 93 push r29
2194: cd b7 in r28, 0x3d ; 61
2196: de b7 in r29, 0x3e ; 62
2198: 2f 97 sbiw r28, 0x0f ; 15
219a: 0f b6 in r0, 0x3f ; 63
219c: f8 94 cli
219e: de bf out 0x3e, r29 ; 62
21a0: 0f be out 0x3f, r0 ; 63
21a2: cd bf out 0x3d, r28 ; 61
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
21a4: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Lade Parameter\r\n"),0);
21a8: 60 e0 ldi r22, 0x00 ; 0
21aa: 8f e0 ldi r24, 0x0F ; 15
21ac: 9c e0 ldi r25, 0x0C ; 12
21ae: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 1:\r\n"),0);
21b2: 60 e0 ldi r22, 0x00 ; 0
21b4: 80 e2 ldi r24, 0x20 ; 32
21b6: 9c e0 ldi r25, 0x0C ; 12
21b8: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 2:\r\n"),0);
21bc: 60 e0 ldi r22, 0x00 ; 0
21be: 86 e2 ldi r24, 0x26 ; 38
21c0: 9c e0 ldi r25, 0x0C ; 12
21c2: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 3:\r\n"),0);
21c6: 60 e0 ldi r22, 0x00 ; 0
21c8: 8c e2 ldi r24, 0x2C ; 44
21ca: 9c e0 ldi r25, 0x0C ; 12
21cc: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 4:\r\n"),0);
21d0: 60 e0 ldi r22, 0x00 ; 0
21d2: 82 e3 ldi r24, 0x32 ; 50
21d4: 9c e0 ldi r25, 0x0C ; 12
21d6: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR(" 5:\r\n"),0);
21da: 60 e0 ldi r22, 0x00 ; 0
21dc: 88 e3 ldi r24, 0x38 ; 56
21de: 9c e0 ldi r25, 0x0C ; 12
21e0: 0e 94 aa 08 call 0x1154 <lcd_printp>
parameter = menu_choose(1,5,0);
21e4: 40 e0 ldi r20, 0x00 ; 0
21e6: 65 e0 ldi r22, 0x05 ; 5
21e8: 81 e0 ldi r24, 0x01 ; 1
21ea: 0e 94 86 11 call 0x230c <menu_choose>
 
page = 2;
21ee: 12 e0 ldi r17, 0x02 ; 2
if (read_parameter(parameter) == 1)
21f0: 0e 94 02 0e call 0x1c04 <read_parameter>
21f4: 81 30 cpi r24, 0x01 ; 1
21f6: 41 f4 brne .+16 ; 0x2208 <edit_parameter+0x7a>
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
21f8: 20 e0 ldi r18, 0x00 ; 0
21fa: 4e e3 ldi r20, 0x3E ; 62
21fc: 5c e0 ldi r21, 0x0C ; 12
21fe: 66 e0 ldi r22, 0x06 ; 6
2200: 82 2f mov r24, r18
2202: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
2206: 5c c0 rjmp .+184 ; 0x22c0 <edit_parameter+0x132>
}
else
{
do
{
lcd_cls();
2208: 0e 94 36 07 call 0xe6c <lcd_cls>
utoa(page,text,10);
220c: 4a e0 ldi r20, 0x0A ; 10
220e: 50 e0 ldi r21, 0x00 ; 0
2210: be 01 movw r22, r28
2212: 6f 5f subi r22, 0xFF ; 255
2214: 7f 4f sbci r23, 0xFF ; 255
2216: 81 2f mov r24, r17
2218: 99 27 eor r25, r25
221a: 0e 94 f0 12 call 0x25e0 <utoa>
lcd_print(text,0);
221e: 60 e0 ldi r22, 0x00 ; 0
2220: ce 01 movw r24, r28
2222: 01 96 adiw r24, 0x01 ; 1
2224: 0e 94 ea 08 call 0x11d4 <lcd_print>
timer = 50;
2228: 82 e3 ldi r24, 0x32 ; 50
222a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
222e: 80 91 61 00 lds r24, 0x0061
2232: 88 23 and r24, r24
2234: e1 f7 brne .-8 ; 0x222e <edit_parameter+0xa0>
lcd_cls();
2236: 0e 94 36 07 call 0xe6c <lcd_cls>
lines = show_parameter(page);
223a: 81 2f mov r24, r17
223c: 0e 94 a1 0e call 0x1d42 <show_parameter>
2240: 68 2f mov r22, r24
while (key == key_nokey);
2242: 80 91 e6 04 lds r24, 0x04E6
2246: 88 23 and r24, r24
2248: e1 f3 breq .-8 ; 0x2242 <edit_parameter+0xb4>
if (key == key_plus)
224a: 80 91 e6 04 lds r24, 0x04E6
224e: 82 30 cpi r24, 0x02 ; 2
2250: 09 f4 brne .+2 ; 0x2254 <edit_parameter+0xc6>
page++;
2252: 1f 5f subi r17, 0xFF ; 255
if (key == key_minus)
2254: 80 91 e6 04 lds r24, 0x04E6
2258: 81 30 cpi r24, 0x01 ; 1
225a: 09 f4 brne .+2 ; 0x225e <edit_parameter+0xd0>
page--;
225c: 11 50 subi r17, 0x01 ; 1
if (page == 255)
225e: 1f 3f cpi r17, 0xFF ; 255
2260: 11 f4 brne .+4 ; 0x2266 <edit_parameter+0xd8>
page = 12;
2262: 1c e0 ldi r17, 0x0C ; 12
2264: 03 c0 rjmp .+6 ; 0x226c <edit_parameter+0xde>
if (page > 12)
2266: 1d 30 cpi r17, 0x0D ; 13
2268: 08 f0 brcs .+2 ; 0x226c <edit_parameter+0xde>
page = 0;
226a: 10 e0 ldi r17, 0x00 ; 0
if (key == key_enter)
226c: 80 91 e6 04 lds r24, 0x04E6
2270: 88 30 cpi r24, 0x08 ; 8
2272: 19 f4 brne .+6 ; 0x227a <edit_parameter+0xec>
edit_parameter2(page,lines);
2274: 81 2f mov r24, r17
2276: 0e 94 6a 0f call 0x1ed4 <edit_parameter2>
}
227a: 80 91 e6 04 lds r24, 0x04E6
227e: 84 30 cpi r24, 0x04 ; 4
2280: 19 f6 brne .-122 ; 0x2208 <edit_parameter+0x7a>
while (key != key_esc);
lcd_cls();
2282: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
2286: 60 e0 ldi r22, 0x00 ; 0
2288: 86 e4 ldi r24, 0x46 ; 70
228a: 9c e0 ldi r25, 0x0C ; 12
228c: 0e 94 aa 08 call 0x1154 <lcd_printp>
lines = menu_choose(1,2,0);
2290: 40 e0 ldi r20, 0x00 ; 0
2292: 62 e0 ldi r22, 0x02 ; 2
2294: 81 e0 ldi r24, 0x01 ; 1
2296: 0e 94 86 11 call 0x230c <menu_choose>
if (lines == 1 )
229a: 81 30 cpi r24, 0x01 ; 1
229c: 61 f4 brne .+24 ; 0x22b6 <edit_parameter+0x128>
{
lcd_printp(PSTR("\r\n--->"),0);
229e: 60 e0 ldi r22, 0x00 ; 0
22a0: 89 e6 ldi r24, 0x69 ; 105
22a2: 9c e0 ldi r25, 0x0C ; 12
22a4: 0e 94 aa 08 call 0x1154 <lcd_printp>
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
22a8: 85 e0 ldi r24, 0x05 ; 5
22aa: 0e 94 2c 0e call 0x1c58 <write_parameter>
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
22ae: 60 e0 ldi r22, 0x00 ; 0
22b0: 80 e7 ldi r24, 0x70 ; 112
22b2: 9c e0 ldi r25, 0x0C ; 12
22b4: 03 c0 rjmp .+6 ; 0x22bc <edit_parameter+0x12e>
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
22b6: 60 e0 ldi r22, 0x00 ; 0
22b8: 88 e8 ldi r24, 0x88 ; 136
22ba: 9c e0 ldi r25, 0x0C ; 12
22bc: 0e 94 aa 08 call 0x1154 <lcd_printp>
}
}
timer = 100;
22c0: 84 e6 ldi r24, 0x64 ; 100
22c2: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
22c6: 80 91 61 00 lds r24, 0x0061
22ca: 88 23 and r24, r24
22cc: e1 f7 brne .-8 ; 0x22c6 <edit_parameter+0x138>
22ce: 2f 96 adiw r28, 0x0f ; 15
22d0: 0f b6 in r0, 0x3f ; 63
22d2: f8 94 cli
22d4: de bf out 0x3e, r29 ; 62
22d6: 0f be out 0x3f, r0 ; 63
22d8: cd bf out 0x3d, r28 ; 61
22da: df 91 pop r29
22dc: cf 91 pop r28
22de: 1f 91 pop r17
22e0: 08 95 ret
 
000022e2 <menu_set_cursor>:
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
22e2: 0f 93 push r16
22e4: 1f 93 push r17
22e6: 06 2f mov r16, r22
22e8: 14 2f mov r17, r20
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
22ea: 20 e0 ldi r18, 0x00 ; 0
22ec: 4c e9 ldi r20, 0x9C ; 156
22ee: 5c e0 ldi r21, 0x0C ; 12
22f0: 68 2f mov r22, r24
22f2: 81 2f mov r24, r17
22f4: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
22f8: 20 e0 ldi r18, 0x00 ; 0
22fa: 4e e9 ldi r20, 0x9E ; 158
22fc: 5c e0 ldi r21, 0x0C ; 12
22fe: 60 2f mov r22, r16
2300: 81 2f mov r24, r17
2302: 0e 94 e1 08 call 0x11c2 <lcd_print_atp>
2306: 1f 91 pop r17
2308: 0f 91 pop r16
230a: 08 95 ret
 
0000230c <menu_choose>:
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
230c: ef 92 push r14
230e: ff 92 push r15
2310: 0f 93 push r16
2312: 1f 93 push r17
2314: cf 93 push r28
2316: f8 2e mov r15, r24
2318: e6 2e mov r14, r22
231a: 04 2f mov r16, r20
uint8_t line, before;
line = min;
231c: c8 2f mov r28, r24
before = min;
231e: 18 2f mov r17, r24
menu_set_cursor(line,line,pos);
2320: 68 2f mov r22, r24
2322: 0e 94 71 11 call 0x22e2 <menu_set_cursor>
do
{
while (key != key_nokey);
2326: 80 91 e6 04 lds r24, 0x04E6
232a: 88 23 and r24, r24
232c: e1 f7 brne .-8 ; 0x2326 <menu_choose+0x1a>
while(key == key_nokey);
232e: 80 91 e6 04 lds r24, 0x04E6
2332: 88 23 and r24, r24
2334: e1 f3 breq .-8 ; 0x232e <menu_choose+0x22>
if ((key == key_plus) && (line < max))
2336: 80 91 e6 04 lds r24, 0x04E6
233a: 82 30 cpi r24, 0x02 ; 2
233c: 19 f4 brne .+6 ; 0x2344 <menu_choose+0x38>
233e: ce 15 cp r28, r14
2340: 08 f4 brcc .+2 ; 0x2344 <menu_choose+0x38>
line ++;
2342: cf 5f subi r28, 0xFF ; 255
if ((key == key_minus) && (line > min))
2344: 80 91 e6 04 lds r24, 0x04E6
2348: 81 30 cpi r24, 0x01 ; 1
234a: 19 f4 brne .+6 ; 0x2352 <menu_choose+0x46>
234c: fc 16 cp r15, r28
234e: 08 f4 brcc .+2 ; 0x2352 <menu_choose+0x46>
line --;
2350: c1 50 subi r28, 0x01 ; 1
 
menu_set_cursor(before,line,pos);
2352: 40 2f mov r20, r16
2354: 6c 2f mov r22, r28
2356: 81 2f mov r24, r17
2358: 0e 94 71 11 call 0x22e2 <menu_set_cursor>
before = line;
235c: 1c 2f mov r17, r28
}
235e: 80 91 e6 04 lds r24, 0x04E6
2362: 88 30 cpi r24, 0x08 ; 8
2364: 21 f0 breq .+8 ; 0x236e <menu_choose+0x62>
2366: 80 91 e6 04 lds r24, 0x04E6
236a: 84 30 cpi r24, 0x04 ; 4
236c: e1 f6 brne .-72 ; 0x2326 <menu_choose+0x1a>
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
236e: 80 91 e6 04 lds r24, 0x04E6
2372: 84 30 cpi r24, 0x04 ; 4
2374: 09 f4 brne .+2 ; 0x2378 <menu_choose+0x6c>
line = 255;
2376: cf ef ldi r28, 0xFF ; 255
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
2378: 80 91 e6 04 lds r24, 0x04E6
237c: 88 23 and r24, r24
237e: e1 f7 brne .-8 ; 0x2378 <menu_choose+0x6c>
return line;
}
2380: 8c 2f mov r24, r28
2382: 99 27 eor r25, r25
2384: cf 91 pop r28
2386: 1f 91 pop r17
2388: 0f 91 pop r16
238a: ff 90 pop r15
238c: ef 90 pop r14
238e: 08 95 ret
 
00002390 <main_menu>:
 
void main_menu (void)
{
lcd_cls();
2390: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Hauptmenü(BETA V0.1)\r\n"),0);
2394: 60 e0 ldi r22, 0x00 ; 0
2396: 80 ea ldi r24, 0xA0 ; 160
2398: 9c e0 ldi r25, 0x0C ; 12
239a: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("\r\nDisplay\r\n"),0);
239e: 60 e0 ldi r22, 0x00 ; 0
23a0: 87 eb ldi r24, 0xB7 ; 183
23a2: 9c e0 ldi r25, 0x0C ; 12
23a4: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("Parameter\r\n"),0);
23a8: 60 e0 ldi r22, 0x00 ; 0
23aa: 83 ec ldi r24, 0xC3 ; 195
23ac: 9c e0 ldi r25, 0x0C ; 12
23ae: 0e 94 aa 08 call 0x1154 <lcd_printp>
lcd_printp(PSTR("Motortest"),0);
23b2: 60 e0 ldi r22, 0x00 ; 0
23b4: 8f ec ldi r24, 0xCF ; 207
23b6: 9c e0 ldi r25, 0x0C ; 12
23b8: 0e 94 aa 08 call 0x1154 <lcd_printp>
switch(menu_choose(2,4,10))
23bc: 4a e0 ldi r20, 0x0A ; 10
23be: 64 e0 ldi r22, 0x04 ; 4
23c0: 82 e0 ldi r24, 0x02 ; 2
23c2: 0e 94 86 11 call 0x230c <menu_choose>
23c6: 99 27 eor r25, r25
23c8: 83 30 cpi r24, 0x03 ; 3
23ca: 91 05 cpc r25, r1
23cc: 61 f0 breq .+24 ; 0x23e6 <main_menu+0x56>
23ce: 84 30 cpi r24, 0x04 ; 4
23d0: 91 05 cpc r25, r1
23d2: 1c f4 brge .+6 ; 0x23da <main_menu+0x4a>
23d4: 02 97 sbiw r24, 0x02 ; 2
23d6: 21 f0 breq .+8 ; 0x23e0 <main_menu+0x50>
23d8: 08 95 ret
23da: 04 97 sbiw r24, 0x04 ; 4
23dc: 39 f0 breq .+14 ; 0x23ec <main_menu+0x5c>
23de: 08 95 ret
{
case 2:
display_data(); // LCD-Modus
23e0: 0e 94 23 12 call 0x2446 <display_data>
break;
23e4: 08 95 ret
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
23e6: 0e 94 c7 10 call 0x218e <edit_parameter>
break;
23ea: 08 95 ret
case 4:
motor_test(); // primitiver Motor-Test
23ec: 0e 94 83 12 call 0x2506 <motor_test>
23f0: 08 95 ret
 
000023f2 <read_display>:
#include "parameter.h"
#include "menu.h"
 
uint8_t read_display (uint8_t command) //
{
23f2: cf 93 push r28
uint8_t timeout;
timeout = 0;
23f4: c0 e0 ldi r28, 0x00 ; 0
p_buffer[0] = '#'; // Display-Zeile anfordern
23f6: 93 e2 ldi r25, 0x23 ; 35
23f8: 90 93 63 04 sts 0x0463, r25
p_buffer[1] = 'a';
23fc: 91 e6 ldi r25, 0x61 ; 97
23fe: 90 93 64 04 sts 0x0464, r25
p_buffer[2] = 'h';
2402: 98 e6 ldi r25, 0x68 ; 104
2404: 90 93 65 04 sts 0x0465, r25
p_buffer[3] = command;
2408: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 0;
240c: c0 93 67 04 sts 0x0467, r28
p_buffer[5] = 0;
2410: c0 93 68 04 sts 0x0468, r28
base64_send(6);
2414: 86 e0 ldi r24, 0x06 ; 6
2416: 0e 94 bc 0c call 0x1978 <base64_send>
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1)
241a: 0e 94 95 0c call 0x192a <get_message>
241e: 81 30 cpi r24, 0x01 ; 1
2420: 09 f4 brne .+2 ; 0x2424 <read_display+0x32>
timeout = 10;
2422: ca e0 ldi r28, 0x0A ; 10
timeout ++;
2424: cf 5f subi r28, 0xFF ; 255
}
2426: 80 91 ea 04 lds r24, 0x04EA
242a: 80 53 subi r24, 0x30 ; 48
242c: 85 30 cpi r24, 0x05 ; 5
242e: 10 f0 brcs .+4 ; 0x2434 <read_display+0x42>
2430: ca 30 cpi r28, 0x0A ; 10
2432: 98 f3 brcs .-26 ; 0x241a <read_display+0x28>
while (((r_buffer[1] < '0') || (r_buffer[1] > '4')) && (timeout < 10));
if (timeout >= 10)
2434: ca 30 cpi r28, 0x0A ; 10
2436: 18 f0 brcs .+6 ; 0x243e <read_display+0x4c>
return 1;
2438: 81 e0 ldi r24, 0x01 ; 1
243a: 90 e0 ldi r25, 0x00 ; 0
243c: 02 c0 rjmp .+4 ; 0x2442 <read_display+0x50>
else
return 0;
243e: 80 e0 ldi r24, 0x00 ; 0
2440: 90 e0 ldi r25, 0x00 ; 0
2442: cf 91 pop r28
2444: 08 95 ret
 
00002446 <display_data>:
}
 
void display_data (void)
{
2446: 0f 93 push r16
2448: 1f 93 push r17
244a: cf 93 push r28
244c: df 93 push r29
244e: cd b7 in r28, 0x3d ; 61
2450: de b7 in r29, 0x3e ; 62
2452: 2a 97 sbiw r28, 0x0a ; 10
2454: 0f b6 in r0, 0x3f ; 63
2456: f8 94 cli
2458: de bf out 0x3e, r29 ; 62
245a: 0f be out 0x3f, r0 ; 63
245c: cd bf out 0x3d, r28 ; 61
uint8_t line;
uint8_t text[10];
 
lcd_cls();
245e: 0e 94 36 07 call 0xe6c <lcd_cls>
lcd_printp(PSTR("Display"),0);
2462: 60 e0 ldi r22, 0x00 ; 0
2464: 89 ed ldi r24, 0xD9 ; 217
2466: 9c e0 ldi r25, 0x0C ; 12
2468: 0e 94 aa 08 call 0x1154 <lcd_printp>
do
{
while (key != 0x00);
246c: 00 91 e6 04 lds r16, 0x04E6
2470: 00 23 and r16, r16
2472: e1 f7 brne .-8 ; 0x246c <display_data+0x26>
if (read_display(0) == 1)
2474: 80 2f mov r24, r16
2476: 0e 94 f9 11 call 0x23f2 <read_display>
247a: 81 30 cpi r24, 0x01 ; 1
247c: 69 f4 brne .+26 ; 0x2498 <display_data+0x52>
{
lcd_printp(PSTR("\r\nTimeout!"),0);
247e: 60 2f mov r22, r16
2480: 81 ee ldi r24, 0xE1 ; 225
2482: 9c e0 ldi r25, 0x0C ; 12
2484: 0e 94 aa 08 call 0x1154 <lcd_printp>
timer = 200;
2488: 88 ec ldi r24, 0xC8 ; 200
248a: 80 93 61 00 sts 0x0061, r24
while (timer > 0);
248e: 80 91 61 00 lds r24, 0x0061
2492: 88 23 and r24, r24
2494: e1 f7 brne .-8 ; 0x248e <display_data+0x48>
break;
2496: 2c c0 rjmp .+88 ; 0x24f0 <display_data+0xaa>
}
else
{
line = r_buffer[1];
2498: 10 91 ea 04 lds r17, 0x04EA
text[0] = line;
249c: 19 83 std Y+1, r17 ; 0x01
text[1] = 0x00;
249e: 0a 83 std Y+2, r16 ; 0x02
lcd_print_at(10,0,text,0);
24a0: 20 2f mov r18, r16
24a2: ae 01 movw r20, r28
24a4: 4f 5f subi r20, 0xFF ; 255
24a6: 5f 4f sbci r21, 0xFF ; 255
24a8: 60 2f mov r22, r16
24aa: 8a e0 ldi r24, 0x0A ; 10
24ac: 0e 94 1d 09 call 0x123a <lcd_print_at>
lcd_print_at(0,line+1,p_buffer,0);
24b0: 1f 5f subi r17, 0xFF ; 255
24b2: 20 2f mov r18, r16
24b4: 43 e6 ldi r20, 0x63 ; 99
24b6: 54 e0 ldi r21, 0x04 ; 4
24b8: 61 2f mov r22, r17
24ba: 80 2f mov r24, r16
24bc: 0e 94 1d 09 call 0x123a <lcd_print_at>
timer = 10;
24c0: 8a e0 ldi r24, 0x0A ; 10
24c2: 80 93 61 00 sts 0x0061, r24
while(timer > 0);
24c6: 80 91 61 00 lds r24, 0x0061
24ca: 88 23 and r24, r24
24cc: e1 f7 brne .-8 ; 0x24c6 <display_data+0x80>
if (key == 0x01)
24ce: 80 91 e6 04 lds r24, 0x04E6
24d2: 81 30 cpi r24, 0x01 ; 1
24d4: 11 f4 brne .+4 ; 0x24da <display_data+0x94>
read_display(1);
24d6: 0e 94 f9 11 call 0x23f2 <read_display>
if (key == 0x02)
24da: 80 91 e6 04 lds r24, 0x04E6
24de: 82 30 cpi r24, 0x02 ; 2
24e0: 11 f4 brne .+4 ; 0x24e6 <display_data+0xa0>
read_display(2);
24e2: 0e 94 f9 11 call 0x23f2 <read_display>
}
}
24e6: 80 91 e6 04 lds r24, 0x04E6
24ea: 84 30 cpi r24, 0x04 ; 4
24ec: 09 f0 breq .+2 ; 0x24f0 <display_data+0xaa>
24ee: be cf rjmp .-132 ; 0x246c <display_data+0x26>
24f0: 2a 96 adiw r28, 0x0a ; 10
24f2: 0f b6 in r0, 0x3f ; 63
24f4: f8 94 cli
24f6: de bf out 0x3e, r29 ; 62
24f8: 0f be out 0x3f, r0 ; 63
24fa: cd bf out 0x3d, r28 ; 61
24fc: df 91 pop r29
24fe: cf 91 pop r28
2500: 1f 91 pop r17
2502: 0f 91 pop r16
2504: 08 95 ret
 
00002506 <motor_test>:
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
2506: 0e 94 36 07 call 0xe6c <lcd_cls>
 
while (key != 0x00);
250a: 60 91 e6 04 lds r22, 0x04E6
250e: 66 23 and r22, r22
2510: e1 f7 brne .-8 ; 0x250a <motor_test+0x4>
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
2512: 8c ee ldi r24, 0xEC ; 236
2514: 9c e0 ldi r25, 0x0C ; 12
2516: 0e 94 aa 08 call 0x1154 <lcd_printp>
while (key == 0x00);
251a: 80 91 e6 04 lds r24, 0x04E6
251e: 88 23 and r24, r24
2520: e1 f3 breq .-8 ; 0x251a <motor_test+0x14>
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
2522: 80 91 e6 04 lds r24, 0x04E6
2526: 88 30 cpi r24, 0x08 ; 8
2528: c9 f4 brne .+50 ; 0x255c <motor_test+0x56>
{
p_buffer[0] = '#'; // Motoren einschalten
252a: 83 e2 ldi r24, 0x23 ; 35
252c: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
2530: 81 e6 ldi r24, 0x61 ; 97
2532: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 't';
2536: 84 e7 ldi r24, 0x74 ; 116
2538: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = 10;
253c: 8a e0 ldi r24, 0x0A ; 10
253e: 80 93 66 04 sts 0x0466, r24
p_buffer[4] = 10;
2542: 80 93 67 04 sts 0x0467, r24
p_buffer[5] = 10;
2546: 80 93 68 04 sts 0x0468, r24
p_buffer[6] = 10;
254a: 80 93 69 04 sts 0x0469, r24
p_buffer[7] = 0;
254e: 10 92 6a 04 sts 0x046A, r1
p_buffer[8] = 0;
2552: 10 92 6b 04 sts 0x046B, r1
 
base64_send(9);
2556: 89 e0 ldi r24, 0x09 ; 9
2558: 0e 94 bc 0c call 0x1978 <base64_send>
}
while (key != 0x00);
255c: 80 91 e6 04 lds r24, 0x04E6
2560: 88 23 and r24, r24
2562: e1 f7 brne .-8 ; 0x255c <motor_test+0x56>
while (key == 0x00);
2564: 80 91 e6 04 lds r24, 0x04E6
2568: 88 23 and r24, r24
256a: e1 f3 breq .-8 ; 0x2564 <motor_test+0x5e>
p_buffer[0] = '#'; // Motoren ausschalten
256c: 83 e2 ldi r24, 0x23 ; 35
256e: 80 93 63 04 sts 0x0463, r24
p_buffer[1] = 'a';
2572: 81 e6 ldi r24, 0x61 ; 97
2574: 80 93 64 04 sts 0x0464, r24
p_buffer[2] = 't';
2578: 84 e7 ldi r24, 0x74 ; 116
257a: 80 93 65 04 sts 0x0465, r24
p_buffer[3] = 0;
257e: 10 92 66 04 sts 0x0466, r1
p_buffer[4] = 0;
2582: 10 92 67 04 sts 0x0467, r1
p_buffer[5] = 0;
2586: 10 92 68 04 sts 0x0468, r1
p_buffer[6] = 0;
258a: 10 92 69 04 sts 0x0469, r1
p_buffer[7] = 0;
258e: 10 92 6a 04 sts 0x046A, r1
p_buffer[8] = 0;
2592: 10 92 6b 04 sts 0x046B, r1
 
base64_send(9);
2596: 89 e0 ldi r24, 0x09 ; 9
2598: 0e 94 bc 0c call 0x1978 <base64_send>
259c: 08 95 ret
 
0000259e <itoa>:
259e: fb 01 movw r30, r22
25a0: 9f 01 movw r18, r30
25a2: e8 94 clt
25a4: 42 30 cpi r20, 0x02 ; 2
25a6: c4 f0 brlt .+48 ; 0x25d8 <itoa+0x3a>
25a8: 45 32 cpi r20, 0x25 ; 37
25aa: b4 f4 brge .+44 ; 0x25d8 <itoa+0x3a>
25ac: 4a 30 cpi r20, 0x0A ; 10
25ae: 29 f4 brne .+10 ; 0x25ba <itoa+0x1c>
25b0: 97 fb bst r25, 7
25b2: 1e f4 brtc .+6 ; 0x25ba <itoa+0x1c>
25b4: 90 95 com r25
25b6: 81 95 neg r24
25b8: 9f 4f sbci r25, 0xFF ; 255
25ba: 64 2f mov r22, r20
25bc: 77 27 eor r23, r23
25be: 0e 94 22 13 call 0x2644 <__udivmodhi4>
25c2: 80 5d subi r24, 0xD0 ; 208
25c4: 8a 33 cpi r24, 0x3A ; 58
25c6: 0c f0 brlt .+2 ; 0x25ca <itoa+0x2c>
25c8: 89 5d subi r24, 0xD9 ; 217
25ca: 81 93 st Z+, r24
25cc: cb 01 movw r24, r22
25ce: 00 97 sbiw r24, 0x00 ; 0
25d0: a1 f7 brne .-24 ; 0x25ba <itoa+0x1c>
25d2: 16 f4 brtc .+4 ; 0x25d8 <itoa+0x3a>
25d4: 5d e2 ldi r21, 0x2D ; 45
25d6: 51 93 st Z+, r21
25d8: 10 82 st Z, r1
25da: c9 01 movw r24, r18
25dc: 0c 94 06 13 jmp 0x260c <strrev>
 
000025e0 <utoa>:
25e0: fb 01 movw r30, r22
25e2: 9f 01 movw r18, r30
25e4: 42 30 cpi r20, 0x02 ; 2
25e6: 74 f0 brlt .+28 ; 0x2604 <utoa+0x24>
25e8: 45 32 cpi r20, 0x25 ; 37
25ea: 64 f4 brge .+24 ; 0x2604 <utoa+0x24>
25ec: 64 2f mov r22, r20
25ee: 77 27 eor r23, r23
25f0: 0e 94 22 13 call 0x2644 <__udivmodhi4>
25f4: 80 5d subi r24, 0xD0 ; 208
25f6: 8a 33 cpi r24, 0x3A ; 58
25f8: 0c f0 brlt .+2 ; 0x25fc <utoa+0x1c>
25fa: 89 5d subi r24, 0xD9 ; 217
25fc: 81 93 st Z+, r24
25fe: cb 01 movw r24, r22
2600: 00 97 sbiw r24, 0x00 ; 0
2602: a1 f7 brne .-24 ; 0x25ec <utoa+0xc>
2604: 10 82 st Z, r1
2606: c9 01 movw r24, r18
2608: 0c 94 06 13 jmp 0x260c <strrev>
 
0000260c <strrev>:
260c: dc 01 movw r26, r24
260e: fc 01 movw r30, r24
2610: 01 90 ld r0, Z+
2612: 00 20 and r0, r0
2614: e9 f7 brne .-6 ; 0x2610 <strrev+0x4>
2616: 32 97 sbiw r30, 0x02 ; 2
2618: ae 17 cp r26, r30
261a: bf 07 cpc r27, r31
261c: 30 f4 brcc .+12 ; 0x262a <strrev+0x1e>
261e: 7c 91 ld r23, X
2620: 60 81 ld r22, Z
2622: 70 83 st Z, r23
2624: 31 97 sbiw r30, 0x01 ; 1
2626: 6d 93 st X+, r22
2628: f7 cf rjmp .-18 ; 0x2618 <strrev+0xc>
262a: 08 95 ret
 
0000262c <__udivmodqi4>:
262c: 99 1b sub r25, r25
262e: 79 e0 ldi r23, 0x09 ; 9
2630: 04 c0 rjmp .+8 ; 0x263a <__udivmodqi4_ep>
 
00002632 <__udivmodqi4_loop>:
2632: 99 1f adc r25, r25
2634: 96 17 cp r25, r22
2636: 08 f0 brcs .+2 ; 0x263a <__udivmodqi4_ep>
2638: 96 1b sub r25, r22
 
0000263a <__udivmodqi4_ep>:
263a: 88 1f adc r24, r24
263c: 7a 95 dec r23
263e: c9 f7 brne .-14 ; 0x2632 <__udivmodqi4_loop>
2640: 80 95 com r24
2642: 08 95 ret
 
00002644 <__udivmodhi4>:
2644: aa 1b sub r26, r26
2646: bb 1b sub r27, r27
2648: 51 e1 ldi r21, 0x11 ; 17
264a: 07 c0 rjmp .+14 ; 0x265a <__udivmodhi4_ep>
 
0000264c <__udivmodhi4_loop>:
264c: aa 1f adc r26, r26
264e: bb 1f adc r27, r27
2650: a6 17 cp r26, r22
2652: b7 07 cpc r27, r23
2654: 10 f0 brcs .+4 ; 0x265a <__udivmodhi4_ep>
2656: a6 1b sub r26, r22
2658: b7 0b sbc r27, r23
 
0000265a <__udivmodhi4_ep>:
265a: 88 1f adc r24, r24
265c: 99 1f adc r25, r25
265e: 5a 95 dec r21
2660: a9 f7 brne .-22 ; 0x264c <__udivmodhi4_loop>
2662: 80 95 com r24
2664: 90 95 com r25
2666: bc 01 movw r22, r24
2668: cd 01 movw r24, r26
266a: 08 95 ret
/Transportables_Koptertool/tags/V-0.1/main.map
0,0 → 1,760
Archive member included because of file (symbol)
 
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
parameter.o (__udivmodqi4)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
displ_val.o (itoa)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
parameter.o (utoa)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o) (strrev)
F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o) (__udivmodhi4)
 
Allocating common symbols
Common symbol size file
 
display_page_counter
0x1 main.o
timer 0x1 main.o
display_buffer 0x400 main.o
write_index 0x1 rs232.o
display_buffer_counter
0x1 main.o
p_buffer 0x80 main.o
read_index 0x1 rs232.o
display_mode 0x1 main.o
displ_page 0x1 displ_val.o
counter 0x1 main.o
rs232_timer 0x1 main.o
rs232_buffer 0x10 rs232.o
key 0x1 main.o
display_buffer_pointer
0x2 main.o
array 0x8 parameter.o
lcd_xpos 0x1 lcd.o
r_buffer 0x80 main.o
lcd_ypos 0x1 lcd.o
counter2 0x1 main.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
LOAD main.o
LOAD timer.o
LOAD lcd.o
LOAD F8X6.o
LOAD rs232.o
LOAD base64.o
LOAD displ_val.o
LOAD parameter.o
LOAD menu.o
LOAD display.o
LOAD motortest.o
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libm.a
LOAD F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a
LOAD F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a
LOAD F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x266c
*(.vectors)
.vectors 0x00000000 0x54 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
0x00000000 __vectors
0x00000000 __vector_default
0x00000054 __ctors_start = .
*(.ctors)
0x00000054 __ctors_end = .
0x00000054 __dtors_start = .
*(.dtors)
0x00000054 __dtors_end = .
*(.progmem.gcc*)
*(.progmem*)
.progmem.data 0x00000054 0x600 F8X6.o
0x00000054 f8x6
.progmem.data 0x00000654 0x7 displ_val.o
.progmem.data 0x0000065b 0x641 parameter.o
0x0000065b parameter
0x00000a7b p_limits
0x00000b42 p_menu_number
0x000009bb bin_parameter
0x00000b85 p_menus
.progmem.data 0x00000c9c 0x3d menu.o
.progmem.data 0x00000cd9 0x13 display.o
.progmem.data 0x00000cec 0x10 motortest.o
0x00000cfc . = ALIGN (0x2)
*(.init0)
*(.init1)
*(.init2)
.init2 0x00000cfc 0xc F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
*(.init3)
*(.init4)
.init4 0x00000d08 0x16 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
0x00000d08 __do_copy_data
.init4 0x00000d1e 0x10 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
0x00000d1e __do_clear_bss
*(.init5)
*(.init6)
*(.init7)
*(.init8)
*(.init9)
.init9 0x00000d2e 0x4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
*(.text)
.text 0x00000d32 0x4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
0x00000d32 __vector_1
0x00000d32 __vector_12
0x00000d32 __bad_interrupt
0x00000d32 __vector_6
0x00000d32 __vector_3
0x00000d32 __vector_11
0x00000d32 __vector_17
0x00000d32 __vector_19
0x00000d32 __vector_7
0x00000d32 __vector_5
0x00000d32 __vector_4
0x00000d32 __vector_9
0x00000d32 __vector_2
0x00000d32 __vector_15
0x00000d32 __vector_8
0x00000d32 __vector_14
0x00000d32 __vector_16
0x00000d32 __vector_18
0x00000d32 __vector_20
.text 0x00000d36 0x34 main.o
0x00000d36 main
.text 0x00000d6a 0x8e timer.o
0x00000de8 timer_init
0x00000d6a __vector_10
.text 0x00000df8 0x9f8 lcd.o
0x00000e6c lcd_cls
0x0000123a lcd_print_at
0x00000e72 wait_1ms
0x0000124c lcd_plot
0x00000df8 send_byte
0x000012de lcd_line
0x000011c2 lcd_print_atp
0x0000113a new_line
0x000016ce draw_fcircle
0x000011d4 lcd_print
0x00000f68 scroll
0x00000f22 set_adress
0x00000ea6 lcd_init
0x00001464 lcd_frect
0x00000e7c wait_ms
0x000014e8 lcd_rect
0x00000e08 cls
0x0000157c draw_circle
0x00001154 lcd_printp
0x00000fd2 put_char
.text 0x000017f0 0xbe rs232.o
0x00001834 RS232_init
0x00001888 RS232_send
0x000017f0 __vector_13
0x0000183e RS232_get
0x00001890 RS232_text
.text 0x000018ae 0x1da base64.o
0x00001978 base64_send
0x0000192a get_message
0x000018ae base64_decode
.text 0x00001a88 0x17c displ_val.o
0x00001b0a displ_values
0x00001a88 displ_get_text
.text 0x00001c04 0x6de parameter.o
0x00001ed4 edit_parameter2
0x00001c04 read_parameter
0x0000218e edit_parameter
0x00001cc4 bindec
0x00001d42 show_parameter
0x00001cf8 decimal
0x00001c8e binary
0x00001c58 write_parameter
.text 0x000022e2 0x110 menu.o
0x000022e2 menu_set_cursor
0x0000230c menu_choose
0x00002390 main_menu
.text 0x000023f2 0x114 display.o
0x00002446 display_data
0x000023f2 read_display
.text 0x00002506 0x98 motortest.o
0x00002506 motor_test
.text 0x0000259e 0x42 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
0x0000259e itoa
.text 0x000025e0 0x2c F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
0x000025e0 utoa
.text 0x0000260c 0x20 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
0x0000260c strrev
0x0000262c . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x0000262c 0x18 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
0x0000262c __udivmodqi4
.text.libgcc 0x00002644 0x28 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
0x00002644 __udivmodhi4
0x0000266c . = ALIGN (0x2)
*(.fini9)
*(.fini8)
*(.fini7)
*(.fini6)
*(.fini5)
*(.fini4)
*(.fini3)
*(.fini2)
*(.fini1)
*(.fini0)
0x0000266c _etext = .
 
.data 0x00800060 0x0 load address 0x0000266c
0x00800060 PROVIDE (__data_start, .)
*(.data)
*(.gnu.linkonce.d*)
0x00800060 . = ALIGN (0x2)
0x00800060 _edata = .
0x00800060 PROVIDE (__data_end, .)
 
.bss 0x00800060 0x527
0x00800060 PROVIDE (__bss_start, .)
*(.bss)
*(COMMON)
COMMON 0x00800060 0x50a main.o
0x00800060 display_page_counter
0x00800061 timer
0x00800062 display_buffer
0x00800462 display_buffer_counter
0x00800463 p_buffer
0x008004e3 display_mode
0x008004e4 counter
0x008004e5 rs232_timer
0x008004e6 key
0x008004e7 display_buffer_pointer
0x008004e9 r_buffer
0x00800569 counter2
COMMON 0x0080056a 0x2 lcd.o
0x0080056a lcd_xpos
0x0080056b lcd_ypos
COMMON 0x0080056c 0x12 rs232.o
0x0080056c write_index
0x0080056d read_index
0x0080056e rs232_buffer
COMMON 0x0080057e 0x1 displ_val.o
0x0080057e displ_page
COMMON 0x0080057f 0x8 parameter.o
0x0080057f array
0x00800587 PROVIDE (__bss_end, .)
0x0000266c __data_load_start = LOADADDR (.data)
0x0000266c __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x00800587 0x0
0x00800587 PROVIDE (__noinit_start, .)
*(.noinit*)
0x00800587 PROVIDE (__noinit_end, .)
0x00800587 _end = .
0x00800587 PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
 
.stab 0x00000000 0x36c
*(.stab)
.stab 0x00000000 0x36c F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
 
.stabstr 0x00000000 0x84
*(.stabstr)
.stabstr 0x00000000 0x84 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges 0x00000000 0xc8
*(.debug_aranges)
.debug_aranges
0x00000000 0x14 main.o
.debug_aranges
0x00000014 0x14 timer.o
.debug_aranges
0x00000028 0x14 lcd.o
.debug_aranges
0x0000003c 0x14 rs232.o
.debug_aranges
0x00000050 0x14 base64.o
.debug_aranges
0x00000064 0x14 displ_val.o
.debug_aranges
0x00000078 0x14 parameter.o
.debug_aranges
0x0000008c 0x14 menu.o
.debug_aranges
0x000000a0 0x14 display.o
.debug_aranges
0x000000b4 0x14 motortest.o
 
.debug_pubnames
0x00000000 0x902
*(.debug_pubnames)
.debug_pubnames
0x00000000 0xe3 main.o
.debug_pubnames
0x000000e3 0x6c timer.o
.debug_pubnames
0x0000014f 0x1b1 lcd.o
.debug_pubnames
0x00000300 0x1b F8X6.o
.debug_pubnames
0x0000031b 0x8d rs232.o
.debug_pubnames
0x000003a8 0xd1 base64.o
.debug_pubnames
0x00000479 0xd2 displ_val.o
.debug_pubnames
0x0000054b 0x177 parameter.o
.debug_pubnames
0x000006c2 0xd1 menu.o
.debug_pubnames
0x00000793 0xc1 display.o
.debug_pubnames
0x00000854 0xae motortest.o
 
.debug_info 0x00000000 0x1dfa
*(.debug_info)
.debug_info 0x00000000 0x1c7 main.o
.debug_info 0x000001c7 0xe6 timer.o
.debug_info 0x000002ad 0x979 lcd.o
.debug_info 0x00000c26 0xdd F8X6.o
.debug_info 0x00000d03 0x174 rs232.o
.debug_info 0x00000e77 0x28d base64.o
.debug_info 0x00001104 0x21e displ_val.o
.debug_info 0x00001322 0x542 parameter.o
.debug_info 0x00001864 0x222 menu.o
.debug_info 0x00001a86 0x1f4 display.o
.debug_info 0x00001c7a 0x180 motortest.o
*(.gnu.linkonce.wi.*)
 
.debug_abbrev 0x00000000 0x98e
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x92 main.o
.debug_abbrev 0x00000092 0x75 timer.o
.debug_abbrev 0x00000107 0x1c7 lcd.o
.debug_abbrev 0x000002ce 0x61 F8X6.o
.debug_abbrev 0x0000032f 0xde rs232.o
.debug_abbrev 0x0000040d 0xe5 base64.o
.debug_abbrev 0x000004f2 0xcc displ_val.o
.debug_abbrev 0x000005be 0x179 parameter.o
.debug_abbrev 0x00000737 0xed menu.o
.debug_abbrev 0x00000824 0xda display.o
.debug_abbrev 0x000008fe 0x90 motortest.o
 
.debug_line 0x00000000 0x1982
*(.debug_line)
.debug_line 0x00000000 0x13b main.o
.debug_line 0x0000013b 0xcd timer.o
.debug_line 0x00000208 0x71f lcd.o
.debug_line 0x00000927 0xbf F8X6.o
.debug_line 0x000009e6 0x144 rs232.o
.debug_line 0x00000b2a 0x236 base64.o
.debug_line 0x00000d60 0x1c3 displ_val.o
.debug_line 0x00000f23 0x547 parameter.o
.debug_line 0x0000146a 0x1b2 menu.o
.debug_line 0x0000161c 0x1cd display.o
.debug_line 0x000017e9 0x199 motortest.o
 
.debug_frame
*(.debug_frame)
 
.debug_str 0x00000000 0x4dc
*(.debug_str)
.debug_str 0x00000000 0x124 main.o
0x192 (size before relaxing)
.debug_str 0x00000124 0x1f timer.o
0xf5 (size before relaxing)
.debug_str 0x00000143 0x166 lcd.o
0x2e2 (size before relaxing)
.debug_str 0x000002a9 0x12 F8X6.o
0x101 (size before relaxing)
.debug_str 0x000002bb 0x63 rs232.o
0x12c (size before relaxing)
.debug_str 0x0000031e 0x4f base64.o
0x1c5 (size before relaxing)
.debug_str 0x0000036d 0x39 displ_val.o
0x1a8 (size before relaxing)
.debug_str 0x000003a6 0xbf parameter.o
0x271 (size before relaxing)
.debug_str 0x00000465 0x34 menu.o
0x19c (size before relaxing)
.debug_str 0x00000499 0x2c display.o
0x1a7 (size before relaxing)
.debug_str 0x000004c5 0x17 motortest.o
0x17a (size before relaxing)
 
.debug_loc
*(.debug_loc)
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(main.elf elf32-avr)
 
.debug_ranges 0x0000266c 0xc
.debug_ranges 0x0000266c 0xc lcd.o
 
Cross Reference Table
 
Symbol File
RS232_get rs232.o
base64.o
RS232_init rs232.o
main.o
RS232_send rs232.o
base64.o
RS232_text rs232.o
__bad_interrupt F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__bss_end F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
__bss_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
__data_end F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__data_load_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__data_start F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
__do_clear_bss F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_clear_bss.o)
motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
rs232.o
F8X6.o
lcd.o
timer.o
main.o
__do_copy_data F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_copy_data.o)
motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
rs232.o
F8X6.o
lcd.o
timer.o
main.o
__heap_end F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__init F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__stack F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
main.o
__udivmodhi4 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodhi4.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
__udivmodqi4 F:/WinAvr/lib/gcc/avr/3.4.5/avr5\libgcc.a(_udivmodqi4.o)
parameter.o
__vector_1 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_10 timer.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_11 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_12 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_13 rs232.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_14 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_15 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_16 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_17 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_18 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_19 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_2 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_20 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_3 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_4 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_5 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_6 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_7 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_8 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_9 F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vector_default F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
__vectors F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
array parameter.o
base64_decode base64.o
base64_send base64.o
motortest.o
display.o
parameter.o
displ_val.o
bin_parameter parameter.o
binary parameter.o
bindec parameter.o
cls lcd.o
counter timer.o
main.o
counter2 timer.o
main.o
decimal parameter.o
displ_get_text displ_val.o
displ_page displ_val.o
displ_values displ_val.o
display_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_buffer_counter motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_buffer_pointer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_data display.o
menu.o
display_mode motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
display_page_counter motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
lcd.o
main.o
draw_circle lcd.o
draw_fcircle lcd.o
edit_parameter parameter.o
menu.o
edit_parameter2 parameter.o
f8x6 F8X6.o
lcd.o
get_message base64.o
display.o
parameter.o
displ_val.o
itoa F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
displ_val.o
key motortest.o
display.o
menu.o
parameter.o
displ_val.o
timer.o
main.o
lcd_cls lcd.o
motortest.o
display.o
menu.o
parameter.o
displ_val.o
lcd_frect lcd.o
lcd_init lcd.o
main.o
lcd_line lcd.o
lcd_plot lcd.o
lcd_print lcd.o
parameter.o
lcd_print_at lcd.o
display.o
parameter.o
displ_val.o
lcd_print_atp lcd.o
menu.o
parameter.o
displ_val.o
lcd_printp lcd.o
motortest.o
display.o
menu.o
parameter.o
lcd_rect lcd.o
lcd_xpos lcd.o
lcd_ypos lcd.o
main main.o
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5/crtm32.o
main_menu menu.o
main.o
menu_choose menu.o
parameter.o
menu_set_cursor menu.o
motor_test motortest.o
menu.o
new_line lcd.o
p_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
main.o
p_limits parameter.o
p_menu_number parameter.o
p_menus parameter.o
parameter parameter.o
put_char lcd.o
r_buffer motortest.o
display.o
menu.o
parameter.o
displ_val.o
base64.o
main.o
read_display display.o
read_index rs232.o
read_parameter parameter.o
rs232_buffer rs232.o
rs232_timer rs232.o
timer.o
main.o
scroll lcd.o
send_byte lcd.o
set_adress lcd.o
show_parameter parameter.o
strrev F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(strrev.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(itoa.o)
timer display.o
parameter.o
base64.o
timer.o
main.o
timer_init timer.o
main.o
utoa F:/WinAvr/bin/../lib/gcc/avr/3.4.5/../../../../avr/lib/avr5\libc.a(utoa.o)
parameter.o
wait_1ms lcd.o
wait_ms lcd.o
write_index rs232.o
write_parameter parameter.o
/Transportables_Koptertool/tags/V-0.1/main.sym
0,0 → 1,204
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
00000054 T __ctors_end
00000054 T __ctors_start
00000054 T __dtors_end
00000054 T __dtors_start
00000054 T f8x6
00000654 t __c.0
0000065b T parameter
0000085f W __stack
000009bb T bin_parameter
00000a7b T p_limits
00000b42 T p_menu_number
00000b85 T p_menus
00000c09 t __c.11
00000c0b t __c.12
00000c0d t __c.13
00000c0f t __c.0
00000c20 t __c.1
00000c26 t __c.2
00000c2c t __c.3
00000c32 t __c.4
00000c38 t __c.5
00000c3e t __c.6
00000c46 t __c.7
00000c69 t __c.8
00000c70 t __c.9
00000c88 t __c.10
00000c9c t __c.4
00000c9e t __c.5
00000ca0 t __c.0
00000cb7 t __c.1
00000cc3 t __c.2
00000ccf t __c.3
00000cd9 t __c.0
00000ce1 t __c.1
00000cec t __c.0
00000cfc W __init
00000d08 T __do_copy_data
00000d14 t .do_copy_data_loop
00000d18 t .do_copy_data_start
00000d1e T __do_clear_bss
00000d26 t .do_clear_bss_loop
00000d28 t .do_clear_bss_start
00000d32 T __bad_interrupt
00000d32 W __vector_1
00000d32 W __vector_11
00000d32 W __vector_12
00000d32 W __vector_14
00000d32 W __vector_15
00000d32 W __vector_16
00000d32 W __vector_17
00000d32 W __vector_18
00000d32 W __vector_19
00000d32 W __vector_2
00000d32 W __vector_20
00000d32 W __vector_3
00000d32 W __vector_4
00000d32 W __vector_5
00000d32 W __vector_6
00000d32 W __vector_7
00000d32 W __vector_8
00000d32 W __vector_9
00000d36 T main
00000d6a T __vector_10
00000de8 T timer_init
00000df8 T send_byte
00000e08 T cls
00000e6c T lcd_cls
00000e72 T wait_1ms
00000e7c T wait_ms
00000ea6 T lcd_init
00000f22 T set_adress
00000f68 T scroll
00000fd2 T put_char
0000113a T new_line
00001154 T lcd_printp
000011c2 T lcd_print_atp
000011d4 T lcd_print
0000123a T lcd_print_at
0000124c T lcd_plot
000012de T lcd_line
00001464 T lcd_frect
000014e8 T lcd_rect
0000157c T draw_circle
000016ce T draw_fcircle
000017f0 T __vector_13
00001834 T RS232_init
0000183e T RS232_get
00001888 T RS232_send
00001890 T RS232_text
000018ae T base64_decode
0000192a T get_message
00001978 T base64_send
00001a88 T displ_get_text
00001b0a T displ_values
00001c04 T read_parameter
00001c58 T write_parameter
00001c8e T binary
00001cc4 T bindec
00001cf8 T decimal
00001d42 T show_parameter
00001ed4 T edit_parameter2
0000218e T edit_parameter
000022e2 T menu_set_cursor
0000230c T menu_choose
00002390 T main_menu
000023f2 T read_display
00002446 T display_data
00002506 T motor_test
0000259e T itoa
000025e0 T utoa
0000260c T strrev
0000262c T __udivmodqi4
00002632 t __udivmodqi4_loop
0000263a t __udivmodqi4_ep
00002644 T __udivmodhi4
0000264c t __udivmodhi4_loop
0000265a t __udivmodhi4_ep
0000266c A __data_load_end
0000266c A __data_load_start
0000266c T _etext
00800060 B __bss_start
00800060 D __data_end
00800060 D __data_start
00800060 D _edata
00800060 B display_page_counter
00800061 B timer
00800062 B display_buffer
00800462 B display_buffer_counter
00800463 B p_buffer
008004e3 B display_mode
008004e4 B counter
008004e5 B rs232_timer
008004e6 B key
008004e7 B display_buffer_pointer
008004e9 B r_buffer
00800569 B counter2
0080056a B lcd_xpos
0080056b B lcd_ypos
0080056c B write_index
0080056d B read_index
0080056e B rs232_buffer
0080057e B displ_page
0080057f B array
00800587 B __bss_end
00800587 ? _end
00810000 ? __eeprom_end
/Transportables_Koptertool/tags/V-0.1/makefile
0,0 → 1,414
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
# Additional material for this makefile was submitted by:
# Tim Henigan
# Peter Fleury
# Reiner Patommel
# Sander Pool
# Frederik Rouleau
# Markus Pfaff
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#
 
 
# MCU name
MCU = atmega32
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
#put the name of the target file here (without extension)
# TARGET = main
TARGET = MMT
 
#put your C sourcefiles here
# SRC = circle.c F8x8b.c F8x8a.c F8x6.c f8x8fv.c f8x6fv.c f6x5fv.c f6x4fv.c fontsoft.c serial.c paul.c bitmap.c demo.c draw.c F16x8a.c F16x8b.c F16x8c.c t6963.c $(TARGET).c
SRC = $(TARGET).c timer.c lcd.c F8X6.c rs232.c base64.c displ_val.c parameter.c menu.c display.c motortest.c
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
 
# List C source files here. (C dependencies are automatically generated.)
# SRC = $(TARGET).c
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
 
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
 
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = avr911
 
 
AVRDUDE_PORT = com4 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 115200 -F
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
 
 
 
# ---------------------------------------------------------------------------
 
# Define directories, if needed.
DIRAVR = F:/Eigene Dateien/Controller/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Defines and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
# Programming support using ponyprog. Settings and variables.
#PONYPROG= ponyprog2000.exe
#PONYPROG= C:\Programme\ponyprog2000\ponyprog2000.exe
# Program the device.
#program: $(TARGET).hex $(TARGET).eep
# echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TARGET).hex\n#LOAD-DATA $(TARGET).eep\nWRITE-PROG" >isp.e2s
# $(PONYPROG) isp.e2s
 
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/Transportables_Koptertool/tags/V-0.1/menu.c
0,0 → 1,90
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"
 
 
// Subroutine für den Stern (*) bzw. Cursor
 
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
lcd_print_atp(pos,before,PSTR(" "),0); // Die vorhergehende Position löschen
lcd_print_atp(pos,line,PSTR("*"),0); // Den Cursor an der aktuellen Position anzeigen
}
 
 
// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.
 
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
uint8_t line, before;
line = min;
before = min;
menu_set_cursor(line,line,pos);
do
{
while (key != key_nokey);
while(key == key_nokey);
if ((key == key_plus) && (line < max))
line ++;
if ((key == key_minus) && (line > min))
line --;
 
menu_set_cursor(before,line,pos);
before = line;
}
while ((key != key_enter) && (key != key_esc)); // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
if (key == key_esc)
line = 255;
while (key != key_nokey); // Warten, bis Taste wieder losgelassen wurde
return line;
}
 
void main_menu (void)
{
lcd_cls();
lcd_printp(PSTR("Hauptmenü(BETA V0.1)\r\n"),0);
lcd_printp(PSTR("\r\nDisplay\r\n"),0);
lcd_printp(PSTR("Parameter\r\n"),0);
lcd_printp(PSTR("Motortest\r\n"),0);
lcd_printp(PSTR("Debug Daten\r\n"),0);
lcd_printp(PSTR("Settings\r\n"),0);
lcd_printp(PSTR("Mod by Mikeljo 05/08"),0);
 
switch(menu_choose(2,6,12))
{
case 2:
display_data(); // LCD-Modus
break;
case 3:
edit_parameter(); // Parameter (Settings) laden/editieren
break;
case 4:
motor_test(); // primitiver Motor-Test
break;
case 5:
display_debug(); // Debug Daten
break;
case 6:
LCD_settings(); // Einstellungen
break;
}
}
/Transportables_Koptertool/tags/V-0.1/menu.h
0,0 → 1,7
#ifndef menu_h
#define menu_h
 
void main_menu (void);
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos);
 
#endif
/Transportables_Koptertool/tags/V-0.1/mmt.aws
0,0 → 1,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA32"/><Files><File00000 Name="D:\Develop\MMT\lcd.c" Position="269 211 1116 677" LineCol="26 0" State="Maximized"/><File00001 Name="D:\Develop\MMT\settings.c" Position="309 265 1156 731" LineCol="9 0" State="Maximized"/><File00002 Name="D:\Develop\MMT\settings.h" Position="176 63 1185 766" LineCol="4 0" State="Maximized"/><File00003 Name="D:\Develop\MMT\main.h" Position="208 126 1055 592" LineCol="25 0" State="Maximized"/><File00004 Name="D:\Develop\MMT\lcd.h" Position="252 184 1099 650" LineCol="27 0" State="Maximized"/><File00005 Name="D:\Develop\MMT\main.c" Position="274 213 1121 679" LineCol="88 0" State="Maximized"/><File00006 Name="D:\Develop\MMT\menu.c" Position="185 69 1194 772" LineCol="0 0" State="Maximized"/><File00007 Name="D:\Develop\MMT\debug.c" Position="188 71 1197 774" LineCol="184 39" State="Maximized"/><File00008 Name="D:\Develop\MMT\base64.c" Position="214 130 1061 596" LineCol="77 0" State="Maximized"/><File00009 Name="D:\Develop\MMT\display.c" Position="236 159 1083 625" LineCol="32 72" State="Maximized"/><File00010 Name="D:\Develop\MMT\parameter.c" Position="258 188 1105 654" LineCol="277 18" State="Maximized"/><File00011 Name="D:\Develop\MMT\base64.h" Position="302 246 1149 712" LineCol="9 0" State="Maximized"/><File00012 Name="D:\Develop\MMT\debug.h" Position="324 275 1171 741" LineCol="8 10" State="Maximized"/><File00013 Name="D:\Develop\MMT\parameter.h" Position="346 304 1193 770" LineCol="4 43" State="Maximized"/></Files></AVRWorkspace>
/Transportables_Koptertool/tags/V-0.1/motortest.c
0,0 → 1,52
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "motortest.h"
#include "lcd.h"
#include "base64.h"
 
void motor_test(void)
{
lcd_cls();
 
while (key != 0x00);
 
lcd_printp(PSTR("Taste drücken\r\n"),0);
while (key == 0x00);
if (key == 0x08) // nur, wenn die Bestätigungstaste gedrückt wird
{
p_buffer[0] = '#'; // Motoren einschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 10;
p_buffer[4] = 10;
p_buffer[5] = 10;
p_buffer[6] = 10;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
while (key != 0x00);
while (key == 0x00);
p_buffer[0] = '#'; // Motoren ausschalten
p_buffer[1] = 'a';
p_buffer[2] = 't';
p_buffer[3] = 0;
p_buffer[4] = 0;
p_buffer[5] = 0;
p_buffer[6] = 0;
p_buffer[7] = 0;
p_buffer[8] = 0;
 
base64_send(9);
}
/Transportables_Koptertool/tags/V-0.1/motortest.h
0,0 → 1,6
#ifndef motortest_h
#define motortest_h
 
void motor_test(void);
 
#endif
/Transportables_Koptertool/tags/V-0.1/parameter.c
0,0 → 1,556
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
 
uint8_t array[8];
 
prog_uchar p_menus[12][11]=
{
"Config ",
"Channels ",
"Stick ",
"Hoehe ",
"Gyro ",
"Looping ",
"Camera ",
"Sonstiges ",
"User ",
"Coupling ",
"Config(2) ",
"Loopingset"
};
 
 
// Diese Tabelle ordnet die eingelesenen Parameter den Menü-Seiten zu
 
prog_uchar p_menu_number[67]=
{
2,2,2,2,2,2,2,2, // Die ersten 8 Parameter werden auf Menüseite 2 angezeigt (=Kanalzuordnungen)
0,4,4,4,4,4,4,3,
3,3,8,8,8,8,5,5,
8,8,8,0,5,9,9,9,
9,7,7,7,7,7,7,6,
6,6,10,10,6,6,5,5,
5,9,9,9,9,0,7,11,
11,11,11,12,12, 12,
12,12,12,12,12
 
};
 
prog_uchar p_limits[199]= // Limits für die Parameter
{
1,8,2, // 2:Nick (3)
1,8,2, // 2:Roll (4)
1,8,2, // 2:Gas (2)
1,8,2, // 2:Gier (1)
1,8,2, // 2:Poti1 (6)
1,8,2, // 2:Poti2 (6)
1,8,2, // 2:Poti3 (7)
1,8,2, // 2:Poti4 (5)
0,0,0, // 1:Config
0,255,4, // 4:Höhe MinGas (30)
0,255,4, // 4:Luftdruck_D (30)
0,255,4, // 4:MaxHöhe (Setpoint?) (Poti4)
0,255,4, // 4:Höhe_P (10)
0,50,4, // 4:Höhe Verstärkung (3)
0,255,4, // 4:Höhe Z-acc (30)
0,6,3, // 3:Nick/Roll P (3)
0,64,3, // 3:Nick/Roll D (4)
0,20,3, // 3:Gier_P (6)
0,32,8, // 8:Min.Gas (15)
33,250,8, // 8:Max.Gas (250)
0,50,8, // 5:Gyro-Acc Faktor (30)
0,255,8, // 8:Kompass-Wirkung (128)
0,0,5, // 5:Gyro-P (80)
0,0,5, // 5:Gyro-I (120)
0,250,8, // 8:Unterspannung (94)
0,250,8, // 8:Not-Gas Zeit (20)
0,250,8, // 8:Not-Gas (35)
0,1,0, // Ufo-Ausrichtung (X +)
0,255,5, // I-Faktor (32)
0,255,9, // 9:User1 (80)
0,255,9, // 9:User2 (0)
0,255,9, // 9:User3
0,255,9, // 9:User4
0,255,7, // 7:Servo Nick Control (100)
0,250,7, // 7:Servo Nick Compensation (40)
0,250,7, // 7:Servo Nick min (50)
0,250,7, // 7:Servo Nick max (150)
0,25,7, // 7:Servo Nick refrsh (5)
0,255,6, // 6:Loop Gas Limit (50)
0,250,6, // 6:Loop Ansprechschwelle (90)
0,250,6, // 6:Loop Hysterese (50)
0,255,10, // 10:Achskopplung (90)
0,255,10, // 10:Achsgegenkopplung (5)
0,250,6, // 6:Turnover Nick (100)
0,250,6, // 6:Turnover Roll (100)
0,250,5, // 5: Gyro-Abgleich (Comp.) (32)
0,250,5, // 5: Drift (4)
0,255,5, // 5: Dynamic stability (75)
0,255,9, // 9:User5
0,255,9, // 9:User6
0,255,9, // 9:User7
0,255,9, // 9:User8 (0)
 
0,0,1, // 6:Loop Config (0)
0,1,7 // 7:Servo Nick Compensation Invert (0)
};
 
prog_char bin_parameter[12][16] = // Die binär kodierten Parametern werden getrennt behandelt.
{
"Loop up ",
"Loop down ",
"Loop left ",
"Loop right ",
"Höhenregler ", // 8
"Höhenschalter ",
"Headhold ",
"Kompass ",
"KompassFix ",
"GPS ",
"Achsenkopplung ",
"Drehrate "
};
 
prog_char parameter[54][16]=
{
"Nick ", // 0 (3)
"Roll ", // 1 (4)
"Gas ", // (2)
"Gier ", // (1)
"Poti1 ", // (6)
"Poti2 ", // (6)
"Poti3 ", // (7)
"Poti4 ", // 7 (5)
"Config ", // 8
"Hoehe_MinGas ", // 9 (30)
"Luftdruck_D ", // 10 Wert : 0-250 (30)
"MaxHoehe ", // 11 Wert : 0-250 251 -> Poti1 (Poti4)
"Hoehe_P ", // 12 Wert : 0-32 (10)
"Hoehe_Verstaerk", // 13 Wert : 0-50
"Hoehe_ACC_Wirk.", // 14 Wert : 0-250 (30)
"Stick_P ", // 15 Wert : 1-6
"Stick_D ", // 16 Wert : 0-64
"Gier_P ", // 17 Wert : 1-20 POTI(?)
"Gas_Min ", // 17 Wert : 0-32
"Gas_Max ", // 18 Wert : 33-250
"GyroAccFaktor ", // 19 Wert : 1-64
"KompassWirkung ", // 20 Wert : 0-250
"Gyro_P ", // 21 Wert : 0-250
"Gyro_I ", // 22 Wert : 0-250
"Unterspannung ", // 23 Wert : 0-250
"NotGas ", // 24 Wert : 0-250 // Gaswert bei Empangsverlust
"NotGasZeit ", // 25 Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
"UfoAusrichtung ", // 26 X oder + Formation
"I_Faktor ", // 27 = 32;
"UserParam1 ", // 28 = 32 * 4; //zur freien Verwendung
"UserParam2 ", // 29 zur freien Verwendung
"UserParam3 ", // 30 zur freien Verwendung
"UserParam4 ", // 31 zur freien Verwendung
"ServoNickCtrl ", // 32 Wert : 0-250 // Stellung des Servos
"ServoNickComp ", // 33 Wert : 0-250 // Einfluss Gyro/Servo
"ServoNickMin ", // 34 Wert : 0-250 // Anschlag
"ServoNickMax ", // 35 Wert : 0-250 // Anschlag
"ServoNickRefrsh", // 36
"LoopGasLimit ", // 37
"LoopThreshold ", // 38 Wert: 0-250 Schwelle für Stickausschlag
"LoopHysterese ", // 39
"AchsKopplung ", // 40
"AchsGegenKoppl.", // 41
"WinklUmschlNick", // 42
"WinklUmschlRoll", // 43
"GyroAccAbgleich", // 44 1/k
"Driftkomp ", // 45
"DynamicStabilit", // 47
"UserParam5 ", // 48 zur freien Verwendung
"UserParam6 ", // 49 zur freien Verwendung
"UserParam7 ", // 50 zur freien Verwendung
"UserParam8 ", // 51 zur freien Verwendung
"LoopConfig ", // 52 Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
"ServoNickCompIn" // 53 Wert : 0-250 // Richtung Einfluss Gyro/Servo
// "Name " // 54
};
 
 
// Parameter lesen, editieren und zurückschreiben
 
uint8_t read_parameter (uint8_t number) // Number = Parameter-Set#
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Parameter anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'q';
p_buffer[3] = number;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
 
do // warten, bis die Parameter gesendet werden
{
if (get_message() == 1) // Fehler bei der Übertragung?
timeout = 30; // Timeout sofort auf Endwert setzen
timeout ++;
}
while (((r_buffer[1] < 'L') || (r_buffer[1] > 'P')) && (timeout < 30)); // warten, bis Parameter empfangen wurden oder ein Timeout auftrat
if (timeout >= 30) // Wenn ein Timeout (=Fehler) auftrat, eine 1 zurückgeben, ansonsten 0
return 1;
else
return 0;
}
 
void write_parameter(uint8_t number) // Schreibe Parameter-Satz
{
uint8_t i;
if (number <= 5)
{
 
for (i=0;i<71;i++) // Den gesamten Parameter-Puffer um 3 Bytes nach hinten verschieben
p_buffer[(70-i)+3] = p_buffer[70-i];
p_buffer[0] = '#'; // Befehl zum Schreiben der Parameter
p_buffer[1] = 'a';
p_buffer[2] = number + 'k'; // Nummer des Parameters
p_buffer[74] = 0;
base64_send(75); // Parameter in base64 kodieren und senden, 75 Bytes
}
}
 
void binary (uint8_t data, uint8_t *feld) // Wandelt eine 8-Bit Zahl in eine Binärzahl um (Array mit 8 Elementen)
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
i=0;
for (i=0;i<8;i++)
{
if ((1<<i) & data)
feld[i] = 1;
else
feld[i] = 0;
}
}
 
uint8_t bindec (uint8_t *feld) // wandelt eine Binärzahl (im Array) in eine 8-Bit Zahl
{ // Wird für die Flags (Loop + Grundkonfiguration) benötigt
uint8_t i;
uint8_t result;
result = 0;
for (i=0;i<8;i++)
{
if (feld[i] == 1)
result += 1<<i;
}
return result;
}
 
 
 
 
void decimal (uint8_t data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{ // (schneller/kleiner als printf())
text[0] = data/100;
data -= (text[0] * 100);
text[1] = data/10;
data -= (text[1] *10);
text[2] = data + 0x30;
text[0] += 0x30;
text[1] += 0x30;
 
if (text[0] == 0x30)
{
text[0] = 0x20;
if (text[1] == 0x30)
text[1] = 0x20;
}
text[3] = 0x00;
}
 
uint8_t show_parameter (uint8_t number) // Zeigt eine Parameter-Seite an und gibt die ausgewählte Zeile zurück
{
uint8_t i;
uint8_t line;
uint8_t text[25];
uint8_t bin[8];
line = 0;
if (number > 1)
{
for (i = 0; i<66; i++)
{
if (pgm_read_byte(p_limits+i*3+2) == number)
{
array[line] = i;
decimal(p_buffer[i],text);
lcd_print_at(0,line,text,0);
lcd_print_atp(5,line,parameter[i],0);
if (line <= 7)
line++;
}
}
}
else
{ // Sonderfälle: Binäre Eingabe
if (number == 1)
{
binary(p_buffer[52],bin); // Loop-Config
text[1] = 0x00;
for (i=0;i<4;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i],0);
}
}
if (number == 0)
{
binary(p_buffer[8],bin); // Config
text[1] = 0x00;
for (i=0;i<8;i++)
{
text[0] = bin[i] + 0x30;
lcd_print_at(0,i,text,0);
lcd_print_atp(5,i,bin_parameter[i+4],0);
}
}
 
}
return line;
}
 
void edit_parameter2 (uint8_t page, uint8_t lines) // Ändern der Parameter einer Seite
{
uint8_t line;
uint8_t par;
uint8_t min;
uint8_t max;
uint8_t text[10];
uint8_t bin[8];
if (page > 1) // "normale" Parameter-Seiten
{
line = menu_choose(0,lines-1,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = p_buffer[array[line]];
min = pgm_read_byte(p_limits + par * 3);
max = pgm_read_byte(p_limits + par * 3 + 1);
lcd_print_atp(4,line,PSTR("-"),0);
while (key != key_nokey);
do
{
if (key == key_minus)
{
//if (par > min) // Überprüfung der Parameter auf Bereichsüberschreitung derzeit deaktiviert
par --;
}
if (key == key_plus)
{
//if (par < max)
par ++;
}
decimal(par,text);
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != 0x04) && (key != 0x08));
if (key == 0x08)
p_buffer[array[line]] = par;
}
}
if (page == 1) // Spezialfall: Loop-Config (einzelne Bits setzen / löschen)
{
binary(p_buffer[52],bin);
text[1] = 0x00;
 
line = menu_choose(0,3,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[52] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[52],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
if (page == 0) // Spezialfall: Allgemeine Konfiguration (einzelne Bits setzen/löschen)
{
binary(p_buffer[8],bin);
text[1] = 0x00;
 
line = menu_choose(0,7,4);
if (line != 255) // Wenn line == 255, wurde Escape gedrückt
{
par = bin[line];
lcd_print_atp(4,line,PSTR("-"),0);
do
{
if (key == key_minus)
{
par = 0x00;
}
if (key == key_plus)
{
par = 0x01;
}
text[0] = par+0x30;
lcd_print_at(0,line,text,0);
timer = 20;
while (timer > 0);
}
while ((key != key_enter) && (key != key_esc));
if (key == key_enter)
{
bin[line] = par;
p_buffer[8] = bindec(bin);
}
lcd_cls();
decimal(p_buffer[8],text);
lcd_print(text,0);
timer = 200;
while(timer > 0);
}
}
}
 
 
void edit_parameter (void) // Blättert die Parameter seitenweise durch, Einsprung vom Hauptmenü
{
uint8_t page; // 12 Pages
uint8_t text[15];
uint8_t lines;
uint8_t parameter;
lcd_cls();
lcd_printp(PSTR("Lade Parameter\r\n"),0);
lcd_printp(PSTR(" 1:\r\n"),0);
lcd_printp(PSTR(" 2:\r\n"),0);
lcd_printp(PSTR(" 3:\r\n"),0);
lcd_printp(PSTR(" 4:\r\n"),0);
lcd_printp(PSTR(" 5:\r\n"),0);
parameter = menu_choose(1,5,0);
 
page = 2;
if (read_parameter(parameter) == 1)
{
lcd_print_atp(0,6,PSTR("Timeout"),0);
}
else
{
do
{
lcd_cls();
utoa(page,text,10);
lcd_print(text,0);
timer = 50;
while (timer > 0);
lcd_cls();
lines = show_parameter(page);
while (key == key_nokey);
if (key == key_plus)
page++;
if (key == key_minus)
page--;
if (page == 255)
page = 12;
if (page > 12)
page = 0;
if (key == key_enter)
edit_parameter2(page,lines);
}
while (key != key_esc);
lcd_cls();
lcd_printp(PSTR("Parameter speichern?\r\n ja\r\n nein"),0);
lines = menu_choose(1,2,0);
if (lines == 1 )
{
lcd_printp(PSTR("\r\n--->"),0);
write_parameter(5); // Sicherheitshalber wird derzeit ausschließlich auf Parametersatz 5 gesichert.
lcd_printp(PSTR("\r\nParameter gespeichert"),0);
}
else
{
lcd_printp(PSTR("\r\nNicht gespeichert"),0);
}
}
timer = 100;
while(timer > 0);
 
}
/Transportables_Koptertool/tags/V-0.1/parameter.h
0,0 → 1,7
#ifndef parameter_h
#define parameter_h
 
void edit_parameter (void);
void decimal (uint8_t data, uint8_t *text);
 
#endif
/Transportables_Koptertool/tags/V-0.1/rs232.c
0,0 → 1,58
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "main.h"
#include "rs232.h"
 
volatile uint8_t read_index, write_index;
volatile uint8_t rs232_buffer[16];
 
ISR(USART_RXC_vect)
{
rs232_buffer[write_index++] = UDR;
write_index &= 15;
}
 
void RS232_init (void)
{
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
// UBRRL = 7; // 57600 Baud @ 7,372800 MHz
UBRR = 7; // 57600 Baud @ 7,372800 MHz
}
 
uint8_t RS232_get (void)
{
uint8_t c;
 
rs232_timer = 10;
while ((read_index == write_index) && (rs232_timer > 0));
if (rs232_timer != 0)
{
c = rs232_buffer[read_index++];
read_index &= 15;
}
else
{
c=0;
}
return c;
}
void RS232_send (uint8_t data)
{
// while ((UCSRA & (1<<UDRE)) == 0);
while ((USR & (1<<UDRE)) == 0);
UDR = data;
}
void RS232_text (uint8_t *text)
{
while (*text)
{
RS232_send(*text);
text++;
}
}
 
 
/Transportables_Koptertool/tags/V-0.1/rs232.h
0,0 → 1,46
#ifndef rs232_h
#define rs232_h
 
void RS232_init (void);
uint8_t RS232_get (void);
void RS232_send (uint8_t data);
void RS232_text (uint8_t *text);
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
#define USR UCSRA
#define UCR UCSRB
#define UBRR UBRRL
#define EICR EICRB
#define INT_VEC_RX SIG_UART_RECV
#define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
#define USR UCSR0A
#define UCR UCSR0B
#define UDR UDR0
#define UBRR UBRR0L
#define EICR EICR0B
#define TXEN TXEN0
#define RXEN RXEN0
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define U2X U2X0
#define UCSRB UCSR0B
#define UDRE UDRE0
#define INT_VEC_RX SIG_USART_RECV
#define INT_VEC_TX SIG_USART_TRANS
 
#define USART_RXC_vect SIG_USART_RECV
#endif
/Transportables_Koptertool/tags/V-0.1/settings.c
0,0 → 1,70
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
 
#include "main.h"
#include "menu.h"
#include "lcd.h"
#include "settings.h"
 
 
void toggle_display(void)
{
cli();
 
if (LCD_ORIENTATION == 0)
LCD_ORIENTATION = 4;
else LCD_ORIENTATION = 0;
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ORIENTATION], LCD_ORIENTATION);
 
lcd_init();
 
sei();
}
 
void LCD_settings(void)
{
 
// uint8_t parameter;
 
char loop = 1;
 
while(loop)
{
lcd_cls();
lcd_printp(PSTR("Einstellungen:\r\n"),0);
lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Orientierung\r\n"),0);
lcd_printp(PSTR("Linie\r\n"),0);
lcd_printp(PSTR("Rechteck\r\n"),0);
// lcd_printp(PSTR("\r\n"),0);
lcd_printp(PSTR("Exit\r\n"),0);
// parameter = menu_choose(1,5,0);
 
switch(menu_choose(2,5,15))
{
case 2:
toggle_display(); // LCD-Modus
break;
case 3:
lcd_cls();
lcd_line(10,20,100,50, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 4:
lcd_cls();
lcd_rect (10,20,100,40, 1);
while ((key != key_enter) && (key != key_esc));
break;
case 5:
loop = 0;
break;
default:
loop = 0;
break;
}
}
}
/Transportables_Koptertool/tags/V-0.1/settings.h
0,0 → 1,9
void LCD_settings(void);
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
 
#endif
/Transportables_Koptertool/tags/V-0.1/timer.c
0,0 → 1,37
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include "main.h"
#include "timer.h"
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
 
ISR(SIG_OUTPUT_COMPARE0) // Timer-Interrupt (100 Hz)
{
if (counter > 0)
counter --;
else
{
counter = 10;
key = (~PINA >> 4) & 0x0F;
counter2 ++;
}
if (timer > 0)
timer --;
if (rs232_timer > 0)
rs232_timer --;
}
 
void timer_init (void)
{
TCCR0 = (1<<CS02)|(1<<CS00)|(1<<WGM01); // Prescaler 1024
OCR0 = 72; // Interrupt 100Hz für 7,372800 MHz-Quarz
TIMSK |= (1<<OCIE0); // Interrupt freigeben für OCR
}
/Transportables_Koptertool/tags/V-0.1/timer.h
0,0 → 1,26
#ifndef timer_h
#define timer_h
 
volatile uint8_t timer;
volatile uint8_t counter, counter2;
volatile uint8_t key;
volatile uint8_t rs232_timer;
 
void timer_init (void);
 
#endif
 
#if defined (__AVR_ATmega32__)
#endif
 
#if defined (__AVR_ATmega644__)
#define TCCR0 TCCR0A
#define OCR0 OCR0A
#define TIMSK TIMSK0
#define OCIE0 OCIE0A
 
#define INT_VEC_TX SIG_USART_TRANS
 
#define SIG_OUTPUT_COMPARE0 SIG_OUTPUT_COMPARE0A
#endif