Gyroscope e Lerm Code Compressor 1
Eletrônica

Gyroscope e Lerm Code Compressor 1


Adaptei o jogo Gyroscope do TK90X para a interface Beta 48, que está disponível aqui neste link.

Aproveitando esta ocasião, apresento o ótimo Lerm Code Compressor 1 que tanto tem me ajudado nas adaptações dos programas para a Beta 48. O programa e seu manual podem ser encontrados no World of Spectrum.

A maior parte dos programas comerciais para o TK90X consiste em uma parte curta de BASIC que carrega as demais partes (em geral uma tela e um ou mais blocos de códigos de máquina). Como tais programas são quase que totalmente feitos em linguagem de máquina, o espaço destinado ao BASIC costuma ser pequeno. Por exemplo, a listagem BASIC do Gyroscope é:

10 BORDER 0: INK 0: PAPER 0: CLS: INK 6: PAPER 8: BRIGHT 1: CLEAR 24063: LOAD ""SCREEN$ : PRINT AT 20,0;: LOAD ""CODE : RAND USR 52930

A adaptação para Beta 48 consiste em alterar o BASIC para que carregue as partes do disco ao invés da fita. No entanto o próprio sistema operacional do Beta (TRDOS) ocupa 112 bytes extras de RAM que, em alguns casos, inviabilizam a adaptação de forma direta. Na listagem acima, Gyroscope reserva grande parte da RAM para o código de máquina (a partir de 24064). Como o BASIC começa em 23755, restariam apenas 309 bytes. O TRDOS piora as coisas ao empurrar o início do BASIC para 23867, deixando ainda menos espaço.

Para resolver este problema foi criado o Code Compressor 1 (ou CC1), cuja tela após carregamento é a seguinte:


O bloco principal de código de máquina do Gyroscope, com nome "code", inicia-se no endereço 24064 e tem comprimento de 41472 bytes; em outras palavras, ocupa a RAM entre os endereços 24064 a 65535. O objetivo aqui é comprimir este bloco para que seja liberado um espaço de RAM. Para isto, posiciona-se a fita para o início do bloco e carrega-se no CC1 com o comando load.

Uma vez feito o carregamento, passa-se à compressão com o comando Compress. Será pedido o endereço do início do bloco que, neste caso, será 24064:


Na sequência, será pedido o endereço do final do bloco, que será 65535:


A seguir o programa pede o endereço destino do bloco depois de ser descomprimido. Como não se deseja mover o bloco, o valor será igual ao inicial, isto é, 24064:


Deve-se instruir então o que deve acontecer após a descompressão: 1- voltar ao BASIC ou 2- executar um salto para o código de máquina. Neste caso optamos por voltar ao BASIC.


A última pergunta é o nome com qual o arquivo comprimido deverá ser salvo na fita:



Um tempo será usado para o processamento e, no final, será instruído para pressionar uma tecla para salvar o bloco na fita:


Na tela acima há uma importante informação que deve ser anotada: o endereço base. Este endereço é o inicial para o bloco que agora está comprimido. Portanto se antes o bloco ocupava a RAM nas posições 24064-65535, agora está ocupando 26625-65535. Com isto a RAMTOP pode ser ajustada mais para cima, abrindo espaço para a área do BASIC.

Entretanto antes de fazer a descompressão, é necessário liberar os 112 bytes extras do TRDOS. Para isso, basta fazer USR no endereço base, isto é, RAND USR 26625. Na sequência, ajusta-se a RAMTOP para o valor do programa original (23063) e passa-se para a descompressão que é feita com USR após 15 bytes do endereço base, isto é, RAND USR 26640. Em resumo, RAND USR <endereço_base> libera espaço na RAM e RAND USR <endereço_base+15> descomprime o bloco.

O programa BASIC para carregar do disco, liberar RAM, descomprimir e executar o código de máquina fica (compare com a listagem anterior):

10 BORDER NOT PI: PAPER NOT PI: INK NOT PI: CLEAR VAL "26e3"
20 RAND USR VAL "15363": REM : LOAD "GYRO1"CODE
30 RAND USR VAL "15363": REM : LOAD "GYRO2"CODE
40 RAND USR VAL "26625": CLEAR VAL "24063": RANDOMIZE VAL"USR 26640 OR USR 52930"

Observe que foram usadas técnicas para poupar RAM no programa BASIC. Este programa, juntamente com a tela e o bloco comprimido, devem ser salvo no disco Beta para terminar a adaptação.



loading...

- Strike Force Cobra (piranha)
Depois de um longo tempo, converti um jogo para disco Beta. Strike Force Cobra é um jogo 3D isométrico em que se controlam 4 personagens alternadamente. Destaca-se dos demais do gênero - em geral monocromáticos - por ter cores na área de jogo....

- Menor Valor De Ramtop Com Beta 48/128
Uma das aplicações de compressores como Lerm Code Compressor 1 ou o mais recente ZX7, é liberar espaço para o carregador BASIC. Sobra a pergunta: qual espaço mínimo é necessário para o programa BASIC? Fonte: Wikipédia O endereço de início do...

- Adaptação De Jogos De Fita Para Beta 48 (parte 8)
Hoje eu fiz a adaptação de Rogue Trooper para o Beta 48 e, como venho elaborando uma série mostrando como se faz isto, aproveito para apresentar mais uma técnica. Deste vez abordarei como usar visualizador de memória do emulador Fuse. Apesar de mostrar...

- Adaptação De Jogos De Fita Para Beta 48 (parte 2)
Na parte 1 dei o ponta-pé inicial falando sobre a correspondência de comandos entre o BASIC do TK90X e o DOS Beta (ou TRDOS). Entretanto estamos longe de termos adaptado algum jogo, pois os arquivos devem ainda ser salvos no disco. As...

- Adaptação De Jogos De Fita Para Beta 48 (parte 1)
Penso em começar uma série sobre adaptação de jogos para o Beta 48, após pedidos. A maior dificuldade está em começar, pois o início sempre traz muitas dúvidas e expectativas. Acredito que o melhor ponto de partida é discutir um pouco sobre...



Eletrônica








.