Fix address error with 8755A burning

This commit is contained in:
Tom Nisbet 2018-12-22 09:59:41 -05:00
parent 98986f2922
commit f5b2a9241a
2 changed files with 16 additions and 4 deletions

View File

@ -54,6 +54,7 @@ void PromDevice8755A::begin()
// address lines. The read and burn code will take care of the ALE line // address lines. The read and burn code will take care of the ALE line
void PromDevice8755A::setAddress(word address) void PromDevice8755A::setAddress(word address)
{ {
setDataBusMode(OUTPUT);
writeDataBus(byte(address & 0xff)); writeDataBus(byte(address & 0xff));
digitalWrite(AD8, address & 0x100 ? HIGH : LOW); digitalWrite(AD8, address & 0x100 ? HIGH : LOW);
digitalWrite(AD9, address & 0x200 ? HIGH : LOW); digitalWrite(AD9, address & 0x200 ? HIGH : LOW);
@ -70,14 +71,12 @@ byte PromDevice8755A::readByte(word address)
// Put the address on the bus and latch it with ALE // Put the address on the bus and latch it with ALE
digitalWrite(CE2, HIGH); digitalWrite(CE2, HIGH);
setDataBusMode(OUTPUT);
setAddress(address); setAddress(address);
digitalWrite(ALE, HIGH); digitalWrite(ALE, HIGH);
digitalWrite(ALE, LOW); digitalWrite(ALE, LOW);
// Read a byte // Read a byte
setDataBusMode(INPUT); setDataBusMode(INPUT);
setAddress(0xff);
digitalWrite(RD, LOW); digitalWrite(RD, LOW);
delayMicroseconds(1); delayMicroseconds(1);
data = readDataBus(); data = readDataBus();

View File

@ -29,6 +29,17 @@ CmdStatus cmdStatus;
// Data polling supported // Data polling supported
PromDevice28C prom(32 * 1024L, 64, 10, true); PromDevice28C prom(32 * 1024L, 64, 10, true);
#elif defined(PROM_IS_27)
// Define a device for a 2764 EPROM with the following parameters:
// 8K byte device capacity
// 1000us (1ms) write pulse
// 15 write attempts
// 4x overwrite pulse
PromDevice27 prom(8 * 1024L, 1000L, 15, 4); // 2764 with SEEQ intelligent programming
//PromDevice27 prom(32 * 1024L, 1000L, 25, 3); // 27C256 with SEEQ intelligent programming
//PromDevice27 prom(2 * 1024L, 50000L, 1, 0); // 2716 with single 50ms write
//PromDevice27 prom(64 * 1024L, 100L, 11, 0); // 27C040 with Atmel rapid programming
#elif defined(PROM_IS_8755A) #elif defined(PROM_IS_8755A)
// Define a device for an 8755A. This has a fixed size of 2K and no // Define a device for an 8755A. This has a fixed size of 2K and no
// other parameters. // other parameters.
@ -490,7 +501,7 @@ void zapTest(word start)
return; return;
} }
delayMicroseconds(10000); delay(100);
for (int ix = 0; ix < sizeof(testData); ix++) for (int ix = 0; ix < sizeof(testData); ix++)
{ {
byte val = prom.readData(start + ix); byte val = prom.readData(start + ix);
@ -529,6 +540,7 @@ void setup()
* executing read or write requestes. * executing read or write requestes.
**/ **/
/* 8085 Test programs
byte ledTest[] = byte ledTest[] =
{ {
0xc3, 0x03, 0x80, 0x3e, 0xc0, 0x30, 0x3e, 0xff, 0xc3, 0x03, 0x80, 0x3e, 0xc0, 0x30, 0x3e, 0xff,
@ -545,6 +557,7 @@ byte charTest[] =
0x3e, 0x40, 0x30, 0x3e, 0xc0, 0x30, 0x3e, 0x40, 0x30, 0x21, 0xff, 0xff, 0x3e, 0x40, 0x30, 0x3e, 0xc0, 0x30, 0x3e, 0x40, 0x30, 0x21, 0xff, 0xff,
0x2d, 0xc2, 0x30, 0x80, 0x25, 0xc2, 0x30, 0x80, 0xc3, 0x03, 0x80 0x2d, 0xc2, 0x30, 0x80, 0x25, 0xc2, 0x30, 0x80, 0xc3, 0x03, 0x80
}; };
*/
word start = 0; word start = 0;
word end = 0xff; word end = 0xff;
@ -644,7 +657,7 @@ void loop()
break; break;
default: default:
Serial.println(F("TommyPROM 1.5\n")); Serial.println(F("TommyPROM 1.6\n"));
Serial.println(F("Valid commands are:")); Serial.println(F("Valid commands are:"));
Serial.println(F(" Cssss eeee - Compute checksum from device")); Serial.println(F(" Cssss eeee - Compute checksum from device"));
Serial.println(F(" Dssss eeee - Dump bytes from device to terminal")); Serial.println(F(" Dssss eeee - Dump bytes from device to terminal"));