Gyroscope v. 2 e carregador assembly para Lerm CC1
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








.