From 412e512c70ea12bf07dc3c7ef7457ba1a8f1700f Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Mon, 14 Mar 2022 21:37:49 +0100 Subject: [PATCH] TTY --- main.cpp | 18 +++++++++++++----- rk05.cpp | 9 --------- tty.cpp | 14 +++++++++++--- tty.h | 2 +- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/main.cpp b/main.cpp index 1fe28f6..374ff1a 100644 --- a/main.cpp +++ b/main.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "memory.h" @@ -286,7 +287,11 @@ int main(int argc, char *argv[]) resize_terminal(); } - struct pollfd fds[] = { { 0, POLLIN, 0 } }; + struct termios tty_opts_raw { 0 }; + cfmakeraw(&tty_opts_raw); + tcsetattr(STDIN_FILENO, TCSANOW, &tty_opts_raw); + + struct pollfd fds[] = { { STDIN_FILENO, POLLIN, 0 } }; const unsigned long start = get_ms(); unsigned long icount = 0; @@ -300,16 +305,19 @@ int main(int argc, char *argv[]) icount++; if (icount % 1000 == 0) { - if (poll(fds, 1, 0) == 1) { - int ch = getch(); + if (poll(fds, 1, 0) == 1 && fds[0].revents) { + int ch = 0; + + if (withUI) + ch = getch(); + else + ch = getchar(); if (ch == 3) break; if (ch > 0 && ch < 127) tty_->sendChar(ch); - - fds[0].revents = 0; } if (icount % 1000000 == 0 && withUI) { diff --git a/rk05.cpp b/rk05.cpp index 422b341..423ac52 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -59,14 +59,7 @@ uint16_t rk05::readWord(const uint16_t addr) else if (addr == RK05_CS) { // 0177404 setBit(registers[reg], 15, false); // clear error setBit(registers[reg], 14, false); // clear hard error -#if 0 - if (registers[reg] & 1) - registers[reg] &= ~128; // controller ready - else - registers[reg] |= 128; // controller ready -#else setBit(registers[reg], 7, true); // controller ready -#endif } uint16_t vtemp = registers[reg]; @@ -74,8 +67,6 @@ uint16_t rk05::readWord(const uint16_t addr) if (addr == RK05_CS) setBit(registers[reg], 0, false); // clear go - fprintf(stderr, "%o\n", vtemp); - return vtemp; } diff --git a/tty.cpp b/tty.cpp index e94e5b1..ae2205c 100644 --- a/tty.cpp +++ b/tty.cpp @@ -44,8 +44,6 @@ uint16_t tty::readWord(const uint16_t addr) const int reg = (addr - PDP11TTY_BASE) / 2; uint16_t vtemp = registers[reg]; - fprintf(stderr, "PDP11TTY read addr %o (%s): ", addr, regnames[reg]); - if (addr == PDP11TTY_TKS) { vtemp = c ? 128 : 0; } @@ -57,7 +55,7 @@ uint16_t tty::readWord(const uint16_t addr) vtemp = 128; } - fprintf(stderr, "%o\n", vtemp); + fprintf(stderr, "PDP11TTY read addr %o (%s): %d, 7bit: %d\n", addr, regnames[reg], vtemp, vtemp & 127); registers[reg] = vtemp; @@ -117,3 +115,13 @@ void tty::writeWord(const uint16_t addr, uint16_t v) D(fprintf(stderr, "set register %o to %o\n", addr, v);) registers[(addr - PDP11TTY_BASE) / 2] = v; } + +void tty::sendChar(const char v) +{ + if (c) + fprintf(stderr, "PDP11TTY: overwriting %d - %c\n", c, c); + else + fprintf(stderr, "PDP11TTY: setting character %d - %c\n", v, v); + + c = v; +} diff --git a/tty.h b/tty.h index 3a456d7..67b3076 100644 --- a/tty.h +++ b/tty.h @@ -28,7 +28,7 @@ public: void setTest() { testMode = true; } - void sendChar(const char v) { c = v; }; + void sendChar(const char v); uint8_t readByte(const uint16_t addr); uint16_t readWord(const uint16_t addr);