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