Annotation of previous/src/dimension/nd_rom.c, revision 1.1.1.2

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: /* --------- 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: 
                     27: Uint8 nd_rom_command = 0x00;
                     28: Uint32 nd_rom_last_addr = 0x00;
                     29: 
                     30: Uint8 nd_rom_read(Uint32 addr) {
                     31:     switch (nd_rom_command) {
                     32:         case ROM_CMD_READ:
                     33:             return ND_rom[addr];
                     34:         case ROM_CMD_READ_ID:
                     35:             switch (addr) {
                     36:                 case 0: return ROM_ID_MFG;
                     37:                 case 1: return ROM_ID_DEV;
1.1.1.2 ! root       38:                 default: return ROM_ID_DEV;
1.1       root       39:             }
                     40:         case (ROM_CMD_ERASE|ROM_CMD_VERIFY):
                     41:             nd_rom_command = ROM_CMD_READ;
                     42:             return ND_rom[addr];
                     43:         case (ROM_CMD_WRITE|ROM_CMD_VERIFY):
                     44:             nd_rom_command = ROM_CMD_READ;
                     45:             return ND_rom[nd_rom_last_addr];
                     46:         case ROM_CMD_RESET:
                     47:         default:
                     48:             return 0;
                     49:     }
                     50: }
                     51: 
                     52: void nd_rom_write(Uint32 addr, Uint8 val) {
                     53:     int i;
                     54:     
                     55:     switch (nd_rom_command) {
                     56:         case ROM_CMD_WRITE:
                     57:             Log_Printf(LOG_WARN, "[ND] ROM: Writing ROM (addr=%04X, val=%02X)",addr,val);
                     58:             ND_rom[addr] = val;
                     59:             nd_rom_last_addr = addr;
                     60:             nd_rom_command = ROM_CMD_READ;
                     61:             break;
                     62:         case ROM_CMD_ERASE:
                     63:             if (val==ROM_CMD_ERASE) {
                     64:                 Log_Printf(LOG_WARN, "[ND] ROM: Erasing ROM");
                     65:                 for (i = 0; i < (128*1024); i++)
                     66:                     ND_rom[i] = 0xFF;
                     67:                 break;
                     68:             } /* else fall through */
                     69:         default:
                     70:             Log_Printf(LOG_WARN, "[ND] ROM: Command %02X",val);
                     71:             nd_rom_command = val;
                     72:             break;
                     73:     }
                     74: }
                     75: 
                     76: 
                     77: /* Load NeXTdimension ROM from file */
                     78: void nd_rom_load(void) {
                     79:     FILE* romfile;
                     80:     
1.1.1.2 ! root       81:     nd_rom_command = ROM_CMD_READ;
        !            82:     nd_rom_last_addr = 0;
        !            83:     
1.1       root       84:     if (!File_Exists(ConfigureParams.Dimension.szRomFileName)) {
                     85:         Log_Printf(LOG_WARN, "[ND] Error: ROM file does not exist or is not readable");
                     86:         return;
                     87:     }
                     88:     
                     89:     romfile = File_Open(ConfigureParams.Dimension.szRomFileName, "rb");
                     90:     
                     91:     if (romfile==NULL) {
                     92:         Log_Printf(LOG_WARN, "[ND] Error: Cannot open ROM file");
                     93:         return;
                     94:     }
                     95:     
                     96:     fread(ND_rom,1, 128 * 1024 ,romfile);
                     97:     
                     98:     Log_Printf(LOG_WARN, "[ND] Read ROM from %s",ConfigureParams.Dimension.szRomFileName);
                     99:     
                    100:     File_Close(romfile);
1.1.1.2 ! root      101: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.