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