diff --git a/.deps/delay.S.P b/.deps/delay.S.P deleted file mode 100644 index 8ce9a49..0000000 --- a/.deps/delay.S.P +++ /dev/null @@ -1,2 +0,0 @@ -delay.S.o: delay.S -delay.S : diff --git a/.deps/game.c.P b/.deps/game.c.P deleted file mode 100644 index 1075a1f..0000000 --- a/.deps/game.c.P +++ /dev/null @@ -1,6 +0,0 @@ -game.c.o: game.c /opt/mcb32tools/include/stdint.h \ - /opt/mcb32tools/lib/gcc/mipsel-mcb32-elf/4.9.2/include/stdint-gcc.h \ - /opt/mcb32tools/include/pic32mx.h snake.h -game.c /opt/mcb32tools/include/stdint.h : - /opt/mcb32tools/lib/gcc/mipsel-mcb32-elf/4.9.2/include/stdint-gcc.h : - /opt/mcb32tools/include/pic32mx.h snake.h : diff --git a/.deps/labwork.S.P b/.deps/labwork.S.P deleted file mode 100644 index 6887fa6..0000000 --- a/.deps/labwork.S.P +++ /dev/null @@ -1,2 +0,0 @@ -labwork.S.o: labwork.S -labwork.S : diff --git a/.deps/snake.c.P b/.deps/snake.c.P deleted file mode 100644 index 68d07b2..0000000 --- a/.deps/snake.c.P +++ /dev/null @@ -1,2 +0,0 @@ -snake.c.o: snake.c -snake.c : diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6daf9a --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.c.o +*.S.o +outfile* +/.deps +.vscode diff --git a/data.c.o b/data.c.o index 9908c47..8a04535 100644 Binary files a/data.c.o and b/data.c.o differ diff --git a/delay.S b/delay.S index c393b11..9359583 100644 --- a/delay.S +++ b/delay.S @@ -29,10 +29,11 @@ hexasc: addi $v0,$a0,0x30 jr $ra nop + delay: PUSH $s3 - li $s3, 47000 + li $s3, 470000 li $t6, 0 li $t7, 0 j loop diff --git a/delay.S.o b/delay.S.o deleted file mode 100644 index 8953ea6..0000000 Binary files a/delay.S.o and /dev/null differ diff --git a/display.c b/display.c index 536f928..3fb6ed0 100644 --- a/display.c +++ b/display.c @@ -67,7 +67,8 @@ void display_init(void){ spi_send_recv(0xAF); } -void display_string(int line, char *s) { //LAB +/*(TAKEN FROM LAB) Display text*/ +void display_string(int line, char *s) { int i; if(line < 0 || line >= 4) return; @@ -81,6 +82,7 @@ void display_string(int line, char *s) { //LAB textbuffer[line][i] = ' '; } +/*(TAKEN FROM LAB) Display text*/ void display_update(void) { //LAB int i, j, k; int c; @@ -125,6 +127,8 @@ void display_image(int x, const uint8_t *data) { //LAB } } +/*This function translates the display array to oled_display array. +It converts an x and y coordinate system into a readable array for the computer.*/ void translateToImage() { int page, column, row, c, k; uint8_t powerOfTwo = 1; @@ -147,19 +151,8 @@ void translateToImage() { } } -void create_object(int xPos, int yPos, int width, int height) { - int row, column; - - for (row = 0; row < 32; row++) { - for (column = 0; column < 128; column++) { - if (row >= yPos && row <= (yPos + height) && column >= xPos && column <= (xPos + width)) { - display[row][column] = 1; - } - } - } -} - -void clear_display() { +/*This function sets all the values in the display array and oled display array into 0s*/ +void clear_display() { int row, column, i; for(row = 0; row < 32; row++) { @@ -173,12 +166,12 @@ void clear_display() { } } +/*This function calls all the necessary functions for the game to start*/ void display_start(){ - clear_display(); - snake(); - //create_object(64,16,1,1); - translateToImage(); - display_image(0, oled_display); + clear_display(); //This clear the screen everytime it loops. It will clear the last frame + game(); //Call game + translateToImage(); //Translate + display_image(0, oled_display); //And then display the frame } diff --git a/display.c.o b/display.c.o index cbc50fb..8ac5a31 100644 Binary files a/display.c.o and b/display.c.o differ diff --git a/game.c b/game.c index 55b6c5e..ea95449 100644 --- a/game.c +++ b/game.c @@ -1,54 +1,164 @@ /*Written by Fredrik Lundström and Michell Dib 2021 (c)*/ #include +#include +#include #include #include "snake.h" //Project header file -int score = 0; -int speed = 20; +int btns; +int speed = 1000; //Higher is slower +//We made premade apples since the time.h library would not work on the Uno32 +int apple_x[] = { + 56, + 39, + 28, + 95, + 46, + 107, + 13, + 69, + 65, + 11, + 28, + 82 +}; -int snake_length; -int snake_width = 1; -int snake_x = 64; -int snake_y = 16; +int apple_y[] = { + 10, + 29, + 20, + 9, + 15, + 3, + 21, + 27, + 11, + 17, + 8, + 12 +}; -int apple_x; -int apple_y; - -void snake(){ - snake_create(); - apple_create(); +void game(){ + snake_move(); //First we will call for the snake movements + if(snake.y[0] == apple_y[score] && snake.x[0] == apple_x[score]){ //If we collide with apple + eat_apple(); //Call eat_apple function + } + if((snake.y[0] == 32 || snake.y[0] == 0) || (snake.x[0] == 128 || snake.x[0] == 0)){ //If we collide with wall + collision(); //Call collision function + } + create_snake(); //After movements are made we create the snake - if(snake_x == apple_x && snake_y == apple_y){ - apple_eat(); + int k; + for(k = snake.length - 1; k > 0; k--){ // This for loop check if the head will collide with any coordinate of the body + if(snake.x[0] == snake.x[k] && snake.y[0] == snake.y[k]) + collision(); } + + create_apple(); //Every frame we create an apple based on the score that changes the apples coordinates to any of the premade values. delay(speed); - snake_move(); } -void snake_create(){ - snake_length = 5; - create_object(snake_x, snake_y, snake_length, snake_width); +void collision(){ + char score2[] = "X"; + score2[0] = score + '0'; //Here we make an integer to a string + + while(btns != 0b1000){ //While BTN4 is not pressed we will display the score and a game over string. + clear_display(); + display_string(1, "GAME OVER SCORE: "); + display_string(2, score2); + display_update(); + translateToImage(); + display_image(0, oled_display); + btns = getbtns(); + } + main(); //If BTN4 is pressed we jump back to main and the game will then restart. } -void snake_move(){ - if(snake_x > 128){ - snake_x = 0; - }else{ - snake_x++; + +void create_snake(){ //Here we will print out the snake + int i,j,k,x,y; + for(k = 0; k < snake.length; k++){ + for(i = 0; i < 1; i++){ //These for-loops can change the size of the snake but we decided to go with one pixel + for(j = 0; j < 1; j++){ + x = snake.x[k] + i; + y = snake.y[k] + j; + + display[y][x] = 1; + } + } + } +} + +void snake_move(){ //MOVEMENT FOR SNAKE + + btns = getbtns(); //Get buttons + + int i; + for(i = snake.length - 1; i > 0; i--){ //This for loop will change the coordinates of every part of the snake so that the body will follow the head + snake.x[i] = snake.x[i - 1]; + snake.y[i] = snake.y[i - 1]; } + + if(snake.dir == 'R'){ //RIGHT + snake.x[0] += 1; + } + if(snake.dir == 'D'){ //DOWN + snake.y[0] += 1; + } + if(snake.dir == 'U'){ //UP + snake.y[0] -= 1; + } + if(snake.dir == 'L'){ //LEFT + snake.x[0] -= 1; + } + + /*for(k = snake.length - 1; k > 0; k--){ // This for loop check if the head will collide with any coordinate of the body + if(snake.x[0] == snake.x[k] && snake.y[0] == snake.y[k]) + collision(); + }*/ + + // SO THE UNO32 REMEMBER THE DIRECTION EVEN AFTER THE BUTTON IS RELEASED + if(snake.dir != 'L'){ + if(btns == 0b0001){ //RIGHT + snake.dir = 'R'; + } + } + if(snake.dir != 'U'){ + if(btns == 0b0010){ //DOWN + snake.dir = 'D'; + } + } + if(snake.dir != 'D'){ + if(btns == 0b0100){ //UP + snake.dir = 'U'; + } + } + if(snake.dir != 'R'){ + if(btns == 0b1000){ //LEFT + snake.dir = 'L'; + } + } +} + +void create_apple(){ + //RANDOMIZE POSITION does not work :( + display[apple_y[score]][apple_x[score]] = 1; //Display apple } -void apple_create(){ - //Randomize - create_object(apple_x, apple_y, 1, 1); +void eat_apple(){ + snake.length++; //Increase length + score++; //Increase score which will also give the apple new coordinates } -void apple_eat(){ - display[apple_x][apple_y] = 0; //Clear apple pixel - apple_x = 5; - apple_y = 5; - apple_create(); - score++; +int getbtns(void){ //Get btns + int btn = (PORTD >> 5) & 0x0007; + btn = (btn << 1); + //Since the buttons was set to bits 11 through 5 we will now + //shift the bits 5 bits the right and check them with and operation + //and then see if buttons 4,3 or 2 are active. + // & them with seven since it is 0b0111 and button 1 will then always be 0 + btn = ((PORTF >> 1) & 0x1) | btn; //For some reason the first button is in the portf register + return btn; //Return the active buttons as integer (active bits will be 1) } diff --git a/game.c.o b/game.c.o deleted file mode 100644 index d3f1c09..0000000 Binary files a/game.c.o and /dev/null differ diff --git a/main.c b/main.c index 8eac487..549cc41 100644 --- a/main.c +++ b/main.c @@ -51,13 +51,44 @@ int main(void){ /* SPI2CON bit ON = 1; */ SPI2CONSET = 0x8000; - display_init(); //Initialize OLED display + display_init(); //Initialize OLED display + + score = 0; //Set score to one + + snake.y = snakeY; //Set y to array + snake.x = snakeX; //Set x to array + + snake.y[0] = 16; //Initialize snake + snake.x[0] = 64; //We make the snake big at first for demonstration purposes only + snake.y[1] = 16; + snake.x[1] = 65; + snake.y[2] = 16; + snake.x[2] = 66; + snake.y[3] = 16; + snake.x[3] = 67; + snake.y[4] = 16; + snake.x[4] = 68; + snake.y[5] = 16; + snake.x[5] = 69; + snake.y[6] = 16; + snake.x[6] = 70; + snake.y[7] = 16; + snake.x[7] = 71; + snake.y[8] = 16; + snake.x[8] = 72; + snake.y[9] = 16; + snake.x[9] = 73; + + snake.length = 10; + snake.dir = 'L'; + while(1){ - display_start(); + display_start(); //Start display } - + return; } + diff --git a/main.c.o b/main.c.o index 7752174..af93e9d 100644 Binary files a/main.c.o and b/main.c.o differ diff --git a/outfile.elf b/outfile.elf index fe9213d..ba518bc 100644 Binary files a/outfile.elf and b/outfile.elf differ diff --git a/outfile.hex b/outfile.hex index 3c440a7..44a0c83 100644 --- a/outfile.hex +++ b/outfile.hex @@ -1,6 +1,6 @@ :020000040000fa :020000041d00dd -:0800f8000000009da821009dfd +:0800f8000000009d0828009d96 :020000040000fa :020000041d00dd :1001800000701a4004005a2300709a401800004280 @@ -8,259 +8,259 @@ :0401a000000000005b :020000040000fa :020000041d00dd -:10020000009d1a3ce01f5a3700005a8f0800400337 +:10020000009d1a3c40265a3700005a8f08004003d0 :1002100000000000000000000000000000000000de :020000040000fa :020000041d00dd -:10022000009d1a3ce01f5a3704005a8f0800400313 +:10022000009d1a3c40265a3704005a8f08004003ac :1002300000000000000000000000000000000000be :020000040000fa :020000041d00dd -:10024000009d1a3ce01f5a3708005a8f08004003ef +:10024000009d1a3c40265a3708005a8f0800400388 :10025000000000000000000000000000000000009e :020000040000fa :020000041d00dd -:10026000009d1a3ce01f5a370c005a8f08004003cb +:10026000009d1a3c40265a370c005a8f0800400364 :10027000000000000000000000000000000000007e :020000040000fa :020000041d00dd -:10028000009d1a3ce01f5a3710005a8f08004003a7 +:10028000009d1a3c40265a3710005a8f0800400340 :10029000000000000000000000000000000000005e :020000040000fa :020000041d00dd -:1002a000009d1a3ce01f5a3714005a8f0800400383 +:1002a000009d1a3c40265a3714005a8f080040031c :1002b000000000000000000000000000000000003e :020000040000fa :020000041d00dd -:1002c000009d1a3ce01f5a3718005a8f080040035f +:1002c000009d1a3c40265a3718005a8f08004003f8 :1002d000000000000000000000000000000000001e :020000040000fa :020000041d00dd -:1002e000009d1a3ce01f5a371c005a8f080040033b +:1002e000009d1a3c40265a371c005a8f08004003d4 :1002f00000000000000000000000000000000000fe :020000040000fa :020000041d00dd -:10030000009d1a3ce01f5a3720005a8f0800400316 +:10030000009d1a3c40265a3720005a8f08004003af :1003100000000000000000000000000000000000dd :020000040000fa :020000041d00dd -:10032000009d1a3ce01f5a3724005a8f08004003f2 +:10032000009d1a3c40265a3724005a8f080040038b :1003300000000000000000000000000000000000bd :020000040000fa :020000041d00dd -:10034000009d1a3ce01f5a3728005a8f08004003ce +:10034000009d1a3c40265a3728005a8f0800400367 :10035000000000000000000000000000000000009d :020000040000fa :020000041d00dd -:10036000009d1a3ce01f5a372c005a8f08004003aa +:10036000009d1a3c40265a372c005a8f0800400343 :10037000000000000000000000000000000000007d :020000040000fa :020000041d00dd -:10038000009d1a3ce01f5a3730005a8f0800400386 +:10038000009d1a3c40265a3730005a8f080040031f :10039000000000000000000000000000000000005d :020000040000fa :020000041d00dd -:1003a000009d1a3ce01f5a3734005a8f0800400362 +:1003a000009d1a3c40265a3734005a8f08004003fb :1003b000000000000000000000000000000000003d :020000040000fa :020000041d00dd -:1003c000009d1a3ce01f5a3738005a8f080040033e +:1003c000009d1a3c40265a3738005a8f08004003d7 :1003d000000000000000000000000000000000001d :020000040000fa :020000041d00dd -:1003e000009d1a3ce01f5a373c005a8f080040031a +:1003e000009d1a3c40265a373c005a8f08004003b3 :1003f00000000000000000000000000000000000fd :020000040000fa :020000041d00dd -:10040000009d1a3ce01f5a3740005a8f08004003f5 +:10040000009d1a3c40265a3740005a8f080040038e :1004100000000000000000000000000000000000dc :020000040000fa :020000041d00dd -:10042000009d1a3ce01f5a3744005a8f08004003d1 +:10042000009d1a3c40265a3744005a8f080040036a :1004300000000000000000000000000000000000bc :020000040000fa :020000041d00dd -:10044000009d1a3ce01f5a3748005a8f08004003ad +:10044000009d1a3c40265a3748005a8f0800400346 :10045000000000000000000000000000000000009c :020000040000fa :020000041d00dd -:10046000009d1a3ce01f5a374c005a8f0800400389 +:10046000009d1a3c40265a374c005a8f0800400322 :10047000000000000000000000000000000000007c :020000040000fa :020000041d00dd -:10048000009d1a3ce01f5a3750005a8f0800400365 +:10048000009d1a3c40265a3750005a8f08004003fe :10049000000000000000000000000000000000005c :020000040000fa :020000041d00dd -:1004a000009d1a3ce01f5a3754005a8f0800400341 +:1004a000009d1a3c40265a3754005a8f08004003da :1004b000000000000000000000000000000000003c :020000040000fa :020000041d00dd -:1004c000009d1a3ce01f5a3758005a8f080040031d +:1004c000009d1a3c40265a3758005a8f08004003b6 :1004d000000000000000000000000000000000001c :020000040000fa :020000041d00dd -:1004e000009d1a3ce01f5a375c005a8f08004003f9 +:1004e000009d1a3c40265a375c005a8f0800400392 :1004f00000000000000000000000000000000000fc :020000040000fa :020000041d00dd -:10050000009d1a3ce01f5a3760005a8f08004003d4 +:10050000009d1a3c40265a3760005a8f080040036d :1005100000000000000000000000000000000000db :020000040000fa :020000041d00dd -:10052000009d1a3ce01f5a3764005a8f08004003b0 +:10052000009d1a3c40265a3764005a8f0800400349 :1005300000000000000000000000000000000000bb :020000040000fa :020000041d00dd -:10054000009d1a3ce01f5a3768005a8f080040038c +:10054000009d1a3c40265a3768005a8f0800400325 :10055000000000000000000000000000000000009b :020000040000fa :020000041d00dd -:10056000009d1a3ce01f5a376c005a8f0800400368 +:10056000009d1a3c40265a376c005a8f0800400301 :10057000000000000000000000000000000000007b :020000040000fa :020000041d00dd -:10058000009d1a3ce01f5a3770005a8f0800400344 +:10058000009d1a3c40265a3770005a8f08004003dd :10059000000000000000000000000000000000005b :020000040000fa :020000041d00dd -:1005a000009d1a3ce01f5a3774005a8f0800400320 +:1005a000009d1a3c40265a3774005a8f08004003b9 :1005b000000000000000000000000000000000003b :020000040000fa :020000041d00dd -:1005c000009d1a3ce01f5a3778005a8f08004003fc +:1005c000009d1a3c40265a3778005a8f0800400395 :1005d000000000000000000000000000000000001b :020000040000fa :020000041d00dd -:1005e000009d1a3ce01f5a377c005a8f08004003d8 +:1005e000009d1a3c40265a377c005a8f0800400371 :1005f00000000000000000000000000000000000fb :020000040000fa :020000041d00dd -:10060000009d1a3ce01f5a3780005a8f08004003b3 +:10060000009d1a3c40265a3780005a8f080040034c :1006100000000000000000000000000000000000da :020000040000fa :020000041d00dd -:10062000009d1a3ce01f5a3784005a8f080040038f +:10062000009d1a3c40265a3784005a8f0800400328 :1006300000000000000000000000000000000000ba :020000040000fa :020000041d00dd -:10064000009d1a3ce01f5a3788005a8f080040036b +:10064000009d1a3c40265a3788005a8f0800400304 :10065000000000000000000000000000000000009a :020000040000fa :020000041d00dd -:10066000009d1a3ce01f5a378c005a8f0800400347 +:10066000009d1a3c40265a378c005a8f08004003e0 :10067000000000000000000000000000000000007a :020000040000fa :020000041d00dd -:10068000009d1a3ce01f5a3790005a8f0800400323 +:10068000009d1a3c40265a3790005a8f08004003bc :10069000000000000000000000000000000000005a :020000040000fa :020000041d00dd -:1006a000009d1a3ce01f5a3794005a8f08004003ff +:1006a000009d1a3c40265a3794005a8f0800400398 :1006b000000000000000000000000000000000003a :020000040000fa :020000041d00dd -:1006c000009d1a3ce01f5a3798005a8f08004003db +:1006c000009d1a3c40265a3798005a8f0800400374 :1006d000000000000000000000000000000000001a :020000040000fa :020000041d00dd -:1006e000009d1a3ce01f5a379c005a8f08004003b7 +:1006e000009d1a3c40265a379c005a8f0800400350 :1006f00000000000000000000000000000000000fa :020000040000fa :020000041d00dd -:10070000009d1a3ce01f5a37a0005a8f0800400392 +:10070000009d1a3c40265a37a0005a8f080040032b :1007100000000000000000000000000000000000d9 :020000040000fa :020000041d00dd -:10072000009d1a3ce01f5a37a4005a8f080040036e +:10072000009d1a3c40265a37a4005a8f0800400307 :1007300000000000000000000000000000000000b9 :020000040000fa :020000041d00dd -:10074000009d1a3ce01f5a37a8005a8f080040034a +:10074000009d1a3c40265a37a8005a8f08004003e3 :100750000000000000000000000000000000000099 :020000040000fa :020000041d00dd -:10076000009d1a3ce01f5a37ac005a8f0800400326 +:10076000009d1a3c40265a37ac005a8f08004003bf :100770000000000000000000000000000000000079 :020000040000fa :020000041d00dd -:10078000009d1a3ce01f5a37b0005a8f0800400302 +:10078000009d1a3c40265a37b0005a8f080040039b :100790000000000000000000000000000000000059 :020000040000fa :020000041d00dd -:1007a000009d1a3ce01f5a37b4005a8f08004003de +:1007a000009d1a3c40265a37b4005a8f0800400377 :1007b0000000000000000000000000000000000039 :020000040000fa :020000041d00dd -:1007c000009d1a3ce01f5a37b8005a8f08004003ba +:1007c000009d1a3c40265a37b8005a8f0800400353 :1007d0000000000000000000000000000000000019 :020000040000fa :020000041d00dd -:1007e000009d1a3ce01f5a37bc005a8f0800400396 +:1007e000009d1a3c40265a37bc005a8f080040032f :1007f00000000000000000000000000000000000f9 :020000040000fa :020000041d00dd -:10080000009d1a3ce01f5a37c0005a8f0800400371 +:10080000009d1a3c40265a37c0005a8f080040030a :1008100000000000000000000000000000000000d8 :020000040000fa :020000041d00dd -:10082000009d1a3ce01f5a37c4005a8f080040034d +:10082000009d1a3c40265a37c4005a8f08004003e6 :1008300000000000000000000000000000000000b8 :020000040000fa :020000041d00dd -:10084000009d1a3ce01f5a37c8005a8f0800400329 +:10084000009d1a3c40265a37c8005a8f08004003c2 :100850000000000000000000000000000000000098 :020000040000fa :020000041d00dd -:10086000009d1a3ce01f5a37cc005a8f0800400305 +:10086000009d1a3c40265a37cc005a8f080040039e :100870000000000000000000000000000000000078 :020000040000fa :020000041d00dd -:10088000009d1a3ce01f5a37d0005a8f08004003e1 +:10088000009d1a3c40265a37d0005a8f080040037a :100890000000000000000000000000000000000058 :020000040000fa :020000041d00dd -:1008a000009d1a3ce01f5a37d4005a8f08004003bd +:1008a000009d1a3c40265a37d4005a8f0800400356 :1008b0000000000000000000000000000000000038 :020000040000fa :020000041d00dd -:1008c000009d1a3ce01f5a37d8005a8f0800400399 +:1008c000009d1a3c40265a37d8005a8f0800400332 :1008d0000000000000000000000000000000000018 :020000040000fa :020000041d00dd -:1008e000009d1a3ce01f5a37dc005a8f0800400375 +:1008e000009d1a3c40265a37dc005a8f080040030e :1008f00000000000000000000000000000000000f8 :020000040000fa :020000041d00dd -:10090000009d1a3ce01f5a37e0005a8f0800400350 +:10090000009d1a3c40265a37e0005a8f08004003e9 :1009100000000000000000000000000000000000d7 :020000040000fa :020000041d00dd -:10092000009d1a3ce01f5a37e4005a8f080040032c +:10092000009d1a3c40265a37e4005a8f08004003c5 :1009300000000000000000000000000000000000b7 :020000040000fa :020000041d00dd -:10094000009d1a3ce01f5a37e8005a8f0800400308 +:10094000009d1a3c40265a37e8005a8f08004003a1 :100950000000000000000000000000000000000097 :020000040000fa :020000041d00dd -:10096000009d1a3ce01f5a37ec005a8f08004003e4 +:10096000009d1a3c40265a37ec005a8f080040037d :100970000000000000000000000000000000000077 :020000040000fa :020000041d00dd -:10098000009d1a3ce01f5a37f0005a8f08004003c0 +:10098000009d1a3c40265a37f0005a8f0800400359 :100990000000000000000000000000000000000057 :020000040000fa :020000041d00dd -:1009a000009d1a3ce01f5a37f4005a8f080040039c +:1009a000009d1a3c40265a37f4005a8f0800400335 :1009b0000000000000000000000000000000000037 :020000040000fa :020000041d00dd -:1009c000009d1a3ce01f5a37f8005a8f0800400378 +:1009c000009d1a3c40265a37f8005a8f0800400311 :1009d0000000000000000000000000000000000017 :020000040000fa :020000041d00dd -:1009e000009d1a3ce01f5a37fc005a8f0800400354 +:1009e000009d1a3c40265a37fc005a8f08004003ed :0409f0000000000003 :020000040000fa :020000041d00dd @@ -268,17 +268,17 @@ :020000040000fa :020000041d00dd :1010100000601a40c0045a7f050040130000000021 -:10102000009d1a3c4c1e5a27080040030000000097 -:1010300000a01d3c0040bd2700a01c3c1c009c27bc +:10102000009d1a3cac245a27080040030000000031 +:1010300000a01d3c0040bd2700a01c3c6c009c276c :101040000260094020582001801e2a7d8449497d84 :1010500002608940c000000000e0dc4102608b407b -:10106000c0000000009d083c601e082509f8000132 -:101070000000000000a0083c1c00082500a0093c5e -:10108000741229250600001000000000000000adc9 +:10106000c0000000009d083cc024082509f80001cc +:101070000000000000a0083c6c00082500a0093c0e +:10108000981329250600001000000000000000ada4 :10109000040000ad080000ad0c0000ad10000825f4 :1010a0002b080901f9ff201400000000009d083cf6 -:1010b0001026082500a0093c0800292500a00a3cac -:1010c0001c004a25050000100000000000000b8de8 +:1010b000802c082500a0093c0800292500a00a3c36 +:1010c0006c004a25050000100000000000000b8d98 :1010d00000002bad04000825040029252b082a0157 :1010e000faff20140000000000488040ffff0a249f :1010f00000588a40009d093c00002925017889405c @@ -286,9 +286,9 @@ :1011100001608a408000093c0068894000800840e6 :101120008005097d404c0900006008405800013ce2 :10113000244001012540280100608840009d083cb2 -:10114000801e082509f8000100000000006008402a +:10114000e024082509f800010000000000600840c4 :10115000bfff013cffff21342440010100608840b3 -:10116000000084300000a530009d083c9021082537 +:10116000000084300000a530009d083cf0270825d1 :0811700008000001000000006e :020000040000fa :020000041d00dd @@ -332,10 +332,10 @@ :1013d0001505400b000000001400c28f0000428081 :1013e00010004010000000001400c28f0000438075 :1013f00000a0023c1000c48f002904000000c48f2c -:101400002120a4001c10422421108200000043a0cf +:101400002120a4004811422421108200000043a0a2 :101410001400c28f010042241400c2af1205400b19 :101420000000000000a0023c1000c38f0021030058 -:101430000000c38f211883001c1042242110620079 +:101430000000c38f2118830048114224211062004c :1014400020000324000043a00000c28f01004224ba :101450000000c2af0000c28f10004228deff40141f :101460000000000021e8c0030c00be8f1000bd2763 @@ -348,12 +348,12 @@ :1014d000100004247304400f0000000088bf023c89 :1014e0005861423410000324000043ac1400c0af24 :1014f0006505400b0000000000a0023c1000c38ff7 -:10150000002103001400c38f211883001c10422403 +:10150000002103001400c38f2118830048114224d6 :1015100021106200000042801c00c2af1c00c28f7c :101520008000423003004010000000006205400bc4 :10153000000000001800c0af5e05400b0000000076 :101540001c00c28fc01802001800c28f2118620050 -:10155000009d023cf42142242110620000004290d0 +:10155000009d023c54284224211062000000429069 :10156000212040007304400f000000001800c28fcb :10157000010042241800c2af1800c28f08004228a0 :10158000efff4014000000001400c28f010042244d @@ -387,249 +387,358 @@ :101740000c00c2a30d00c0a30800c0afec05400b05 :10175000000000000000c28fc01802000800c28f05 :101760002118620000a0023cc02103000400c38fc6 -:10177000211883001c0042242110620000004290c6 +:1017700021188300e0004224211062000000429002 :1017800005004010000000000d00c3930c00c29340 :10179000251062000d00c2a30c00c293401002008d :1017a0000c00c2a30800c28f010042240800c2af8f :1017b0000800c28f08004228e6ff40140000000025 :1017c0000000c28fc01902000400c28f21186200fd -:1017d00000a0023c5c104224211062000d00c39363 +:1017d00000a0023c88114224211062000d00c39336 :1017e000000043a00400c28f010042240400c2afe5 :1017f0000400c28f80004228d0ff40140000000087 :101800000000c28f010042240000c2af0000c28f5e :1018100004004228c6ff40140000000021e8c00375 :101820001c00be8f2000bd270800e0030000000060 -:10183000f0ffbd270c00beaf21f0a0031000c4af25 -:101840001400c5af1800c6af1c00c7af0000c0af82 -:101850004406400b000000000400c0af3d06400bf2 -:10186000000000000000c38f1400c28f2a10620025 -:101870001d004014000000001400c38f1c00c28f24 -:10188000211862000000c28f2a1062001600401466 -:10189000000000000400c38f1000c28f2a106200f5 -:1018a00011004014000000001000c38f1800c28f08 -:1018b000211862000400c28f2a1062000a0040143e -:1018c0000000000000a0023c0000c38fc021030004 -:1018d0000400c38f211883001c00422421106200e1 -:1018e00001000324000043a00400c28f0100422431 -:1018f0000400c2af0400c28f80004228d9ff401408 -:10190000000000000000c28f010042240000c2afae -:101910000000c28f20004228cfff401400000000ca -:1019200021e8c0030c00be8f1000bd270800e003b3 -:1019300000000000e8ffbd271400beaf21f0a003a7 -:101940000000c0af6806400b000000000400c0affc -:101950006106400b0000000000a0023c0000c38fa5 -:10196000c02103000400c38f211883001c004224ff -:1019700021106200000040a00400c28f0100422438 -:101980000400c2af0400c28f80004228f2ff40145e -:10199000000000000000c28f010042240000c2af1e -:1019a0000000c28f20004228e8ff40140000000021 -:1019b0000800c0af7706400b0000000000a0023c0a -:1019c0005c1043240800c28f21106200000040a078 -:1019d0000800c28f010042240800c2af0800c28f75 -:1019e00000024228f5ff40140000000021e8c00377 -:1019f0001400be8f1800bd270800e003000000009f -:101a0000e8ffbd271400bfaf1000beaf21f0a00358 -:101a10004d06400f000000009506400f000000003a -:101a2000c205400f000000002120000000a0023c81 -:101a30005c1045247605400f0000000021e8c0033b -:101a40001400bf8f1000be8f1800bd270800e003f0 -:101a500000000000e8ffbd271400bfaf1000beafbc -:101a600021f0a003b806400f00000000e706400f79 -:101a70000000000000a0023c7012438c00a0023c59 -:101a80001400428c090062140000000000a0023c17 -:101a90001000438c00a0023c1800428c030062142a -:101aa00000000000fb06400f0000000000a0023c08 -:101ab0000800428c21204000ad07400f00000000cc -:101ac000d106400f0000000021e8c0031400bf8fc2 -:101ad0001000be8f1800bd270800e00300000000c2 -:101ae000e8ffbd271400bfaf1000beaf21f0a00378 -:101af00000a0023c05000324681243ac00a0023c95 -:101b00007012448c00a0023c1000458c00a0023ce6 -:101b10006812438c00a0023c0c00428c2130600013 -:101b2000213840000c06400f0000000021e8c003ef -:101b30001400bf8f1000be8f1800bd270800e003ff -:101b400000000000f8ffbd270400beaf21f0a00395 -:101b500000a0023c7012428c810042280500401413 -:101b60000000000000a0023c701240ace206400bf6 -:101b70000000000000a0023c7012428c01004324cf -:101b800000a0023c701243ac21e8c0030400be8fe9 -:101b90000800bd270800e00300000000e8ffbd27a3 -:101ba0001400bfaf1000beaf21f0a00300a0023ca4 -:101bb0001400438c00a0023c1800428c21206000dd -:101bc0002128400001000624010007240c06400fd4 -:101bd0000000000021e8c0031400bf8f1000be8f7a -:101be0001800bd270800e00300000000e8ffbd2743 -:101bf0001400bfaf1000beaf21f0a00300a0023c54 -:101c00001400448c00a0023c1800438c00a0023c4d -:101c1000c0210400211883001c004224211062000e -:101c2000000040a000a0023c05000324140043acc7 -:101c300000a0023c05000324180043ace706400f57 -:101c40000000000000a0023c6c12428c0100432402 -:101c500000a0023c6c1243ac21e8c0031400bf8f0b -:101c60001000be8f1800bd270800e0030000000030 -:101c7000f8ffbd270400beaf21f0a0030000000064 -:101c800021e8c0030400be8f0800bd270800e00360 -:101c900000000000e8ffbd271400bfaf1000beaf7a -:101ca00021f0a00380bf023c30f2423499aa033ce9 -:101cb00055666334000043ac80bf023c30f24234ce -:101cc0006655033caa996334000043ac0000000051 -:101cd00080bf023c00f042340000438c2000023cf4 -:101ce00024106200faff40140000000080bf023c94 -:101cf00004f042341800033c000043ac0000000034 -:101d000080bf023c00f042340000438c2000023cc3 -:101d100024106200faff40140000000080bf023c63 -:101d200030f24234000040ac80bf023c609042344c -:101d3000ffff0334000043ac88bf023c30614234f3 -:101d4000000040ac88bf023c04614234ff00032421 -:101d5000000043ac88bf023c10614234000040ac3c -:101d600088bf023c50614234ffff0334000043aca3 -:101d700088bf023c9061423400020324000043ac5f -:101d800088bf023c70614234000040ac88bf023c16 -:101d9000b0614234000040ac88bf023c4461423430 -:101da00070000324000043ac88bf023c84614234cd -:101db00000020324000043ac88bf023cc8604234e8 -:101dc00000010324000043ac88bf023c4861423458 -:101dd00002000324000043ac80bf023c005a42349e -:101de000000040ac80bf023c305a4234040003245f -:101df000000043ac80bf023c145a4234400003242c -:101e0000000043ac80bf023c085a42344000032427 -:101e1000000043ac80bf023c085a42342000032437 -:101e2000000043ac80bf023c085a423400800334b7 -:101e3000000043ac9304400f000000008006400ff8 -:101e4000000000008f07400b00000000f8ffbd27d6 -:101e50000400beaf21f0a0039607400b0000000075 -:101e6000f8ffbd270400beaf21f0a00321e8c003a6 -:101e70000400be8f0800bd270800e003000000003a -:101e8000f8ffbd270400beaf21f0a00321e8c00386 -:101e90000400be8f0800bd270800e003000000001a -:101ea0000f008430300082200800e00300000000b2 -:101eb00000000000fcffbd230000b3af98b713344f -:101ec00000000e2400000f24b507400b00000000a6 -:101ed000000000000d00e411000000000000000000 -:101ee000ffff8420bc07400b000000000000000042 -:101ef000f8ffd31100000000000000000100ce2117 -:101f0000bc07400b00000000000000000000b38f81 -:101f10000400bd230800e0030000000000000000f2 -:101f2000fcffbd230000b0affcffbd230000b1af3c -:101f3000fcffbd230000bfaffcffbd230000a4af2a -:101f40002080a0002088800002231000a807400ff6 -:101f50000000000000000000000022a20222100089 -:101f6000a807400f0000000000000000010022a2ae -:101f70003a000c240000000002002ca202211000f4 -:101f8000a807400f0000000000000000030022a28c -:101f900020200002a807400f000000000000000001 -:101fa000040022a200000d240000000005002da264 -:101fb0000000a48f0400bd230000bf8f0400bd23d8 -:101fc0000000b18f0400bd230000b08f0400bd23ca -:101fd0000800e00300000000000000000000000016 -:101fe000e020009de020009de020009de020009d7d -:101ff000e020009de020009de020009de020009d6d -:10200000e020009de020009de020009de020009d5c -:10201000e020009de020009de020009de020009d4c -:10202000e020009de020009de020009de020009d3c -:10203000e020009de020009de020009de020009d2c -:10204000e020009de020009de020009de020009d1c -:10205000e020009de020009de020009de020009d0c -:10206000e020009de020009de020009de020009dfc -:10207000e020009de020009de020009de020009dec -:10208000e020009de020009de020009de020009ddc -:10209000e020009de020009de020009de020009dcc -:1020a000e020009de020009de020009de020009dbc -:1020b000e020009de020009de020009de020009dac -:1020c000e020009de020009de020009de020009d9c -:1020d000e020009de020009de020009de020009d8c -:1020e000b8ffbd230000bfaf0400a1af0800a2af3e -:1020f0000c00a3af1000a4af1400a5af1800a6af4a -:102100001c00a7af2000a8af2400a9af2800aaafe9 -:102110002c00abaf3000acaf3400adaf3800aeaf89 -:102120003c00afaf4000b8af4400b9af1c07400f50 -:10213000000000004400b98f4000b88f3c00af8f12 -:102140003800ae8f3400ad8f3000ac8f2c00ab8fd9 -:102150002800aa8f2400a98f2000a88f1c00a78f19 -:102160001800a68f1400a58f1000a48f0c00a38f59 -:102170000800a28f0400a18f0000bf8f4800bd237c -:1021800018000042000000000000000000000000f5 -:10219000000084300000a5302507400f000000003b -:0821a000ffff00100000000029 -:020000040000fa -:020000041d00dd -:1021a8004c000000ffffffff0e030001ffffffffd1 -:1021b800ffffffff010002010010009d0000009dcd -:1021c80000f0010000f0019d00100000f02fc0bfda -:1021d80010000000000000a008000000ffffffff43 -:0c21e8002002009d0002009d200000006d -:020000040000fa -:020000041d00dd -:1021f40000000000000000000000000000000000db -:1022040000000000000000000000000000000000ca -:1022140000000000000000000000000000000000ba -:1022240000000000000000000000000000000000aa -:10223400000000000000000000000000000000009a -:10224400000000000000000000000000000000008a -:10225400000000000000000000000000000000007a -:10226400000000000000000000000000000000006a -:10227400000000000000000000000000000000005a -:10228400000000000000000000000000000000004a -:10229400000000000000000000000000000000003a -:1022a400000000000000000000000000000000002a -:1022b400000000000000000000000000000000001a -:1022c400000000000000000000000000000000000a -:1022d40000000000000000000000000000000000fa -:1022e40000000000000000000000000000000000ea -:1022f40000000000000000000000005e000000007c -:10230400000004030403000000247e24247e24002f -:1023140000244aff5224000000462610086462008c -:1023240000344a4a34205000000000040300000036 -:102334000000007e81000000000000817e0000009b -:10234400002a1c3e1c2a00000008083e0808000061 -:102354000000008060000000000808080808000071 -:10236400000000006000000000402010080402008b -:10237400003e4149413e00000000427f4000000011 -:10238400000062514946000000002249493600001d -:1023940000000e087f0800000000234545390000b6 -:1023a40000003e49493200000000016119070000a5 -:1023b400000036494936000000000609097e000085 -:1023c40000000066000000000000806600000000bd -:1023d400000008142241000000001414141400002a -:1023e4000000412214080000000201510906000007 -:1023f400001c225959520c0000007e09097e00007d -:1024040000007f494936000000003e41412200009f -:1024140000007f41413e000000007f494941000027 -:1024240000007f090901000000003e415132000014 -:1024340000007f08087f00000000417f4100000089 -:1024440000002040403f000000007f0814630000ab -:1024540000007f4040400000007f0204027f000033 -:10246400007f0608307f000000003e41413e00002e -:1024740000007f090906000000003e41617e400023 -:1024840000007f0909760000000026494932000057 -:102494000001017f0101000000003f40403f0000b7 -:1024a400001f2040201f0000003f4030403f00003c -:1024b4000000770808770000000304780403000094 -:1024c400000071494947000000007f4141000000bd -:1024d400000204081020400000000041417f000079 -:1024e400000402010204000000404040404040005b -:1024f40000000102040000000000304828780000b9 -:1025040000007f48483000000000304848000000c8 -:1025140000003048487f0000000030585810000088 -:1025240000007e090102000000005098987000002d -:1025340000007f08087000000000007a000000001e -:1025440000004080807a000000007f1028480000ce -:102554000000007f000000000078081008700000f0 -:10256400000078080870000000003048483000007f -:102574000000f828281000000000102828f80000a7 -:1025840000007008081000000000485454240000a3 -:102594000000083c4820000000003840207800007b -:1025a4000000384038000000003840204038000067 -:1025b4000000483030480000000018a0a078000057 -:1025c40000006454544c00000000081c2241000028 -:1025d4000000007e00000000000041221c080000f2 -:1025e4000000040204020000007844424478000021 -:020000040000fa -:020000041d00dd -:1025f80000002002010000030000000000000000ad -:082608000100000000000000c9 -:020000040000fa -:020000041d00dd -:102610001400000001000000100000004000000055 -:0426200010000000a6 +:10183000e8ffbd271400beaf21f0a0030000c0af39 +:101840002706400b000000000400c0af2006400b3c +:101850000000000000a0023c0000c38fc021030074 +:101860000400c38f21188300e0004224211062008d +:10187000000040a00400c28f010042240400c2af57 +:101880000400c28f80004228f2ff401400000000d4 +:101890000000c28f010042240000c2af0000c28fce +:1018a00020004228e8ff4014000000000800c0affc +:1018b0003606400b0000000000a0023c88114324c3 +:1018c0000800c28f21106200000040a00800c28ff3 +:1018d000010042240800c2af0800c28f0002422863 +:1018e000f5ff40140000000021e8c0031400be8f83 +:1018f0001800bd270800e00300000000e8ffbd2736 +:101900001400bfaf1000beaf21f0a0030c06400fc3 +:10191000000000005406400f00000000c205400f08 +:10192000000000002120000000a0023c8811452496 +:101930007605400f0000000021e8c0031400bf8faf +:101940001000be8f1800bd270800e0030000000053 +:10195000e0ffbd271c00bfaf1800beaf21f0a00301 +:101960003e07400f0000000000a0023c6c00428ccb +:10197000000042902120400000a0023ce010438c77 +:1019800000a0023c801803003c00422421106200a9 +:101990000000428c110082140000000000a0023cf4 +:1019a0006c0042240400428c000042902120400040 +:1019b00000a0023ce010438c00a0023c8018030011 +:1019c0000c004224211062000000428c03008214ab +:1019d000000000000708400f0000000000a0023ccb +:1019e0006c00428c0000439020000224130062101f +:1019f0000000000000a0023c6c00428c00004290fd +:101a00000e0040100000000000a0023c6c004224c8 +:101a10000400428c00004390800002240700621002 +:101a20000000000000a0023c6c0042240400428c34 +:101a3000000042900300401400000000c506400f63 +:101a400000000000fb06400f0000000000a0023c68 +:101a50006c0042240800428cffff42241000c2aff9 +:101a6000b506400b0000000000a0023c6c004224c0 +:101a70000400428c0000439000a0023c6c00422411 +:101a80000400448c1000c28f21108200000042909c +:101a90000d0062140000000000a0023c6c00428cab +:101aa0000000439000a0023c6c00448c1000c28fe8 +:101ab0002110820000004290030062140000000028 +:101ac000c506400f000000001000c28fffff422437 +:101ad0001000c2af1000c28fe3ff401c00000000e6 +:101ae000ea07400f0000000000a0023c0800428c02 +:101af000212040004509400f0000000021e8c003fc +:101b00001c00bf8f1800be8f2000bd270800e00317 +:101b100000000000e0ffbd271c00bfaf1800beaff3 +:101b200021f0a003580002241000c2a700a0023c2c +:101b3000e010428cff00423030004224ff0042306f +:101b40002014027c1000c2a3ee06400b000000002f +:101b50000c06400f0000000001000424009d023c20 +:101b6000542c4524e004400f00000000020004242f +:101b70001000c22721284000e004400f00000000b0 +:101b80001e05400f00000000c205400f00000000cd +:101b90002120000000a0023c881145247605400f5a +:101ba000000000001b08400f00000000211840004a +:101bb00000a0023c941343ac00a0023c9413438c5d +:101bc00008000224e2ff6214000000003e08400ffb +:101bd0000000000021e8c0031c00bf8f1800be8f6a +:101be0002000bd270800e00300000000e0ffbd2743 +:101bf0001c00beaf21f0a0030800c0af3207400bad +:101c0000000000000000c0af2c07400b00000000e7 +:101c10000400c0af2607400b0000000000a0023cfb +:101c20006c0042240400438c0800c28f2110620023 +:101c300000004290211840000000c28f2110620075 +:101c40000c00c2af00a0023c6c00438c0800c28fa5 +:101c50002110620000004290211840000400c28f51 +:101c6000211062001000c2af00a0023c1000c38f20 +:101c7000c02103000c00c38f21188300e000422420 +:101c80002110620001000324000043a00400c28f61 +:101c9000010042240400c2af0400c28fdfff4018dd +:101ca000000000000000c28f010042240000c2af0b +:101cb0000000c28fd6ff4018000000000800c28f4d +:101cc000010042240800c2af00a0023c6c00422484 +:101cd0000800438c0800c28f2a104300c9ff40143b +:101ce0000000000021e8c0031c00be8f2000bd27bb +:101cf0000800e00300000000e0ffbd271c00bfafac +:101d00001800beaf21f0a0031b08400f0000000028 +:101d10002118400000a0023c941343ac00a0023cf8 +:101d20006c0042240800428cffff42241000c2af26 +:101d30006907400b0000000000a0023c6c00422438 +:101d40000400438c1000c28f2110620000a0033ced +:101d50006c0063240400648c1000c38fffff6324b5 +:101d60002118830000006390000043a000a0023c03 +:101d70006c00438c1000c28f2110620000a0033c55 +:101d80006c00648c1000c38fffff63242118830054 +:101d900000006390000043a01000c28fffff4224a8 +:101da0001000c2af1000c28fe3ff401c0000000013 +:101db00000a0023c6c0042240c004380520002242c +:101dc0000b0062140000000000a0023c6c004224e2 +:101dd0000400428c00a0033c6c0063240400638c6c +:101de0000000639001006324ff006330000043a003 +:101df00000a0023c6c0042240c00438044000224fa +:101e0000090062140000000000a0023c6c00428c3b +:101e100000a0033c6c00638c00006390010063240d +:101e2000ff006330000043a000a0023c6c0042248d +:101e30000c004380550002240900621400000000d9 +:101e400000a0023c6c00428c00a0033c6c00638c40 +:101e500000006390ffff6324ff006330000043a095 +:101e600000a0023c6c0042240c0043804c00022481 +:101e70000b0062140000000000a0023c6c00422431 +:101e80000400428c00a0033c6c0063240400638cbb +:101e900000006390ffff6324ff006330000043a055 +:101ea00000a0023c6c0042240c0043804c00022441 +:101eb0000a0062100000000000a0023c9413438c52 +:101ec00001000224050062140000000000a0023c92 +:101ed0006c004224520003240c0043a000a0023cea +:101ee0006c0042240c004380550002240a0062105a +:101ef0000000000000a0023c9413438c0200022466 +:101f0000050062140000000000a0023c6c004224a6 +:101f1000440003240c0043a000a0023c6c004224b7 +:101f20000c004380440002240a00621000000000fc +:101f300000a0023c9413438c0400022405006214a8 +:101f40000000000000a0023c6c0042245500032465 +:101f50000c0043a000a0023c6c0042240c00438013 +:101f6000520002240a0062100000000000a0023c9f +:101f70009413438c08000224050062140000000042 +:101f800000a0023c6c0042244c0003240c0043a03f +:101f900021e8c0031c00bf8f1800be8f2000bd27a2 +:101fa0000800e00300000000f8ffbd270400beaffa +:101fb00021f0a00300a0023ce010438c00a0023cf2 +:101fc000801803003c004224211062000000448c71 +:101fd00000a0023ce010438c00a0023c80180300eb +:101fe0000c004224211062000000438c00a0023c3f +:101ff000c021040021188300e00042242110620067 +:1020000001000324000043a021e8c0030400be8fa8 +:102010000800bd270800e00300000000f8ffbd270e +:102020000400beaf21f0a00300a0023c6c004224db +:102030000800428c0100432400a0023c6c004224b2 +:10204000080043ac00a0023ce010428c0100432495 +:1020500000a0023ce01043ac21e8c0030400be8fa6 +:102060000800bd270800e00300000000f0ffbd27c6 +:102070000c00beaf21f0a00388bf023cd060423408 +:102080000000428c42110200070042300000c2af43 +:102090000000c28f401002000000c2af88bf023ca7 +:1020a000506142340000428c421002000100433073 +:1020b0000000c28f251062000000c2af0000c28f76 +:1020c00021e8c0030c00be8f1000bd270800e0030c +:1020d00000000000f8ffbd270400beaf21f0a00300 +:1020e0000000000021e8c0030400be8f0800bd27e7 +:1020f0000800e00300000000e8ffbd271400bfafa8 +:102100001000beaf21f0a00380bf023c30f2423489 +:1021100099aa033c55666334000043ac80bf023c7f +:1021200030f242346655033caa996334000043ac54 +:102130000000000080bf023c00f042340000438ced +:102140002000023c24106200faff4014000000004e +:1021500080bf023c04f042341800033c000043ac52 +:102160000000000080bf023c00f042340000438cbd +:102170002000023c24106200faff4014000000001e +:1021800080bf023c30f24234000040ac80bf023cd1 +:1021900060904234ffff0334000043ac88bf023c30 +:1021a00030614234000040ac88bf023c04614234dc +:1021b000ff000324000043ac88bf023c106142349e +:1021c000000040ac88bf023c50614234ffff033442 +:1021d000000043ac88bf023c9061423400020324fb +:1021e000000043ac88bf023c70614234000040ac48 +:1021f00088bf023cb0614234000040ac88bf023c62 +:102200004461423470000324000043ac88bf023ca8 +:102210008461423400020324000043ac88bf023cc6 +:10222000c860423400010324000043ac88bf023c74 +:102230004861423402000324000043ac80bf023cea +:10224000005a4234000040ac80bf023c305a423455 +:1022500004000324000043ac80bf023c145a423403 +:1022600040000324000043ac80bf023c085a4234c3 +:1022700040000324000043ac80bf023c085a4234b3 +:1022800020000324000043ac80bf023c085a4234c3 +:1022900000800334000043ac9304400f00000000b2 +:1022a00000a0023ce01040ac00a0023c00a0033cb7 +:1022b000e41063246c0043ac00a0023c6c00422498 +:1022c00000a0033c7c006324040043ac00a0023c5b +:1022d0006c00428c10000324000043a000a0023ccc +:1022e0006c0042240400428c40000324000043a000 +:1022f00000a0023c6c00428c010042241000032428 +:10230000000043a000a0023c6c0042240400428c68 +:102310000100422441000324000043a000a0023c2d +:102320006c00428c0200422410000324000043a0f1 +:1023300000a0023c6c0042240400428c02004224b3 +:1023400042000324000043a000a0023c6c00428c29 +:102350000300422410000324000043a000a0023c1c +:102360006c0042240400428c0300422443000324f6 +:10237000000043a000a0023c6c00428c04004224f8 +:1023800010000324000043a000a0023c6c00422483 +:102390000400428c0400422444000324000043a0b3 +:1023a00000a0023c6c00428c050042241000032473 +:1023b000000043a000a0023c6c0042240400428cb8 +:1023c0000500422445000324000043a000a0023c75 +:1023d0006c00428c0600422410000324000043a03d +:1023e00000a0023c6c0042240400428c06004224ff +:1023f00046000324000043a000a0023c6c00428c75 +:102400000700422410000324000043a000a0023c67 +:102410006c0042240400428c07004224470003243d +:10242000000043a000a0023c6c00428c0800422443 +:1024300010000324000043a000a0023c6c004224d2 +:102440000400428c0800422448000324000043a0fa +:1024500000a0023c6c00428c0900422410000324be +:10246000000043a000a0023c6c0042240400428c07 +:102470000900422449000324000043a000a0023cbc +:102480006c0042240a000324080043ac00a0023c74 +:102490006c0042244c0003240c0043a03f06400f74 +:1024a000000000002709400b00000000f8ffbd27d6 +:1024b0000400beaf21f0a0032e09400b0000000075 +:1024c000f8ffbd270400beaf21f0a00321e8c00340 +:1024d0000400be8f0800bd270800e00300000000d4 +:1024e000f8ffbd270400beaf21f0a00321e8c00320 +:1024f0000400be8f0800bd270800e00300000000b4 +:102500000f008430300082200800e003000000004b +:1025100000000000fcffbd230000b3af0700133c28 +:10252000f02b733600000e2400000f244e09400be0 +:1025300000000000000000000d00e4110000000099 +:1025400000000000ffff84205509400b0000000040 +:1025500000000000f8ffd3110000000000000000a0 +:102560000100ce215509400b0000000000000000d2 +:102570000000b38f0400bd230800e003000000004a +:1025800000000000fcffbd230000b0affcffbd2336 +:102590000000b1affcffbd230000bfaffcffbd23b7 +:1025a0000000a4af2080a00020888000022310003b +:1025b0004009400f0000000000000000000022a2bf +:1025c000022210004009400f00000000000000003f +:1025d000010022a23a000c240000000002002ca2fc +:1025e000022110004009400f000000000000000020 +:1025f000030022a2202000024009400f000000003a +:1026000000000000040022a200000d2400000000d1 +:1026100005002da20000a48f0400bd230000bf8f81 +:102620000400bd230000b18f0400bd230000b08f63 +:102630000400bd230800e0030000000000000000cb +:102640004027009d4027009d4027009d4027009d7a +:102650004027009d4027009d4027009d4027009d6a +:102660004027009d4027009d4027009d4027009d5a +:102670004027009d4027009d4027009d4027009d4a +:102680004027009d4027009d4027009d4027009d3a +:102690004027009d4027009d4027009d4027009d2a +:1026a0004027009d4027009d4027009d4027009d1a +:1026b0004027009d4027009d4027009d4027009d0a +:1026c0004027009d4027009d4027009d4027009dfa +:1026d0004027009d4027009d4027009d4027009dea +:1026e0004027009d4027009d4027009d4027009dda +:1026f0004027009d4027009d4027009d4027009dca +:102700004027009d4027009d4027009d4027009db9 +:102710004027009d4027009d4027009d4027009da9 +:102720004027009d4027009d4027009d4027009d99 +:102730004027009d4027009d4027009d4027009d89 +:10274000b8ffbd230000bfaf0400a1af0800a2afd7 +:102750000c00a3af1000a4af1400a5af1800a6afe3 +:102760001c00a7af2000a8af2400a9af2800aaaf83 +:102770002c00abaf3000acaf3400adaf3800aeaf23 +:102780003c00afaf4000b8af4400b9af3508400fd0 +:10279000000000004400b98f4000b88f3c00af8fac +:1027a0003800ae8f3400ad8f3000ac8f2c00ab8f73 +:1027b0002800aa8f2400a98f2000a88f1c00a78fb3 +:1027c0001800a68f1400a58f1000a48f0c00a38ff3 +:1027d0000800a28f0400a18f0000bf8f4800bd2316 +:1027e000180000420000000000000000000000008f +:1027f000000084300000a5303e08400f00000000bb +:08280000ffff001000000000c2 +:020000040000fa +:020000041d00dd +:102808004c000000ffffffff0e030001ffffffff6a +:10281800ffffffff010002010010009d0000009d66 +:1028280000f0010000f0019d00100000f02fc0bf73 +:1028380010000000000000a008000000ffffffffdc +:0c2848002002009d0002009d2000000006 +:020000040000fa +:020000041d00dd +:102854000000000000000000000000000000000074 +:102864000000000000000000000000000000000064 +:102874000000000000000000000000000000000054 +:102884000000000000000000000000000000000044 +:102894000000000000000000000000000000000034 +:1028a4000000000000000000000000000000000024 +:1028b4000000000000000000000000000000000014 +:1028c4000000000000000000000000000000000004 +:1028d40000000000000000000000000000000000f4 +:1028e40000000000000000000000000000000000e4 +:1028f40000000000000000000000000000000000d4 +:1029040000000000000000000000000000000000c3 +:1029140000000000000000000000000000000000b3 +:1029240000000000000000000000000000000000a3 +:102934000000000000000000000000000000000093 +:102944000000000000000000000000000000000083 +:1029540000000000000000000000005e0000000015 +:10296400000004030403000000247e24247e2400c9 +:1029740000244aff52240000004626100864620026 +:1029840000344a4a342050000000000403000000d0 +:102994000000007e81000000000000817e00000035 +:1029a400002a1c3e1c2a00000008083e08080000fb +:1029b400000000806000000000080808080800000b +:1029c4000000000060000000004020100804020025 +:1029d400003e4149413e00000000427f40000000ab +:1029e40000006251494600000000224949360000b7 +:1029f40000000e087f080000000023454539000050 +:102a040000003e494932000000000161190700003e +:102a1400000036494936000000000609097e00001e +:102a24000000006600000000000080660000000056 +:102a340000000814224100000000141414140000c3 +:102a440000004122140800000002015109060000a0 +:102a5400001c225959520c0000007e09097e000016 +:102a640000007f494936000000003e414122000039 +:102a740000007f41413e000000007f4949410000c1 +:102a840000007f090901000000003e4151320000ae +:102a940000007f08087f00000000417f4100000023 +:102aa40000002040403f000000007f081463000045 +:102ab40000007f4040400000007f0204027f0000cd +:102ac400007f0608307f000000003e41413e0000c8 +:102ad40000007f090906000000003e41617e4000bd +:102ae40000007f09097600000000264949320000f1 +:102af4000001017f0101000000003f40403f000051 +:102b0400001f2040201f0000003f4030403f0000d5 +:102b1400000077080877000000030478040300002d +:102b2400000071494947000000007f414100000056 +:102b3400000204081020400000000041417f000012 +:102b440000040201020400000040404040404000f4 +:102b54000000010204000000000030482878000052 +:102b640000007f4848300000000030484800000062 +:102b740000003048487f0000000030585810000022 +:102b840000007e09010200000000509898700000c7 +:102b940000007f08087000000000007a00000000b8 +:102ba40000004080807a000000007f102848000068 +:102bb4000000007f0000000000780810087000008a +:102bc4000000780808700000000030484830000019 +:102bd4000000f828281000000000102828f8000041 +:102be400000070080810000000004854542400003d +:102bf4000000083c48200000000038402078000015 +:102c04000000384038000000003840204038000000 +:102c14000000483030480000000018a0a0780000f0 +:102c240000006454544c00000000081c22410000c1 +:102c34000000007e00000000000041221c0800008b +:102c440000000402040200000078444244780000ba +:102c540047414d45204f5645522053434f52453a24 +:042c6400200000004c +:020000040000fa +:020000041d00dd +:102c68000000200201000003000000000000000036 +:082c7800010000000000000053 +:020000040000fa +:020000041d00dd +:102c8000e803000038000000270000001c000000de +:102c90005f0000002e0000006b0000000d0000002f +:102ca00045000000410000000b0000001c00000077 +:102cb000520000000a0000001d0000001400000087 +:102cc000090000000f0000000300000015000000d4 +:102cd0001b0000000b0000001100000008000000b5 +:042ce0000c000000e4 :00000001FF diff --git a/snake.c.o b/snake.c.o deleted file mode 100644 index 958f515..0000000 Binary files a/snake.c.o and /dev/null differ diff --git a/snake.h b/snake.h index 354befa..cb74341 100644 --- a/snake.h +++ b/snake.h @@ -21,8 +21,26 @@ void enable_interrupt(void); uint8_t display[32][128]; //Human readable pixel position and activation uint8_t oled_display[512]; //Computer readable pixel position and activation +uint8_t snakeX[100]; +uint8_t snakeY[100]; + +int main(void); void display_start(); void clear_display(); void translateToImage(); -void create_object(int xPos, int yPos, int width, int height); -void snake(); +void game(); +void create_snake(); +void wall_collision(); +int score; + +typedef struct Snake //Object snake +{ + uint8_t *y; + uint8_t *x; + int length; + char dir; + char next_dir; + uint8_t crash; +} Snake; + +Snake snake; diff --git a/vectors.S.o b/vectors.S.o deleted file mode 100644 index ac5482c..0000000 Binary files a/vectors.S.o and /dev/null differ