289 lines
5.3 KiB
Markdown

< [Voltar](chapter-8.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-10.md) >
# ⚡ **Eventos e Interrupções**
## 1. Visão Geral
PROMETEU distingue claramente **execução normal**, **eventos** e **interrupções**.
Nada ocorre “fora do tempo”.
Nada interrompe o sistema sem custo.
Nada acontece sem um ponto bem definido no ciclo de execução.
> Eventos são sinais.
Interrupções são decisões da máquina.
>
Este capítulo define:
- o que PROMETEU considera um evento
- como interrupções são modeladas
- quando elas podem ocorrer
- como se relacionam com ciclos, CAP e determinismo
---
## 2. Filosofia de Eventos em PROMETEU
PROMETEU **não utiliza callbacks assíncronos invisíveis**.
Todo evento:
- é registrado
- é entregue em momento previsível
- é tratado dentro do loop principal
Esse modelo evita:
- concorrência implícita
- race conditions ocultas
- efeitos colaterais não determinísticos
PROMETEU favorece:
> controle explícito sobre reatividade.
>
---
## 3. Eventos
### 3.1 Definição
Um **evento** em PROMETEU é um **sinal lógico** gerado pelo sistema ou pelo programa, que indica que algo ocorreu.
Exemplos de eventos:
- fim de frame
- timer expirado
- troca de estado do sistema
- erro de execução
Eventos **não executam código automaticamente**.
Eles apenas **informam**.
---
### 3.2 Fila de Eventos
PROMETEU mantém uma **fila de eventos**:
- eventos são enfileirados
- a fila é processada em ordem
- o processamento ocorre em pontos definidos do frame
Eventos:
- não interrompem execução arbitrariamente
- não executam fora do loop
---
## 4. Interrupções
### 4.1 Definição
Uma **interrupção** é um evento especial, tratado pelo sistema como **prioritário**, que pode:
- alterar o fluxo normal de execução
- executar código específico do sistema
- impactar ciclos e orçamento
Interrupções são **raras e explícitas**.
---
### 4.2 O que NÃO é uma interrupção
Em PROMETEU, **não são interrupções**:
- input de botão
- colisões
- timers comuns
- lógica de jogo
Esses são tratados como **estado ou eventos normais**.
---
## 5. Tipos de Interrupções em PROMETEU
PROMETEU define um conjunto pequeno e bem controlado de interrupções.
### 5.1 Interrupção de Frame (VBlank Conceitual)
O final de cada frame gera uma **interrupção lógica de sincronização**, responsável por:
- swap de framebuffer
- commit de áudio
- sincronização de estado
Essa interrupção:
- ocorre no SYNC
- tem custo fixo
- não executa código do usuário
---
### 5.2 Interrupção de Sistema
Gerada por condições excepcionais:
- erro fatal de VM
- violação de memória
- instrução inválida
Resultado:
- execução é interrompida
- estado da VM é preservado
- relatório detalhado é gerado
---
### 5.3 Interrupções Temporizadas (Timers)
PROMETEU pode oferecer **timers do sistema**, modelados como:
- contadores baseados em frames
- sinais gerados ao atingir zero
Timers:
- não disparam código automaticamente
- geram eventos consultáveis
Exemplo conceitual:
```
if (timer.expired(T1)) {
// tratar evento
}
```
---
## 6. Relação entre Eventos, Interrupções e o Loop
O fluxo completo pode ser representado assim:
```
FRAME N
──────────────
SAMPLEINPUT
PROCESS EVENTS
UPDATE
DRAW
AUDIO
INTERRUPT: VBLANK
SYNC
──────────────
```
Importante:
- eventos são processados antes da lógica principal
- interrupções ocorrem apenas em pontos seguros
- nenhuma interrupção ocorre “no meio” de uma instrução
---
## 7. Custos e Orçamento
Eventos e interrupções:
- consomem ciclos
- participam do CAP
- aparecem na certificação
Exemplo de relatório:
```
Frame 18231:
Event processing:120cycles
VBlank interrupt:80cycles
```
Nada é gratuito.
---
## 8. Determinismo e Reprodutibilidade
PROMETEU garante:
- mesma sequência de eventos → mesmo comportamento
- interrupções sempre no mesmo ponto do frame
- timers baseados em frame count, não em tempo real
Isso permite:
- replays confiáveis
- debugging preciso
- certificação justa
---
## 9. Boas Práticas
PROMETEU incentiva:
- tratar eventos como dados
- consultar eventos explicitamente
- evitar lógica pesada em handlers
- usar timers em vez de polling excessivo
PROMETEU desencoraja:
- simular callbacks assíncronos
- depender de ordem implícita
- usar eventos como “atalho” para lógica complexa
---
## 10. Relação com Microcontroladores
O modelo reflete MCUs reais:
| MCU | PROMETEU |
| --- | --- |
| ISR | Interrupção explícita |
| Loop principal | Loop PROMETEU |
| Flags | Eventos |
| Timers | Timers por frame |
Mas sem:
- concorrência real
- interrupções imprevisíveis
PROMETEU **ensina o conceito**, não o caos.
---
## 11. Implicações Pedagógicas
Este modelo permite ensinar:
- diferença entre evento e interrupção
- sincronização segura
- controle de fluxo em sistemas reativos
- impacto de decisões temporais
Tudo com **ordem, clareza e mensuração**.
---
## 12. Resumo
- eventos informam, não executam
- interrupções são raras e controladas
- nenhuma execução ocorre fora do loop
- custos são explícitos
- comportamento é determinístico
< [Voltar](chapter-8.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-10.md) >