Added interrupt support for ACIA

+ Added interrupt support for ACIA
+ Auto-formatting (in case anyone cares)
This commit is contained in:
Izuan Nazrin committed 2017-05-29 02:03:18 +08:00
1 parent 2e33756d49
commit f2ced29979
3 files changed
+43 -23

No files matched your search

@@ -43,7 +43,7 @@ public class Acia6850 extends Acia {
static final int STAT_REG = 0; // read-only
static final int CTRL_REG = 0; // write-only
static final int RX_REG = 1; // read-only
static final int TX_REG = 1; // write-only
@@ -58,7 +58,7 @@ public class Acia6850 extends Acia {
case RX_REG:
return rxRead(cpuAccess);
case STAT_REG:
return statusReg();
return statusReg(cpuAccess);
default:
throw new MemoryAccessException("No register.");
@@ -78,7 +78,7 @@ public class Acia6850 extends Acia {
throw new MemoryAccessException("No register.");
}
}
private void setCommandRegister(int data) {
// Bits 0 & 1 control the master reset
if((data & 0x01) != 0 && (data & 0x02) != 0) {
@@ -97,8 +97,8 @@ public class Acia6850 extends Acia {
* @return The contents of the status register.
*/
@Override
public int statusReg() {
// TODO: Parity Error, Framing Error, DTR, DSR, and Interrupt flags.
public int statusReg(boolean cpuAccess) {
// TODO: Parity Error, Framing Error, DTR, and DSR flags.
int stat = 0;
if (rxFull && System.nanoTime() >= (lastRxRead + baudRateDelay)) {
stat |= 0x01;
@@ -109,7 +109,14 @@ public class Acia6850 extends Acia {
if (overrun) {
stat |= 0x20;
}
if (interrupt) {
stat |= 0x80;
}
if (cpuAccess) {
interrupt = false;
}
return stat;
}
@@ -118,6 +125,7 @@ public class Acia6850 extends Acia {
overrun = false;
rxFull = false;
txEmpty = true;
interrupt = false;
}
}