quinta-feira, 16 de agosto de 2012

The Lyra II (E.S.I.)

The Lyra II, do grupo Ethanol Soft Inc (E.S.I.) da Polônia, era um dos demos que queria ver no meu TK90X. Sua adaptação para o Beta 48 foi bastante trabalhosa, mas finalmente consegui. Valeu a pena pois, apesar de antigo, (1991), o demo tem efeitos gráficos e músicas que valem a pena .



Gostei em especial da parte 4, cuja tela está na figura acima, tem uma dançarina animada que acompanha uma excelente música eletrônica. Fez lembrar-me do 9 Fingers para o Amiga, claro, guardadas as devidas proporções (vide vídeo abaixo, é um dos melhores demos para Amiga, na minha opinião).


A adaptação não foi fácil, pois o programa de carregamento estava em linguagem de máquina que era relocada várias vezes. Há uma versão em imagem de disco SCL, que infelizmente só funciona para o Beta 128, além de usar código de máquina.

Tentei usar somente o BASIC, mas não era possível, pois algumas partes corrompem registradores como SP e HL'. Por este motivo criei este programa carregador que fica numa linha REM no BASIC:

    ORG 23872
    LD (23728),SP           ; Preserva SP.
    LD HL,RetPoint-23872    ; Copia rotina de retorno p/
    ADD HL,BC               ; buffer de impressora.
    LD DE,23400
    LD BC,EndPoint-RetPoint
    LDIR
    LD A,192                ; Desativa captura da RAM em
    OUT (252),A             ;15360-15615 pela Beta.
    LD HL,(23675)           ; Pega endereço para executar
    JP (HL)                 ;a parte carregada do disco.
; Rotina executada após fim de uma parte do demo.
RetPoint:
    DI              ; Desativa interrupções.
    LD (23675),HL   ; Guarda endereço de execução da próxima
    LD SP,(23728)   ;parte e recupera SP e
    LD HL,10072     ;HL'.
    EXX
; Rotina para silenciar o PSG.
    LD C,$FD    ; Constante, LSB do endereço da porta do AY.
    LD DE,13    ; D=0 (constante), E=13 (end. do registrador).
    LD A,255    ; Constante 255.
L1:
    LD B,A      ; Porta #FFFD (65533).
    OUT (C),E   ; Escreve endereço do registrador.
    LD B,$BF    ; Porta #BFFD (49149).
    OUT (C),D   ; Zera o registrador do AY.
    DEC E       ; Diminui endereço do registrador do AY e
    CP E        ;compara com 255.
    JR NZ,L1    ; Se não for 255, repete.
;
    XOR A           ; Reativa captura da RAM em 15360-15615
    OUT (252),A
    IM 1            ; Volta para Modo de Interrupção 1 e
    EI              ;ativa interrupções.
    RET
EndPoint:
    END
Como se vê, tive que fuçar muito até todas as partes funcionarem bem.

Para baixar, use um dos links: Google Drive ou 4 Shared.

Atualização: está disponível versão 2 do demo adaptado.

2 comentários:

  1. No Amiga tinha um demo que não lembro o nome era um avião de cauda dupla que orbitava uma espera espelhada num tabuleiro xadrez era algo fantástico pra época.Vou ver se acho o disquete.

    ResponderExcluir
    Respostas
    1. Não consigo me lembrar do demo que você descreveu. Se conseguir localizar, por favor me diga qual é, pois fiquei curioso. Valeu!

      Excluir

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.