No hardware
- <SHIFT>+<RESET>
- Conecta-se ao pino ¬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.
Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL | Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL | Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL |
@ | $40/64:@ | $60/96:` | $00/0:nul | $20/32: | P | $50/80:P | $70/112:p | $10/16:dle | $30/48:0 | 0 | $30/48:0 | $20/32: | $60/96:` | $50/80:P |
A | $41/65:A | $61/97:a | $01/1:soh | $21/33:! | Q | $51/81:Q | $71/113:q | $11/17:dc1 | $31/49:1 | 1 | $31/49:1 | $21/33:! | $61/97:a | $51/81:Q |
B | $42/66:B | $62/98:b | $02/2:stx | $22/34:" | R | $52/82:R | $72/114:r | $12/18:dc2 | $32/50:2 | 2 | $32/50:2 | $22/34:" | $62/98:b | $52/82:R |
C | $43/67:C | $63/99:c | $03/3:etx | $23/35:# | S | $53/83:S | $73/115:s | $13/19:dc3 | $33/51:3 | 3 | $33/51:3 | $23/35:# | $63/99:c | $53/83:S |
D | $44/68:D | $64/100:d | $04/4:eot | $24/36:$ | T | $54/84:T | $74/116:t | $14/20:dc4 | $34/52:4 | 4 | $34/52:4 | $24/36:$ | $64/100:d | $54/84:T |
E | $45/69:E | $65/101:e | $05/5:enq | $25/37:% | U | $55/85:U | $75/117:u | $15/21:nak | $35/53:5 | 5 | $35/53:5 | $25/37:% | $65/101:e | $55/85:U |
F | $46/70:F | $66/102:f | $06/6:ack | $26/38:& | V | $56/86:V | $76/118:v | $16/22:syn | $36/54:6 | 6 | $36/54:6 | $26/38:& | $66/102:f | $56/86:V |
G | $47/71:G | $67/103:g | $07/7:bel | $27/39:' | W | $57/87:W | $77/119:w | $17/23:etb | $37/55:7 | 7 | $37/55:7 | $27/39:' | $67/103:g | $57/87:W |
H | $48/72:H | $68/104:h | $08/8:bs | $28/40:( | X | $58/88:X | $78/120:x | $18/24:can | $38/56:8 | 8 | $38/56:8 | $28/40:( | $68/104:h | $58/88:X |
I | $49/73:I | $69/105:i | $09/9:tab | $29/41:) | Y | $59/89:Y | $79/121:y | $19/25:em | $39/57:9 | 9 | $39/57:9 | $29/41:) | $69/105:i | $59/89:Y |
J | $4A/74:J | $6A/106:j | $0A/10:lf | $2A/42:* | Z | $5A/90:Z | $7A/122:z | $1A/26:sub | $3A/58:: | : | $3A/58:: | $2A/42:* | $6A/106:j | $5A/90:Z |
K | $4B/75:K | $6B/107:k | $0B/11:vt | $2B/43:+ | RETURN | $0D/13:cr | $7B/123:{ | $1B/27:esc | $3B/59:; | ; | $3B/59:; | $2B/43:+ | $6B/107:k | $0D/13:cr |
L | $4C/76:L | $6C/108:l | $0C/12:ff | $3C/60:< | SPACE | $20/32: | $7C/124:| | $1C/28:fs | $2C/44:, | , | $2C/44:, | $3C/60:< | $6C/108:l | $20/32: |
M | $4D/77:M | $6D/109:m | $0D/13:cr | $3D/61:= | RUBOUT | $7F/127:del | $7D/125:} | $1D/29:gs | $2D/45:- | - | $2D/45:- | $3D/61:= | $6D/109:m | $7F/127:del |
N | $4E/78:N | $6E/110:n | $0E/14:so | $3E/62:> | ↑ | $5E/94:↑ | $7E/126:~ | $1E/30:rs | $2E/46:. | . | $2E/46:. | $3E/62:> | $6E/110:n | $5E/94:↑ |
O | $4F/79:O | $6F/111:o | $0F/15:si | $3F/63:? | / | $2F/47:/ | $3F/63:? | $6F/111:o | $5F/95:← |
Modo de jogo
As seguintes teclas e combinações retornam valores diferentes:
Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL | Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL | Tecla | Código | +SHIFT | +CTRL | +SHIFT +CTRL |
RETURN | $5B/91:[ | ; | $5B/91:[ | |||||||||||
L | $2C/44:, | SPACE | $5C/92:\ | $3C/60:< | , | $3C/60:< | $2C/44:, | $5C/92:\ | ||||||
M | $2D/45:- | RUBOUT | $5D/93:] | $3D/61:= | - | $3D/61:= | $2D/45:- | $5D/93:] | ||||||
N | $2E/46:. | ↑ | $3E/62:> | . | $3E/62:> | $2E/46:. | ||||||||
O | $2F/47:/ | / | $3F/63:? | $2F/47:/ |
(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 caracterCHR$(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 controleCHR$(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 comandoAUTO
. - <@> 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 usaCHR$(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>
-
- Durante a execução de um programa, interrompe a execução com a mensagem "PAUSA EM <número de linha>" e volta ao modo direto. A execução do programa pode ser retomada de onde parou com o comando
CONT
. - Durante a execução de uma linha de comandos em modo direto, interrompe a execução com a mensagem "PAUSA".
- Durante a execução de um comando
LIST
, interrompe a listagem com a mensagem "PAUSA".
- Durante a execução de um programa, interrompe a execução com a mensagem "PAUSA EM <número de linha>" e volta ao modo direto. A execução do programa pode ser retomada de onde parou com o comando
- <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.
Nenhum comentário:
Postar um comentário