|
|
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.