#include <stdio.h>
#include <string.h>
int count_len(char c_len[2]);
unsigned int count_add(char c_add[4]);
void read_data(char c_line[50], int len);
char c_d8[8];
int main()
{
FILE *fp;
FILE *fp2;
char c_len[2];
char c_add[4];
char c_type[2];
char c_data[2];
char c_line[50];
int i,j;
int len;
int type;
unsigned int add;
long offset;
offset = 0;
add = 0;
fp = fopen("01.hex","r");
fp2 = fopen("mem.txt","w+");
for(i=0; i< 65536; i++)
fprintf(fp2,"00000000\n");
while(!feof(fp))
{
fscanf(fp,"%s",&c_line);
c_len[0] = c_line[1];
c_len[1] = c_line[2];
c_add[0] = c_line[3];
c_add[1] = c_line[4];
c_add[2] = c_line[5];
c_add[3] = c_line[6];
c_type[0] = c_line[7];
c_type[1] = c_line[8];
len = count_len(c_len);
add = count_add(c_add);
printf("%-2d ",len);
printf("%-2d ",add);
printf("0%c ",c_type[1]);
j = 0;
if (c_type[1] == '0')
{
for (i=0; i<len*2; i=i+2)
{
read_data(c_line,i);
offset = (add+j)*10;
fseek(fp2,offset,0);
fprintf(fp2,"%s", c_d8);
printf("%s ",c_d8);
j++;
}
}
printf("\n");
}
fclose(fp);
return 0;
}
int count_len(char c_len[2])
{
int len;
len = 0;
switch(c_len[1])
{
case 'F' : len = 15; break;
case 'E' : len = 14; break;
case 'D' : len = 13; break;
case 'C' : len = 12; break;
case 'B' : len = 11; break;
case 'A' : len = 10; break;
case '9' : len = 9; break;
case '8' : len = 8; break;
case '7' : len = 7; break;
case '6' : len = 6; break;
case '5' : len = 5; break;
case '4' : len = 4; break;
case '3' : len = 3; break;
case '2' : len = 2; break;
case '1' : len = 1; break;
case '0' : len = 0; break;
default : break;
}
switch(c_len[0])
{
case 'F' : len += 16*15; break;
case 'E' : len += 16*14; break;
case 'D' : len += 16*13; break;
case 'C' : len += 16*12; break;
case 'B' : len += 16*11; break;
case 'A' : len += 16*10; break;
case '9' : len += 16*9; break;
case '8' : len += 16*8; break;
case '7' : len += 16*7; break;
case '6' : len += 16*6; break;
case '5' : len += 16*5; break;
case '4' : len += 16*4; break;
case '3' : len += 16*3; break;
case '2' : len += 16*2; break;
case '1' : len += 16*1; break;
case '0' : len += 16*0; break;
default : break;
}
return len;
}
unsigned int count_add(char c_add[4])
{
unsigned int add;
add = 0;
switch(c_add[3])
{
case 'F' : add = 15; break;
case 'E' : add = 14; break;
case 'D' : add = 13; break;
case 'C' : add = 12; break;
case 'B' : add = 11; break;
case 'A' : add = 10; break;
case '9' : add = 9; break;
case '8' : add = 8; break;
case '7' : add = 7; break;
case '6' : add = 6; break;
case '5' : add = 5; break;
case '4' : add = 4; break;
case '3' : add = 3; break;
case '2' : add = 2; break;
case '1' : add = 1; break;
case '0' : add = 0; break;
default : break;
}
switch(c_add[2])
{
case 'F' : add += 16*15; break;
case 'E' : add += 16*14; break;
case 'D' : add += 16*13; break;
case 'C' : add += 16*12; break;
case 'B' : add += 16*11; break;
case 'A' : add += 16*10; break;
case '9' : add += 16*9; break;
case '8' : add += 16*8; break;
case '7' : add += 16*7; break;
case '6' : add += 16*6; break;
case '5' : add += 16*5; break;
case '4' : add += 16*4; break;
case '3' : add += 16*3; break;
case '2' : add += 16*2; break;
case '1' : add += 16*1; break;
case '0' : add += 16*0; break;
default : break;
}
switch(c_add[1])
{
case 'F' : add += 256*15; break;
case 'E' : add += 256*14; break;
case 'D' : add += 256*13; break;
case 'C' : add += 256*12; break;
case 'B' : add += 256*11; break;
case 'A' : add += 256*10; break;
case '9' : add += 256*9; break;
case '8' : add += 256*8; break;
case '7' : add += 256*7; break;
case '6' : add += 256*6; break;
case '5' : add += 256*5; break;
case '4' : add += 256*4; break;
case '3' : add += 256*3; break;
case '2' : add += 256*2; break;
case '1' : add += 256*1; break;
case '0' : add += 256*0; break;
default : break;
}
switch(c_add[0])
{
case 'F' : add += 4096*15; break;
case 'E' : add += 4096*14; break;
case 'D' : add += 4096*13; break;
case 'C' : add += 4096*12; break;
case 'B' : add += 4096*11; break;
case 'A' : add += 4096*10; break;
case '9' : add += 4096*9; break;
case '8' : add += 4096*8; break;
case '7' : add += 4096*7; break;
case '6' : add += 4096*6; break;
case '5' : add += 4096*5; break;
case '4' : add += 4096*4; break;
case '3' : add += 4096*3; break;
case '2' : add += 4096*2; break;
case '1' : add += 4096*1; break;
case '0' : add += 4096*0; break;
default : break;
}
return add;
}
void read_data(char c_line[50], int i)
{
char c_data[2];
c_data[0] = c_line[9+i];
c_data[1] = c_line[9+i+1];
switch(c_data[0])
{
case 'F' : c_d8[0]='1'; c_d8[1]='1'; c_d8[2]='1'; c_d8[3]='1'; break;
case 'E' : c_d8[0]='1'; c_d8[1]='1'; c_d8[2]='1'; c_d8[3]='0'; break;
case 'D' : c_d8[0]='1'; c_d8[1]='1'; c_d8[2]='0'; c_d8[3]='1'; break;
case 'C' : c_d8[0]='1'; c_d8[1]='1'; c_d8[2]='0'; c_d8[3]='0'; break;
case 'B' : c_d8[0]='1'; c_d8[1]='0'; c_d8[2]='1'; c_d8[3]='1'; break;
case 'A' : c_d8[0]='1'; c_d8[1]='0'; c_d8[2]='1'; c_d8[3]='0'; break;
case '9' : c_d8[0]='1'; c_d8[1]='0'; c_d8[2]='0'; c_d8[3]='1'; break;
case '8' : c_d8[0]='1'; c_d8[1]='0'; c_d8[2]='0'; c_d8[3]='0'; break;
case '7' : c_d8[0]='0'; c_d8[1]='1'; c_d8[2]='1'; c_d8[3]='1'; break;
case '6' : c_d8[0]='0'; c_d8[1]='1'; c_d8[2]='1'; c_d8[3]='0'; break;
case '5' : c_d8[0]='0'; c_d8[1]='1'; c_d8[2]='0'; c_d8[3]='1'; break;
case '4' : c_d8[0]='0'; c_d8[1]='1'; c_d8[2]='0'; c_d8[3]='0'; break;
case '3' : c_d8[0]='0'; c_d8[1]='0'; c_d8[2]='1'; c_d8[3]='1'; break;
case '2' : c_d8[0]='0'; c_d8[1]='0'; c_d8[2]='1'; c_d8[3]='0'; break;
case '1' : c_d8[0]='0'; c_d8[1]='0'; c_d8[2]='0'; c_d8[3]='1'; break;
case '0' : c_d8[0]='0'; c_d8[1]='0'; c_d8[2]='0'; c_d8[3]='0'; break;
default : break;
}
switch(c_data[1])
{
case 'F' : c_d8[4]='1'; c_d8[5]='1'; c_d8[6]='1'; c_d8[7]='1'; break;
case 'E' : c_d8[4]='1'; c_d8[5]='1'; c_d8[6]='1'; c_d8[7]='0'; break;
case 'D' : c_d8[4]='1'; c_d8[5]='1'; c_d8[6]='0'; c_d8[7]='1'; break;
case 'C' : c_d8[4]='1'; c_d8[5]='1'; c_d8[6]='0'; c_d8[7]='0'; break;
case 'B' : c_d8[4]='1'; c_d8[5]='0'; c_d8[6]='1'; c_d8[7]='1'; break;
case 'A' : c_d8[4]='1'; c_d8[5]='0'; c_d8[6]='1'; c_d8[7]='0'; break;
case '9' : c_d8[4]='1'; c_d8[5]='0'; c_d8[6]='0'; c_d8[7]='1'; break;
case '8' : c_d8[4]='1'; c_d8[5]='0'; c_d8[6]='0'; c_d8[7]='0'; break;
case '7' : c_d8[4]='0'; c_d8[5]='1'; c_d8[6]='1'; c_d8[7]='1'; break;
case '6' : c_d8[4]='0'; c_d8[5]='1'; c_d8[6]='1'; c_d8[7]='0'; break;
case '5' : c_d8[4]='0'; c_d8[5]='1'; c_d8[6]='0'; c_d8[7]='1'; break;
ca