Having gone through the code completely it seems that a delay isn't being used, but rather /DATA polling.
From the AT28C256 datasheet
"
The AT28C256 features DATA Polling to indicate the end of a write cycle. During a byte or page write cycle an attempted read of the last byte written will result in the complement of the written data to be presented on I/O7. Once the write cycle has been completed, true data is valid on all outputs, and the next write cycle may begin. DATA Polling may begin at anytime during the write
cycle."
The programmer uses this feature to tell when it can write next.
Here is the function that handles this.
//highlevel function to write a byte to a given address
//this function uses /DATA polling to get the end of the
//write cycle. This is much faster then waiting 10ms
void fast_write(unsigned int address, byte data)
{
byte cyclecount=0;
//first disbale output
set_oe(HIGH);
//disable write
set_we(HIGH);
//set address bus
set_address_bus(address);
//set databus to output
data_bus_output();
//set data bus
write_data_bus(data);
//enable chip select
set_ce(LOW);
//wait some time to finish writing
delayMicroseconds(1);
//enable write
set_we(LOW);
//wait some time to finish writing
delayMicroseconds(1);
//disable write
set_we(HIGH);
data_bus_input();
set_oe(LOW);
while(data != read_data_bus()) {
cyclecount++;
};
set_oe(HIGH);
set_ce(HIGH);
}
I'm going to try adjusting the timings anyway, will post back results. However anymore help is appreciated.