Line 57... |
Line 57... |
int c;
|
int c;
|
|
|
if (debug) {
|
if (debug) {
|
cPrintf("\n**** TERM RCVR CALLBACK ****\n");
|
cPrintf("\n**** TERM RCVR CALLBACK ****\n");
|
}
|
}
|
timerStart(TERM_RCVR_MSEC, rcvrCallback, dev);
|
timerStart(TERM_RCVR_USEC, rcvrCallback, dev);
|
c = fgetc(terminals[dev].in);
|
c = fgetc(terminals[dev].in);
|
if (c == EOF) {
|
if (c == EOF) {
|
/* no character typed */
|
/* no character typed */
|
return;
|
return;
|
}
|
}
|
Line 96... |
Line 96... |
Word data;
|
Word data;
|
|
|
if (debug) {
|
if (debug) {
|
cPrintf("\n**** TERM READ from 0x%08X", addr);
|
cPrintf("\n**** TERM READ from 0x%08X", addr);
|
}
|
}
|
dev = addr >> 4;
|
dev = addr >> 12;
|
if (dev >= numTerminals) {
|
if (dev >= numTerminals) {
|
/* illegal device */
|
/* illegal device */
|
throwException(EXC_BUS_TIMEOUT);
|
throwException(EXC_BUS_TIMEOUT);
|
}
|
}
|
reg = addr & 0x0F;
|
reg = addr & 0x0FFF;
|
if (reg == TERM_RCVR_CTRL) {
|
if (reg == TERM_RCVR_CTRL) {
|
data = terminals[dev].rcvrCtrl;
|
data = terminals[dev].rcvrCtrl;
|
} else
|
} else
|
if (reg == TERM_RCVR_DATA) {
|
if (reg == TERM_RCVR_DATA) {
|
terminals[dev].rcvrCtrl &= ~TERM_RCVR_RDY;
|
terminals[dev].rcvrCtrl &= ~TERM_RCVR_RDY;
|
Line 137... |
Line 137... |
|
|
if (debug) {
|
if (debug) {
|
cPrintf("\n**** TERM WRITE to 0x%08X, data = 0x%08X ****\n",
|
cPrintf("\n**** TERM WRITE to 0x%08X, data = 0x%08X ****\n",
|
addr, data);
|
addr, data);
|
}
|
}
|
dev = addr >> 4;
|
dev = addr >> 12;
|
if (dev >= numTerminals) {
|
if (dev >= numTerminals) {
|
/* illegal device */
|
/* illegal device */
|
throwException(EXC_BUS_TIMEOUT);
|
throwException(EXC_BUS_TIMEOUT);
|
}
|
}
|
reg = addr & 0x0F;
|
reg = addr & 0x0FFF;
|
if (reg == TERM_RCVR_CTRL) {
|
if (reg == TERM_RCVR_CTRL) {
|
if (data & TERM_RCVR_IEN) {
|
if (data & TERM_RCVR_IEN) {
|
terminals[dev].rcvrCtrl |= TERM_RCVR_IEN;
|
terminals[dev].rcvrCtrl |= TERM_RCVR_IEN;
|
} else {
|
} else {
|
terminals[dev].rcvrCtrl &= ~TERM_RCVR_IEN;
|
terminals[dev].rcvrCtrl &= ~TERM_RCVR_IEN;
|
Line 194... |
Line 194... |
terminals[dev].xmtrCtrl &= ~TERM_XMTR_RDY;
|
terminals[dev].xmtrCtrl &= ~TERM_XMTR_RDY;
|
if (terminals[dev].xmtrCtrl & TERM_XMTR_IEN) {
|
if (terminals[dev].xmtrCtrl & TERM_XMTR_IEN) {
|
/* lower terminal xmtr interrupt */
|
/* lower terminal xmtr interrupt */
|
cpuResetInterrupt(terminals[dev].xmtrIRQ);
|
cpuResetInterrupt(terminals[dev].xmtrIRQ);
|
}
|
}
|
timerStart(TERM_XMTR_MSEC, xmtrCallback, dev);
|
timerStart(TERM_XMTR_USEC, xmtrCallback, dev);
|
} else {
|
} else {
|
/* illegal register */
|
/* illegal register */
|
throwException(EXC_BUS_TIMEOUT);
|
throwException(EXC_BUS_TIMEOUT);
|
}
|
}
|
}
|
}
|
Line 213... |
Line 213... |
cPrintf("Resetting Terminals...\n");
|
cPrintf("Resetting Terminals...\n");
|
for (i = 0; i < numTerminals; i++) {
|
for (i = 0; i < numTerminals; i++) {
|
terminals[i].rcvrCtrl = 0;
|
terminals[i].rcvrCtrl = 0;
|
terminals[i].rcvrData = 0;
|
terminals[i].rcvrData = 0;
|
terminals[i].rcvrIRQ = IRQ_TERM_0_RCVR + 2 * i;
|
terminals[i].rcvrIRQ = IRQ_TERM_0_RCVR + 2 * i;
|
timerStart(TERM_RCVR_MSEC, rcvrCallback, i);
|
timerStart(TERM_RCVR_USEC, rcvrCallback, i);
|
terminals[i].xmtrCtrl = TERM_XMTR_RDY;
|
terminals[i].xmtrCtrl = TERM_XMTR_RDY;
|
terminals[i].xmtrData = 0;
|
terminals[i].xmtrData = 0;
|
terminals[i].xmtrIRQ = IRQ_TERM_0_XMTR + 2 * i;
|
terminals[i].xmtrIRQ = IRQ_TERM_0_XMTR + 2 * i;
|
}
|
}
|
}
|
}
|