Teclado

No hardware

<SHIFT>+<RESET>

Emite o sinal ¬RESET ao Z80, reiniciando o MC1000. Isto é implementado diretamente em hardware. A tecla <RESET>, sozinha ou em combinação, é visível na malha do teclado que o MC1000 lê pelo PSG AY-3-8910.

Na rotina SKEY? da ROM

Esta é a rotina padrão de leitura do teclado. Ela tem um comportamento durante o modo BASIC (variável do sistema HEAD = $FF/255) e outro no modo de jogo (HEAD ≠ $FF/255).

Modo BASIC

No teclado do MC1000 nota-se que as teclas <0>, <@>, <↑>, <RETURN>, <SPACE> e <RUBOUT> não têm uso previsto com a tecla <SHIFT>. E <CTRL> provavelmente só deveria ser combinada com letras, <@> e <↑>. Combinações com <SHIFT>+<CTRL> são completamente imprevistas. Os valores retornados nos casos imprevistos são meros efeitos colaterais do cálculo para os casos previstos.

Modo de jogo

As seguintes teclas e combinações retornam valores diferentes:

(Onde não houver valor indicado, o valor é o mesmo da tabela anterior.)

Note-se que a combinação <CTRL>+<H> é automaticamente capturada por SKEY?, disparando a rotina de alteração do "tópico do jogo".

Na rotina GETL da ROM

Esta rotina é usada pelo interpretador BASIC para ler uma linha de comando e para obter resposta a comando INPUT.

Internamente os caracteres vão sendo armazenados no buffer de linha ($0100–$01FF).

A teclas e combinações de teclas abaixo são "consumidas" pela rotina e acabam não fazendo parte da linha digitada.

<RETURN> ou <CTRL>+<M>

Insere um caracter CHR$(0) no buffer de linha na posição do cursor, emite uma quebra de linha e termina a rotina GETL. O caracter CHR$(0) marca o fim da linha digitada, portanto, se o cursor foi movido com as teclas de movimento abaixo, tudo o que foi digitado e que ficou da posição do cursor até o fim da linha será descartado.

<CTRL>+<H>, <CTRL>+<J>, <CTRL>+<K> e <CTRL>+<L>

Durante a digitação de uma linha no modo direto ou resposta a um comando INPUT, movimentam o cursor dentro do espaço dos caracteres já digitados, respectivamente para a esquerda, para baixo, para cima e para a direita. Devido ao bug na impressão do caracter de controle CHR$(12), o cursor não anda para a direita, consequentemente este recurso para a digitação da linha não funciona a contento e nem é mencionado no manual do BASIC.

<RUBOUT>

Embora a tecla gere um código diferente, seu comportamento aqui é igual à combinação <CTRL>+<H>: movimenta o cursor para a esquerda sem apagar os caracteres na tela.

<CTRL>+<C>

Emite uma quebra de linha, desativa a geração automática de número de linhas (instrução AUTO do BASIC), ativa o flag de carry do Z80 (para sinalizar o cancelamento da digitação) e termina a rotina GETL e emite uma quebra de linha. Diferentemente de <RETURN>, devolve o flag de carry do Z80 ligado para indicar que foi pressionado <CTRL>+<C>. Também desliga a geração automática de número de linhas do comando AUTO.

<@> ou <CTRL>+<U>

Durante a digitação de uma linha em modo direto ou resposta a um comando INPUT, descarta o que já foi digitado, emite uma quebra de linha e aguarda nova digitação.

Esse uso da tecla <@> remonta ao BASIC da Microsoft para Altair 8800. Vide http://www.altair32.com/pdf/Altair_8800_BASIC_Reference_Manual_1975.PDF, página 41.

<CTRL>+<↑>

Limpa a tela e move o cursor para o canto superior esquerdo da tela.

<CTRL>+<@>

Esta combinação de teclas gera CHR$(0). Como GETL usa CHR$(0) para marcar o fim da linha digitada, a rotina substitui o <CTRL>+<@> digitado pelo usuário pelo caracter "8" (aparentemente, uma escolha arbitrária).

No interpretador BASIC

Note-se que ao ler uma linha do teclado (linha entrada em modo direto, resposta a comando INPUT) o interpretador BASIC usa a rotina GETL, então as combinações de tecla acima valem nessas situações. Além disso:

<CTRL>+<C>

<CTRL>+<S>

Durante a execução de um programa, execução de uma linha de comandos em modo direto ou execução de um comando LIST, inicia uma pausa até que outra tecla seja pressionada.