2015-01-07 2 views
0

Я пытаюсь использовать fseek и fread для копирования байтов 0x0100-0x3FFF двоичного файла (Boy Boy ROM) в байты 0x0100-0x3FFF моего эмулируемого addressSpace; однако я не знаю, как использовать fread, чтобы начать писать на определенный байт в addressSpace. Это затронутый код; он начинает читать на 0x0100 ПЗУ, как и ожидалось, но он пишет в 0x0000-0x3EFF адресного пространства, и мой вопрос в том, как я могу получить fread, чтобы начать писать с 0x0100 вместо этого?Как установить начальную точку для fread?

#include <stdio.h> 
#include <stdint.h> 

uint8_t addressSpace[0x10000]; 

int main() 
{ 
    FILE* gameROM = fopen("rom.gb", "rb"); 
    if (gameROM == NULL || sizeof(addressSpace[0]) != 1) 
    { 
     printf("Error"); 
     getchar(); 
     fclose(gameROM); 
     return 1; 
    } 
    fseek(gameROM, 0x100, SEEK_SET); 
    fread(addressSpace, sizeof(addressSpace[0]), 0x3EFF, gameROM); 
    printf("\n%X\n", addressSpace[0x100]); 
    getchar(); 
    return 0; 
} 

ответ

3
//      v-- here 
fread(addressSpace + 0x100, sizeof(addressSpace[0]), 0x3EFF, gameROM); 
+0

Спасибо большое, оба ответа были размещены именно то, что мне было нужно. – Xerxes

2
fread(addressSpace+loc, sizeof(addressSpace[0]), 0x3EFF, gameROM); 

loc откуда вы хотите написать addressspace

loc = 0x0100 
Смежные вопросы