mirror of
https://github.com/TomNisbet/TommyPROM.git
synced 2024-10-08 16:55:25 +00:00
Issue #13 - fix HWverify CLI parsing and update documentation.
This commit is contained in:
parent
a45f6b4ce0
commit
f17bc110aa
@ -80,29 +80,38 @@ byte hexDigit(char c)
|
||||
|
||||
|
||||
/************************************************************
|
||||
* convert a hex byte (00 - ff) to byte
|
||||
* @param c-string with the hex value of the byte
|
||||
* @return byte represented by the digits
|
||||
************************************************************/
|
||||
byte hexByte(char * a)
|
||||
{
|
||||
return (hexDigit(a[0]) << 4) | hexDigit(a[1]);
|
||||
}
|
||||
|
||||
|
||||
/************************************************************
|
||||
* convert a hex word (0000 - ffff) to unsigned int
|
||||
* @param c-string with the hex value of the word
|
||||
* Convert a hex string to a uint32_t value.
|
||||
* Skips leading spaces and terminates on the first non-hex
|
||||
* character. Leading zeroes are not required.
|
||||
*
|
||||
* No error checking is performed - if no hex is found then
|
||||
* defaultValue is returned. Similarly, a hex string of more than
|
||||
* 8 digits will return the value of the last 8 digits.
|
||||
* @param pointer to string with the hex value of the word (modified)
|
||||
* @return unsigned int represented by the digits
|
||||
************************************************************/
|
||||
unsigned int hexWord(char * data)
|
||||
uint32_t getHex32(char *& pData, uint32_t defaultValue=0)
|
||||
{
|
||||
return (hexDigit(data[0]) << 12) |
|
||||
(hexDigit(data[1]) << 8) |
|
||||
(hexDigit(data[2]) << 4) |
|
||||
(hexDigit(data[3]));
|
||||
}
|
||||
uint32_t u32 = 0;
|
||||
|
||||
while (isspace(*pData))
|
||||
{
|
||||
++pData;
|
||||
}
|
||||
|
||||
if (isxdigit(*pData))
|
||||
{
|
||||
while (isxdigit(*pData)) {
|
||||
u32 = (u32 << 4) | hexDigit(*pData++);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 = defaultValue;
|
||||
}
|
||||
|
||||
return u32;
|
||||
}
|
||||
|
||||
void printByte(byte b)
|
||||
{
|
||||
@ -153,9 +162,10 @@ void loop()
|
||||
static void commandLoop()
|
||||
{
|
||||
byte b;
|
||||
word w;
|
||||
uint32_t arg;
|
||||
const uint32_t noValue = uint32_t(-1);
|
||||
char line[20];
|
||||
uint32_t numBytes;
|
||||
char * cursor = line + 1;
|
||||
unsigned long timeStart;
|
||||
unsigned long timeEnd;
|
||||
bool cmdError = false;
|
||||
@ -171,22 +181,20 @@ static void commandLoop()
|
||||
switch (c)
|
||||
{
|
||||
case 'a':
|
||||
if (hexDigit(line[1]) <= 15)
|
||||
if ((arg = getHex32(cursor, noValue)) != noValue)
|
||||
{
|
||||
w = hexWord(line + 1);
|
||||
prom.setAddress(w);
|
||||
prom.setAddress(word(arg));
|
||||
}
|
||||
else
|
||||
cmdError = true;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
if (hexDigit(line[1]) <= 15)
|
||||
if ((arg = getHex32(cursor, noValue)) != noValue)
|
||||
{
|
||||
prom.disableOutput();
|
||||
prom.setDataBusMode(OUTPUT);
|
||||
b = hexByte(line + 1);
|
||||
prom.writeDataBus(b);
|
||||
prom.writeDataBus(byte(arg));
|
||||
}
|
||||
else
|
||||
cmdError = true;
|
||||
@ -202,18 +210,18 @@ static void commandLoop()
|
||||
else
|
||||
{
|
||||
bool enable = line[1] == 'e';
|
||||
if (c == 'c')
|
||||
if (c == 'c') {
|
||||
if (enable) prom.enableChip(); else prom.disableChip();
|
||||
else if (c == 'w')
|
||||
} else if (c == 'w') {
|
||||
if (enable) prom.enableWrite(); else prom.disableWrite();
|
||||
else { // c == 'o'
|
||||
if (enable)
|
||||
{
|
||||
} else { // c == 'o'
|
||||
if (enable) {
|
||||
// Don't allow the prom and the data bus to output at the same time
|
||||
prom.setDataBusMode(INPUT);
|
||||
prom.enableOutput();
|
||||
} else {
|
||||
prom.disableOutput();
|
||||
}
|
||||
else prom.disableOutput();
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -261,4 +269,3 @@ static void commandLoop()
|
||||
Serial.println(F(" U - Send Unlock sequence to disable device Software Data Protection"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,25 +99,27 @@ lines from the Arduino. The result should be measured at the target PROM footpr
|
||||
at the Arduino. To fully test, use a multimeter to verify that the lines that should be
|
||||
active are active and that any other lines are not.
|
||||
|
||||
Note that the Dx and Ax commands can be a bit confusing. The command _D5_ means "set the value 05 HEX on the eight data lines". It does not specifically refer to the D<sub>5</sub> data pin on the ROM or the D5 pin on the Arduino. In the example above, 05 HEX is the same as 00000101 BINARY. This would set the ROM D<sub>0</sub> and D<sub>2</sub> pins HIGH and the other six pins would be LOW.
|
||||
|
||||
### Testing the data bus
|
||||
|
||||
Issue a set of Data commands from the Hardware Verify sketch and measure EACH data line at
|
||||
the PROM footprint. **If the expected result is "D0 HIGH", verify not only that D0 reads
|
||||
HIGH, but that all of the other lines read LOW.**
|
||||
the PROM footprint. **If the expected result is "D<sub>0</sub> HIGH", verify not only
|
||||
that D<sub>0</sub> reads HIGH, but that all of the other lines read LOW.**
|
||||
|
||||
Data test commands
|
||||
|
||||
|Command|Result|
|
||||
|:--- |:--- |
|
||||
|D0 |All data lines LOW|
|
||||
|D1 |D0 HIGH|
|
||||
|D2 |D1 HIGH|
|
||||
|D4 |D2 HIGH|
|
||||
|D8 |D3 HIGH|
|
||||
|D10 |D4 HIGH|
|
||||
|D20 |D5 HIGH|
|
||||
|D40 |D6 HIGH|
|
||||
|D80 |D7 HIGH|
|
||||
|D1 |D<sub>0</sub> HIGH|
|
||||
|D2 |D<sub>1</sub> HIGH|
|
||||
|D4 |D<sub>2</sub> HIGH|
|
||||
|D8 |D<sub>3</sub> HIGH|
|
||||
|D10 |D<sub>4</sub> HIGH|
|
||||
|D20 |D<sub>5</sub> HIGH|
|
||||
|D40 |D<sub>6</sub> HIGH|
|
||||
|D80 |D<sub>7</sub> HIGH|
|
||||
|Dff |all data lines HIGH|
|
||||
|
||||
### Testing the address lines
|
||||
@ -128,21 +130,21 @@ other address lines as well.
|
||||
|Command|Result|
|
||||
|:--- |:--- |
|
||||
|A0 |All address lines LOW|
|
||||
|A1 |A0 HIGH|
|
||||
|A2 |A1 HIGH|
|
||||
|A4 |A2 HIGH|
|
||||
|A8 |A3 HIGH|
|
||||
|A10 |A4 HIGH|
|
||||
|A20 |A5 HIGH|
|
||||
|A40 |A6 HIGH|
|
||||
|A80 |A7 HIGH|
|
||||
|A100 |A8 HIGH|
|
||||
|A200 |A9 HIGH|
|
||||
|A400 |A10 HIGH|
|
||||
|A800 |A11 HIGH|
|
||||
|A1000 |A12 HIGH|
|
||||
|A2000 |A13 HIGH|
|
||||
|A4000 |A14 HIGH|
|
||||
|A1 |A<sub>0</sub> HIGH|
|
||||
|A2 |A<sub>1</sub> HIGH|
|
||||
|A4 |A<sub>2</sub> HIGH|
|
||||
|A8 |A<sub>3</sub> HIGH|
|
||||
|A10 |A<sub>4</sub> HIGH|
|
||||
|A20 |A<sub>5</sub> HIGH|
|
||||
|A40 |A<sub>6</sub> HIGH|
|
||||
|A80 |A<sub>7</sub> HIGH|
|
||||
|A100 |A<sub>8</sub> HIGH|
|
||||
|A200 |A<sub>9</sub> HIGH|
|
||||
|A400 |A<sub>10</sub> HIGH|
|
||||
|A800 |A<sub>11</sub> HIGH|
|
||||
|A1000 |A<sub>12</sub> HIGH|
|
||||
|A2000 |A<sub>13</sub> HIGH|
|
||||
|A4000 |A<sub>14</sub> HIGH|
|
||||
|A7fff |all address lines HIGH|
|
||||
|
||||
### Testing the control lines
|
||||
@ -161,6 +163,6 @@ commands are complete.
|
||||
|Ce | Chip Enable (CE) LOW, others HIGH|
|
||||
|Cd | CE, OE, WE all HIGH|
|
||||
|Oe | Output Enable (OE) LOW, others HIGH|
|
||||
|Cd | CE, OE, WE all HIGH|
|
||||
|Od | CE, OE, WE all HIGH|
|
||||
|We | Write Enable (WE) LOW, others HIGH|
|
||||
|Wd | CE, OE, WE all HIGH|
|
||||
|
Loading…
Reference in New Issue
Block a user