/* * 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_SRAM_SIZE_NONE 0 #define WS_EEPROM_SIZE_64k 1 #define WS_EEPROM_SIZE_256k 2 #define WS_SRAM_SIZE_1k 10 #define WS_SRAM_SIZE_16k 20 #define WS_SRAM_SIZE_8k 50 typedef struct ws_romHeaderStruct { uint8_t developperId; uint8_t minimumSupportSystem; uint8_t cartId; uint8_t romSize; uint8_t eepromSize; uint8_t additionnalCapabilities; uint8_t realtimeClock; uint16_t checksum; } ws_romHeaderStruct; 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