Annotation of previous_trunk/src/dimension/nd_rom.cpp, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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