30a31,32
> #include <cctype>
> #include <cstdio>
34,39d35
< #include <sys/types.h>
< #include <sys/mman.h>
< #include <fcntl.h>
< #include <stdio.h>
< #include <unistd.h>
<
43,44d38
<
<
48,52c42,47
< /* Load a Hex File into memory.
< Currently only used with MIPS BARE_IRON mode.
< A hex file consists of [Address Data] tuples that get directly loaded into
< physical memory. The address specified is a word address (i.e., to get the byte address, shift left by 2)
< The data is a full 32-bit hex value.
---
> /*
> * Load a Hex File into memory. Currently only used with MIPS
> * BARE_IRON mode. A hex file consists of [Address Data] tuples that
> * get directly loaded into physical memory. The address specified is
> * a word address (i.e., to get the byte address, shift left by 2) The
> * data is a full 32-bit hex value.
57,62c52,54
< fp = fopen(filename.c_str(),"r");
< if(fp == NULL)
< {
< panic("Unable to open %s\n",filename.c_str());
< }
<
---
> fp = fopen(filename.c_str(), "r");
> if (fp == NULL)
> panic("Unable to open %s\n", filename.c_str());
69d60
<
71c62
< HexFile::loadSections(Port *memPort, Addr addrMask)
---
> HexFile::loadSections(Port *memPort)
73,85c64,72
< char Line[64];
< Addr MemAddr;
< uint32_t Data;
< while(!feof(fp))
< {
< fgets(Line,64,fp);
< parseLine(Line,&MemAddr,&Data);
< // printf("Hex:%u\n",Data);
<
< if(MemAddr != 0)
< {
< // Now, write to memory
< memPort->writeBlob(MemAddr<<2,(uint8_t *)&Data,sizeof(Data));
---
> char Line[64];
> Addr MemAddr;
> uint32_t Data;
> while (!feof(fp)) {
> fgets(Line, 64, fp);
> parseLine(Line, &MemAddr, &Data);
> if (MemAddr != 0) {
> // Now, write to memory
> memPort->writeBlob(MemAddr << 2, (uint8_t *)&Data, sizeof(Data));
90c77,79
< void HexFile::parseLine(char *Str,Addr *A, uint32_t *D)
---
>
> void
> HexFile::parseLine(char *Str, Addr *A, uint32_t *D)
92,100c81,86
< int i=0;
< bool Flag = false;
< *A = 0;
< *D = 0;
< int Digit = 0;
< unsigned Number = 0;
< /* Skip white spaces */
< while(Str[i] != '\0' && Str[i]==' ')
< i++;
---
> int i = 0;
> bool Flag = false;
> *A = 0;
> *D = 0;
> int Digit = 0;
> unsigned Number = 0;
102,114c88,98
< /* Ok, we're at some character...process things */
< while(Str[i] != '\0')
< {
< if(Str[i]>='0' && Str[i]<='9')
< {
< Digit=Str[i]-'0';
< }
< else if(Str[i]>='a' && Str[i]<='f')
< {
< Digit=Str[i]-'a'+10;
< }
< else if(Str[i]>='A' && Str[i]<='F')
< {
---
> /* Skip white spaces */
> while (Str[i] != '\0' && Str[i]==' ')
> i++;
>
> /* Ok, we're at some character...process things */
> while (Str[i] != '\0') {
> if (Str[i] >= '0' && Str[i] <= '9') {
> Digit = Str[i] - '0';
> } else if (Str[i] >= 'a' && Str[i] <= 'f') {
> Digit = Str[i] - 'a' + 10;
> } else if (Str[i] >= 'A' && Str[i] <= 'F') {
116,125c100,109
< }
< else if(Str[i] == ' ' || Str[i]=='\n')
< {
< if(Number == 0)
< return;
< if(Flag == false)
< {
< *A = Number;
< Number = 0;
< Flag = true;
---
> } else if (Str[i] == ' ' || Str[i] == '\n') {
> if (Number == 0)
> return;
> if (Flag == false) {
> *A = Number;
> Number = 0;
> Flag = true;
> } else {
> *D = Number;
> return;
127,131c111,116
< else
< {
< *D = Number;
< return;
< }
---
> } else {
> // Ok, we've encountered a non-hex character, cannot be a
> // valid line, skip and return 0's
> *A = 0;
> *D = 0;
> return;
133,142d117
< else
< {
< // Ok, we've encountered a non-hex character, cannot be a valid line, skip and return 0's
< *A = 0;
< *D = 0;
< return;
< }
< Number<<=4;
< Number+=Digit;
< i++;
143a119,121
> Number <<= 4;
> Number += Digit;
> i++;
145,151d122
< if(Flag != true)
< {
< *A = 0;
< *D = 0;
< }
< else
< *D = Number;
152a124,129
> if (Flag != true) {
> *A = 0;
> *D = 0;
> } else {
> *D = Number;
> }
155,156d131
<
<
160c135
< fclose(fp);
---
> fclose(fp);