Demonstrações com os hooks do MSX

4 views
Skip to first unread message

Marcelo Silveira

unread,
Oct 26, 2021, 3:51:51 PMOct 26
to msx...@googlegroups.com
Olá,

Fiz dois demos que utilizam os hooks do MSX, um deles para movimentar uma bolinha enquanto navegamos pela tela do MSX, outro para emitir uma voz digitalizada quando quatro comandos do basic são acionados: print, list, width e screen.

No Youtube:



Na página:



Eu também aproveitei para atualizar o artigo sobre hooks no curso de Assembly, com as experiências que adquiri:



Abraços,
Marcelo

Bruno S. Drago

unread,
Oct 30, 2021, 12:32:38 PMOct 30
to msx...@googlegroups.com

Cara, legal teu trabalho, ja elogiei aqui antes.

Agora pergunta de noobie, pq quando mexi com isso em 19XX e guarana com rolha, eu tinha a mente mais afiada.

O hook ele funciona como:

- um programa paralelo? Especie de multitask? Onde ele funciona independente do que estiver rodando.

- um subrotina (ou seja, eu pego o programa atual e enfio essa chamada la, no caso do video, o intereptadpor BASIC

- ou uma corrotina, algo que vc manda executar, ele executa QUANDO DA, e depois devolve o controle principal pro programa que chamou ele?

O exemplo de trigger do SGBD nao me é totalmente familiar kkk


Abs

Bruno

--
Esta mensagem foi postada na Lista MSXALL via Google Groups (lista.msxall.com).
O conteúdo desta Lista e suas mensagens são publicadas baixo Creative Commons License (CC 4.0 Attribution).
---
Você recebeu essa mensagem porque está inscrito no grupo "MSXALL :: Tudo sobre o Universo MSX" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para msxall+un...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/msxall/516756402.1943466.1635277907316%40mail.yahoo.com.

Marcelo Silveira

unread,
Oct 30, 2021, 4:15:51 PMOct 30
to msx...@googlegroups.com

Bruno, tudo bem?

Respondendo às suas perguntas:

Um programa paralelo? Especie de multitask? Onde ele funciona independente do que estiver rodando.

Parece multitask, mas não é. É simplesmente um mecanismo existente em algumas rotinas da BIOS., que antes de executar seu código, desviam para seu respectivo endereço de hook. O objetivo disso é dar a oportunidade de algum programa rodar antes delas, permitindo inclusive o uso de expansões.

A primeira linha de execução em Assembly de uma rotina dessas que possui hook é a seguinte:

CALL <end_hook>

Como os hooks inicialmente possuem o valor RET (&HC9), o desvio retorna imediatamente para a rotina chamadora, sem fazer qualquer coisa. Em suma, o hook é sempre executado por tais rotinas.

Como cada hook possui apenas 5 bytes, somente tenho a possibilidade de criar um desvio para outra área de memória. Dessa forma, eu irei criar um desvio no hook de alguma rotina da BIOS para um programa meu . Após o meu programa rodar, ele retorna o controle para o hook, que por sua vez, retorna à rotina da BIOS chamadora.

No caso do pong, a cada interrupção do sistema, as coordenadas da bolinha são atualizadas em um pixel.

No caso dos comandos que falam, cada vez que uma rotina daquelas é chamada pelo comando do usuário, o hook desvia para um programa que reproduz uma voz digitalizada.

Para maiores informações, com um exemplo didático em Basic, ver:

Abraços,
Marcelo
Reply all
Reply to author
Forward
0 new messages