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