ore/rescii
Redstone Standard Code for Information Exchange
SI | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | L0 | L1 | L2 | L3 |
01 | L4 | L5 | L6 | L7 |
10 | L8 | L9 | L10 | L11 |
11 | L12 | L13 | L14 | L15 |
L0 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | NUL | BEL | SI | SO |
01 | STM | STX | ETX | ETM |
10 | EOL | BAS | TAB | SP |
11 | ENQ | ACK | NCK | CEN |
NUL - Empty BEL - Bell, Sound trigger, alert STM - Start of transmission STX - Start of text ETX - End of text ETM - End of transmission EOL - End of Line BAS - Backspace TAB - Horizontal Tabulation SP - Space ENQ - Enquiry ACK - Acknowledged NCK - Not acknowledged CEN - Cancel Enquiry
L1 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | ESC | BEL | SI | SO |
01 | LF | CR | DLE | DEL |
10 | FF | EM | SUB | CAN |
11 | CL | REF | TON | TOF |
ESC - Escape BEL - Bell, Sound trigger, alert LF - Line Feed CR - Carriage Return DLE - Data link escape (Escapes 4 bytes) DEL - Supr key FF - Form Feed (New page) EM - End of medium (No screen/memory left) SUB - Substitute, request an identical response due to malformation CAN - Cancel the data stream CL - Clear REF - ?? TON - ?? On TOF - ?? Off
L2 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | A | B | SI | SO |
01 | C | D | E | F |
10 | G | H | I | J |
11 | K | L | M | SP |
L3 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | N | O | SI | SO |
01 | P | Q | R | S |
10 | T | U | V | W |
11 | X | Y | Z | SP |
L4 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | 0 | 1 | SI | SO |
01 | 2 | 3 | 4 | 5 |
10 | 6 | 7 | 8 | 9 |
11 | 0 | & | ! | ? |
L5 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | a | b | SI | SO |
01 | c | d | e | f |
10 | g | h | i | j |
11 | k | l | m | SP |
L6 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | n | o | SI | SO |
01 | p | q | r | s |
10 | t | u | v | w |
11 | x | y | z | SP |
L7 | 00 | 01 | 10 | 11 | |
---|---|---|---|---|---|
00 | \ | @ | SI | SO | |
01 | # | $ | ~ | % | |
10 | ? | ! | / | \ | |
11 | = | + | - | * |
L8 | 00 | 01 | 10 | 11 |
---|---|---|---|---|
00 | { | } | SI | SO |
01 | < | > | [ | ] |
10 | ( | ) | : | ; |
11 | . | , | _ | ^ |
The character size is always 4 bit, and you can store two characters in a byte. It is possible to use 224 characters ( removing SI
and SO
)
SI
and SO
To move around character tables, on different levels, there are the Shift In SI
and Shift Out SO
control characters, that must be on every character table.
One of the inconveniences of RESCII is that control codes such as EOL
, SI L0
, BEL
or EM
require more than one operation, so it might become slow. It's recommended that you use a separate RESCII processing unit, that is able to asynchronously change tables and pass back information to the CPU, and even perform tasks such as sending an ENQ
.
SI
the RESCII Processing Unit should use the next 4 bits after a SI
code to jump to another Character Table,
BEL SI L5 BEL*
*This will trigger a completely different signal, to be exact, the character b
.
SO
Perhaps the most useful character table function, as it switches between the current number and the one below.
If you needed to put a lot of lowercase characters, you could, at the cost of more space and time, Shift In and change table, or you could go to L6
and use SO
Let's write this is text
:
Using SI
:
SI L6 t SI L5 h i SI L6 s SI L0 SP SI L5 i SI L6 s SI L0 SP SI L6 t SI L5 e SI L6 x t
Using SO
:
SI L6 t SO h i SO s SP SO i SO s SP t SO e SO x t
Stream input should be parsed according to the character table in use, character tables are hardcoded in the RPU, and a 4-bit register keeps track of the table. SI
and SO
codes are for internal use of the RPU, and a control output with an OK
signal is enough.
A stream output of 8 bits (for the 244 possible characters) that the CPU should be able to handle internally, since RESCII is just the encoding, not the way the CPU works with data.
Control output should be able to send interrupts, and possibly directly communicate with the network manager, for the network control codes.