Files
reddust/DOCS.md
2025-07-23 02:13:30 -03:00

65 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📚 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.
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 `//`.