| 54 | }; |
| 55 | |
| 56 | static u32 LoadMemoryFromFile(char *FileName, segmented_access SegMem, u32 AtOffset) |
| 57 | { |
| 58 | u32 Result = 0; |
| 59 | |
| 60 | // NOTE(casey): Because we are simulating a machine, we only attempt to load as |
| 61 | // much of a file as will fit into that machine's memory. |
| 62 | // Any additional bytes are discarded. |
| 63 | u32 BaseAddress = GetAbsoluteAddressOf(SegMem, AtOffset); |
| 64 | u32 HighAddress = GetHighestAddress(SegMem); |
| 65 | u32 MaxBytes = (HighAddress - BaseAddress) + 1; |
| 66 | |
| 67 | FILE *File = fopen(FileName, "rb"); |
| 68 | if(File) |
| 69 | { |
| 70 | Result = fread(SegMem.Memory + BaseAddress, 1, MaxBytes, File); |
| 71 | fclose(File); |
| 72 | } |
| 73 | else |
| 74 | { |
| 75 | fprintf(stderr, "ERROR: Unable to open %s.\n", FileName); |
| 76 | } |
| 77 | |
| 78 | return Result; |
| 79 | } |
| 80 | |
| 81 | static segmented_access AllocateMemoryPow2(u32 SizePow2) |
| 82 | { |
no test coverage detected