I am writing an emulator that uses read() to load the contents of a file into an array:
Whenever I run it, however, read() returns -1! What am I doing wrong?
int load_roms(unsigned char userom)
FILE *romfile; /* Create pointer to ROM file */
romfile=fopen(userom,"r"); /* Load apple.rom read-only */
if (!romfile) /* Check for problems opening the file */
printf("Cannot read %s \n", userom);
int errcheck = read(romfile, &memory[0xF000], 1024);
if(errcheck = -1)
printf("ROM-File read error \n");
else printf("Bytes Read: %i \n", errcheck);
fclose(romfile); /*Close romfile */
Should it be fread when the file is opened with fopen and read when the file is opened with open?
You might want "rb", since this is binary data
> int errcheck = read(romfile, &memory[0xF000], 1024);
Normal C doesn't allow declarations in the middle of statements.
You're either using an extension to your compiler, a C99 compiler (still pretty rare) or a C++ compiler.
> if(errcheck = -1)
A classic trap - this is an assignment, not a comparison.
If gcc is your compiler, then the -Wall option would have detected this.
Other compilers with sensitive warning options also detect this.