WIP Terminal interface with commands

This commit is contained in:
Daniele Verducci su MatissePenguin 2021-01-01 23:09:42 +01:00
parent 55f5d62082
commit 4d9fd83cdd

View File

@ -5,6 +5,12 @@
* The Python Terminal Monitor or the Arduino IDE serial monitor is used to send * The Python Terminal Monitor or the Arduino IDE serial monitor is used to send
* and receive commands to/from the Z80. * and receive commands to/from the Z80.
* *
* Seen from the PC, the terminal receives two bytes: a command byte and a value byte.
* Commands:
* 0x00 WRITE: The next byte is sent as-is to Pat80. If the terminal interface buffer
* is not empty, the new byte will replace the older one.
* 0x01 BUFFER: The terminal interface returns the number of bytes waiting to be sent.
*
* Seen from the Pat80, the terminal interface has two registers: * Seen from the Pat80, the terminal interface has two registers:
* DATA Register at addr 0x00 (\RS) contains the last received byte from the pc * DATA Register at addr 0x00 (\RS) contains the last received byte from the pc
* DATA_AVAILABLE Register at addr 0x01 (RS) contains the number of bytes in the buffer, * DATA_AVAILABLE Register at addr 0x01 (RS) contains the number of bytes in the buffer,
@ -17,6 +23,9 @@
// RS 12 // Input, low = DATA register, high = DATA_AVAILABLE register // RS 12 // Input, low = DATA register, high = DATA_AVAILABLE register
// DATA BUS (Input/Output, active high): 3, 4, 5, 6, 7, 8, 9, 10; // DATA BUS (Input/Output, active high): 3, 4, 5, 6, 7, 8, 9, 10;
const byte COMMAND_WRITE = 0x00;
const byte COMMAND_BUFFER = 0x01;
byte incomingBuffer = 0; // Incoming from computer, to the Pat80 byte incomingBuffer = 0; // Incoming from computer, to the Pat80
byte outgoingBuffer = 0; // Outgoing to computer, from the Pat80 byte outgoingBuffer = 0; // Outgoing to computer, from the Pat80
byte availableBytes = 0; // Available bytes in the incoming buffer (for the DATA_AVAILABLE register) byte availableBytes = 0; // Available bytes in the incoming buffer (for the DATA_AVAILABLE register)
@ -33,9 +42,17 @@ void setup() {
void loop() { void loop() {
if (Serial.available() > 0) { if (Serial.available() > 0) {
switch (Serial.read()) {
case COMMAND_WRITE:
incomingBuffer = Serial.read(); incomingBuffer = Serial.read();
availableBytes = 1; // TODO: Implement a 256 byte buffer and store the avail bytes number in this var availableBytes = 1; // TODO: Implement a 256 byte buffer and store the avail bytes number in this var
break;
case COMMAND_BUFFER:
Serial.write(availableBytes);
break;
} }
}
if (outgoingBuffer != 0) { if (outgoingBuffer != 0) {
if ((outgoingBuffer >= 8 && outgoingBuffer <= 13) || (outgoingBuffer >= 32 && outgoingBuffer <= 127)) { if ((outgoingBuffer >= 8 && outgoingBuffer <= 13) || (outgoingBuffer >= 32 && outgoingBuffer <= 127)) {
// Printable character // Printable character