5.1 KiB
5.1 KiB
📚 Documentação da Linguagem RedDust
RedDust é uma linguagem minimalista projetada para ser executada em uma máquina virtual ou em um computador físico construído com redstone (7SPM - Seven Segment Programmable Machine).
✅ Formato das Instruções
Cada linha do programa deve conter 4 valores em hexadecimal, separados por ponto e vírgula (;), conforme:
CMD;A;B;C
- CMD → Código da instrução (0 a F)
- A, B, C → Operandos (endereços de memória ou valores imediatos)
- Cada instrução ocupa 4 dígitos obrigatórios para manter compatibilidade com a arquitetura 7SPM.
- Valores em hexadecimal de 1 digito, e em letra maiúscula.
Exemplo:
1;1;A;0 // INPUT → Salva valor imediato A (10) no registrador 1
🔢 Tabela de Instruções
| Código | Comando | Descrição | Exemplo |
|---|---|---|---|
| 0 | HALT | Finaliza a execução do programa. | 0;0;0;0 // encerra o programa |
| 1 | INPUT | Lê um número do usuário (se B=0) ou usa valor imediato (B≠0) e salva em A. | 1;1;5;0 // salva 5 no R1 |
| 2 | OUTPUT | Exibe o valor armazenado no endereço A. | 2;1;0;0 // mostra valor de R1 |
| 3 | ADD | Soma (mem[A] + mem[B]) e salva em C. | 3;1;2;3 // R3 = R1 + R2 |
| 4 | SUB | Subtrai (mem[A] - mem[B]) e salva em C. | 4;1;2;3 // R3 = R1 - R2 |
| 5 | DIV | Divide (mem[A] ÷ mem[B]) e salva em C (divisão inteira). | 5;1;2;3 // R3 = R1 / R2 |
| 6 | MUL | Multiplica (mem[A] × mem[B]) e salva em C. | 6;1;2;3 // R3 = R1 * R2 |
| 7 | COND JUMP | Pula para a linha C se mem[A] == B. | 7;1;3;8 // Se R1 == 3 → pula para linha 8 |
| 8 | JUMP | Pula incondicionalmente para a linha A. | 8;A;0;0 // Pula para linha A (10) |
| 9 | CLEAR | Zera mem[A]. | 9;1;0;0 // R1 = 0 |
| A | RANDOM | Salva em A um número aleatório entre B e C. | A;A;B;1 // R1 = valor aleatório (A-B) |
| B | CMP GREATER | Compara mem[A] > mem[B]; salva 1 (sim) ou 0 (não) em C. | B;1;2;3 // Se R1 > R2 → R3 = 1, senão 0 |
| C | CMP EQUAL | Verifica se mem[A] == mem[B], salva 1 (sim) ou 0 (não) em C. | C;1;2;0 // troca R1 com R2 |
| D | MOVE | Copia mem[A] para mem[B]. | D;1;2;0 // R2 = R1 |
| E | INC/DEC | Incrementa (flag=1) ou decrementa (flag=0) mem[A]. | E;1;1;0 // R1++ | E;1;0;0 // R1-- |
| F | WAIT | Pausa por A segundos (HEX → decimal). | F;A;0;0 // Espera 10 segundos |
✅ Exemplo de Programa
Objetivo: Solicitar 2 números, somar e exibir o resultado.
1;1;0;0 // INPUT → mem[1]
1;2;0;0 // INPUT → mem[2]
3;1;2;3 // ADD → mem[3] = mem[1] + mem[2]
2;3;0;0 // OUTPUT → mem[3]
0;0;0;0 // HALT
⚠ Observações
- Todos os valores são HEX (0-F).
- Cada linha deve ter 4 parâmetros obrigatórios para compatibilidade com o 7SPM.
- Comentários iniciam com
//.