#include <io.h>
#include <system.h>
#include <stdio.h>
#include <math.h>

#define IOWR_VGA_DATA(base, offset, data) \
        IOWR_32DIRECT(base, (offset) * 32, data) 
int main()
{
    
   int score_ones = 0;
   int score_tens = 3;
   int score_hundy = 5;
   int temp = 0;
   int sOtemp = 0;
   int sTtemp = 0;
   int sHtemp = 0;
   int sdelay = 0;
   
   int flagon = 2;
   int flagdataout = 0;
   int flag_row = 7;
   int flag_col = 7;
   
   int fuel_amount = 100;
   int fuel_sendout = 0;
   int flag_address = 0;
   int pstatus = 0;
   int pstatus_data = 0;
   printf("Hello Michael\n");
  
  
    
  int x = 0, y =0;
  int vx = 0, vy= 0;
  int delay=0;
  int w;
  unsigned char code;
  unsigned char previous;
  int change=0;
  int wallhit =0;
  int convert_to_tile_r;
  int convert_to_tile_c;
  int player_x;
  int player_y;
  int rem_up =1;
  int rem_down =1;
  int rem_right =1;
  int rem_left =1;
  // brick : 1111 (0xf)
  // road  : 0000 (0x0)
  //                              0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44
  //                              |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |  
  int control_array[45][47] = {0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 0
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 1
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 2
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 3
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 4
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 5
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 6
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 7
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 8
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 9
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 10
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 11
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 12
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 13
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 14
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 15
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 16
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 17
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 18
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 19
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 20
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 21
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 22
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 23
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 24 
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 25
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 26
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 27
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 28
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 29
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 30
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 31
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 32
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 33
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 34
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 35
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 36
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 37
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 38
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 39
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 40
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 41
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 42
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf,
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, // 43
                               0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf}; // 44
      code = IORD_8DIRECT(PS2_KEYBOARD_BASE,4);   
      previous = code;
   
   int i = 0;
   int flagx = 7;  
   
   for (i = 0; i < 10; i++)
   {
       
       flagdataout = (i << 25) + (1 << 24) + (7 << 12) + flagx;
       //flag # (0-9)
       //flag ON or OFF
       //Flag Row #
       //Flag Column #
       
       int flagtestdelay = 0;
       
       while (flagtestdelay < 100000){
            flagtestdelay++;
       }      
       IOWR_32DIRECT(LEDS_BASE, 16, flagdataout);
       flagx++;
       flagtestdelay = 0;


            
   }
   //all flags written to address 4
   //enemy 0 address = 5
   //enemy 1 address = 6
   //enemy 2 address = 7
   //all smoke written to address 8
   
   //enemy car on: bit 27
        //-this is always on, need it to prevent hardware from writing before software loads
   //direction: bits 24-26 --> dir << 24)
   //enemy y = bits 12-23 --> (y << 12)
   //enemy x = bits 0-11 --> x
   
   int enemy0 = (1 << 27) + (8 << 12) + 9;
   IOWR_32DIRECT(LEDS_BASE, 20, enemy0);
   
   int enemy1 = (1 << 27) + (8 << 12) + 11;
   IOWR_32DIRECT(LEDS_BASE, 24, enemy1);
  
   int enemy2 = (1 << 27) + (8 << 12) + 13;
   IOWR_32DIRECT(LEDS_BASE, 28, enemy2);
  
   int ww = 0;
   int smokex = 7;  
   int smokedataout = 0;
   int j = 0;
   for (j = 0; j < 3; j++)
   {
       
       smokedataout = (j+1 << 25) + (1 << 24) + (10 << 12) + smokex;
       
       int smoketestdelay = 0;
       
       while (smoketestdelay < 100000){
            smoketestdelay++;
       }      
       IOWR_32DIRECT(LEDS_BASE, 32, smokedataout);
       printf("%d\n", smokedataout);
       smokex = smokex + 2;
       smoketestdelay = 0;
            
   }
       
   for (;;)
    {
  
 
      // LEFT  ARROW: 224 107 224 240 107
      // RIGHT ARROW: 224 116 224 240 116
      // UP    ARROW: 224 117 224 240 117
      // DOWN  ARROW: 224 114 224 240 114
           
         code = IORD_8DIRECT(PS2_KEYBOARD_BASE,4);
         
         if(code != previous){
            wallhit=0;
            previous = code;
         }
            
         while(!IORD_8DIRECT(PS2_KEYBOARD_BASE, 0))
         {
            
            if (sdelay == 100000){
                
                //TEST FOR SCORE
                if (score_ones < 9)
                    score_ones++;
                else
                    score_ones = 0;
                   
                if (score_tens < 9)
                    score_tens++;
                else
                    score_tens = 0;
                  
                if (score_hundy < 9)
                    score_hundy++;
                else
                    score_hundy = 0;
//                
                
                //TEST FOR FUEL GAUGE
                
                if (fuel_amount > 0)
                    fuel_amount--;
                else
                    fuel_amount = 100;
                    
                //TEST FOR FLAGS AND SMOKE
                if (flagon == 2)
                    flagon = 1;
                else
                    flagon = 2;
                      
                
  

                sOtemp = (score_hundy << 8) + (score_tens << 4) + score_ones;
                //flagdataout = (flagon << 20) + (7 << 10) + 7;
                //printf("%x\n", flagdataout);
                IOWR_32DIRECT(LEDS_BASE, 8, fuel_amount); //fuel
                IOWR_32DIRECT(LEDS_BASE, 12, sOtemp); // player coordinates
                
                
                
                
                sdelay = 0;
            }
            else
                sdelay++;
              
            if (delay == 2000){
                player_x = x + 240; // /32 = 7.5 -> round to eight
                player_y = y + 240;
                
                convert_to_tile_c = (player_x)/32;
                convert_to_tile_r = (player_y)/32;
                
                rem_up = (player_y - 12)%32;
                rem_down = 32 - (player_y + 12)%32;
                rem_right = 32 - (player_x + 12)%32;
                rem_left = (player_x - 12)%32;
                
                if(rem_right ==32)
                    rem_right=0;
                
                if(rem_down==32)
                    rem_down =0;
                    
                //printf("%d %d   , %d %d  , up:%d  down:%d  right:%d  left:%d,  wallhit: %d\n",convert_to_tile_c, convert_to_tile_r,player_x,player_y, rem_up, rem_down,rem_right, rem_left, wallhit);
                
                ////////////////////////////////////// left
                if (vx == - 1) 
                {
                    if(rem_up <=8 && rem_down <=8){
                        if ( x > 0 && (rem_left > 0 || control_array[convert_to_tile_r][convert_to_tile_c-1] != 0xf))
                            x += vx;
                        else{
                            vx = 0;
                            vy = 1;
                            wallhit =1;
                      }
                    }
                    
                    else{
                        if(rem_down > rem_up){
                            if ( x > 0 && (rem_left > 0 || (control_array[convert_to_tile_r][convert_to_tile_c-1] != 0xf  && control_array[convert_to_tile_r+1][convert_to_tile_c-1] != 0xf)))
                                x += vx;
                            else{
                                vx = 0;
                                vy = 1;
                                wallhit =1;
                            }
                        }
                        else{
                            if ( x > 0 && (rem_left > 0 || (control_array[convert_to_tile_r][convert_to_tile_c-1] != 0xf  && control_array[convert_to_tile_r-1][convert_to_tile_c-1] != 0xf)))
                                x += vx;
                            else{
                                vx = 0;
                                vy = 1;
                                wallhit =1;
                           }
                        }
                
                    }
                    
                    
                }
                
                ///////////////////////////////// right
                if (vx == 1){  
                    if(rem_up <=8 && rem_down <=8){
                        if (rem_right > 0 || control_array[convert_to_tile_r][convert_to_tile_c+1] != 0xf)
                            x += vx;
                        else{
                            vx = 0;
                            vy = -1;
                            wallhit =1;
                       }
                    }
                    else{
                        if(rem_down > rem_up){
                            if ( rem_right > 0 || (control_array[convert_to_tile_r][convert_to_tile_c+1] != 0xf  && control_array[convert_to_tile_r+1][convert_to_tile_c+1] != 0xf))
                                x += vx;
                            else{
                                vx = 0;
                                vy =-1;
                                wallhit =1;
                            }    
                        }
                        else{
                            if ( rem_right > 0 || (control_array[convert_to_tile_r][convert_to_tile_c+1] != 0xf  && control_array[convert_to_tile_r-1][convert_to_tile_c+1] != 0xf))
                                x += vx;
                            else{
                                vx = 0;
                                vy =-1;
                                wallhit =1;
                            }
                        }
                
                    }
                    
                }
                
                /////////////////////////////////////////////UP
                if (vy == -1) 
                {
                    if(rem_right <=8 && rem_left <=8 ){
                        if ( y > 0 &&(rem_up > 0 || control_array[convert_to_tile_r-1][convert_to_tile_c] != 0xf))
                            y += vy;
                        else{
                            vy = 0;
                            vx = -1;
                            wallhit =1;
                        }    
                    }
                    else{
                        if(rem_right > rem_left){
                            if ( y > 0 && (rem_up > 0 || (control_array[convert_to_tile_r-1][convert_to_tile_c] != 0xf  && control_array[convert_to_tile_r-1][convert_to_tile_c+1] != 0xf)))
                                y += vy;
                            else{
                                vy = 0;
                                vx = -1;
                                wallhit =1;
                            }
                        }
                        else{
                            if ( y > 0 && (rem_up > 0 || (control_array[convert_to_tile_r-1][convert_to_tile_c] != 0xf  && control_array[convert_to_tile_r-1][convert_to_tile_c-1] != 0xf)))
                                y += vy;
                            else{
                                vy = 0;
                                vx = -1;
                                wallhit =1;
                            }
                        }
                            
                    }
                }
                
                /////////////////////////////////////////////DOWN
                if (vy == 1){ 
                    if(rem_right <=8 && rem_left<=8){
                        if ( rem_down > 0 || control_array[convert_to_tile_r+1][convert_to_tile_c] != 0xf)
                            y += vy;
                        else{
                                vy = 0;
                                vx = 1;
                                wallhit =1;
                            }
                   }
                   else{
                        if(rem_right > rem_left){
                            if ( rem_down > 0 || (control_array[convert_to_tile_r+1][convert_to_tile_c] != 0xf  && control_array[convert_to_tile_r+1][convert_to_tile_c+1] != 0xf))
                                y += vy;
                            else{
                                vy = 0;
                                vx = 1;
                                wallhit =1;
                            }
                        }
                        else{
                            if ( rem_down > 0 || (control_array[convert_to_tile_r+1][convert_to_tile_c] != 0xf  && control_array[convert_to_tile_r+1][convert_to_tile_c-1] != 0xf))
                                y += vy;
                            else{
                                vy = 0;
                                vx = 1;
                                wallhit =1;
                            }
                        }
                            
                    }               
                }
                //w = y*pow(2,16)+x;
                //first 5 bits for address
                //next 12 bits for x
                //next 12 bits for y
                //bits 24-26 for player stats
                if (vx == 1)
                    pstatus = 0; 
                else if (vx == -1)
                    pstatus = 1;
                else if (vy == 1)
                    pstatus = 2;
                else if (vy == - 1)
                    pstatus = 3;
                else
                    pstatus = 4; 
                w = (y << 16) + x;
                //printf("%x\n", w); 
                IOWR_32DIRECT(LEDS_BASE, 0, w); // player
                IOWR_32DIRECT(LEDS_BASE, 4, pstatus); // player sprite (turning or dead)
                //IOWR_32DIRECT(LEDS_BASE, 0, pstatus_data);
                delay = 0;
               
               //printf("code : %c, changed? : %d, \n", code, change);
               
            }
            else
                delay++;  
        
        
        } // while
        
        
        
        if(wallhit ==0){
            switch (code)
            {
            case 107: // LEFT
                    //if( rem_left !=0 ){
                    vx = -1;
                    vy = 0;
                    //}
                    break;
                
            case 116: // RIGHT
                    vx = 1;
                    vy = 0;
                    break;
                
            case 117: // UP
      
   
                    vy = -1;
                    vx =  0;
                    break;
            
                
            case 114:
            
                    vy = 1;
                    vx = 0;
                    break;
            
            case 0x29: //space bar = emergency break for now REMOVE LATER
            
                vx=0;
                vy=0;
                break;
            
            default :   
                    break;
        }
        
        } // if not wallhit      
        
        
    
  }

  
    
  return 0;
}