This commit is contained in:
folkert van heusden 2022-03-14 21:37:49 +01:00
parent 62d2971860
commit 412e512c70
4 changed files with 25 additions and 18 deletions

View file

@ -3,6 +3,7 @@
#include <poll.h>
#include <signal.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#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) {

View file

@ -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;
}

14
tty.cpp
View file

@ -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;
}

2
tty.h
View file

@ -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);