DevEEPROM.h revision dc39465aaaca0e680ddcdb7690a984513047803e
/** @file
* Microware-compatible 64x16-bit 93C46 EEPROM Emulation.
*/
/*
* Copyright (C) 2007 innotek GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License as published by the Free Software Foundation,
* in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
* distribution. VirtualBox OSE is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY of any kind.
*/
/* Interface */
/**
* 93C46-compatible EEPROM device emulation.
*/
/** General definitions */
enum {
/** Size of EEPROM in words */
SIZE = 64,
/** Number of bits per word */
WORD_SIZE = 16,
/** Number of address bits */
ADDR_SIZE = 6,
/** Number of bits in opcode */
OPCODE_SIZE = 2,
/** The most significant bit mask in data word */
/** Address mask */
/** The most significant bit mask in op+addr bit sequence */
};
/**
* Names of signal wires
*/
enum Wires {
};
/* @todo save and load methods */
/** Actual content of EEPROM */
/** current state.
*
* EEPROM operates as a simple state machine. Events are primarily
* triggered at positive edge of clock signal (SK). Refer to the
* timing diagrams of 93C46 to get better understanding.
*/
enum State {
/** Initial state. Waiting for start condition (CS, SK, DI high). */
/** Reading data in, shifting in the bits into 'word'. */
/** Writing data out, shifting out the bits from 'word'. */
/** Waiting for CS=0 to indicate we are busy (DO=0). */
/** Waiting for CS=1 to indicate we are ready (DO=1). */
} state;
/** setting writeEnable to false prevents write and erase operations */
bool writeEnabled;
/** intermediate storage */
/** currently processed bit in 'word' */
/** decoded address */
/** Data Out, Data In, Chip Select, Clock */
/** Pointer to decoded operation. When no operation has been decoded yet
* it points to opDecode.
*/
// Operation handlers
State opWriteAll();
/** Helper method to implement write protection */
};