Eletrônica
Gyroscope v. 2 e carregador assembly para Lerm CC1
Em postagem anterior sobre adaptação do Gyroscope para Beta 48, mostrei como é possível comprimir bloco de bytes para ter espaço de memória.
Mesmo assim, se a interface de drive for uma Beta 128, pode não haver espaço de RAM suficiente para rodar um carregador BASIC com comandos TR-DOS. Agora que fiz uma 2ª versão do Gyroscope adaptado que funciona nas versões 48 e 128 da Beta, aproveito para fazer um tutorial.
Quando o bloco comprimido for expandido, haverá menos espaço para o monitor BASIC. O Lerm Code Compressor 1 inteligentemente possui uma rotina que elimina os 112 bytes de variáveis de sistema do TR-DOS. Mesmo assim, pode haver ocasiões em que falta espaço. Portanto a solução é utilizar uma rotina em assembly. A listagem completa é:
ORG 23872
DI ; Desabilita interrupções.
LD SP,24060 ; Coloca pilha em local seguro.
LD BC,26640 ; Descomprime bloco.
CALL 26640
LD HL,52930 ; Endereço de início do jogo.
EX (SP),HL
RET ; Inicia jogo (desativar para POKE).
XOR A
LD (53922),A ; Vidas infinitas.
LD (59149),A ; Tempo infinito.
RET
END
O melhor lugar para colocar esta rotina é na primeira linha BASIC, que deve ter um comando REM seguido de 25 espaços. O início desta área fica em
PEEK 23635+256*PEEK 23636+5
que, no TK90X com variáveis de sistema do TR-DOS, fica em 23872. Por isso o
ORG 23872
. Este é um bom local, pois não será sobreposto durante a descompressão.
No início as interrupções são desabilitadas, o que é aconselhável, pois a pilha da máquina será mudada na instrução seguinte. A pilha deve ficar fora da área a ser ocupada pelo bloco expandido; na prática, é bom deixar pelos menos uns 3 bytes de margem de segurança. Como o bloco expandido ocupará os endereços de 24064 a 65535, atribui-se o valor 24060 para o apontador de pilha (SP):
DI ; Desabilita interrupções.
LD SP,24060 ; Coloca pilha em local seguro.
Em seguida é feita a decompressão propriamente dita:
LD BC,26640 ; Descomprime bloco.
CALL 26640
A rotina de descompressão fica 15 bytes após o endereço base, isto é, em 26640. Antes de chamar esta rotina, o par de registrador BC deve conter o valor de seu endereço, por uma peculiaridade do Lerm CC1.
Por fim, coloca-se no topo da pilha o endereço do início do jogo (52930), que é rodado pela instrução RET:
LD HL,52930 ; Endereço de início do jogo.
EX (SP),HL
RET ; Inicia jogo (desativar para POKE).
A instrução RET acima deve ser removida (trocada por NOP) se for desejado rodar o restante do programa
assembly:
XOR A
LD (53922),A ; Vidas infinitas.
LD (59149),A ; Tempo infinito.
RET
cuja finalidade é fazer POKEs de vidas e tempo infinitos. Com isto fica fácil configurar o jogo para rodar com ou sem o
cheat.
A listagem do carregador BASIC é simples:
1 REM NEXT 1 DRAW ]?
10 BORDER NOT PI: PAPER NOT PI: INK NOT PI: CLEAR VAL "26e3": LET d=VAL "15363": IF PEEK d<>CODE "NOT " THEN LET d=VAL "15619"
20 RANDOMIZE USR d: REM : LOAD "GYRO1"CODE
30 RANDOMIZE USR d: REM : LOAD "GYRO2"CODE
40 RANDOMIZE USR VAL "PEEK 23635+256*PEEK 23636+6"
A linha 1 contém o comando REM com o código de máquina, a linha 10 entre outras coisas detecta o tipo da Beta e atribui endereço apropriada para entrada do DOS, as linhas 20 e 30 carregam a tela e o bloco de bytes do jogo e a linha 40, executa o código de máquina para descomprimir e executar o jogo.
Para baixar os arquivos Hobeta do Gyroscope v. 2, acesse Google Drive ou 4 Shared.
Por fim, aqui está o vídeo completo do jogo:
loading...
-
Outra Rotina De Detecção De Ram 48/128k
Eu publiquei nesta postagem, uma rotina que faz a detecção no TK90X da configuração com ou sem a TKMEM-128 (128 ou 48K de RAM). Modifiquei-a e consegui fazer com que ficasse menor ainda (25 bytes). Esta rotina testa se ocorre chaveamento entre...
-
Detecção De Ram 48/128
Conforme tinha prometido na postagem sobre incompatibilidade do Bubble Bobble, eu vou mostrar a rotina de detecção de tamanho de RAM 48/128K que elaborei na ocasião. A ideia era fazer uma rotina que não altere o conteúdo da RAM a ser testada;...
-
Auf Wiedersehen Monty
Eu adaptei o Auf Wiedersehen Monty da Gremlin Graphics para Beta 48 (e 128 também). Em modo 128K, este jogo tem som para a Explorer. O carregador BASIC detecta quando há RAM extra, seja no Spectrum 128, ou com a TKMEM-128. A listagem é: 10...
-
Thundercats V. 2 Para Basic 128
Mal acabei de lançar uma adaptação do Thundercats para Beta e TKMEM-128 e estou com a versão 2. A versão anterior tinha um problema: não consegue carregar a partir do BASIC 128, portanto tinha que dar um 'USR 0' antes. Na versão 2 não...
-
Interface De Demo Do Tk90x
Visitando o site do Eduardo Luccas, encontrei um item interessante para download que seria a imagem (dump) da EPROM da interface de demonstração do TK90X. Pela descrição dada, seria uma interface conectada a TK90X em exposição em loja, que ficaria...
Eletrônica