|
|
1.1 ! root 1: #include "main.h" ! 2: #include "configuration.h" ! 3: #include "m68000.h" ! 4: #include "sysdeps.h" ! 5: #include "file.h" ! 6: #include "dimension.hpp" ! 7: #include "nd_mem.hpp" ! 8: #include "log.h" ! 9: ! 10: /* --------- NEXTDIMENSION EEPROM --------- * ! 11: * * ! 12: * Intel 28F010 (1024k CMOS Flash Memory) * ! 13: * */ ! 14: ! 15: /* NeXTdimension board memory */ ! 16: #define ROM_CMD_READ 0x00 ! 17: #define ROM_CMD_READ_ID 0x90 ! 18: #define ROM_CMD_ERASE 0x20 ! 19: #define ROM_CMD_WRITE 0x40 ! 20: #define ROM_CMD_VERIFY 0x80 ! 21: #define ROM_CMD_RESET 0xFF ! 22: ! 23: #define ROM_ID_MFG 0x89 ! 24: #define ROM_ID_DEV 0xB4 ! 25: ! 26: Uint8 NextDimension::rom_read(Uint32 addr) { ! 27: switch (rom_command) { ! 28: case ROM_CMD_READ: ! 29: return rom[addr]; ! 30: case ROM_CMD_READ_ID: ! 31: switch (addr) { ! 32: case 0: return ROM_ID_MFG; ! 33: case 1: return ROM_ID_DEV; ! 34: default: return ROM_ID_DEV; ! 35: } ! 36: case (ROM_CMD_ERASE|ROM_CMD_VERIFY): ! 37: rom_command = ROM_CMD_READ; ! 38: return rom[addr]; ! 39: case (ROM_CMD_WRITE|ROM_CMD_VERIFY): ! 40: rom_command = ROM_CMD_READ; ! 41: return rom[rom_last_addr]; ! 42: case ROM_CMD_RESET: ! 43: default: ! 44: return 0; ! 45: } ! 46: } ! 47: ! 48: void NextDimension::rom_write(Uint32 addr, Uint8 val) { ! 49: int i; ! 50: ! 51: switch (rom_command) { ! 52: case ROM_CMD_WRITE: ! 53: Log_Printf(LOG_WARN, "[ND] Slot %i: Writing ROM (addr=%04X, val=%02X)", slot,addr,val); ! 54: rom[addr] = val; ! 55: rom_last_addr = addr; ! 56: rom_command = ROM_CMD_READ; ! 57: break; ! 58: case ROM_CMD_ERASE: ! 59: if (val==ROM_CMD_ERASE) { ! 60: Log_Printf(LOG_WARN, "[ND] Slot %i: Erasing ROM",slot); ! 61: for (i = 0; i < (128*1024); i++) ! 62: rom[i] = 0xFF; ! 63: break; ! 64: } /* else fall through */ ! 65: default: ! 66: Log_Printf(LOG_WARN, "[ND] Slot %i: ROM Command %02X",slot,val); ! 67: rom_command = val; ! 68: break; ! 69: } ! 70: } ! 71: ! 72: ! 73: /* Load NeXTdimension ROM from file */ ! 74: void NextDimension::rom_load() { ! 75: FILE* romfile; ! 76: ! 77: rom_command = ROM_CMD_READ; ! 78: rom_last_addr = 0; ! 79: ! 80: if (!File_Exists(ConfigureParams.Dimension.board[ND_NUM(slot)].szRomFileName)) { ! 81: Log_Printf(LOG_WARN, "[ND] Error: ROM file does not exist or is not readable"); ! 82: return; ! 83: } ! 84: ! 85: romfile = File_Open(ConfigureParams.Dimension.board[ND_NUM(slot)].szRomFileName, "rb"); ! 86: ! 87: if (romfile==NULL) { ! 88: Log_Printf(LOG_WARN, "[ND] Error: Cannot open ROM file"); ! 89: return; ! 90: } ! 91: ! 92: fread(rom,1, 128 * 1024 ,romfile); ! 93: ! 94: Log_Printf(LOG_WARN, "[ND] Read ROM from %s",ConfigureParams.Dimension.board[ND_NUM(slot)].szRomFileName); ! 95: ! 96: File_Close(romfile); ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.