nes-pascal

nes.run

English Português (Brasil)

nes.run conclui a inicialização e inicia a fase de runtime sincronizada por quadros:

nes.run;

Ela deve:

O runtime aguarda o VBlank e habilita a NMI, a renderização de fundo, a renderização de sprites e ambos os bits de renderização dos oito pixels mais à esquerda através de shadows de PPUCTRL e PPUMASK pertencentes ao compilador. O estado normal habilitado de PPUMASK, portanto, adiciona $1E enquanto preserva bits não relacionados do shadow. O conteúdo nas posições X $00..$07 fica visível por padrão; nenhuma configuração pública de máscara é fornecida atualmente. Shadows de rolagem mantêm seus padrões zerados ($00, $00) a menos que nes.set_scroll prepare um novo par. O estado pertencente ao runtime e as escritas de inicialização na PPU estão concluídos antes que a NMI seja habilitada.

Quando presente, nes.load_background() realiza sua transferência completa de 1 KiB para a PPU anteriormente na sequência de inicialização com a renderização desabilitada. nes.run permanece como o ponto único que habilita a renderização após o término de todas as transferências de inicialização.

Instruções após nes.run são executadas na thread principal. Um laço pode chamar nes.wait_frame para avançar uma vez por NMI. Programas existentes que terminam com nes.run continuam válidos: o compilador emite um laço estável implícito de espera (idle) após o bloco principal quando nenhum callback de atualização estiver registrado. Chamadas de paleta após nes.run preparam valores publicados atomicamente na RAM do runtime; o transmissor da NMI os consome antes de qualquer callback de VBlank do usuário.

Quando nes.on_update registra um callback, o laço implícito registra uma linha de base inicial persistente de quadros, aguarda até que o contador volátil seja diferente, armazena o valor observado mais recente, chama o procedimento de atualização uma vez com JSR direto e repete. Um quadro que chega durante uma atualização lenta, portanto, permanece pendente e é processado imediatamente após o retorno do callback. Backlogs são aglutinados para o quadro mais novo em vez de serem reexecutados. Antes de cada callback aceito, o runtime principal atualiza ambas as portas de controle uma vez. A lógica de atualização permanece no contexto principal normal. Um callback de VBlank registrado separadamente é executado na NMI.