smc.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // insert cool lengthy disclaimer here
  2. /*
  3. * smc.h: data structures for SNES ROM images
  4. */
  5. #ifndef SMC_H
  6. #define SMC_H
  7. typedef struct _snes_header {
  8. uint8_t maker[2]; // 0xB0
  9. uint8_t gamecode[4]; // 0xB2
  10. uint8_t fixed_00[7]; // 0xB6
  11. uint8_t expramsize; // 0xBD
  12. uint8_t specver; // 0xBE
  13. uint8_t carttype2; // 0xBF
  14. uint8_t name[21]; // 0xC0
  15. uint8_t map; // 0xD5
  16. uint8_t carttype; // 0xD6
  17. uint8_t romsize; // 0xD7
  18. uint8_t ramsize; // 0xD8
  19. uint8_t destcode; // 0xD9
  20. uint8_t fixed_33; // 0xDA
  21. uint8_t ver; // 0xDB
  22. uint16_t cchk; // 0xDC
  23. uint16_t chk; // 0xDE
  24. } snes_header_t;
  25. typedef struct _snes_romprops {
  26. uint16_t offset; // start of actual ROM image
  27. uint8_t mapper_id; // FPGA mapper
  28. uint8_t pad1; // for alignment
  29. uint32_t expramsize_bytes; // ExpRAM size in bytes
  30. uint32_t ramsize_bytes; // CartRAM size in bytes
  31. uint32_t romsize_bytes; // ROM size in bytes (rounded up)
  32. snes_header_t header; // original header from ROM image
  33. } snes_romprops_t;
  34. void smc_id(snes_romprops_t*);
  35. uint8_t smc_headerscore(snes_header_t*);
  36. #endif