/******************************************************************************* * NewOswan * rom.h: * Based on the original Oswan-unix * Copyright (c) 2014-2021 986-Studio. All rights reserved. * ******************************************************************************/ ////////////////////////////////////////////////////////////////////////////// // // // // // // ////////////////////////////////////////////////////////////////////////////// #ifndef __ROM_H__ #define __ROM_H__ #include #define WS_ROM_SIZE_2MBIT 1 #define WS_ROM_SIZE_4MBIT 2 #define WS_ROM_SIZE_8MBIT 3 #define WS_ROM_SIZE_16MBIT 4 #define WS_ROM_SIZE_24MBIT 5 #define WS_ROM_SIZE_32MBIT 6 #define WS_ROM_SIZE_48MBIT 7 #define WS_ROM_SIZE_64MBIT 8 #define WS_ROM_SIZE_128MBIT 9 #define WS_EEPROM_SIZE_NONE 0 #define WS_EEPROM_SIZE_1k 0x10 #define WS_EEPROM_SIZE_16k 0x20 #define WS_EEPROM_SIZE_8k 0x50 #define WS_SRAM_SIZE_NONE 0 #define WS_SRAM_SIZE_64k 0x01 #define WS_SRAM_SIZE_256k 0x02 #define WS_SRAM_SIZE_1M 0x03 #define WS_SRAM_SIZE_2M 0x04 #define WS_SRAM_SIZE_4M 0x05 #pragma pack(1) typedef struct ws_romHeaderStruct { uint8_t developperId; uint8_t minimumSupportSystem; uint8_t cartId; uint8_t gameVertion; uint8_t romSize; uint8_t saveSize; uint8_t cartFlags; uint8_t realtimeClock; uint16_t checksum; } ws_romHeaderStruct; #pragma pack() uint8_t *ws_rom_load(char *path, uint32_t *romSize); void ws_rom_dumpInfo(uint8_t *wsrom, uint32_t wsromSize); ws_romHeaderStruct *ws_rom_getHeader(uint8_t *wsrom, uint32_t wsromSize); uint32_t ws_rom_sramSize(uint8_t *wsrom, uint32_t wsromSize); uint32_t ws_rom_eepromSize(uint8_t *wsrom, uint32_t wsromSize); static inline uint8_t *ws_get_page_ptr(uint8_t *wsrom, uint32_t romSize, uint16_t page) { uint32_t temp = page << 16; temp &= (romSize - 1); return &wsrom[temp]; } #endif