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