TTY emulation: first "receive a bit", and only after that inform about a bit received

This commit is contained in:
folkert van heusden 2022-03-21 21:51:12 +01:00
parent 1a09bd071b
commit 643075aa86
2 changed files with 13 additions and 7 deletions

17
tty.cpp
View file

@ -58,19 +58,24 @@ uint16_t tty::readWord(const uint16_t addr)
const int reg = (addr - PDP11TTY_BASE) / 2; const int reg = (addr - PDP11TTY_BASE) / 2;
uint16_t vtemp = registers[reg]; uint16_t vtemp = registers[reg];
if (!have_char) if (have_char_1) {
have_char = poll_char(); have_char_1 = false;
have_char_2 = true;
}
else if (have_char_2 == false) {
have_char_1 = poll_char();
}
if (addr == PDP11TTY_TKS) { 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) { else if (addr == PDP11TTY_TKB) {
if (have_char) { if (have_char_2) {
uint8_t c = get_char(); uint8_t c = get_char();
vtemp = c | (parity(c) << 7); vtemp = c | (parity(c) << 7);
have_char = false; have_char_2 = false;
} }
else { else {
vtemp = 0; vtemp = 0;
@ -80,7 +85,7 @@ uint16_t tty::readWord(const uint16_t addr)
vtemp = 128; 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; registers[reg] = vtemp;

3
tty.h
View file

@ -22,7 +22,8 @@ private:
std::function<bool()> poll_char; std::function<bool()> poll_char;
std::function<uint8_t()> get_char; std::function<uint8_t()> get_char;
std::function<void(char c)> put_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 }; uint16_t registers[4] { 0 };
bool withUI { false }; bool withUI { false };