GAS LISTING /tmp/ccnpicUY.s 			page 1


   1               		.file	"CamInterface.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__tmp_reg__ = 0
   6               	__zero_reg__ = 1
   7               		.global __do_copy_data
   8               		.global __do_clear_bss
   9               		.stabs	"/home/kaklik/projects/programy/C/avr/AVRcam/",100,0,2,.Ltext0
  10               		.stabs	"CamInterface.c",100,0,2,.Ltext0
  11               		.text
  12               	.Ltext0:
  13               		.stabs	"gcc2_compiled.",60,0,0,0
  14               		.stabs	"int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
  15               		.stabs	"char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0
  16               		.stabs	"long int:t(0,3)=@s32;r(0,3);020000000000;017777777777;",128,0,0,0
  17               		.stabs	"unsigned int:t(0,4)=r(0,4);0;0177777;",128,0,0,0
  18               		.stabs	"long unsigned int:t(0,5)=@s32;r(0,5);0;037777777777;",128,0,0,0
  19               		.stabs	"long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,
  20               		.stabs	"long long unsigned int:t(0,7)=@s64;r(0,7);0;01777777777777777777777;",128,0,0,0
  21               		.stabs	"short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
  22               		.stabs	"short unsigned int:t(0,9)=r(0,9);0;0177777;",128,0,0,0
  23               		.stabs	"signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0
  24               		.stabs	"unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0
  25               		.stabs	"float:t(0,12)=r(0,1);4;0;",128,0,0,0
  26               		.stabs	"double:t(0,13)=r(0,1);4;0;",128,0,0,0
  27               		.stabs	"long double:t(0,14)=r(0,1);4;0;",128,0,0,0
  28               		.stabs	"void:t(0,15)=(0,15)",128,0,0,0
  29               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/interrupt.h",130,0,0,0
  30               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/io.h",130,0,0,0
  31               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/sfr_defs.h",130,0,0,0
  32               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/inttypes.h",130,0,0,0
  33               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/stdint.h",130,0,0,0
  34               		.stabs	"int8_t:t(5,1)=(0,10)",128,0,116,0
  35               		.stabs	"uint8_t:t(5,2)=(0,11)",128,0,117,0
  36               		.stabs	"int16_t:t(5,3)=(0,1)",128,0,118,0
  37               		.stabs	"uint16_t:t(5,4)=(0,4)",128,0,119,0
  38               		.stabs	"int32_t:t(5,5)=(0,3)",128,0,120,0
  39               		.stabs	"uint32_t:t(5,6)=(0,5)",128,0,121,0
  40               		.stabs	"int64_t:t(5,7)=(0,6)",128,0,122,0
  41               		.stabs	"uint64_t:t(5,8)=(0,7)",128,0,123,0
  42               		.stabs	"intptr_t:t(5,9)=(5,3)",128,0,135,0
  43               		.stabs	"uintptr_t:t(5,10)=(5,4)",128,0,140,0
  44               		.stabs	"int_least8_t:t(5,11)=(5,1)",128,0,152,0
  45               		.stabs	"uint_least8_t:t(5,12)=(5,2)",128,0,157,0
  46               		.stabs	"int_least16_t:t(5,13)=(5,3)",128,0,162,0
  47               		.stabs	"uint_least16_t:t(5,14)=(5,4)",128,0,167,0
  48               		.stabs	"int_least32_t:t(5,15)=(5,5)",128,0,172,0
  49               		.stabs	"uint_least32_t:t(5,16)=(5,6)",128,0,177,0
  50               		.stabs	"int_least64_t:t(5,17)=(5,7)",128,0,182,0
  51               		.stabs	"uint_least64_t:t(5,18)=(5,8)",128,0,187,0
  52               		.stabs	"int_fast8_t:t(5,19)=(5,1)",128,0,200,0
  53               		.stabs	"uint_fast8_t:t(5,20)=(5,2)",128,0,205,0
  54               		.stabs	"int_fast16_t:t(5,21)=(5,3)",128,0,210,0
  55               		.stabs	"uint_fast16_t:t(5,22)=(5,4)",128,0,215,0
  56               		.stabs	"int_fast32_t:t(5,23)=(5,5)",128,0,220,0
  57               		.stabs	"uint_fast32_t:t(5,24)=(5,6)",128,0,225,0
GAS LISTING /tmp/ccnpicUY.s 			page 2


  58               		.stabs	"int_fast64_t:t(5,25)=(5,7)",128,0,230,0
  59               		.stabs	"uint_fast64_t:t(5,26)=(5,8)",128,0,235,0
  60               		.stabs	"intmax_t:t(5,27)=(5,7)",128,0,249,0
  61               		.stabs	"uintmax_t:t(5,28)=(5,8)",128,0,254,0
  62               		.stabn	162,0,0,0
  63               		.stabs	"int_farptr_t:t(4,1)=(5,5)",128,0,76,0
  64               		.stabs	"uint_farptr_t:t(4,2)=(5,6)",128,0,80,0
  65               		.stabn	162,0,0,0
  66               		.stabn	162,0,0,0
  67               		.stabn	162,0,0,0
  68               		.stabn	162,0,0,0
  69               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h",130,0,0,0
  70               		.stabs	"/usr/lib/gcc/avr/4.2.1/include/stddef.h",130,0,0,0
  71               		.stabs	"size_t:t(7,1)=(0,4)",128,0,214,0
  72               		.stabn	162,0,0,0
  73               		.stabn	162,0,0,0
  74               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/stdlib.h",130,0,0,0
  75               		.stabs	"/usr/lib/gcc/avr/4.2.1/include/stddef.h",130,0,0,0
  76               		.stabs	"wchar_t:t(9,1)=(0,1)",128,0,326,0
  77               		.stabn	162,0,0,0
  78               		.stabs	"div_t:t(8,1)=(8,2)=s4quot:(0,1),0,16;rem:(0,1),16,16;;",128,0,69,0
  79               		.stabs	"ldiv_t:t(8,3)=(8,4)=s8quot:(0,3),0,32;rem:(0,3),32,32;;",128,0,75,0
  80               		.stabs	"__compar_fn_t:t(8,5)=(8,6)=*(8,7)=f(0,1)",128,0,78,0
  81               		.stabn	162,0,0,0
  82               		.stabs	"CommonDefs.h",130,0,0,0
  83               		.stabs	"bool_t:t(10,1)=(0,11)",128,0,56,0
  84               		.stabn	162,0,0,0
  85               		.stabs	"CamInt_resetCam:F(0,15)",36,0,225,CamInt_resetCam
  86               	.global	CamInt_resetCam
  87               		.type	CamInt_resetCam, @function
  88               	CamInt_resetCam:
  89               		.stabd	46,0,0
   1:CamInterface.c **** /*
   2:CamInterface.c ****     Copyright (C) 2004    John Orlando
   3:CamInterface.c ****     
   4:CamInterface.c ****    AVRcam: a small real-time image processing engine.
   5:CamInterface.c **** 
   6:CamInterface.c ****     This program is free software; you can redistribute it and/or
   7:CamInterface.c ****     modify it under the terms of the GNU General Public
   8:CamInterface.c ****     License as published by the Free Software Foundation; either
   9:CamInterface.c ****     version 2 of the License, or (at your option) any later version.
  10:CamInterface.c **** 
  11:CamInterface.c ****     This program is distributed in the hope that it will be useful,
  12:CamInterface.c ****     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13:CamInterface.c ****     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14:CamInterface.c ****     General Public License for more details.
  15:CamInterface.c **** 
  16:CamInterface.c ****     You should have received a copy of the GNU General Public
  17:CamInterface.c ****     License along with this program; if not, write to the Free Software
  18:CamInterface.c ****     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19:CamInterface.c **** 
  20:CamInterface.c ****    For more information on the AVRcam, please contact:
  21:CamInterface.c **** 
  22:CamInterface.c ****    john@jrobot.net
  23:CamInterface.c **** 
  24:CamInterface.c ****    or go to www.jrobot.net for more details regarding the system.
  25:CamInterface.c **** */
GAS LISTING /tmp/ccnpicUY.s 			page 3


  26:CamInterface.c **** /***********************************************************
  27:CamInterface.c **** 	Module Name: CamInterface.c
  28:CamInterface.c **** 	Module Date: 04/12/2004
  29:CamInterface.c **** 	Module Auth: John Orlando
  30:CamInterface.c **** 	
  31:CamInterface.c **** 	Description: This file is responsible for providing an
  32:CamInterface.c **** 	interface to the OV6620 camera hardware.  This includes
  33:CamInterface.c **** 	an interface to CamInterface.S for certain low-level,
  34:CamInterface.c **** 	optimized camera access routines.
  35:CamInterface.c ****     
  36:CamInterface.c ****     Revision History:
  37:CamInterface.c ****     Date        Rel Ver.    Notes
  38:CamInterface.c ****     4/10/2004      0.1     Module created
  39:CamInterface.c ****     6/30/2004      1.0     Initial release for Circuit Cellar
  40:CamInterface.c ****                            contest.
  41:CamInterface.c ****     11/15/2004     1.2     ifdef'd out the resetCam routine, since
  42:CamInterface.c ****                            resetting the cam now causes the OV6620's
  43:CamInterface.c ****                            clock to not be output (we have to start
  44:CamInterface.c ****                            it up after each reset with the external
  45:CamInterface.c ****                            tiny12 processor).
  46:CamInterface.c ****     1/16/2005      1.4     Ensure that the TCCR1B register is set so
  47:CamInterface.c ****                            nothing is clocking timer1 at startup.                             
  48:CamInterface.c **** ***********************************************************/
  49:CamInterface.c **** 
  50:CamInterface.c **** /*	Includes */
  51:CamInterface.c **** #include <avr/interrupt.h>
  52:CamInterface.c **** #include <avr/sleep.h>
  53:CamInterface.c **** #include <avr/eeprom.h>
  54:CamInterface.c **** #include <stdlib.h>
  55:CamInterface.c **** #include <string.h>
  56:CamInterface.c **** #include "CommonDefs.h"
  57:CamInterface.c **** #include "CamInterface.h"
  58:CamInterface.c **** #include "Utility.h"
  59:CamInterface.c **** #include "UIMgr.h"
  60:CamInterface.c **** #include "Executive.h"
  61:CamInterface.c **** #include "UartInterface.h"
  62:CamInterface.c **** 
  63:CamInterface.c **** /*  Local Variables */
  64:CamInterface.c **** 
  65:CamInterface.c **** /* 	Local Structures and Typedefs */
  66:CamInterface.c **** 
  67:CamInterface.c **** /*  Definitions */
  68:CamInterface.c **** //#define OUTPUT_INITIAL_COLOR_MAP 1
  69:CamInterface.c **** 
  70:CamInterface.c **** #define FAST_ACQUIRE 1
  71:CamInterface.c **** #define CAM_G_BUS          	PINB
  72:CamInterface.c **** #define CAM_G_BUS_DIR      	DDRB
  73:CamInterface.c **** #define CAM_RB_BUS          PINC
  74:CamInterface.c **** #define CAM_RB_BUS_DIR 		DDRC
  75:CamInterface.c **** 
  76:CamInterface.c **** #define CAM_CONTROL_PORT     PORTD
  77:CamInterface.c **** #define CAM_CONTROL_PORT_DIR DDRD
  78:CamInterface.c **** #define CAM_RESET_LINE       BIT7
  79:CamInterface.c **** #define CAM_PIXEL_CLK_COUNT  BIT5
  80:CamInterface.c **** #define CAM_HREF             BIT4
  81:CamInterface.c **** #define CAM_PIXEL_CLK_INT    BIT3
  82:CamInterface.c **** #define CAM_VSYNC            BIT2
GAS LISTING /tmp/ccnpicUY.s 			page 4


  83:CamInterface.c **** 
  84:CamInterface.c **** /*  Global Variables */
  85:CamInterface.c **** /* NOTE: This file MUST appear first in the Makefile for these variables to
  86:CamInterface.c **** be placed properly in RAM */
  87:CamInterface.c **** 
  88:CamInterface.c **** /* The colorMap[] table provides the membership lookup table to convert 
  89:CamInterface.c **** RGB or YUV pixel values into actual colors.  The membership table contains
  90:CamInterface.c **** 16 elements for each color channel, concatenated together.  The Red (or Y)
  91:CamInterface.c **** value is located in the first 16 bytes, the G (or U) value is located in
  92:CamInterface.c **** the second 16 bytes, and the B (or V) value is located in the last 16 bytes:
  93:CamInterface.c **** 
  94:CamInterface.c ****     ----------------------------------------------------------------------------------
  95:CamInterface.c ****     |red0|red1|red2|...|red15|green0|green1|green2|...|green15|blue0|blue1|...|blue15|
  96:CamInterface.c **** mem:|0x00 0x01 0x02     0x15   0x16   0x17   0x18       0x31   0x32  0x33       0x47 |
  97:CamInterface.c ****     ---------------------------------------------------------------------------------
  98:CamInterface.c **** Thus, the red lookup is accessed at colorMap+0, the green lookup is accessed 
  99:CamInterface.c **** at colorMap+16, and the blue lookup is accessed at colorMap+32.  */	
 100:CamInterface.c **** unsigned char colorMap[NUM_ELEMENTS_IN_COLOR_MAP] __attribute__ ((section (".noinit")));
 101:CamInterface.c **** 
 102:CamInterface.c **** /*  Extern Variables */
 103:CamInterface.c **** /* These two buffers hold the current and previous lines
 104:CamInterface.c **** of pixel data.  They are sized to the worst case scenario,
 105:CamInterface.c **** where the color changes between every pixel (unrealistic).
 106:CamInterface.c **** The format of each buffer is for all the even bytes to hold
 107:CamInterface.c **** the run-length, and the odd bytes to hold the color data. */
 108:CamInterface.c **** 
 109:CamInterface.c **** /* In addition, if we are in frameDump mode, we use these buffers
 110:CamInterface.c **** to store the acquired line data...we are actually grabbing ALL of the
 111:CamInterface.c **** pixels in a line (176) instead of the 88 we get normally during tracking.
 112:CamInterface.c **** But since we have enough to hold 88-RLE blocks, we already have the 176
 113:CamInterface.c **** allocated for this... */
 114:CamInterface.c **** unsigned char currentLineBuffer[LENGTH_OF_LINE_BUFFER];
 115:CamInterface.c **** unsigned char previousLineBuffer[LENGTH_OF_LINE_BUFFER];
 116:CamInterface.c **** 
 117:CamInterface.c **** /*  Extern Functions */
 118:CamInterface.c **** /* These functions are located in assembly files, and thus
 119:CamInterface.c **** must be externed here so they can be referenced in the source below. */
 120:CamInterface.c **** extern void CamIntAsm_waitForNewTrackingFrame(unsigned char *pBuffer, unsigned char *pMemLookup);
 121:CamInterface.c **** extern void CamIntAsm_waitForNewDumpFrame(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
 122:CamInterface.c **** extern void CamIntAsm_acquireTrackingLine(unsigned char *pBuffer, unsigned char *pMemLookup);
 123:CamInterface.c **** extern void CamIntAsm_acquireDumpLine(unsigned char *pCurrBuffer, unsigned char *pPrevBuffer);
 124:CamInterface.c **** 
 125:CamInterface.c **** /***********************************************************
 126:CamInterface.c **** 	Function Name: CamInt_init
 127:CamInterface.c **** 	Function Description: This function is responsible
 128:CamInterface.c **** 	for initializing the camera interface.  This includes
 129:CamInterface.c **** 	setting up the i/o ports that are used to read the
 130:CamInterface.c **** 	camera busses, as well as resetting the camera.
 131:CamInterface.c **** 	Inputs:  none
 132:CamInterface.c **** 	Outputs: none
 133:CamInterface.c **** ***********************************************************/	
 134:CamInterface.c **** void CamInt_init(void)
 135:CamInterface.c **** {
 136:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP
 137:CamInterface.c **** 	unsigned char asciiBuffer[5];
 138:CamInterface.c ****     unsigned char i;
 139:CamInterface.c **** #endif    
GAS LISTING /tmp/ccnpicUY.s 			page 5


 140:CamInterface.c ****     
 141:CamInterface.c **** 	/* set up the mega8 ports that will be interfacing
 142:CamInterface.c **** 	with the camera */	
 143:CamInterface.c **** 	CAM_CONTROL_PORT_DIR |= (1<<CAM_RESET_LINE); /* cam reset is output */
 144:CamInterface.c **** 	CAM_CONTROL_PORT_DIR |= 0x80;   /* set just the MSB as an output */
 145:CamInterface.c **** 	CAM_CONTROL_PORT_DIR &= 0xFB;   /* make sure bit2 is clear (input) */
 146:CamInterface.c **** 	CAM_CONTROL_PORT &= 0x7F;   /* set reset line low */
 147:CamInterface.c **** 	CAM_G_BUS_DIR &= 0xF0;  /* 4-bit G bus all inputs */
 148:CamInterface.c ****     CAM_G_BUS_DIR |= 0xF0;  /* disable the pull-up on PB4 and PB5 */
 149:CamInterface.c **** 	CAM_RB_BUS_DIR &= 0xF0;  /* 4-bit RB bus all inputs */
 150:CamInterface.c **** 	
 151:CamInterface.c ****     /* ensure that timer1 is disabled to start...eventually, when PCLK needs
 152:CamInterface.c ****     to feed timer1 through the external counter, it will be enabled on an
 153:CamInterface.c ****     "as needed" basis...*/
 154:CamInterface.c **** 	TCCR1B &= ~( (1<<CS12)|(1<<CS11)|(1<<CS10) );
 155:CamInterface.c **** 	
 156:CamInterface.c **** 	/* we'll turn on the interrupt after we assign the initial TCNT value */
 157:CamInterface.c **** 	
 158:CamInterface.c **** 	/* set up External Interrupt1 to interrupt us on rising edges (HREF)...
 159:CamInterface.c **** 	this is needed to indicate when the first pixel of each line is about to start, so
 160:CamInterface.c **** 	we can synch up with it...this interrupt will be disabled once HREF goes high */
 161:CamInterface.c **** 	
 162:CamInterface.c **** 	MCUCR |= (1<<ISC11) | (1<<ISC10);  /* rising edge interrupt */
 163:CamInterface.c **** 	/* the interrupt will be enabled when we are ready to detect the rising edge of
 164:CamInterface.c **** 	HREF...its now primed and ready to go */
 165:CamInterface.c **** 	
 166:CamInterface.c **** 	/* set up External Interrupt0 to interrupt us on rising edges (VSYNC) */
 167:CamInterface.c **** 	MCUCR |= (1<<ISC01) | (1<<ISC00);	/* rising edge interrupt */ 
 168:CamInterface.c **** 	GICR  |= (1<<INT0);    /* interrupt request enabled */
 169:CamInterface.c **** 	
 170:CamInterface.c **** 	/* set up TimerO to count and be clocked from an external pulse source
 171:CamInterface.c **** 	(HREF) on falling edges...eventually, we need to enable the interrupt
 172:CamInterface.c **** 	for this!  FIX THIS */
 173:CamInterface.c **** 	TCCR0 = (1<<CS02)|(1<<CS01)|(0<<CS00);
 174:CamInterface.c **** 	
 175:CamInterface.c **** 	/* setting up the PCLK counter with Timer1 will be done right after
 176:CamInterface.c **** 	we start receiving pixels in each line...we sacrifice the first pixel
 177:CamInterface.c **** 	in each line, but we'll account for it...*/
 178:CamInterface.c **** 	
 179:CamInterface.c **** 	/* set up the mega8 so that its sleep mode puts it in an IDLE sleep
 180:CamInterface.c **** 	mode, where it can wake up as fast as possible */
 181:CamInterface.c **** 	set_sleep_mode(SLEEP_MODE_IDLE);
 182:CamInterface.c **** 	/* umm....we need to actually enable the sleep mode...*/
 183:CamInterface.c **** 	MCUCR |= 0x80;
 184:CamInterface.c **** 	
 185:CamInterface.c **** 	/* initialize the memLookup table */
 186:CamInterface.c **** 	memset(colorMap,0x00,NUM_ELEMENTS_IN_COLOR_MAP);   
 187:CamInterface.c **** 	
 188:CamInterface.c **** 	/* read the color map out of EEPROM */
 189:CamInterface.c **** 	eeprom_read_block(colorMap, (unsigned char*)0x01,NUM_ELEMENTS_IN_COLOR_MAP);
 190:CamInterface.c **** 
 191:CamInterface.c **** #if OUTPUT_INITIAL_COLOR_MAP    
 192:CamInterface.c ****     UIMgr_txBuffer("\r\n",2);
 193:CamInterface.c ****     for (i=0; i<NUM_ELEMENTS_IN_COLOR_MAP; i++)
 194:CamInterface.c **** 	{
 195:CamInterface.c **** 		memset(asciiBuffer,0x00,5);
 196:CamInterface.c **** 		itoa(colorMap[i],asciiBuffer,10);
GAS LISTING /tmp/ccnpicUY.s 			page 6


 197:CamInterface.c **** 		UIMgr_txBuffer(asciiBuffer,3);
 198:CamInterface.c **** 		UIMgr_txBuffer(" ",1);
 199:CamInterface.c **** 		if (i==15 || i == 31)
 200:CamInterface.c **** 		{
 201:CamInterface.c **** 			/* break up the output */
 202:CamInterface.c **** 			UIMgr_txBuffer("\r\n",2);
 203:CamInterface.c **** 		}
 204:CamInterface.c **** 	}
 205:CamInterface.c **** #endif    
 206:CamInterface.c **** 
 207:CamInterface.c **** #ifndef NO_CRYSTAL
 208:CamInterface.c **** 	CamInt_resetCam();	
 209:CamInterface.c **** #endif    
 210:CamInterface.c **** }
 211:CamInterface.c **** 
 212:CamInterface.c **** /***********************************************************
 213:CamInterface.c **** 	Function Name: CamInt_resetCam
 214:CamInterface.c **** 	Function Description: This function is responsible
 215:CamInterface.c **** 	for resetting the camera.  This is accomplished by
 216:CamInterface.c **** 	toggling the reset line on the OV6620 for ~100 mS.
 217:CamInterface.c **** 	Inputs:  none
 218:CamInterface.c **** 	Outputs: none
 219:CamInterface.c ****     IMPORTANT NOTE: This function has effectively been removed
 220:CamInterface.c ****     since resetting the camera now causes the camera to not
 221:CamInterface.c ****     output the clock signal.  Thus, if we reset the cam, the
 222:CamInterface.c ****     AVR has no clock, and thus doesn't run...
 223:CamInterface.c **** ***********************************************************/	
 224:CamInterface.c **** void CamInt_resetCam(void)
 225:CamInterface.c **** {
  90               		.stabn	68,0,225,.LM0-.LFBB1
  91               	.LM0:
  92               	.LFBB1:
  93               	/* prologue: frame size=0 */
  94               	/* prologue end (size=0) */
  95               	/* epilogue: frame size=0 */
  96 0000 0895      		ret
  97               	/* epilogue end (size=1) */
  98               	/* function CamInt_resetCam size 1 (0) */
  99               		.size	CamInt_resetCam, .-CamInt_resetCam
 100               	.Lscope1:
 101               		.stabs	"",36,0,0,.Lscope1-.LFBB1
 102               		.stabd	78,0,0
 103               		.stabs	"CamInt_init:F(0,15)",36,0,135,CamInt_init
 104               	.global	CamInt_init
 105               		.type	CamInt_init, @function
 106               	CamInt_init:
 107               		.stabd	46,0,0
 108               		.stabn	68,0,135,.LM1-.LFBB2
 109               	.LM1:
 110               	.LFBB2:
 111               	/* prologue: frame size=0 */
 112               	/* prologue end (size=0) */
 113               		.stabn	68,0,143,.LM2-.LFBB2
 114               	.LM2:
 115 0002 8F9A      		sbi 49-0x20,7
 116               		.stabn	68,0,144,.LM3-.LFBB2
 117               	.LM3:
GAS LISTING /tmp/ccnpicUY.s 			page 7


 118 0004 8F9A      		sbi 49-0x20,7
 119               		.stabn	68,0,145,.LM4-.LFBB2
 120               	.LM4:
 121 0006 8A98      		cbi 49-0x20,2
 122               		.stabn	68,0,146,.LM5-.LFBB2
 123               	.LM5:
 124 0008 9798      		cbi 50-0x20,7
 125               		.stabn	68,0,147,.LM6-.LFBB2
 126               	.LM6:
 127 000a 87B3      		in r24,55-0x20
 128 000c 807F      		andi r24,lo8(-16)
 129 000e 87BB      		out 55-0x20,r24
 130               		.stabn	68,0,148,.LM7-.LFBB2
 131               	.LM7:
 132 0010 87B3      		in r24,55-0x20
 133 0012 806F      		ori r24,lo8(-16)
 134 0014 87BB      		out 55-0x20,r24
 135               		.stabn	68,0,149,.LM8-.LFBB2
 136               	.LM8:
 137 0016 84B3      		in r24,52-0x20
 138 0018 807F      		andi r24,lo8(-16)
 139 001a 84BB      		out 52-0x20,r24
 140               		.stabn	68,0,154,.LM9-.LFBB2
 141               	.LM9:
 142 001c 8EB5      		in r24,78-0x20
 143 001e 887F      		andi r24,lo8(-8)
 144 0020 8EBD      		out 78-0x20,r24
 145               		.stabn	68,0,162,.LM10-.LFBB2
 146               	.LM10:
 147 0022 85B7      		in r24,85-0x20
 148 0024 8C60      		ori r24,lo8(12)
 149 0026 85BF      		out 85-0x20,r24
 150               		.stabn	68,0,167,.LM11-.LFBB2
 151               	.LM11:
 152 0028 85B7      		in r24,85-0x20
 153 002a 8360      		ori r24,lo8(3)
 154 002c 85BF      		out 85-0x20,r24
 155               		.stabn	68,0,168,.LM12-.LFBB2
 156               	.LM12:
 157 002e 8BB7      		in r24,91-0x20
 158 0030 8064      		ori r24,lo8(64)
 159 0032 8BBF      		out 91-0x20,r24
 160               		.stabn	68,0,173,.LM13-.LFBB2
 161               	.LM13:
 162 0034 86E0      		ldi r24,lo8(6)
 163 0036 83BF      		out 83-0x20,r24
 164               		.stabn	68,0,181,.LM14-.LFBB2
 165               	.LM14:
 166 0038 85B7      		in r24,85-0x20
 167 003a 8F78      		andi r24,lo8(-113)
 168 003c 85BF      		out 85-0x20,r24
 169               		.stabn	68,0,183,.LM15-.LFBB2
 170               	.LM15:
 171 003e 85B7      		in r24,85-0x20
 172 0040 8068      		ori r24,lo8(-128)
 173 0042 85BF      		out 85-0x20,r24
 174               		.stabn	68,0,186,.LM16-.LFBB2
GAS LISTING /tmp/ccnpicUY.s 			page 8


 175               	.LM16:
 176 0044 E0E0      		ldi r30,lo8(colorMap)
 177 0046 F0E0      		ldi r31,hi8(colorMap)
 178 0048 80E3      		ldi r24,lo8(48)
 179 004a DF01      		movw r26,r30
 180 004c 982F      		mov r25,r24
 181 004e 1D92      		st X+,__zero_reg__
 182 0050 9A95      	        dec r25
 183 0052 01F4      		brne .-6
 184               	.LBB6:
 185               	.LBB7:
 186               	.LBB8:
 187               		.stabs	"/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h",132,0,0,.Ltext1
 188               	.Ltext1:
   1:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* Copyright (c) 2002, 2003, 2004 Marek Michalkiewicz
   2:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    Copyright (c) 2005, 2006 Bjoern Haase
   3:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    All rights reserved.
   4:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
   5:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    Redistribution and use in source and binary forms, with or without
   6:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    modification, are permitted provided that the following conditions are met:
   7:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
   8:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    * Redistributions of source code must retain the above copyright
   9:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer.
  10:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  11:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    * Redistributions in binary form must reproduce the above copyright
  12:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      notice, this list of conditions and the following disclaimer in
  13:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      the documentation and/or other materials provided with the
  14:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      distribution.
  15:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  16:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    * Neither the name of the copyright holders nor the names of
  17:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      contributors may be used to endorse or promote products derived
  18:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      from this software without specific prior written permission.
  19:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  20:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   POSSIBILITY OF SUCH DAMAGE. */
  31:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  32:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* $Id: eeprom.h,v 1.17.2.3 2006/05/23 17:18:23 aesok Exp $ */
  33:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  34:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /*
  35:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    eeprom.h
  36:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  37:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    Contributors:
  38:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      Created by Marek Michalkiewicz <marekm@linux.org.pl>
  39:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      eeprom_write_word and eeprom_write_block added by Artur Lipowski 
  40:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      <LAL@pro.onet.pl>
  41:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      Complete rewrite using the original interface by Bjoern Haase 
  42:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      <bjoern.haase@de.bosch.com>. 
  43:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****  */
GAS LISTING /tmp/ccnpicUY.s 			page 9


  44:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  45:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef _EEPROM_H_
  46:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _EEPROM_H_ 1
  47:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  48:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define __need_size_t
  49:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <stddef.h>
  50:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <inttypes.h>
  51:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  52:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  53:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifdef __AVR_MEGA__
  54:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define XCALL "call"
  55:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #else
  56:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define XCALL "rcall"
  57:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif
  58:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  59:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #include <avr/io.h>
  60:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef __EEPROM_REG_LOCATIONS__
  61:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def __EEPROM_REG_LOCATIONS__
  62:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
  63:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      In order to be able to work without a requiring a multilib 
  64:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      approach for dealing with controllers having the EEPROM registers
  65:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      at different positions in memory space, the eeprom functions evaluate
  66:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      __EEPROM_REG_LOCATIONS__: It is assumed to be defined by
  67:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      the device io header and contains 6 uppercase hex digits encoding the 
  68:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      addresses of EECR,EEDR and EEAR. 
  69:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      First two letters:  EECR address.
  70:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      Second two letters: EEDR address.
  71:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      Last two letters:   EEAR address.
  72:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      The default 1C1D1E corresponds to the
  73:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      register location that is valid for most controllers. The value
  74:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      of this define symbol is used for appending it to the base name of the
  75:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      assembler functions.  */
  76:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define __EEPROM_REG_LOCATIONS__ 1C1D1E
  77:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif
  78:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _STR2(EXP) _STR1(EXP)
  79:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _STR1(EXP) #EXP
  80:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define _REG_LOCATION_SUFFIX _STR2(__EEPROM_REG_LOCATIONS__)
  81:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  82:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #ifndef CR_TAB
  83:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define CR_TAB "\n\t"
  84:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif
  85:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  86:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  87:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \defgroup avr_eeprom <avr/eeprom.h>: EEPROM handling
  88:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \code #include <avr/eeprom.h> \endcode
  89:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  90:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     This header file declares the interface to some simple library
  91:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     routines suitable for handling the data EEPROM contained in the
  92:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     AVR microcontrollers.  The implementation uses a simple polled
  93:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     mode interface.  Applications that require interrupt-controlled
  94:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     EEPROM access to ensure that no time will be wasted in spinloops
  95:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     will have to deploy their own implementation.
  96:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
  97:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \note All of the read/write functions first make sure the EEPROM
  98:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      is ready to be accessed.  Since this may cause long delays if a
  99:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      write operation is still pending, time-critical applications
 100:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      should first poll the EEPROM e. g. using eeprom_is_ready() before
GAS LISTING /tmp/ccnpicUY.s 			page 10


 101:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      attempting any actual I/O.
 102:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 103:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \note This header file declares inline functions that call the
 104:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      assembler subroutines directly. This prevents that the compiler
 105:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      generates push/pops for the call-clobbered registers. This way
 106:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      also a specific calling convention could be used for the eeprom
 107:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      routines e.g. by passing values in __tmp_reg__, eeprom addresses in
 108:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      X and memory addresses in Z registers. Method is optimized for code 
 109:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      size.
 110:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 111:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \note Presently supported are two locations of the EEPROM register
 112:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      set: 0x1F,0x20,0x21 and 0x1C,0x1D,0x1E 
 113:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      (see ::__EEPROM_REG_LOCATIONS__).
 114:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 115:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \note As these functions modify IO registers, they are known to be
 116:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      non-reentrant.  If any of these functions are used from both,
 117:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      standard and interrupt context, the applications must ensure
 118:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      proper protection (e.g. by disabling interrupts before accessing
 119:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      them).
 120:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 121:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** */
 122:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 123:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 124:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /* forward declarations of the inline functions so that doxygen does
 125:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****    not get confused by the attribute expression.  */
 126:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 127:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline uint8_t __attribute__ ((always_inline))
 128:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr);
 129:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 130:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline uint16_t __attribute__ ((always_inline)) 
 131:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr);
 132:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 133:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 134:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
 135:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
 136:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                    size_t size);
 137:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 138:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 139:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_byte (uint8_t *addr,uint8_t value);
 140:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 141:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 142:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_word (uint16_t *addr,uint16_t value);
 143:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 144:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** static inline void __attribute__ ((always_inline))
 145:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_write_block (const void *pointer_ram,
 146:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                     void *pointer_eeprom,
 147:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                     size_t size);
 148:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 149:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \name avr-libc declarations */
 150:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 151:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /*@{*/
 152:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 153:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def EEMEM
 154:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 155:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     Attribute expression causing a variable to be allocated within the .eeprom
 156:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****      section.  */
 157:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define EEMEM __attribute__((section(".eeprom")))
GAS LISTING /tmp/ccnpicUY.s 			page 11


 158:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 159:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_is_ready
 160:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 161:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \returns 1 if EEPROM is ready for a new read/write operation, 0 if not. */
 162:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 163:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #if defined(__DOXYGEN__)
 164:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready()
 165:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(EEWE)
 166:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEWE)
 167:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(EEPE)
 168:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(EECR, EEPE)
 169:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #elif defined(DEECR) && defined(EEL)
 170:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # define eeprom_is_ready() bit_is_clear(DEECR, EEL)
 171:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #else
 172:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** # error "No write enable bit known for this device's EEPROM."
 173:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #endif
 174:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 175:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \def eeprom_busy_wait
 176:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \ingroup avr_eeprom
 177:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 178:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     Loops until the eeprom is no longer busy.
 179:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 180:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \returns Nothing. */
 181:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 182:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** #define eeprom_busy_wait() do {} while (!eeprom_is_ready())
 183:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 184:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 185:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 186:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     Read one byte from EEPROM address \c addr. */
 187:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 188:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint8_t 
 189:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_byte (const uint8_t *addr) 
 190:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {
 191:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   uint8_t result;
 192:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   __asm__ __volatile__
 193:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       ( XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
 194:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****         "mov %1,__tmp_reg__"
 195:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
 196:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****          "=r" (result)
 197:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****        : );
 198:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   return result;
 199:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }
 200:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 201:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 202:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     Read one 16-bit word (little endian) from EEPROM address \c addr. */
 203:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** uint16_t
 204:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_word (const uint16_t *addr)
 205:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {
 206:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   uint16_t result;
 207:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 208:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   __asm__ __volatile__ (
 209:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****         XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB
 210:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****        : "+x" (addr),
 211:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****          "=z" (result)
 212:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****        : );
 213:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   return result;
 214:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** }
GAS LISTING /tmp/ccnpicUY.s 			page 12


 215:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 216:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** /** \ingroup avr_eeprom
 217:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     Read a block of \c n bytes from EEPROM address \c pointer_eeprom to
 218:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     \c pointer_ram.  For constant n <= 256 bytes a library function is used.
 219:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     For block sizes unknown at compile time or block sizes > 256 an inline
 220:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     loop is expanded. */
 221:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 222:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** void 
 223:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** eeprom_read_block (void *pointer_ram,
 224:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                    const void *pointer_eeprom,
 225:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                    size_t n)
 226:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** {
 227:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   if (!__builtin_constant_p (n)
 228:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       || n > 256)
 229:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     {
 230:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       /* make sure size is a 16 bit variable.  */
 231:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       uint16_t size = n; 
 232:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 233:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       __asm__ __volatile__ ( 
 234:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             ".%=_start:" CR_TAB
 235:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "sbiw %2,1" CR_TAB
 236:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "brlt .%=_finished" CR_TAB
 237:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****              XCALL " __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
 238:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "st z+,__tmp_reg__" CR_TAB
 239:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "rjmp .%=_start" CR_TAB
 240:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             ".%=_finished:" 
 241:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****           : "=x" (pointer_eeprom),
 242:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "=z" (pointer_ram),
 243:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             "+w" (size)
 244:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****            : "x" (pointer_eeprom), 
 245:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****              "z" (pointer_ram)
 246:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****            : "memory");
 247:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     }
 248:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****   else
 249:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****     {
 250:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****       if (n != 0)
 251:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****         {
 252:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****           if (n == 256)
 253:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             {
 254:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****               __asm__ __volatile__ (
 255:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                   XCALL " __eeprom_read_block_" _REG_LOCATION_SUFFIX 
 256:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                 : "+x" (pointer_eeprom),
 257:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                   "=z" (pointer_ram)
 258:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                 : "z"  (pointer_ram)
 259:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****                 : "memory");
 260:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             }
 261:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****           else
 262:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****             {
 263:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****               /* Needed in order to truncate to 8 bit.  */
 264:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****               uint8_t len;
 265:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****               len = (uint8_t) n; 
 266:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h **** 
 267:/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h ****               __asm__ __volatile__ (
 189               		.stabn	68,0,267,.LM17-.LFBB2
 190               	.LM17:
 191 0054 A1E0      		ldi r26,lo8(1)
 192 0056 B0E0      		ldi r27,hi8(1)
GAS LISTING /tmp/ccnpicUY.s 			page 13


 193               	/* #APP */
 194 0058 182E      		mov __zero_reg__,r24
 195 005a 00D0      		rcall __eeprom_read_block_1C1D1E
 196               	/* #NOAPP */
 197               	.LBE8:
 198               	.LBE7:
 199               	.LBE6:
 200               	/* epilogue: frame size=0 */
 201 005c 0895      		ret
 202               	/* epilogue end (size=1) */
 203               	/* function CamInt_init size 48 (47) */
 204               		.size	CamInt_init, .-CamInt_init
 205               		.stabs	"pointer_eeprom:r(0,16)=*(0,17)=k(0,15)",64,0,189,26
 206               		.stabs	"pointer_ram:r(0,18)=*(0,15)",64,0,189,30
 207               		.stabn	192,0,0,.LBB6-.LFBB2
 208               		.stabn	224,0,0,.LBE6-.LFBB2
 209               	.Lscope2:
 210               		.stabs	"",36,0,0,.Lscope2-.LFBB2
 211               		.stabd	78,0,0
 212               		.comm currentLineBuffer,176,1
 213               		.comm previousLineBuffer,176,1
 214               	.global	colorMap
 215               		.section	.noinit,"aw",@nobits
 216               		.type	colorMap, @object
 217               		.size	colorMap, 48
 218               	colorMap:
 219 0000 0000 0000 		.skip 48,0
 219      0000 0000 
 219      0000 0000 
 219      0000 0000 
 219      0000 0000 
 220               		.stabs	"currentLineBuffer:G(0,19)=ar(0,20)=r(0,20);0;0177777;;0;175;(0,11)",32,0,114,0
 221               		.stabs	"previousLineBuffer:G(0,19)",32,0,115,0
 222               		.stabs	"colorMap:G(0,21)=ar(0,20);0;47;(0,11)",32,0,100,0
 223               		.text
 224               		.stabs	"",100,0,0,.Letext0
 225               	.Letext0:
 226               	/* File "CamInterface.c": code   49 = 0x0031 (  47), prologues   0, epilogues   2 */
GAS LISTING /tmp/ccnpicUY.s 			page 14


DEFINED SYMBOLS
                            *ABS*:00000000 CamInterface.c
     /tmp/ccnpicUY.s:2      *ABS*:0000003f __SREG__
     /tmp/ccnpicUY.s:3      *ABS*:0000003e __SP_H__
     /tmp/ccnpicUY.s:4      *ABS*:0000003d __SP_L__
     /tmp/ccnpicUY.s:5      *ABS*:00000000 __tmp_reg__
     /tmp/ccnpicUY.s:6      *ABS*:00000001 __zero_reg__
     /tmp/ccnpicUY.s:88     .text:00000000 CamInt_resetCam
     /tmp/ccnpicUY.s:106    .text:00000002 CamInt_init
     /tmp/ccnpicUY.s:218    .noinit:00000000 colorMap
                            *COM*:000000b0 currentLineBuffer
                            *COM*:000000b0 previousLineBuffer

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__eeprom_read_block_1C1D1E
