Outro adaptador de Wii Nunchuck para MSX, só que desta vez utilizando um diminuto 68HC908QB8. O funcionamento é idêntico ao das versões anteriores, com a manete analógica simulando as quatro direções básicas em conjunto com os acelerômetros nos eixos X e Y. Os botões 1 e 2 do MSX são mapeados nos botões C e Z do nunchuck.
A foto abaixo mostra o adaptador conectado ao HotBit.
E eis aqui um close da plaquinha. O encapsulamento do CI é um TSSOP de 16 pinos com espaçamento entre os terminais de apenas 0,65mm.
Mostrando postagens com marcador Dispositivos. Mostrar todas as postagens
Mostrando postagens com marcador Dispositivos. Mostrar todas as postagens
quarta-feira, 25 de abril de 2012
domingo, 30 de novembro de 2008
Expansão de dispositivos
Eis o resultado de mais alguns estudos sobre a expansão de dispositivos no MSX.
O MSX tem alguns dispositivos padrão, a saber: LPT - impressora, CRT - Tela de texto, GRP - Tela gráfica, e CAS - fita cassete.
Mas além destes, outros dispotitivos podem existir, pois os dispositivos são previstos na Bios do MSX como um mecanismo padronizado de buffers para ser fazer operações de entrada/saída de dados.
Um comando típico, para "abrir" um dispositivo personalizado é:
OPEN "MEUDISP:" FOR OUTPUT AS #1,
Quando o Basic recebe um comando como o abaixo, os seguintes eventos acontecem:
- Toda vez que o MSX tenta abrir um dispositivo que não seja padrão, ele chama uma rotina de procura de dispositivos, que analisa a tabela SLTATR à procura de entradas cujo sétimo bit (máscara 0x40) sejam diferentes de zero (Durante o 'boot' a Bios varreu todos os slots e setou estes bits toda vez que encontrou as posições 06 e 07 sejam diferentes de zero)
- Ao encontrar uma ROM que contém uma entrada de dispositivo válida, a BIOS chama esta ROM com o registro A=FF e o nome do dispositivo (no caso MEUDISP) vai estar no buffer PROCNM, terminado em zero.
- O código escrito dentro da ROM do dispositivo tem que, em primeiro lugar, ver se o valor do registrador A é FF. Se for, deve analisar o nome em PROCNAM (da mesma maneira que se faz para criar comandos chamáveis via CALL). Caso o nome não bata, deve-se retornar a flag de Carry 'setada', e a Bios vai procurar pelo 'MEUDISP' em outro slot.
- Mas vamos supor que a ROM tenha o dispositivo MEUDISP e ele seja o terceiro dispositivo (pois uma ROM pode ter até 4 dispositivos expandidos). Daí a rotina deve retornar em A o número 2 e a flag Carry deve estar em zero 'resetada'
- Em seguida a Bios converte a posição do slot em que o dispositivo foi encontrado mais o número do dispositivo em um "código interno" de dispositivo. Este código é colocado no quinto byte do FCB atual. É utilizando este código que a Bios sabe como chamar o dispositivo associado ao FCB.
- Em seguida, a BIOS chama o dispositivo novamente, mas desta vez o registrador A contém o número do dispositivo chamado, o par HL contém o endereço do FCB, o registrador D contém o "código interno" do dispositivo, e o registrador E contém o modo de abertura. O modo pode ser:
"FOR INPUT" (01H)
"FOR OUTPUT" (02H)
"FOR APPEND" (08H)
"RANDOM MODE" (04H), se nenhum modo for especificado
Não vou entrar em detalhes de como abrir o dispositivo, mesmo porque não experimentei ainda o suficiente. Mas uma das coisas necessárias, é mudar o valor do primeiro byte do FCB para o modo correspondente.
Já com o dispositivo aberto, a BIOS passa dados para o dispositivo (que nada mais é do que o manipulador de um buffer) utilizando o registrador C para o dado, o registrador A para a operação desejada e o dispositivo é identificado pela variável DEVICE.
por exemplo, ao se digitar
PRINT #1, "A"
Temos 3 chamadas para o dispositivo. Em todas elas o registrador A tem o valor 6, que significa saída sequencial, e a variável DEVICE guarda o número do dispositivo identificado na hora do "open". Na primeira chamada, o valor de C era 65, que corresponde ao A maiúsculo. Na segunda e terceira, C assumiu, respectivamente, o valor 13 e 10, que correspondem a um CR-LF.
Caso houvéssemos colocado um ponto e vírgula ao final da expressão, apenas o A seria enviado e apenas uma chamada seria feita.
O MSX tem alguns dispositivos padrão, a saber: LPT - impressora, CRT - Tela de texto, GRP - Tela gráfica, e CAS - fita cassete.
Mas além destes, outros dispotitivos podem existir, pois os dispositivos são previstos na Bios do MSX como um mecanismo padronizado de buffers para ser fazer operações de entrada/saída de dados.
Um comando típico, para "abrir" um dispositivo personalizado é:
OPEN "MEUDISP:" FOR OUTPUT AS #1,
Quando o Basic recebe um comando como o abaixo, os seguintes eventos acontecem:
- Toda vez que o MSX tenta abrir um dispositivo que não seja padrão, ele chama uma rotina de procura de dispositivos, que analisa a tabela SLTATR à procura de entradas cujo sétimo bit (máscara 0x40) sejam diferentes de zero (Durante o 'boot' a Bios varreu todos os slots e setou estes bits toda vez que encontrou as posições 06 e 07 sejam diferentes de zero)
- Ao encontrar uma ROM que contém uma entrada de dispositivo válida, a BIOS chama esta ROM com o registro A=FF e o nome do dispositivo (no caso MEUDISP) vai estar no buffer PROCNM, terminado em zero.
- O código escrito dentro da ROM do dispositivo tem que, em primeiro lugar, ver se o valor do registrador A é FF. Se for, deve analisar o nome em PROCNAM (da mesma maneira que se faz para criar comandos chamáveis via CALL). Caso o nome não bata, deve-se retornar a flag de Carry 'setada', e a Bios vai procurar pelo 'MEUDISP' em outro slot.
- Mas vamos supor que a ROM tenha o dispositivo MEUDISP e ele seja o terceiro dispositivo (pois uma ROM pode ter até 4 dispositivos expandidos). Daí a rotina deve retornar em A o número 2 e a flag Carry deve estar em zero 'resetada'
- Em seguida a Bios converte a posição do slot em que o dispositivo foi encontrado mais o número do dispositivo em um "código interno" de dispositivo. Este código é colocado no quinto byte do FCB atual. É utilizando este código que a Bios sabe como chamar o dispositivo associado ao FCB.
- Em seguida, a BIOS chama o dispositivo novamente, mas desta vez o registrador A contém o número do dispositivo chamado, o par HL contém o endereço do FCB, o registrador D contém o "código interno" do dispositivo, e o registrador E contém o modo de abertura. O modo pode ser:
"FOR INPUT" (01H)
"FOR OUTPUT" (02H)
"FOR APPEND" (08H)
"RANDOM MODE" (04H), se nenhum modo for especificado
Não vou entrar em detalhes de como abrir o dispositivo, mesmo porque não experimentei ainda o suficiente. Mas uma das coisas necessárias, é mudar o valor do primeiro byte do FCB para o modo correspondente.
Já com o dispositivo aberto, a BIOS passa dados para o dispositivo (que nada mais é do que o manipulador de um buffer) utilizando o registrador C para o dado, o registrador A para a operação desejada e o dispositivo é identificado pela variável DEVICE.
por exemplo, ao se digitar
PRINT #1, "A"
Temos 3 chamadas para o dispositivo. Em todas elas o registrador A tem o valor 6, que significa saída sequencial, e a variável DEVICE guarda o número do dispositivo identificado na hora do "open". Na primeira chamada, o valor de C era 65, que corresponde ao A maiúsculo. Na segunda e terceira, C assumiu, respectivamente, o valor 13 e 10, que correspondem a um CR-LF.
Caso houvéssemos colocado um ponto e vírgula ao final da expressão, apenas o A seria enviado e apenas uma chamada seria feita.
Assinar:
Postagens (Atom)
