GBA game header parser
This commit is contained in:
parent
905405164c
commit
c788139f72
1 changed files with 58 additions and 0 deletions
58
gba_header.c
Normal file
58
gba_header.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define HEADER_SIZE 192 // GBA header is 192 bytes
|
||||
|
||||
// Structure to hold GBA ROM header data
|
||||
typedef struct {
|
||||
uint32_t entry_point; // 0x08000000 - Entry Point
|
||||
uint8_t nintendo_logo[156]; // 0x08000004 - Nintendo Logo
|
||||
char game_title[12]; // 0x080000A0 - Game Title
|
||||
char game_code[4]; // 0x080000AC - Game Code (e.g., "AGB-XXXX")
|
||||
char maker_code[2]; // 0x080000B0 - Maker Code
|
||||
uint8_t fixed_value; // 0x080000B2 - Always 0x96
|
||||
uint8_t main_unit_code; // 0x080000B3 - Usually 0x00
|
||||
uint8_t device_type; // 0x080000B4 - Usually 0x00
|
||||
uint8_t reserved1[7]; // 0x080000B5 - Reserved
|
||||
uint8_t software_version; // 0x080000BC - Software Version
|
||||
uint8_t complement_check; // 0x080000BD - Header Checksum
|
||||
uint8_t reserved2[2]; // 0x080000BE - Reserved
|
||||
} GBAHeader;
|
||||
|
||||
// Function to read and display the ROM header
|
||||
void read_gba_header(const char *filename) {
|
||||
FILE *file = fopen(filename, "rb");
|
||||
if (!file) {
|
||||
perror("Error opening file");
|
||||
return;
|
||||
}
|
||||
|
||||
GBAHeader header;
|
||||
|
||||
// Read 192-byte header
|
||||
if (fread(&header, 1, HEADER_SIZE, file) != HEADER_SIZE) {
|
||||
perror("Error reading header");
|
||||
fclose(file);
|
||||
return;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
|
||||
// Display ROM header information
|
||||
printf("Game Title: %.12s\n", header.game_title);
|
||||
printf("Game Code: %.4s\n", header.game_code);
|
||||
printf("Maker Code: %.2s\n", header.maker_code);
|
||||
printf("Software Version: %d\n", header.software_version);
|
||||
printf("Complement Checksum: 0x%02X\n", header.complement_check);
|
||||
printf("Entry Point: 0x%08X\n", header.entry_point);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <gba_rom_file>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
read_gba_header(argv[1]);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue