TTY
This commit is contained in:
parent
62d2971860
commit
412e512c70
4 changed files with 25 additions and 18 deletions
18
main.cpp
18
main.cpp
|
@ -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) {
|
||||
|
|
9
rk05.cpp
9
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;
|
||||
}
|
||||
|
||||
|
|
14
tty.cpp
14
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;
|
||||
}
|
||||
|
|
2
tty.h
2
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue