This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c/7453: ARM -fverbose-asm segfault


>Number:         7453
>Category:       c
>Synopsis:       -fverbose-asm causes gcc -S to crash
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 30 23:46:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Tim Newsome
>Release:        3.1
>Organization:
>Environment:
System: Linux froody 2.4.7 #2 Thu Feb 28 21:08:52 PST 2002 i686 unknown
Architecture: i686

Debian installation with a manually compiled gcc. Running gcc on an x86 host
(AMD Duron), targeting ARM.

drz@froody:cvs/gba/game% ldd /home/drz/gba/usr/bin/arm-thumb-elf-gcc
libc.so.6 => /lib/libc.so.6 (0x40023000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

drz@froody:cvs/gba/game% /home/drz/gba/usr/bin/arm-thumb-elf-gcc -v
Reading specs from /home/drz/gba/usr/lib/gcc-lib/arm-thumb-elf/3.1/specs
Configured with: ../gcc-3.1/configure --target=arm-thumb-elf --prefix=/home/drz/gba/usr -v
Thread model: single
gcc version 3.1

host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: arm-thumb-elf
configured with: ../gcc-3.1/configure --target=arm-thumb-elf --prefix=/home/drz/gba/usr -v
>Description:
When using the -fverbose-asm option, gcc segfaults. When I don't use this
option everything works fine.
>How-To-Repeat:
Save the following file as foo.c, and run the following command line:
/home/drz/gba/usr/bin/arm-thumb-elf-gcc  -Wall -pipe -Wno-unused -fno-builtin -O2 -fomit-frame-pointer -S -o foo.s foo.c -fverbose-asm 
The compiler output:
In file included from main.c:3:
math.h: In function `sin':
math.h:21: internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.


---[ cut here ]---
# 1 "main.c"
# 1 "gba.h" 1



# 1 "types.h" 1



typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;

typedef signed char int8;
typedef signed short int16;
typedef signed long int32;


# 4 "gba.h" 2



 






 


 

 


 


 


 






 






 

 

 







 


 









 





















 

 

 

 


 


 





 





































































static void gba_vsync()
{
    while ((*(volatile uint16 *) 0x4000006)  != 160)
	;
}

void gba_init_sprites(void);


# 1 "main.c" 2

# 1 "fixedpoint.h" 1
static inline int fp_mul(int a, int b)
{
    return (a * b) >> 8;
}

static inline int fp(int a)
{
    return a << 8;
}

static inline int fp_val(int a)
{
    return a >> 8;
}
# 2 "main.c" 2

# 1 "math.h" 1
# 1 "sintable.h" 1



extern int16 sintable[];


# 1 "math.h" 2


 
static uint32 sin(int angle)
{
    angle &= 0xff;

    if (angle < 128) {
	if (angle < 64) {
	    return sintable[angle];
	} else {
	    return sintable[127 - angle];
	}
    } else {
	if (angle < 192) {
	    return -sintable[angle - 128];
	} else {
	    return -sintable[255 - angle];
	}
    }
}

 
static uint32 cos(int angle)
{
    angle &= 0xff;

    return sin(angle + 256 / 4);
     














}
# 3 "main.c" 2


# 1 "libc.h" 1



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 1 3
 
































































 






typedef void *__gnuc_va_list;



 



 

















void va_end (__gnuc_va_list);		 


 



 












 























 
 













# 175 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 3


 




 

 

 

typedef __gnuc_va_list va_list;
























# 4 "libc.h" 2




void memcpy(void *dest, const void *src, int bytes);
void memset(void *dest, int c, int bytes);
void srand(uint32 seed);
uint8 rand8(void);
uint16 rand16(void);
uint32 rand32(void);
uint32 sprintf(char *str, const char *format, ...);
uint32 vsprintf(char *str, const char *format, va_list ap);
uint32 strlen(const char *s);


# 5 "main.c" 2

 
# 1 "util.h" 1




# 7 "main.c" 2


 
# 1 "ship.h" 1
 
 


uint16 ship_palette[] = {
	0x0000,
	0x7c00,
	0x7c00,
	0x7800,
	0x5e40,
	0x7420,
	0x35ce,
	0x7420,
	0x31ad,
	0x3d8f,
	0x7020,
	0x45f1,
	0x396b,
	0x354e,
	0x7c60,
	0x2dec,
};
uint8 ship_data[] = {
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x30,  0x00,  0x00, 
	0x00,  0x50,  0x00,  0x00, 
	0x00,  0x33,  0x00,  0x00, 
	0x00,  0x33,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x03,  0x00, 
	0x00,  0x00,  0x03,  0x00, 
	0x00,  0x00,  0x3a,  0x00, 
	0x00,  0x00,  0x12,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0xe0, 
	0x00,  0x00,  0x00,  0x80, 
	 
	0x20,  0x33,  0x00,  0x00, 
	0x30,  0x03,  0x00,  0x00, 
	0x33,  0x03,  0x00,  0x00, 
	0x31,  0x02,  0x00,  0x00, 
	0x33,  0x03,  0x00,  0x30, 
	0x33,  0x00,  0x00,  0x43, 
	0x33,  0x03,  0x00,  0x43, 
	0x33,  0xa3,  0x33,  0x43, 
	 
	0x00,  0x00,  0x33,  0x03, 
	0x00,  0x00,  0x30,  0x03, 
	0x00,  0x00,  0x30,  0xe1, 
	0x00,  0x00,  0x20,  0x13, 
	0x03,  0x00,  0x30,  0x31, 
	0x34,  0x00,  0x00,  0x52, 
	0x34,  0x00,  0x30,  0x33, 
	0x34,  0xa3,  0x33,  0x3a, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x03,  0x00,  0x00,  0x00, 
	0x03,  0x00,  0x00,  0x00, 
	0x08,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x90, 
	0x00,  0x00,  0x00,  0xc0, 
	0x00,  0x00,  0x00,  0x30, 
	0x00,  0x00,  0x00,  0x30, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x32,  0x53,  0x23,  0x3e, 
	0x33,  0xe3,  0x33,  0x73, 
	0x33,  0x5e,  0x33,  0x32, 
	0xaa,  0x00,  0x60,  0xdb, 
	0x33,  0x0a,  0xb0,  0xfb, 
	0x21,  0x0a,  0x00,  0x00, 
	0x33,  0x03,  0x00,  0x00, 
	0x10,  0x02,  0x00,  0x00, 
	 
	0x33,  0xae,  0x13,  0xa3, 
	0x32,  0x32,  0x33,  0x23, 
	0x32,  0x25,  0x32,  0x3e, 
	0x69,  0x06,  0x00,  0xa3, 
	0xff,  0x08,  0x30,  0x13, 
	0x00,  0x00,  0x30,  0x33, 
	0x00,  0x00,  0x30,  0xaa, 
	0x00,  0x00,  0x30,  0x03, 
	 
	0x09,  0x00,  0x00,  0x00, 
	0x06,  0x00,  0x00,  0x00, 
	0x05,  0x00,  0x00,  0x00, 
	0x02,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x50,  0x33,  0x00,  0x00, 
	0x00,  0x35,  0x00,  0x00, 
	0x00,  0x23,  0x00,  0x00, 
	0x00,  0x20,  0x00,  0x00, 
	0x00,  0xa0,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x31,  0x0e, 
	0x00,  0x00,  0xa3,  0x00, 
	0x00,  0x00,  0x35,  0x00, 
	0x00,  0x00,  0x03,  0x00, 
	0x00,  0x00,  0x03,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
};
# 10 "main.c" 2

# 1 "bullet.h" 1
 
 


uint16 bullet_palette[] = {
	0x0000,
	0x001f,
	0x085f,
	0x109f,
	0x14bf,
	0x18df,
	0x295f,
	0x2d7f,
	0x3dff,
	0x463f,
	0x5eff,
};
uint8 bullet_data[] = {
	 
	0x00,  0x11,  0x11,  0x00, 
	0x10,  0x32,  0x34,  0x02, 
	0x21,  0x65,  0x67,  0x25, 
	0x31,  0x86,  0x89,  0x36, 
	0x41,  0x97,  0x9a,  0x47, 
	0x31,  0x86,  0x89,  0x36, 
	0x20,  0x65,  0x67,  0x05, 
	0x00,  0x32,  0x34,  0x00, 
};
# 11 "main.c" 2

# 1 "font.h" 1
 
 


uint16 font_palette[] = {
	0x0000,
	0x7fff,
};
uint8 font_data[] = {
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x01,  0x00, 
	0x00,  0x01,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x01,  0x00, 
	0x00,  0x11,  0x10,  0x01, 
	0x00,  0x00,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x10,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x11,  0x00,  0x00, 
	0x10,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x01,  0x00,  0x00, 
	0x00,  0x11,  0x00,  0x00, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x10,  0x01, 
	0x00,  0x00,  0x00,  0x11, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x11, 
	0x00,  0x00,  0x10,  0x01, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x10,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x11, 
	0x00,  0x00,  0x10,  0x01, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x11,  0x00,  0x00, 
	0x10,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x10,  0x00,  0x10, 
	0x10,  0x00,  0x01,  0x10, 
	0x10,  0x00,  0x10,  0x11, 
	0x10,  0x01,  0x10,  0x01, 
	0x00,  0x11,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x10,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x11,  0x11, 
	0x00,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x10,  0x00, 
	0x00,  0x11,  0x11,  0x10, 
	0x00,  0x00,  0x10,  0x00, 
	0x00,  0x00,  0x10,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x00, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x01, 
	0x00,  0x00,  0x11,  0x11, 
	0x00,  0x00,  0x10,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x11, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x11, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x11, 
	0x00,  0x10,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x10,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x10,  0x11, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x01,  0x01, 
	0x00,  0x01,  0x01,  0x01, 
	0x00,  0x01,  0x01,  0x01, 
	0x00,  0x01,  0x01,  0x01, 
	0x00,  0x01,  0x01,  0x01, 
	0x00,  0x01,  0x01,  0x01, 
	0x10,  0x00,  0x01,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x10,  0x11,  0x11, 
	0x00,  0x11,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x11,  0x11, 
	0x00,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x10, 
	0x10,  0x10,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x01, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x10,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x00, 
	0x10,  0x00,  0x00,  0x01, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x11, 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x11,  0x01,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x11, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x11,  0x01,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x11, 
	0x10,  0x00,  0x00,  0x00, 
	0x10,  0x00,  0x10,  0x01, 
	0x10,  0x00,  0x01,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x11,  0x11,  0x11, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x11, 
	0x10,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x10, 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x11, 
	0x10,  0x01,  0x00,  0x11, 
	0x00,  0x11,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x11, 
	0x00,  0x10,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x01, 
	0x00,  0x01,  0x10,  0x00, 
	0x00,  0x11,  0x11,  0x00, 
	0x00,  0x01,  0x00,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x01,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x00,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x01, 
	0x00,  0x11,  0x00,  0x10, 
	0x10,  0x11,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x10,  0x00, 
	0x10,  0x11,  0x10,  0x01, 
	0x10,  0x11,  0x11,  0x10, 
	0x10,  0x00,  0x01,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x00,  0x00,  0x01, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x11,  0x00,  0x10, 
	0x00,  0x11,  0x01,  0x10, 
	0x00,  0x01,  0x11,  0x11, 
	0x00,  0x01,  0x00,  0x11, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x11, 
	0x10,  0x01,  0x10,  0x01, 
	0x00,  0x11,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x00, 
	0x00,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x10,  0x10, 
	0x10,  0x01,  0x00,  0x01, 
	0x00,  0x11,  0x11,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x01,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x01,  0x11,  0x00, 
	0x00,  0x01,  0x10,  0x01, 
	0x10,  0x00,  0x00,  0x11, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x01,  0x00,  0x00, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x11,  0x11,  0x11, 
	0x10,  0x00,  0x01,  0x10, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x00,  0x01, 
	0x10,  0x01,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x01,  0x00,  0x11, 
	0x00,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x00,  0x00, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x01, 
	0x10,  0x00,  0x10,  0x01, 
	0x10,  0x00,  0x11,  0x00, 
	0x00,  0x11,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x01,  0x00,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x00,  0x00,  0x10, 
	0x10,  0x10,  0x01,  0x10, 
	0x10,  0x10,  0x01,  0x10, 
	0x10,  0x11,  0x10,  0x11, 
	0x00,  0x11,  0x10,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x01,  0x00,  0x01, 
	0x00,  0x11,  0x10,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x10,  0x01,  0x00, 
	0x00,  0x01,  0x10,  0x00, 
	0x10,  0x01,  0x00,  0x01, 
	0x10,  0x00,  0x00,  0x10, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x10,  0x00,  0x00,  0x11, 
	0x00,  0x01,  0x00,  0x10, 
	0x00,  0x10,  0x00,  0x11, 
	0x00,  0x00,  0x10,  0x01, 
	0x00,  0x00,  0x11,  0x01, 
	0x00,  0x10,  0x11,  0x00, 
	0x00,  0x11,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x11,  0x11,  0x11, 
	0x10,  0x00,  0x00,  0x01, 
	0x00,  0x00,  0x10,  0x00, 
	0x00,  0x00,  0x01,  0x00, 
	0x00,  0x10,  0x00,  0x00, 
	0x00,  0x11,  0x00,  0x10, 
	0x10,  0x11,  0x11,  0x01, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
	0x00,  0x00,  0x00,  0x00, 
};
# 12 "main.c" 2

# 1 "font_8x8.h" 1
 
 
 
 
 

static unsigned char fontdata_8x8[] = {

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x7e,  
	0x81,  
	0xa5,  
	0x81,  
	0xbd,  
	0x99,  
	0x81,  
	0x7e,  

	 
	0x7e,  
	0xff,  
	0xdb,  
	0xff,  
	0xc3,  
	0xe7,  
	0xff,  
	0x7e,  

	 
	0x6c,  
	0xfe,  
	0xfe,  
	0xfe,  
	0x7c,  
	0x38,  
	0x10,  
	0x00,  

	 
	0x10,  
	0x38,  
	0x7c,  
	0xfe,  
	0x7c,  
	0x38,  
	0x10,  
	0x00,  

	 
	0x38,  
	0x7c,  
	0x38,  
	0xfe,  
	0xfe,  
	0xd6,  
	0x10,  
	0x38,  

	 
	0x10,  
	0x38,  
	0x7c,  
	0xfe,  
	0xfe,  
	0x7c,  
	0x10,  
	0x38,  

	 
	0x00,  
	0x00,  
	0x18,  
	0x3c,  
	0x3c,  
	0x18,  
	0x00,  
	0x00,  

	 
	0xff,  
	0xff,  
	0xe7,  
	0xc3,  
	0xc3,  
	0xe7,  
	0xff,  
	0xff,  

	 
	0x00,  
	0x3c,  
	0x66,  
	0x42,  
	0x42,  
	0x66,  
	0x3c,  
	0x00,  

	 
	0xff,  
	0xc3,  
	0x99,  
	0xbd,  
	0xbd,  
	0x99,  
	0xc3,  
	0xff,  

	 
	0x0f,  
	0x07,  
	0x0f,  
	0x7d,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x78,  

	 
	0x3c,  
	0x66,  
	0x66,  
	0x66,  
	0x3c,  
	0x18,  
	0x7e,  
	0x18,  

	 
	0x3f,  
	0x33,  
	0x3f,  
	0x30,  
	0x30,  
	0x70,  
	0xf0,  
	0xe0,  

	 
	0x7f,  
	0x63,  
	0x7f,  
	0x63,  
	0x63,  
	0x67,  
	0xe6,  
	0xc0,  

	 
	0x18,  
	0xdb,  
	0x3c,  
	0xe7,  
	0xe7,  
	0x3c,  
	0xdb,  
	0x18,  

	 
	0x80,  
	0xe0,  
	0xf8,  
	0xfe,  
	0xf8,  
	0xe0,  
	0x80,  
	0x00,  

	 
	0x02,  
	0x0e,  
	0x3e,  
	0xfe,  
	0x3e,  
	0x0e,  
	0x02,  
	0x00,  

	 
	0x18,  
	0x3c,  
	0x7e,  
	0x18,  
	0x18,  
	0x7e,  
	0x3c,  
	0x18,  

	 
	0x66,  
	0x66,  
	0x66,  
	0x66,  
	0x66,  
	0x00,  
	0x66,  
	0x00,  

	 
	0x7f,  
	0xdb,  
	0xdb,  
	0x7b,  
	0x1b,  
	0x1b,  
	0x1b,  
	0x00,  

	 
	0x3e,  
	0x61,  
	0x3c,  
	0x66,  
	0x66,  
	0x3c,  
	0x86,  
	0x7c,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x7e,  
	0x7e,  
	0x7e,  
	0x00,  

	 
	0x18,  
	0x3c,  
	0x7e,  
	0x18,  
	0x7e,  
	0x3c,  
	0x18,  
	0xff,  

	 
	0x18,  
	0x3c,  
	0x7e,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x7e,  
	0x3c,  
	0x18,  
	0x00,  

	 
	0x00,  
	0x18,  
	0x0c,  
	0xfe,  
	0x0c,  
	0x18,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x30,  
	0x60,  
	0xfe,  
	0x60,  
	0x30,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xc0,  
	0xc0,  
	0xc0,  
	0xfe,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x24,  
	0x66,  
	0xff,  
	0x66,  
	0x24,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x18,  
	0x3c,  
	0x7e,  
	0xff,  
	0xff,  
	0x00,  
	0x00,  

	 
	0x00,  
	0xff,  
	0xff,  
	0x7e,  
	0x3c,  
	0x18,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x3c,  
	0x3c,  
	0x18,  
	0x18,  
	0x00,  
	0x18,  
	0x00,  

	 
	0x66,  
	0x66,  
	0x24,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x6c,  
	0x6c,  
	0xfe,  
	0x6c,  
	0xfe,  
	0x6c,  
	0x6c,  
	0x00,  

	 
	0x18,  
	0x3e,  
	0x60,  
	0x3c,  
	0x06,  
	0x7c,  
	0x18,  
	0x00,  

	 
	0x00,  
	0xc6,  
	0xcc,  
	0x18,  
	0x30,  
	0x66,  
	0xc6,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0x38,  
	0x76,  
	0xdc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x30,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x0c,  
	0x18,  
	0x30,  
	0x30,  
	0x30,  
	0x18,  
	0x0c,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x0c,  
	0x0c,  
	0x0c,  
	0x18,  
	0x30,  
	0x00,  

	 
	0x00,  
	0x66,  
	0x3c,  
	0xff,  
	0x3c,  
	0x66,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x18,  
	0x18,  
	0x7e,  
	0x18,  
	0x18,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x18,  
	0x18,  
	0x30,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x7e,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x18,  
	0x18,  
	0x00,  

	 
	0x06,  
	0x0c,  
	0x18,  
	0x30,  
	0x60,  
	0xc0,  
	0x80,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0xc6,  
	0xd6,  
	0xc6,  
	0x6c,  
	0x38,  
	0x00,  

	 
	0x18,  
	0x38,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x7e,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0x06,  
	0x1c,  
	0x30,  
	0x66,  
	0xfe,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0x06,  
	0x3c,  
	0x06,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x1c,  
	0x3c,  
	0x6c,  
	0xcc,  
	0xfe,  
	0x0c,  
	0x1e,  
	0x00,  

	 
	0xfe,  
	0xc0,  
	0xc0,  
	0xfc,  
	0x06,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x38,  
	0x60,  
	0xc0,  
	0xfc,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0xfe,  
	0xc6,  
	0x0c,  
	0x18,  
	0x30,  
	0x30,  
	0x30,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xc6,  
	0x7c,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xc6,  
	0x7e,  
	0x06,  
	0x0c,  
	0x78,  
	0x00,  

	 
	0x00,  
	0x18,  
	0x18,  
	0x00,  
	0x00,  
	0x18,  
	0x18,  
	0x00,  

	 
	0x00,  
	0x18,  
	0x18,  
	0x00,  
	0x00,  
	0x18,  
	0x18,  
	0x30,  

	 
	0x06,  
	0x0c,  
	0x18,  
	0x30,  
	0x18,  
	0x0c,  
	0x06,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0x00,  
	0x00,  
	0x7e,  
	0x00,  
	0x00,  

	 
	0x60,  
	0x30,  
	0x18,  
	0x0c,  
	0x18,  
	0x30,  
	0x60,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0x0c,  
	0x18,  
	0x18,  
	0x00,  
	0x18,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xde,  
	0xde,  
	0xde,  
	0xc0,  
	0x78,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0xc6,  
	0xfe,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0xfc,  
	0x66,  
	0x66,  
	0x7c,  
	0x66,  
	0x66,  
	0xfc,  
	0x00,  

	 
	0x3c,  
	0x66,  
	0xc0,  
	0xc0,  
	0xc0,  
	0x66,  
	0x3c,  
	0x00,  

	 
	0xf8,  
	0x6c,  
	0x66,  
	0x66,  
	0x66,  
	0x6c,  
	0xf8,  
	0x00,  

	 
	0xfe,  
	0x62,  
	0x68,  
	0x78,  
	0x68,  
	0x62,  
	0xfe,  
	0x00,  

	 
	0xfe,  
	0x62,  
	0x68,  
	0x78,  
	0x68,  
	0x60,  
	0xf0,  
	0x00,  

	 
	0x3c,  
	0x66,  
	0xc0,  
	0xc0,  
	0xce,  
	0x66,  
	0x3a,  
	0x00,  

	 
	0xc6,  
	0xc6,  
	0xc6,  
	0xfe,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x3c,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x1e,  
	0x0c,  
	0x0c,  
	0x0c,  
	0xcc,  
	0xcc,  
	0x78,  
	0x00,  

	 
	0xe6,  
	0x66,  
	0x6c,  
	0x78,  
	0x6c,  
	0x66,  
	0xe6,  
	0x00,  

	 
	0xf0,  
	0x60,  
	0x60,  
	0x60,  
	0x62,  
	0x66,  
	0xfe,  
	0x00,  

	 
	0xc6,  
	0xee,  
	0xfe,  
	0xfe,  
	0xd6,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0xc6,  
	0xe6,  
	0xf6,  
	0xde,  
	0xce,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0xfc,  
	0x66,  
	0x66,  
	0x7c,  
	0x60,  
	0x60,  
	0xf0,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xce,  
	0x7c,  
	0x0e,  

	 
	0xfc,  
	0x66,  
	0x66,  
	0x7c,  
	0x6c,  
	0x66,  
	0xe6,  
	0x00,  

	 
	0x3c,  
	0x66,  
	0x30,  
	0x18,  
	0x0c,  
	0x66,  
	0x3c,  
	0x00,  

	 
	0x7e,  
	0x7e,  
	0x5a,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x6c,  
	0x38,  
	0x00,  

	 
	0xc6,  
	0xc6,  
	0xc6,  
	0xd6,  
	0xd6,  
	0xfe,  
	0x6c,  
	0x00,  

	 
	0xc6,  
	0xc6,  
	0x6c,  
	0x38,  
	0x6c,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x66,  
	0x66,  
	0x66,  
	0x3c,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0xfe,  
	0xc6,  
	0x8c,  
	0x18,  
	0x32,  
	0x66,  
	0xfe,  
	0x00,  

	 
	0x3c,  
	0x30,  
	0x30,  
	0x30,  
	0x30,  
	0x30,  
	0x3c,  
	0x00,  

	 
	0xc0,  
	0x60,  
	0x30,  
	0x18,  
	0x0c,  
	0x06,  
	0x02,  
	0x00,  

	 
	0x3c,  
	0x0c,  
	0x0c,  
	0x0c,  
	0x0c,  
	0x0c,  
	0x3c,  
	0x00,  

	 
	0x10,  
	0x38,  
	0x6c,  
	0xc6,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xff,  

	 
	0x30,  
	0x18,  
	0x0c,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0xe0,  
	0x60,  
	0x7c,  
	0x66,  
	0x66,  
	0x66,  
	0xdc,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7c,  
	0xc6,  
	0xc0,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x1c,  
	0x0c,  
	0x7c,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc0,  
	0x7c,  
	0x00,  

	 
	0x3c,  
	0x66,  
	0x60,  
	0xf8,  
	0x60,  
	0x60,  
	0xf0,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x76,  
	0xcc,  
	0xcc,  
	0x7c,  
	0x0c,  
	0xf8,  

	 
	0xe0,  
	0x60,  
	0x6c,  
	0x76,  
	0x66,  
	0x66,  
	0xe6,  
	0x00,  

	 
	0x18,  
	0x00,  
	0x38,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x06,  
	0x00,  
	0x06,  
	0x06,  
	0x06,  
	0x66,  
	0x66,  
	0x3c,  

	 
	0xe0,  
	0x60,  
	0x66,  
	0x6c,  
	0x78,  
	0x6c,  
	0xe6,  
	0x00,  

	 
	0x38,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xec,  
	0xfe,  
	0xd6,  
	0xd6,  
	0xd6,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xdc,  
	0x66,  
	0x66,  
	0x66,  
	0x66,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xdc,  
	0x66,  
	0x66,  
	0x7c,  
	0x60,  
	0xf0,  

	 
	0x00,  
	0x00,  
	0x76,  
	0xcc,  
	0xcc,  
	0x7c,  
	0x0c,  
	0x1e,  

	 
	0x00,  
	0x00,  
	0xdc,  
	0x76,  
	0x60,  
	0x60,  
	0xf0,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0xc0,  
	0x7c,  
	0x06,  
	0xfc,  
	0x00,  

	 
	0x30,  
	0x30,  
	0xfc,  
	0x30,  
	0x30,  
	0x36,  
	0x1c,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xcc,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x6c,  
	0x38,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xc6,  
	0xd6,  
	0xd6,  
	0xfe,  
	0x6c,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xc6,  
	0x6c,  
	0x38,  
	0x6c,  
	0xc6,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7e,  
	0x06,  
	0xfc,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0x4c,  
	0x18,  
	0x32,  
	0x7e,  
	0x00,  

	 
	0x0e,  
	0x18,  
	0x18,  
	0x70,  
	0x18,  
	0x18,  
	0x0e,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x00,  

	 
	0x70,  
	0x18,  
	0x18,  
	0x0e,  
	0x18,  
	0x18,  
	0x70,  
	0x00,  

	 
	0x76,  
	0xdc,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x10,  
	0x38,  
	0x6c,  
	0xc6,  
	0xc6,  
	0xfe,  
	0x00,  

	 
	0x7c,  
	0xc6,  
	0xc0,  
	0xc0,  
	0xc6,  
	0x7c,  
	0x0c,  
	0x78,  

	 
	0xcc,  
	0x00,  
	0xcc,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x0c,  
	0x18,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc0,  
	0x7c,  
	0x00,  

	 
	0x7c,  
	0x82,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0xc6,  
	0x00,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x30,  
	0x30,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0xc0,  
	0xc0,  
	0x7e,  
	0x0c,  
	0x38,  

	 
	0x7c,  
	0x82,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc0,  
	0x7c,  
	0x00,  

	 
	0xc6,  
	0x00,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc0,  
	0x7c,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc0,  
	0x7c,  
	0x00,  

	 
	0x66,  
	0x00,  
	0x38,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x7c,  
	0x82,  
	0x38,  
	0x18,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x00,  
	0x38,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0xc6,  
	0x38,  
	0x6c,  
	0xc6,  
	0xfe,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0x7c,  
	0xc6,  
	0xfe,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x18,  
	0x30,  
	0xfe,  
	0xc0,  
	0xf8,  
	0xc0,  
	0xfe,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0x18,  
	0x7e,  
	0xd8,  
	0x7e,  
	0x00,  

	 
	0x3e,  
	0x6c,  
	0xcc,  
	0xfe,  
	0xcc,  
	0xcc,  
	0xce,  
	0x00,  

	 
	0x7c,  
	0x82,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0xc6,  
	0x00,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x78,  
	0x84,  
	0x00,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x60,  
	0x30,  
	0xcc,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0xc6,  
	0x00,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7e,  
	0x06,  
	0xfc,  

	 
	0xc6,  
	0x38,  
	0x6c,  
	0xc6,  
	0xc6,  
	0x6c,  
	0x38,  
	0x00,  

	 
	0xc6,  
	0x00,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x7e,  
	0xc0,  
	0xc0,  
	0x7e,  
	0x18,  
	0x18,  

	 
	0x38,  
	0x6c,  
	0x64,  
	0xf0,  
	0x60,  
	0x66,  
	0xfc,  
	0x00,  

	 
	0x66,  
	0x66,  
	0x3c,  
	0x7e,  
	0x18,  
	0x7e,  
	0x18,  
	0x18,  

	 
	0xf8,  
	0xcc,  
	0xcc,  
	0xfa,  
	0xc6,  
	0xcf,  
	0xc6,  
	0xc7,  

	 
	0x0e,  
	0x1b,  
	0x18,  
	0x3c,  
	0x18,  
	0xd8,  
	0x70,  
	0x00,  

	 
	0x18,  
	0x30,  
	0x78,  
	0x0c,  
	0x7c,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x0c,  
	0x18,  
	0x00,  
	0x38,  
	0x18,  
	0x18,  
	0x3c,  
	0x00,  

	 
	0x0c,  
	0x18,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x7c,  
	0x00,  

	 
	0x18,  
	0x30,  
	0xcc,  
	0xcc,  
	0xcc,  
	0xcc,  
	0x76,  
	0x00,  

	 
	0x76,  
	0xdc,  
	0x00,  
	0xdc,  
	0x66,  
	0x66,  
	0x66,  
	0x00,  

	 
	0x76,  
	0xdc,  
	0x00,  
	0xe6,  
	0xf6,  
	0xde,  
	0xce,  
	0x00,  

	 
	0x3c,  
	0x6c,  
	0x6c,  
	0x3e,  
	0x00,  
	0x7e,  
	0x00,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0x6c,  
	0x38,  
	0x00,  
	0x7c,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x00,  
	0x18,  
	0x18,  
	0x30,  
	0x63,  
	0x3e,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0xfe,  
	0xc0,  
	0xc0,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0xfe,  
	0x06,  
	0x06,  
	0x00,  
	0x00,  

	 
	0x63,  
	0xe6,  
	0x6c,  
	0x7e,  
	0x33,  
	0x66,  
	0xcc,  
	0x0f,  

	 
	0x63,  
	0xe6,  
	0x6c,  
	0x7a,  
	0x36,  
	0x6a,  
	0xdf,  
	0x06,  

	 
	0x18,  
	0x00,  
	0x18,  
	0x18,  
	0x3c,  
	0x3c,  
	0x18,  
	0x00,  

	 
	0x00,  
	0x33,  
	0x66,  
	0xcc,  
	0x66,  
	0x33,  
	0x00,  
	0x00,  

	 
	0x00,  
	0xcc,  
	0x66,  
	0x33,  
	0x66,  
	0xcc,  
	0x00,  
	0x00,  

	 
	0x22,  
	0x88,  
	0x22,  
	0x88,  
	0x22,  
	0x88,  
	0x22,  
	0x88,  

	 
	0x55,  
	0xaa,  
	0x55,  
	0xaa,  
	0x55,  
	0xaa,  
	0x55,  
	0xaa,  

	 
	0x77,  
	0xdd,  
	0x77,  
	0xdd,  
	0x77,  
	0xdd,  
	0x77,  
	0xdd,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0xf8,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0xf8,  
	0x18,  
	0xf8,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0xf6,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xfe,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x00,  
	0x00,  
	0xf8,  
	0x18,  
	0xf8,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x36,  
	0x36,  
	0xf6,  
	0x06,  
	0xf6,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x00,  
	0x00,  
	0xfe,  
	0x06,  
	0xf6,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0xf6,  
	0x06,  
	0xfe,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0xfe,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x18,  
	0xf8,  
	0x18,  
	0xf8,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xf8,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x1f,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xff,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x1f,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0xff,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x1f,  
	0x18,  
	0x1f,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x37,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0x37,  
	0x30,  
	0x3f,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x3f,  
	0x30,  
	0x37,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0xf7,  
	0x00,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xff,  
	0x00,  
	0xf7,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0x37,  
	0x30,  
	0x37,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x00,  
	0x00,  
	0xff,  
	0x00,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x36,  
	0x36,  
	0xf7,  
	0x00,  
	0xf7,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x18,  
	0x18,  
	0xff,  
	0x00,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xff,  
	0x00,  
	0xff,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xff,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x3f,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x1f,  
	0x18,  
	0x1f,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x1f,  
	0x18,  
	0x1f,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x3f,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0xff,  
	0x36,  
	0x36,  
	0x36,  

	 
	0x18,  
	0x18,  
	0xff,  
	0x18,  
	0xff,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0xf8,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x1f,  
	0x18,  
	0x18,  
	0x18,  

	 
	0xff,  
	0xff,  
	0xff,  
	0xff,  
	0xff,  
	0xff,  
	0xff,  
	0xff,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0xff,  
	0xff,  
	0xff,  
	0xff,  

	 
	0xf0,  
	0xf0,  
	0xf0,  
	0xf0,  
	0xf0,  
	0xf0,  
	0xf0,  
	0xf0,  

	 
	0x0f,  
	0x0f,  
	0x0f,  
	0x0f,  
	0x0f,  
	0x0f,  
	0x0f,  
	0x0f,  

	 
	0xff,  
	0xff,  
	0xff,  
	0xff,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x76,  
	0xdc,  
	0xc8,  
	0xdc,  
	0x76,  
	0x00,  

	 
	0x78,  
	0xcc,  
	0xcc,  
	0xd8,  
	0xcc,  
	0xc6,  
	0xcc,  
	0x00,  

	 
	0xfe,  
	0xc6,  
	0xc0,  
	0xc0,  
	0xc0,  
	0xc0,  
	0xc0,  
	0x00,  

	 
	0x00,  
	0x00,  
	0xfe,  
	0x6c,  
	0x6c,  
	0x6c,  
	0x6c,  
	0x00,  

	 
	0xfe,  
	0xc6,  
	0x60,  
	0x30,  
	0x60,  
	0xc6,  
	0xfe,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0xd8,  
	0xd8,  
	0xd8,  
	0x70,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x66,  
	0x66,  
	0x66,  
	0x66,  
	0x7c,  
	0xc0,  

	 
	0x00,  
	0x76,  
	0xdc,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x00,  

	 
	0x7e,  
	0x18,  
	0x3c,  
	0x66,  
	0x66,  
	0x3c,  
	0x18,  
	0x7e,  

	 
	0x38,  
	0x6c,  
	0xc6,  
	0xfe,  
	0xc6,  
	0x6c,  
	0x38,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0xc6,  
	0xc6,  
	0x6c,  
	0x6c,  
	0xee,  
	0x00,  

	 
	0x0e,  
	0x18,  
	0x0c,  
	0x3e,  
	0x66,  
	0x66,  
	0x3c,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x7e,  
	0xdb,  
	0xdb,  
	0x7e,  
	0x00,  
	0x00,  

	 
	0x06,  
	0x0c,  
	0x7e,  
	0xdb,  
	0xdb,  
	0x7e,  
	0x60,  
	0xc0,  

	 
	0x1e,  
	0x30,  
	0x60,  
	0x7e,  
	0x60,  
	0x30,  
	0x1e,  
	0x00,  

	 
	0x00,  
	0x7c,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0xc6,  
	0x00,  

	 
	0x00,  
	0xfe,  
	0x00,  
	0xfe,  
	0x00,  
	0xfe,  
	0x00,  
	0x00,  

	 
	0x18,  
	0x18,  
	0x7e,  
	0x18,  
	0x18,  
	0x00,  
	0x7e,  
	0x00,  

	 
	0x30,  
	0x18,  
	0x0c,  
	0x18,  
	0x30,  
	0x00,  
	0x7e,  
	0x00,  

	 
	0x0c,  
	0x18,  
	0x30,  
	0x18,  
	0x0c,  
	0x00,  
	0x7e,  
	0x00,  

	 
	0x0e,  
	0x1b,  
	0x1b,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  

	 
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0x18,  
	0xd8,  
	0xd8,  
	0x70,  

	 
	0x00,  
	0x18,  
	0x00,  
	0x7e,  
	0x00,  
	0x18,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x76,  
	0xdc,  
	0x00,  
	0x76,  
	0xdc,  
	0x00,  
	0x00,  

	 
	0x38,  
	0x6c,  
	0x6c,  
	0x38,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x18,  
	0x18,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x18,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x0f,  
	0x0c,  
	0x0c,  
	0x0c,  
	0xec,  
	0x6c,  
	0x3c,  
	0x1c,  

	 
	0x6c,  
	0x36,  
	0x36,  
	0x36,  
	0x36,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x78,  
	0x0c,  
	0x18,  
	0x30,  
	0x7c,  
	0x00,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x3c,  
	0x3c,  
	0x3c,  
	0x3c,  
	0x00,  
	0x00,  

	 
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  
	0x00,  

};
# 13 "main.c" 2


 
 
 

 
 
 

 
 
 

 
 











static inline void setup_screen(void)
{
    (*(volatile uint16 *) 0x4000000)  = (0 << 0 )  | (1 << 6)  | (1 << 8)  | (1 << 10)  |
	(1 << 12) ;
}

static void pal_random(uint16 *palette, uint16 color, int noise)
{
    int i;
    int red, green, blue;

    for (i = 0; i < 16; i++) {
	red = color & 0x1f;
	green = (color >> 5) & 0x1f;
	blue = (color >> 10) & 0x1f;

	red += (rand32() % (2*noise)) - noise;
	red = (( red ) > (  0 ) ? ( red ) : (  0 )) ;
	red = (( red ) < (  0x1f ) ? ( red ) : (  0x1f )) ;
	green += (rand32() % (2*noise)) - noise;
	green = (( green ) > (  0 ) ? ( green ) : (  0 )) ;
	green = (( green ) < (  0x1f ) ? ( green ) : (  0x1f )) ;
	blue += (rand32() % (2*noise)) - noise;
	blue = (( blue ) > (  0 ) ? ( blue ) : (  0 )) ;
	blue = (( blue ) < (  0x1f ) ? ( blue ) : (  0x1f )) ;

	palette[i] = (( red ) | ((  green ) << 5) | ((  blue ) << 10)) ;
    }
}

static void pal_gradient(uint16 *palette, uint16 a, uint16 b)
{
    int i;
    int a_r, a_g, a_b;
    int b_r, b_g, b_b;

    a_r = a & 0x1f;
    a_g = (a >> 5) & 0x1f;
    a_b = (a >> 10) & 0x1f;

    b_r = b & 0x1f;
    b_g = (b >> 5) & 0x1f;
    b_b = (b >> 10) & 0x1f;

    for (i = 0; i < 16; i++) {
	int red, green, blue;

	red = (i * b_r - (16-i) * a_r) / 16;
	green = (i * b_g - (16-i) * a_g) / 16;
	blue = (i * b_b - (16-i) * a_b) / 16;
	
	palette[i] = (( red ) | ((  green ) << 5) | ((  blue ) << 10)) ;
    }
}

static void map_random_tile(int tile, int x, int y)
{
    int i;
    uint32 r;

    srand(x ^ (y << 8));
    for (i = 0; i < 8; i++) {
	r = rand32();
	if ((r & 0xf) == 0)
	    r |= 0x1;
	if ((r & 0xf0) == 0)
	    r |= 0x10;
	if ((r & 0xf00) == 0)
	    r |= 0x100;
	if ((r & 0xf000) == 0)
	    r |= 0x1000;
	if ((r & 0xf0000) == 0)
	    r |= 0x10000;
	if ((r & 0xf00000) == 0)
	    r |= 0x100000;
	if ((r & 0xf000000) == 0)
	    r |= 0x1000000;
	if ((r & 0xf0000000) == 0)
	    r |= 0x10000000;
	((uint32 *) ((volatile uint16 *) (0x6000000 + 0x4000 * ( 0 ))) )[tile * 8 + i] = r;
    }
}

void map_blank_tile(int tile)
{
    uint32 *data = (uint32 *) (((volatile uint16 *) (0x6000000 + 0x4000 * ( 0 )))  + tile * 16);

    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
    *data++ = 0;
}






static uint8 map[(512  / 4 )  * (512  / 4 ) ];

static void map_init(void)
{
    int x, y;
    uint8 *map_entry = map;

    for (y = 0; y < (512  / 4 ) ; y++)
	for (x = 0; x < (512  / 4 ) ; x++)
	    *map_entry++ = rand8();
}

static void map_color_tile(int tile, int color)
{
    uint32 line;
    uint32 *data = (uint32 *) (((volatile uint16 *) (0x6000000 + 0x4000 * ( 0 )))  + tile * 16);

    line = color;
    line |= line << 4;
    line |= line << 8;
    line |= line << 16;

    *data++ = line;
    *data++ = line;
    *data++ = line;
    *data++ = line;
    *data++ = line;
    *data++ = line;
    *data++ = line;
    *data++ = line;
}

static void map_render_tile(int tile, int tile_x, int tile_y)
{
    int x, y;
    int c;
    uint32 line;
    int top_left, top_right, bottom_left, bottom_right;
    int left_x, top_y;
    int map_x, map_y;
    uint32 *data = ((uint32 *) ((volatile uint16 *) (0x6000000 + 0x4000 * ( 0 ))) ) + tile * 8;

    tile_x = tile_x & (512  - 1);
    tile_y = tile_y & (512  - 1);
    map_x = tile_x / 4 ;
    map_y = tile_y / 4 ;
    tile_x = tile_x % 4 ;
    tile_y = tile_y % 4 ;

    top_left = map[map_x + (512  / 4 )  * map_y];
    top_right = map[(map_x + 1) % (512  / 4 )  + (512  / 4 )  * map_y];
    bottom_left = map[map_x + (512  / 4 )  * ((map_y + 1) % (512  / 4 ) )];
    bottom_right = map[(map_x + 1) % (512  / 4 )  + (512  / 4 )  *
	((map_y + 1) % (512  / 4 ) )];

    for (y = tile_y * 8; y < tile_y*8 + 8; y++) {
	int left, right, increment;

	left = (top_left * (8* 4 -(8*tile_x)) *
		(8* 4 -y) +
		top_right * (8*tile_x) * (8* 4 -y) +
		bottom_left * (8* 4 -(8*tile_x)) * y +
		bottom_right * (8*tile_x) * y) / 64 / 4;
	right = (top_left * (8* 4 -(8*tile_x+8)) *
		(8* 4 -y) +
		top_right * (8*tile_x+8) * (8* 4 -y) +
		bottom_left * (8* 4 -(8*tile_x+8)) * y +
		bottom_right * (8*tile_x+8) * y) / 64 / 4;

	left <<= 8;
	right <<= 8;

	increment = (right - left) / 8;

	line = 0;
	for (x = 0; x < 8; x++) {
	    c = (left + (x%8) * increment) >> 8;
	    line |= (c/16) << (4*(x%8));
	}
	*data++ = line;
    }
}

static void font_init(void)
{
    int i;
    uint32 *tile;
    uint32 line;
    uint8 *data;






    tile = (uint32 *) ((volatile uint16 *) (0x6000000 + 0x4000 * ( 2 ))) ;
    data = fontdata_8x8 + 8 * 32;
    for (i = 0; i < 96 * 8; i++) {
	uint8 c;

	c = *data++;

	line = 0;
	line = ((c >> 0) & 1) << 28;
	line |= ((c >> 1) & 1) << 24;
	line |= ((c >> 2) & 1) << 20;
	line |= ((c >> 3) & 1) << 16;
	line |= ((c >> 4) & 1) << 12;
	line |= ((c >> 5) & 1) << 8;
	line |= ((c >> 6) & 1) << 4;
	line |= ((c >> 7) & 1) << 0;
	if (i >= 8)
	    line += 0x11111111;
	*tile++ = line;
    }
    ((volatile uint16 *) 0x5000000) [64] = 0;
    ((volatile uint16 *) 0x5000000) [65] = 0xffff;
    ((volatile uint16 *) 0x5000000) [66] = 0;


    memset((void *) ((volatile uint16 *) (0x6000000 + 0x800 * ( 30 ))) , 0, 0x800);

    (*(volatile uint16 *) 0x04000008)  = (2 << 0 ) |
	(2 << 2 ) |
	(30 << 8 ) |
	(0 << 14 ) ;

    (*(volatile uint16 *) 0x04000010)  = 0;
    (*(volatile uint16 *) 0x04000012)  = 0;
}

static void font_text(int line, const char *string)
{
    int i;
    volatile uint16 *map_entry = ((volatile uint16 *) (0x6000000 + 0x800 * ( 30 )))  + line * 32;

    while (*string) {
	*map_entry++ = (4 << 12) | (*string - 32);
	string++;
    }
}

static void status_line(const char *format, ...)
{
    static char buf[31];
    va_list ap;
    int i;

    ( ap  = ((__gnuc_va_list) __builtin_next_arg (  format ))) ;
    i = vsprintf(buf, format, ap);
    ((void)0) ;

    for (; i < 31; i++)
	buf[i] = ' ';
    buf[i] = 0;

    font_text(160 /8 - 1, buf);
}

typedef struct
{
     
    int vx, vy;
     
    int x, y;
     
    int rotation;
} sprite_t;

static sprite_t sprites[128];

void AgbMain()
{
    int i, frames = 0, fps = 0;
     
    int viewx, viewy;

    (*(volatile uint16 *) 0x0400010e)  = (3<< 0 )  | (1<<7) ;

    setup_screen();
    map_init();
    font_init();

     
    pal_random((uint16 *) ((volatile uint16 *) 0x5000000) , (( ( 79 )>>3 ) | ((  (  118 )>>3 ) << 5) | ((  (  234 )>>3 ) << 10))  , 4);
    pal_gradient((uint16 *) ((volatile uint16 *) 0x5000000) , (( ( 0 )>>3 ) | ((  (  0 )>>3 ) << 5) | ((  (  0 )>>3 ) << 10))  , 
	    (( ( 0 )>>3 ) | ((  (  255 )>>3 ) << 5) | ((  (  0 )>>3 ) << 10))  );
     
    pal_random((uint16 *) ((volatile uint16 *) 0x5000000)  + 16, (( ( 229 )>>3 ) | ((  (  195 )>>3 ) << 5) | ((  (  22 )>>3 ) << 10))  , 3);
     
    pal_random((uint16 *) ((volatile uint16 *) 0x5000000)  + 16, (( ( 72 )>>3 ) | ((  (  255 )>>3 ) << 5) | ((  (  56 )>>3 ) << 10))  , 4);

     
    memcpy((void *) ((volatile uint16 *) 0x6010000) , ship_data, 32  * 32 );
    memcpy((void *) ((volatile uint16 *) 0x5000200) , ship_palette, sizeof(ship_palette));

     
    memcpy((uint16 *) ((volatile uint16 *) 0x6010000)  + 16 * 16, bullet_data,
	    8  * 8 );
    memcpy((uint16 *) ((volatile uint16 *) 0x5000200) +16, bullet_palette, sizeof(bullet_palette));

    {
	int x, y, tile;









	 
	tile = 0;
	for (y = 0; y < 256/8; y++)
	    for (x = 0; x < 256/8; x++) {
		((volatile uint16 *) (0x6000000 + 0x800 * ( 31 ))) [y * 256/8 + x] =
		    (y * 256/8 + x) |
		    (1 << 10) |
		    (0 << 12);
	    }
    }

    (*(volatile uint16 *) 0x0400000c)  = (3 << 0 ) |
	(0 << 2 ) |
	(31 << 8 ) |
	(0 << 14 ) ;

    gba_init_sprites();

     
    ((volatile uint16 *) 0x7000000) [2] = (0 << 0 ) |
	(0 << 10 ) |
	(0 << 12 );
     
    ((volatile uint16 *) 0x7000000) [6] = (16 << 0 ) |
	(0 << 10 ) | (1 << 12 );

    sprites[0].x = fp(200);
    sprites[0].y = fp(0);
    sprites[0].vx = fp(0);
    sprites[0].vy = fp(0);
    sprites[0].rotation = 0;
    viewx = fp(0);
    viewy = fp(0);

    sprites[1].x = 0;
    sprites[1].y = 0;

    while (1) {
	uint32 keys;
	int ax, ay;

	gba_vsync();

	{
	     
	    int tmpx, tmpy;

	    tmpx = fp_val(sprites[0].x - viewx) - 32 ;
	    tmpy = fp_val(sprites[0].y - viewy) - 32 ;

	    ((volatile uint16 *) 0x7000000) [0] = ((tmpy << 0 ) & (0xff << 0 ) ) |
		(0 << 14 )  | (1 << 8)  | (1 << 9) ;
	    ((volatile uint16 *) 0x7000000) [1] = ((tmpx << 0 ) & (0x1ff << 0 ) ) |
		(2 << 14 )  | (0 << 9 );
	}

	((volatile uint16 *) 0x7000000) [3] = cos(sprites[0].rotation);
	((volatile uint16 *) 0x7000000) [7] = sin(sprites[0].rotation);
	((volatile uint16 *) 0x7000000) [11] = -sin(sprites[0].rotation);
	((volatile uint16 *) 0x7000000) [15] = cos(sprites[0].rotation);

	
# 426 "main.c"


	(*(volatile uint16 *) 0x04000018)  = fp_val(viewx);
	(*(volatile uint16 *) 0x0400001a)  = fp_val(viewy);

	{
	    if ((*(volatile uint16 *) 0x0400010c)  >= 0x4000) {
		fps = (0x4000 * frames) / (*(volatile uint16 *) 0x0400010c) ;
		frames = 0;
		(*(volatile uint16 *) 0x0400010c)  = 0;
	    }
	    status_line("fps=%x", fps);
	}

	keys = (*(volatile uint32 *) 0x04000130) ;

	ax = fp(0);
	ay = fp(0);

	if (keys & 0x100 ) {
	     
	    if (!(keys & 0x20 ))
		ax -= 32 ;
	    if (!(keys & 0x10 ))
		ax += 32 ;

	    if (!(keys & 0x40 ))
		ay -= 32 ;
	    if (!(keys & 0x80 ))
		ay += 32 ;

	} else {
	     
	    int target_angle = 0;
	    int power = 128 ;

	    if ((keys & (0x20  | 0x40 )) == 0)
		target_angle = 224;
	    else if ((keys & (0x40  | 0x10 )) == 0)
		target_angle = 32;
	    else if ((keys & (0x10  | 0x80 )) == 0)
		target_angle = 96;
	    else if ((keys & (0x80  | 0x20 )) == 0)
		target_angle = 160;
	    else if (!(keys & 0x20 ))
		target_angle = 192;
	    else if (!(keys & 0x40 ))
		target_angle = 0;
	    else if (!(keys & 0x10 ))
		target_angle = 64;
	    else if (!(keys & 0x80 ))
		target_angle = 128;
	    else
		power = 0;

	    if (power) {
		if (target_angle > sprites[0].rotation) {
		    if (target_angle - sprites[0].rotation <= 128)
			sprites[0].rotation += 4 ;
		    else
			sprites[0].rotation -= 4 ;
		} else if (target_angle < sprites[0].rotation) {
		    if (sprites[0].rotation - target_angle <= 128)
			sprites[0].rotation -= 4 ;
		    else
			sprites[0].rotation += 4 ;
		}
		sprites[0].rotation = sprites[0].rotation & 0xff;

		ax = fp_mul(power, sin(sprites[0].rotation));
		ay = fp_mul(power, -cos(sprites[0].rotation));
	    }
	}

	sprites[0].vx += ax;
	sprites[0].vy += ay;

	 
	sprites[0].vx = fp_mul(sprites[0].vx, 0xf0);
	if (sprites[0].vx < 0x10 && sprites[0].vx > -0x10)
	    sprites[0].vx = 0;
	sprites[0].vy = fp_mul(sprites[0].vy, 0xf0);
	if (sprites[0].vy < 0x10 && sprites[0].vy > -0x10)
	    sprites[0].vy = 0;

	sprites[0].x += sprites[0].vx;
	sprites[0].y += sprites[0].vy;

	if (sprites[0].x - viewx < fp((8+ 32 /2) ))
	    viewx = sprites[0].x - fp((8+ 32 /2) );
	if (sprites[0].x - viewx > fp(240  - (8+ 32 /2) ))
	    viewx = sprites[0].x - fp(240 ) + fp((8+ 32 /2) );

	if (sprites[0].y - viewy < fp((8+ 32 /2) ))
	    viewy = sprites[0].y - fp((8+ 32 /2) );
	if (sprites[0].y - viewy > fp(160  - (8+ 32 /2) ))
	    viewy = sprites[0].y - fp(160 ) + fp((8+ 32 /2) );

	 

	{
	    int x, y;
	    uint16 *tile = (uint16 *) ((volatile uint16 *) (0x6000000 + 0x800 * ( 31 ))) ;

	    int tilex = viewx >> 11;
	    int tiley = viewy >> 11;

	    int visx0 = (tilex & 31);
	    int visx1 = (( 256/8 ) < (  visx0 + ((240 /8)  + 1) ) ? ( 256/8 ) : (  visx0 + ((240 /8)  + 1) )) ;
	    int visw = ((240 /8)  + 1) - (visx1 - visx0);

	    int visy0 = (tiley & 31);
	    int visy1 = (( 256/8 ) < (  visy0 + ((160 /8)  + 1) ) ? ( 256/8 ) : (  visy0 + ((160 /8)  + 1) )) ;
	    int vish = ((160 /8)  + 1) - (visy1 - visy0);

	    tilex &= ~31;
	    tiley &= ~31;

	     


	    for (y = 0; y < 256/8; y++) {
		if ((y >= visy0 && y < visy1) || y < vish) {
		    int realy;

		    realy = tiley + y;
		    if (y < vish)
			realy += 256/8;

		    for (x = 0; x < 256/8; x++) {
			if ((x >= visx0 && x < visx1) || x < visw) {
			     
			    if (*tile & (1<<10)) {
				 
				int realx;

				*tile &= ~(1<<10);

				realx = tilex + x;
				if (x < visw)
				    realx += 256/8;

				map_render_tile(*tile & 0x3ff, realx, realy);
			    }

			} else {
			     
			    *tile |= 1<<10;
			     
			}
			tile++;
		    }

		} else {
		    for (x = 0; x < 256/8/2; x++) {
			*(uint32 *) tile |= (1<<10) | (1<<26);
			tile++;
			tile++;
		    }
		}
	    }
	}
	frames++;
    }
}
---[ cut here ]---
>Fix:
Don't use -fverbose-asm.
>Release-Note:
>Audit-Trail:
>Unformatted:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]