TTY emulation: first "receive a bit", and only after that inform about a bit received
This commit is contained in:
parent
1a09bd071b
commit
643075aa86
2 changed files with 13 additions and 7 deletions
17
tty.cpp
17
tty.cpp
|
@ -58,19 +58,24 @@ uint16_t tty::readWord(const uint16_t addr)
|
|||
const int reg = (addr - PDP11TTY_BASE) / 2;
|
||||
uint16_t vtemp = registers[reg];
|
||||
|
||||
if (!have_char)
|
||||
have_char = poll_char();
|
||||
if (have_char_1) {
|
||||
have_char_1 = false;
|
||||
have_char_2 = true;
|
||||
}
|
||||
else if (have_char_2 == false) {
|
||||
have_char_1 = poll_char();
|
||||
}
|
||||
|
||||
if (addr == PDP11TTY_TKS) {
|
||||
vtemp = have_char ? 128 : 0;
|
||||
vtemp = (have_char_2 ? 1 << 7 : 0) | (have_char_1 ? 1 << 11 : 0);
|
||||
}
|
||||
else if (addr == PDP11TTY_TKB) {
|
||||
if (have_char) {
|
||||
if (have_char_2) {
|
||||
uint8_t c = get_char();
|
||||
|
||||
vtemp = c | (parity(c) << 7);
|
||||
|
||||
have_char = false;
|
||||
have_char_2 = false;
|
||||
}
|
||||
else {
|
||||
vtemp = 0;
|
||||
|
@ -80,7 +85,7 @@ uint16_t tty::readWord(const uint16_t addr)
|
|||
vtemp = 128;
|
||||
}
|
||||
|
||||
//D(fprintf(stderr, "PDP11TTY read addr %o (%s): %d, 7bit: %d\n", addr, regnames[reg], vtemp, vtemp & 127);)
|
||||
D(fprintf(stderr, "PDP11TTY read addr %o (%s): %d, 7bit: %d\n", addr, regnames[reg], vtemp, vtemp & 127);)
|
||||
|
||||
registers[reg] = vtemp;
|
||||
|
||||
|
|
3
tty.h
3
tty.h
|
@ -22,7 +22,8 @@ private:
|
|||
std::function<bool()> poll_char;
|
||||
std::function<uint8_t()> get_char;
|
||||
std::function<void(char c)> put_char;
|
||||
bool have_char { false };
|
||||
bool have_char_1 { false }; // RCVR BUSY bit high (11)
|
||||
bool have_char_2 { false }; // RCVR DONE bit high (7)
|
||||
uint16_t registers[4] { 0 };
|
||||
bool withUI { false };
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue