< [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) >