sábado, 30 de novembro de 2019

Trailer de Moritz on the Autobahn


Será já em Janeiro que poderemos assistir ao lançamento de um dos jogos mais aguardados da Team Moritz: Moritz on the Autobahn. Este novo trailer da autoria de Mike van der Lee promete dar-nos mais alguns detalhes acerca do jogo e apresentar a saga Moritz a quem ainda a não conhece.

Relembramos que se trata de um jogo onde Moritz parte numa viagem pela Europa para se reencontrar com o seu primo português Mortiz. Nessa viagem passará pela Alemanha, Bélgica, França, Espanha e, claro, Portugal enfrentando uma série de inimigos relacionados com a cultura e história desses países. Está a ser desenvolvido pela Team Moritz, composta por Andy Green, Lobo, Pedro Pimenta, Sebastian Braunert e Uwe Geiken. Será um lançamento exclusivo que virá em formato digital com a revista Blast Annual 2020, mas também soubemos que irá em breve haver uma edição física muito especial para coleccionadores. Já não falta muito para podermos começar a grande viagem...

Monopólio (MIA)


Da colecção do Luís Dias chegou mais um lançamento da Timex que ainda não estava preservado, Monopólio, recriando o popular jogo de tabuleiro. Além do .tzx, inclui a capa e as instruções, permitindo-nos assim ficar com mais um lançamento completo. Tenham em conta que o programa apenas corre no TC 2068 (ou num emulador com essa plataforma), por isso não estranhem que ao carregarem-no no Spectrum, apareça uma mensagem de erro.

Poderão vir aqui descarregar Monopólio.

The Spectrum Show: episode 90


Final do mês e como de costume Paul Jenkinson presenteia-nos com o insubstituível The Spectrum Show, agora o episódio 90. Pode ser visionado acima...

sexta-feira, 29 de novembro de 2019

Versão com gráficos para Escape From Dinosaur Island DX


Escape From Dinosaur Island DX ganhou uma nova roupagem, com a introdução de gráficos na parte superior do ecrã por parte da Adventuron Software Limited (Chris Ainsley).

Jogamo-lo há meia dúzia de meses e considerámo-lo como uma das boas aventuras de texto que saíram este ano. Termos agora que voltar a fazê-lo, para assim apreciar devidamente os ecrãs agora adicionados.

Poderão vir aqui descarregar o jogo.

A Capital: POKES & DICAS - 22 de Janeiro de 1988

Se bem se recordam, no último suplemento que tínhamos disponibilizado d'A Capital, o jornalista Daniel Lima tinha dado importantes dicas sobre os controlos para quem queria usufruir de Gunship, ainda mais sabendo-se que muito dificilmente o jogo era vendido com instruções no nosso país. Neste novo suplemento, temos então a parte 2, onde é explicado como pilotar o helicóptero. Já servia para uma primeira abordagem, enquanto não chega a parte 3 do tutorial.

Nesta semana surgiram também bons jogos, nomeadamente Driller e a colectânea Fast 'n' Furious, que no nosso entender inclui um shoot'em'up que está entre os melhores do Spectrum, mas que é frequentemente esquecido: Thunderceptor. Aliás, apenas para comprovar isso, vemos que o jornalista apenas refere um dos jogos, esquecendo-se precisamente de Thunderceptor. Mas também poderá ser que no nosso país os piratas tivessem "roubado" um dos lados à cassete...


Na secção das dicas, encontramos um engraçado mapa de Batman, da autoria de Benjamim Ferreira, e de Jack the Nipper II, um velho conhecido de quem frequenta o fórum ZX Spectrum da Arrecadação no Facebook. E ainda existe um mapa criado pelo Timex Team...


Podem desde já descarregar o suplemento na nossa Dropbox.

Trailer para Em Busca dos Tesouros


Faltam praticamente duas semanas para um dos lançamentos mais aguardados do ano: Em Busca dos Tesouros.

Quem  pensava que o ZX81 estava morto e enterrado em qualquer lugar tenebroso, desengane-se. está "Vivinho da Silva" e recomenda-se, e no próximo dia 14 de Dezembro terá honras de lançamento mundial. Mas um dia antes, num exclusivo Planeta Sinclair, iremos fazer a antevisão com uma review completa à maior aventura que jamais apareceu para o ZX81. Tenham medo, muito medo...

A cassete do ZX Spectrum (II) - headers + blocos

Já vimos no artigo anterior, como carregar e gravar blocos de dados. No entanto, ter bloco de dados sem cabeçalhos em cassete, embora seja usado para carregar rotinas C/M de jogos, quer por protecção, quer por serem rotinas mais fáceis de usar desde C/M, não identifica o que estamos a carregar na tape.

Nas rotinas da ROM dos comandos BASIC LOAD e SAVE, é primeiro gravado em tape um header / cabeçalho, que define o nome do bloco e tipo de dados.


Imediatamente em seguida é gravado um bloco com os dados.


A consequência prática de gravar com um header, é que enquanto as rotinas de LD_BYTES carregam o primeiro bloco que "vêem", as rotinas de carregamento com headers podem ser instruídas para esperar pelo bloco com o nome pretendido.

Bloco header

O cabeçalho tem 17 bytes, e os campos têm valores definidos:

Byte (decimal) Length Descrição
010 - programa BASIC
1 - variáveis de números
2 - variáveis de caracteres
3 - CODE (C/M / dados )
110Nome (espaços em branco até 10)
$FF no primeiro byte indica qualquer nome.
112Tamanho do bloco de dados
132Parâmetro 1
BASIC: linha auto-arranque (>=32768 não arranca)
CODE: início de posição de memória
152Parâmetro 2
BASIC: VARS - PROG
CODE: 32768 ???

O SCREEN$ é uma caso especial de CODE com início em 16384 e tamanho 6912 decimal.

Para gravar o bloco com headers, similar ao BASIC, e com a mensagem "Press any key", usa-se a rotina  $0970 SA-CONTRL.

LD HL,500000
LD  IX,HEADER
CALL $0970 ; SA-CONTRL
HEADER: DEFB $03
                  DEFM "Programa  "
                  DEFW 1000
                  DEFW 50000
                  DEFW 0

Dessa forma, tendo o header, pode-se carregar este bloco gravado em C/M, com LOAD "" CODE, a partir do BASIC.

E para carregar LOAD "" CODE com header de uma cassete, ajustando o assembly para invocar a rotina SA_ALL:

T_ADDR equ 5c74h
SA_ALL equ 075Ah

ORG 25000
LD A,(T_ADDR)
LD (T_ADDR2),A
LD  IX,ExpectedHeader
LD HL,0
LD  A,1 ; LOAD nesta rotina de ROM é 1
LD (T_ADDR),A
CALL SA_ALL ;command multiplexor
LD A,(T_ADDR2)
LD (T_ADDR),A
RET

ExpectedHeader:
DB 3 ;expected type (Bytes)
DB 0ffh ;name = "" for any name
DS 9
DW 0 ; size = 0 (use tamanho do header em cassete)
DW 0 ; start = 0 (usar começo do header em cassete)
DW 0 ;
DS 17 ; espaço em RAM para carregar header da cassete
T_ADDR2:
;DB 0
END 25000

(nota: se for para incluir noutra rotina, descomentar o ultimo db 0; é um hack intencional para dar para testar a rotina com ela própria)

Exemplo ASM como gravar e carregar ecrã com header + bloco de dados

A titulo de exemplo, para carregarmos um header em memória usando a rotina LD_BYTES que vimos na parte (I) deste artigo:

LOAD_HEADER:
SCF
LD A,$00 ; HEADER BLOCK
LD IX,Header
LD DE,17 ; 17 bytes
CALL $0556 ; call LD_BYTES
RET

Para terminar, temos aqui um programa em assembly, como exemplo, que lista cabeçalhos de blocos que passem na cassete:

Exemplo ASM como listar cabeçalhos

Para mais informações, fica o link:

Saiu Super Enquiry Simulator


Foi lançado há umas horas Super Enquiry Simulator, metade aventura gráfica, metade demo, mas tudo com uma grande dose de loucura (diz quem já o experimentou). Dizem também que é das experiências mais bizarras que se pode encontrar num Spectrum, pelo que iremos analisar nos próximos dias e confirmá-lo...

Entretanto podem aqui vir descarregar, este jogo, se é que se pode chamar isso a Super Enquiry Simulator...

Uma nota adicional, o seu autor, David W. (podem aqui ver a sua página), é o responsável por Xenoxxx Funtime Show.

quinta-feira, 28 de novembro de 2019

Rescaldo do Lisboa Games Week 2019


No fim de semana passado, pude participar em mais uma edição do Lisboa Games Week, desta vez já com uma nova organização e algumas mudanças no evento. Como já referenciámos e explicámos o sucedido no nosso último post acerca do XL Games World (ver aqui), vamos então passar a analisar mais directamente as diferenças que encontrei neste evento.

Para começar, vimos que ao contrário do Moche XL, que pretende estar centrado quase exclusivamente em videojogos, o LGW pretende alcançar um público maior, parecendo estar lentamente a transformar-se num evento comparável à Comic Con. Desta vez, reparei na existência de uma série de novas áreas, como a dedicada ao cosplay, outra onde artistas podem entrar em contacto com o público, exposições e testes de drones e robots, uma área para youtubers onde eram dados workshops de introdução à criação/edição de vídeo para o youtube, etc.


Não vamos adiantar mais as diferenças entre os eventos, até porque as novidades do Lisboa Games Week estão relacionadas com áreas que estão totalmente afastadas do âmbito deste blog e só as referenciámos para dar uma ideia de como os eventos se estão a afastar a nível de direcção e também do público-alvo que pretendem captar.

Quanto à área retro, neste evento foi gerida pelo museu Nostalgica que retornou ao evento após um afastamento de dois anos, pois foi substituído em 2017 pela Retroshop. Apesar de o LGW ter uma área consideravelmente maior ao dispor que o evento concorrente (dois pavilhões da FIL), foi com alguma desilusão que vimos o espaço reduzido utilizado para a zona retro. Desta vez tivemos já algumas máquinas arcade do museu e vários flippers, aliados a uma pequena secção de consolas e microcomputadores.


Algo um pouco diferente que vimos desta vez, foi uma tentativa de tornar o espaço mais museológico, utilizando vitrines com alguns jogos e consolas, que infelizmente não continham quaisquer descrições que nos pudessem ajudar a contextualizar o que estávamos a ver. Na parede do fundo, tínhamos também jogos, consolas portáteis e fixas, juntamente com alguns computadores fixados à parede, esses sim, com uma pequena descrição ao seu lado, todos separados por décadas.


Aplaudimos a iniciativa de tentar contar um pouco da história e tentar trazer o museu até ao público, mas a nível pessoal fiquei um pouco desagradado com o modo como foram expostas as revistas de época. Por exemplo, falando mais do Spectrum, vimos dois suplementos da Capital pendurados por molas de orelha e algo ainda pior que isso, um manual do Spectrum/Basic criado por uma loja do Seixal, um documento que desconhecíamos completamente que existisse (e que queríamos ver preservado aqui no Planeta Sinclair) a ser afixado com um pionés à parede, ficando permanentemente danificado (só esperamos que seja uma fotocópia e não o original...).


Como vimos em primeiro lugar o sucesso do espaço Retroshop, não pudemos deixar de fazer uma comparação qualitativa. A nível de variedade de consolas e computadores, o espaço Nostalgica peca por defeito, vimos poucas máquinas ao dispor, assentes em estreitos pilares a alguma distância uns dos outros, o que deu uma aparência fria e pouco convidativa ao usufruto do espaço. Por outro lado, compreendemos o receio da organização, mas ver todas as consolas fechadas em caixas, comandos atados com fios de segurança e comparando isso à liberdade de utilização que tivemos no espaço Retroshop em que não havia este "controlo apertado", acabamos por ficar mais a favor do primeiro espaço que visitámos.


Outra coisa que apontaria é que as consolas e computadores ao dispor do público são modelos mais comuns e vulgares. Se por um lado devemos ir em busca do que poderá ser mais apelativo ao público, também achamos que um museu tem uma missão educativa, devendo mostrar sistemas e jogos menos comuns. Aplaudimos neste caso a iniciativa do espaço Retroshop em ter ao dispor consolas mais raras como a Neo Geo CD ou a Atari Jaguar, entre outras. No espaço Nostalgica, o único sistema menos comum que vimos era uma Wonderswan Color, mas tendo em conta a iluminação do espaço, também não considero que tenha sido uma consola ideal para mostrar no evento.


A afluência do público foi relativamente grande para a zona arcade e um pouco menos para a área das consolas/computadores, havendo sempre alguma bancada livre, coisa que muito raramente vimos no espaço Retroshop, mesmo tendo em conta que a oferta disponível era maior.

Para concluir, achámos que a gestão do espaço ficou um pouco aquém das expectativas. Se fossem tomadas algumas medidas para criar uma área mais acolhedora, com mais sistemas, com uma organização e decoração diferentes, teríamos um ambiente muito mais agradável. No entanto, devemos dizer que gostámos de ver a coleção ser apresentada também numa perspectiva mais museológica, apesar do modo como foi organizada essa área não ter sido o melhor. Em comparação, objetivamente acabamos por optar pelo salão de jogos e espaço Retroshop, pelo ambiente muito mais agradável e acolhedor, diversidade de máquinas ao dispor e até pelo modo como fomos recebidos pelo organizador.


Tentámos então chegar à fala com Mário Tavares, responsável pelo Nostálgica, para trocar algumas palavras. Ao contrário do que aconteceu no Moche XL em que vimos o responsável presente até ao encerramento de cada dia, não conseguimos encontrar o organizador no espaço, estando apenas voluntários a tomar conta do mesmo sempre que o visitámos.


Para o primeiro ano deste evento com uma nova administração, reconhecemos que ainda tem muito a melhorar e como já vimos alguns dos que visitaram ambos os eventos comentar, pareceu-nos que o Moche XL é o verdadeiro herdeiro do antigo Lisboa Games Week. Esperamos que no próximo ano sejam colmatadas as várias falhas e que cada evento se consiga destacar em áreas diferenciadas.

quarta-feira, 27 de novembro de 2019

(The Last) Arkanoid


Em tempos já tínhamos arranjado um .sna desta versão do Arkanoid crackada por portugueses. No entanto, graças agora ao Jose Manuel de El Trastero del Spectrum, conseguimos obter o .tzx, e para nossa surpresas as novidades desta versão não se esgotam na tradução para português, nem nos novos níveis criados pelo Luís Esteves e Paulo Sousa. O próprio ecrã de carregamento permite que se faça um backup do jogo, como poderão ver na imagem.

Poderão então vir aqui descarregar o ficheiro completo e entreterem-se com os novos níveis. No fundo é como se existisse uma versão 1.2 de Arkanoid.


E pensávamos nós que já tínhamos visto tudo quando, ao comprarmos ao Miguel Pires um toastrack, este veio acompanhado por um lote de cassetes. Nessas encontravam-se muitas com o logo da "Jonu", abreviatura de João & Nuno, dupla que no final dos anos 80 tinha uma loja em Benfica que comercializava software para o Spectrum. Carregámos o jogo, e eis que depois do ecrã de carregamento habitual da dupla, surge um menu permitindo seleccionar o modo Timex ou Spectrum. 

À conversa com um dos autores desta versão de Arkanoid, Paulo Sousa, descobrimos que esta era a versão "dual", que permitia que o Arkanoid corresse também no TC 2048. O próprio ecrã de carregamento tem ligeiras diferenças, não apresentando a opção de backup. De resto tudos se mantém igual, tendo esta versão de Arkanoid sido criada com recurso ao editor de Mark Alexander, lançado em 1987.

O ecrã seguinte dissipa também quaisquer dúvidas acerca da nacionalidade dos criadores de (The Last) Arkanoid, podendo ambas as versões serem descarregadas no link que deixámos acima.

Resgate (MIA)


Resgate poderá ser uma tradução de um dos muitos programas que apareciam nas revistas espanholas e que depois a Edições Latinas colocava nas compilações que lançava por cá. É assim muito básico (e em Basic), valendo apenas pela curiosidade, podendo aqui ser descarregado.

terça-feira, 26 de novembro de 2019

18. Where Time Stood Still

A cassete do ZX Spectrum (I)

O Sinclair ZX Spectrum foi lançado para gravar dados em cassetes de áudio, dado ser barato na época. Os dados são armazenados em cassete através de sons de áudio modulados.

Saliente-se que por corte de custos, não existe nenhum chip dedicado para controle de tempo / DMA / interrupts na carga de dados de cassette. Todo o sampling, contagem de tempo, armazenamento de dados e comunicação com o EAR e MIC, tem de ser realizado com exclusiva dedicação do processador Z80.

O MIC/EAR são controlados pela ULA, na porta 254.


Como se pode ver no mapa da porta 254 da ULA, o input do EAR é no bit 6, e o output pelo MIC, é no bit 3. Mais uma vez 0 significa activo, e 1 não activo. Por defeito, está em 1.


Na cassete, usando a(s) rotina(s) da ROM, SA_BYTES e LD_BYTES, são gravados ou carregados bits, sendo que um registo de CPU armazena os bits (para gravar ou para ler). Quando os oito bits são consumidos, o próximo byte é escrito / lido na RAM. A verificação de erros é feita por um XOR dos bytes carregados.

Basicamente, os sons na cassete são uns e zeros.  Necessita-se de dois impulsos (on/off), para fazer um ciclo. (square wave).

A média de transferência de dados na rotina da ROM da cassete são 1500 bauds.

O tempo de alternância entre estes é que define a frequência que está a ser usada. Na rotina da ROM o 1 tem aproximadament~1000us de duração, ou seja 1000Hz e o 0 ~509us, ou seja 1964Hz.   

No sampling, importa mais a transição e Hz / ciclos para determinar se estamos a lidar com um 1 ou 0, do que propriamente os sinais serem 1 ou 0.  A polaridade do sinal não interessa -  a rotina de carregamento da ROM apenas detecta transições entre os sinais.

Existem diversos tipos de categorias de sinais na rotina da ROM:

- som de piloto/guia: antes de cada bloco, uma sequência de 8063 (header) ou 3223 (dados) impulsos, cada com um comprimento de 2168 estados T.
- impulsos de sincronismo: o piloto é seguido por dois impulsos de sincronismo, de 667 e 735T, respectivamente.
- código de cabeçalho/bytes/checksum (dados/bytes) - bytes codificados em 8 bits. Um bit 0 é  codificado com 2 impulsos, cada um de 855T. O bit 1 é codificado com 2 impulsos com o dobro do tempo, de 1710T.
- 941T silencio.


WAV de uma tape. Sendo 8 bits zeros a seguir ao SYNC2, isto é um bloco de cabeçalho. Note-se que os 8 zeros são os 8 bits de cabeçalho. Um bit 1, é do dobro do tamanho/tempo de um bit 0. O leader, é para exemplificar o tipo de onda, o leader é bastante mais comprido.

As linhas de cores do border são apenas indicadores visuais para o utilizador, e não têm influência no processo de passagem de / para a cassete.

Como já mencionado no artigo do beeper, quanto a ouvir-se o som dos dados a serem transferidos de cassete, isto tem a ver com o desenho do ZX Spectrum. O som não é gerado por software, mas sim uma consequência do desenho do hardware.

Uso de rotinas da ROM para transferência de dados em cassette


Normalmente usam-se rotinas da ROM para ler e gravar dados, e não se controla directamente o EAR e MIC; aliás, o mais comum é usar as directivas BASIC LOAD "" CODE e SAVE "" CODE.

Por exemplo para gravar um programa C/M a partir de 50000, de 1000 bytes:

SAVE "programa" CODE 50000,1000

e para o carregar:

LOAD "" CODE

Para gravar e ler dados de cassette, as principais rotinas da ROM são a $04C2 SA_BYTES e $0556 LD_BYTES. Estas rotinas são pontos de entrada directos na ROM na rotina de cassettes, e não esperam por uma tecla i.e. sendo invocadas, são executadas de imediato.

A rotina da ROM para gravar blocos de dados é:

$04C2 - SA_BYTES - Save bytes to tape
------------------------------------
On entry:
  A:  00=header, FF=data
  IX= start address to save from
  DE= number of bytes to save
 
 


Portanto, o equivalente ao anterior BASIC,  para gravar um bloco de dados, sem headers, é:

LD  A,$FF   ; dados
LD  IX,50000 ; grava a partir de 50000
LD  DE,1000  ; 1000 bytes
CALL $04C2  ; chama SA_BYTES
JR NC,tape_error
A rotina da ROM, para carregar blocos de dados é:

$0556 - LD_BYTES - Load Bytes From Tape
--------------------------------------
On entry:
  A:  00=header, FF=data
  Cy: 1=load, 0=verify
  IX= start address to load/verify to
  DE= number of bytes to load/verify
On exit:
  C : bytes loaded or verified
  NC: nothing done, or load or verify error

Para carregar um bloco de dados, sem headers:

SCF            ; load
LD A,$FF ; dados
LD IX,50000
LD DE,1000
CALL $0556 ; chama LD_BYTES
JR NC,tape_error

Como a rotina LD_BYTES lida directamente com dados, e não com headers, irá também carregar o primeiro *header*  que apareça a seguir. Normalmente esta rotina era usada em loaders de software, tipo carregar um bloco em BASIC, e depois carregar blocos de dados sem headers, que era esperado que viesse a seguir na fita de cassete.

Exemplo ASM como gravar e carregar blocos sem headers





Para mais informações, fica o link:

Data storage on cassette tape

Notas:

Nunca é demais salientar a importância de gravar blocos sem headers imediatamente a seguir (na tape), a blocos que os carreguem. De outra forma, sem headers, torna-se bastante dificil de organizar/classificar qual a sua função.

Os valores de A de $00 para headers e $FF são arbitrários da ROM. A usar  rotinas de LOAD e SAVE em C/M, que não pretendam ser compatíveis com a ROM, podem ter qualquer valor.

Note-se que embora a definição das rotinas SA-BYTES e LD-BYTES mencionem que DE é o número de bytes, são o número de bytes transferidos de e para memória - na realidade na tape são gravados DE+2 bytes, sendo os bytes  - tipo de bloco (1 byte) + DE bytes + XOR checksum (1 byte)

O desenho do ZX Spectrum tenta minizar ruído a forçar o utilizador a usar o volume a cerca de 70-75%.

(a continuar na parte II (carregamento com headers) e III (turbo loaders) )

Ver  https://retrocomputing.stackexchange.com/questions/8442/copying-tapes-back-in-the-day/8478#8478  e  http://www.worldofspectrum.org/ldbytes.html

O autor deste artigo, também é o autor do TAPE2TAP em 1996, um programa para MS-DOS, para digitalizar cassetes de Spectrum. Sources aqui. O TAPE2TAP foi o utilitário de companhia do WSpecem do mesmo autor, o primeiro emulador de ZX Spectrum para Windows, e a base das rotinas de cassete do famoso emulador de ZX Spectrum para MS-DOS Warajevo.

segunda-feira, 25 de novembro de 2019

Parte II do tutorial Fuse - FDD 3000


Depois do Ricardo Reis nos ter dado a parte 1 do tutorial sobre a emulação do FDD no Fuse (aqui), temos agora a segunda parte com dicas muito úteis, podendo aqui ser descarregada.

Temos estado a aproveitar todos estes ensinamentos para catalogar todas as disquetes que nos chegaram, e que mais tarde ou mais cedo serão partilhadas com a comunidade.

Aproveitamos ainda para deixar o agradecimento ao João Encarnado, que disponibilizou para a comunidade o Tos vA.4, que já se encontra na pasta do TOS (pode aqui ser descarregada), estando também no menu dos Programas Preservados, onde de resto irão ficar todos os programas que formos disponibilizando.

Por fim, o João aproveitou a embalagem e criou mais uns ficheiros que podem ser lidos no FDD com programas da Timex. Estão aqui disponíveis (e pelo andar da carruagem irá ter mais coisas nos próximos tempos).

domingo, 24 de novembro de 2019

The Curse of Trasmoz para venda a partir de 16 de Dezembro


A partir de 16 de Dezembro, The Curse of Trasmoz estará disponível para venda. Apresentado com um platformer com 3 níveis, mais de 20 ecrãs em cada, e 4 tipo de inimigos diferentes, foi programado por Javy Fernandez.

Virá em duas versões, cassete ou disquete, mas ambas acompanhadas com muitos extras, destacando-se o poster e os autocolantes, além do manual. O custo é que também acompanha esses extras, sendo de 20 euros para a versão em cassete e 25 euros para a versão em disquete, ou seja, o preço habitual nos lançamentos da Poly.Play.

Quem quiser obter The Curse of Trasmoz, poderá aqui adquiri-lo.

Paracaidista Kerl!


Nome: Paracaidista Kerl!
Editora: NA
Autor:  Azimov
Ano de lançamento: 2019
Género: Acção
Teclas: Não redefiníveis
Joystick: Não
Memória: 48 K
Número de jogadores: 1

Já tínhamos dado conta de Paracaidista Kerl!, aquando do seu lançamento no curso de Basic de AsteroideZX. Entretanto, e dado o feedback positivo que o seu autor merecidamente teve, resolveu fazer umas modificações a apresentá-lo na competição BASIC 2020, na categoria Basic puro. E em boa hora o fez, pois apesar de estarmos perante um jogo muito simples, a fazer lembrar aqueles que apareceram no primeiro período do Spectrum (1982/1983), tem uma ideia bastante original.

Começamos o jogo a saltar num pára-quedas, parando apenas quando uma plataforma surge no nosso caminho. De cada vez que isso acontece, aterramos em segurança, mas ficamos sem um dos pára-quedas que temos em stock. São sete de início, e temos a hipótese de receber mais três de cada vez que caímos numa das caixas pretas (as caixas não podem ser empurradas ou saltadas), e mais quatro de cada vez que passamos de nível.

Azimov concedeu ainda algumas ajudas. Assim, temos cinco pás que permitem cavar um buraco na plataforma, permitindo continuar a cair (muito útil, até porque por vezes ficamos entalados entre duas caixas). As caixas brancas concedem mais duas pás, e de cada vez que passamos de nível, são adicionadas duas ao stock (com o máximo de nove). Finalmente, poderemos ainda acrescentar secções às plataformas através de tijolos, permitindo-nos cair em pontos mais aconselháveis. Começamos com cinco tijolos, e no início de cada nível são adicionados outros dois.

Foi contemplado ainda um elemento extra: periodicamente surge um disco voador que envia um raio, que tanto nos pode ajudar, abrindo brechas nas plataformas, mas que também nos pode matar, caso o raio nos atinja. Não convém assim ficar muito tempo a descansar à sombra da bananeira, ou seja, em cima da plataforma.


As plataformas surgem aleatoriamente, querendo isso dizer que o factor "sorte" é parte integrante do jogo, tendo em conta que não conseguimos ver aquilo que se passa nos ecrãs inferiores (no lado esquerdo têm a indicação de quantos espaços teremos que cair até chegar ao piso térreo - não compensa ir para as bordas laterais, pois nesse caso não caímos na plataforma onde se encontra a porta de saída). No entanto, apesar desse factor, exige alguma estratégia e ponderação (q.b., senão aparece o disco voador), pois ao conseguirmos ver algumas das plataformas que se encontram abaixo do ponto onde estamos, poderemos de alguma forma planear o caminho mais imediato, também tendo em conta o número de pára-quedas que ainda nos restam.

Assim, apesar da extrema simplicidade do jogo, Paracaidista Kerl! cativou-nos. Não tem obviamente um final, a ideia é tentar avançar no maior número possível de níveis. Porventura, quem espera um jogo ao estilo de Parachute, não o vai encontrar aqui. É preciso não esquecer o propósito com que foi criado, no âmbito de um curso de Basic. Nesse sentido o código-fonte também é disponibilizado, permitindo a todos poderem aprender olhando para ele, ou até proceder a modificações ao jogo.

Azimov está mais uma vez de parabéns, pois com tamanha simplicidade consegui criar um desafio interessante e que não o envergonha perante os restantes jogos a concurso.

sábado, 23 de novembro de 2019

Nova versão para Godkiller


Graças à Bitmap Soft, editora recém lançada que tem em carteira muitas e boas novidades para os próximos tempos (mantenham-se atentos), tomámos conhecimento que um dos melhores jogos da última década, Godkiller, cujo programador também foi responsável pela saga Harbinger, lançou uma nova versão. Podem assim contar com:
  • Novo GFX
  • Musica durante o jogo
  • Novo manual , capa e algumas mudanças na história
  • Maior dificuldade
Venham aqui descarregar a nova versão e deliciarem-se com este jogo brilhante.

Batalha Naval (MIA)


Finalmente conseguimos arranjar o Batalha Naval da Astor, um dos jogos que mais procurávamos, até porque tínhamos um outro Batalha Naval que supostamente seria o lançamento da Astor e queríamos comparar os programas. E de facto chegámos à conclusão, tal como já suspeitávamos, que não tínhamos o original. Tardou, mas chegou, e tudo graças simultaneamente a um contributor anónimo, que tanto tem municiado o nosso blogue, e ao Miguel Lopes.

O jogo é interessante, ainda mais tendo em conta a altura em que surgiu (meados dos anos 80). Claro que não atinge o brilhantismo de um programa como Battleships (Elite, 1987), mas os meios alocados eram completamente diferentes.

Poderão então aqui descarregar mais um lançamento da Astor, que ainda estava dado como MIA nas páginas mais conhecidas do Spectrum.

Nota: entretanto também o Miguel Lopes nos arranjou o jogo, havendo ligeiras diferenças na capa, que também deixamos na dropbox.

sexta-feira, 22 de novembro de 2019

Crash 101 em 2021


Chris Wilkins acabou de anunciar que chegou a acordo com a Future Publishing, e com Roger e Oli, para começarem a trabalhar num novo número da Crash.

Depois das Crash 99 e da Crash 100, foi com um certo sentimento de desilusão que há alguns meses soubemos que 2020 não iria ter esta publicação. Retoma agora no ano seguinte, e esperemos que seja para continuar.

Será que algum dia viremos a ter também uma nova Your SInclair?

A Capital: POKES & DICAS - 15 de Janeiro de 1988

Nesta semana os leitores poderão desfrutar de pormenores muito deliciosos começando por destacar três frases épicas no mapa do Rogue Trooper, escritas por Carlos Manuel Cabral do Carmo, que rivalizam com a célebre “All Your Base are belong to us”, do jogo Zero Wing, lançado para a Mega Drive.

As frases são as seguintes:
  • I Put Green Beret at Pocket!”;
  • I eat Rambo and Commando at Breakfast!”;
  • And cobra’s like Stallone, I see all days in my garden!”.

Daniel Lima dá uma preciosa ajuda, a todos os leitores, com uma explicação detalhada de como jogar Gunship. Para quem gosta do género, só mesmo com manual devido à complexidade do simulador da MicroProse. 


Em análise destacam-se o 720°, uma conversão, relativamente aceitável, do jogo de arcade de skate, que não faz muito o nosso género, e o pouco conhecido Bobsleigh, um simulador de tobogã, que mereceu um honroso 35º lugar, no top dos melhores jogos do Spectrum, elaborado pelo Planeta Sinclair.


Temos como dicas a solução, de novo, de Pyjamarama, que muita ajuda nos deu para tentar completar o jogo. No espaço aventura o jogo em destaque é o The Hobbit, com a solução detalhada e completa.


Não deixem de ler o suplemento desta semana já disponível na nossa Dropbox.

Dica: Devolver um número de uma rotina C/M

Se querem correr alguma rotina C/M que apenas vai fazer operações para devolver um número, não precisam de fazer a impressão em rotinas assembly/ C/M.

Note-se que ao voltar de uma rotina C/M podem devolver o número no registo BC.

Como exemplo:

ORG 50000
LD    BC,20
RET

E então a partir de BASIC:

10 PRINT USR 50000

Irá imprimir 20.

Vendo a rotina da ROM de retornar ao BASIC,  é 2D2B: THE 'STACK-BC' SUBROUTINE

 THE 'STACK-BC' SUBROUTINE

Used by the routines at S_RND, DEC_TO_FP, usr and len.
The routine at STACK_A continues here.
This subroutine gives the floating-point form for the absolute binary value currently held in the BC register pair.

The form used in this and hence in the two previous subroutines as well is the one reserved in the Spectrum for small integers n, where -65535<=n<=65535. The first and fifth bytes are zero; the third and fourth bytes are the less significant and more significant bytes of the 16 bit integer n in two's complement form (if n is negative, these two bytes hold 65536+n); and the second byte is a sign byte, +00 for '+' and +FF for '-'.

Input
BC Value to stack
STACK_BC 2D2B LD IY,$5C3A Re-initialise IY to ERR-NR.
2D2F XOR A                         Clear the A register.
2D30 LD E,A                         And the E register, to indicate '+'.
2D31 LD D,C                         Copy the less significant byte to D.
2D32 LD C,B                         And the more significant byte to C.
2D33 LD B,A                         Clear the B register.
2D34 CALL STK_STORE       Now stack the number.
2D37 RST $28                          Use the calculator to make HL point to STKEND-5.
2D38 DEFB $38                 End_calc
2D39 AND A                         Clear the carry flag.
2D3A RET                                 Finished.

A rotina equivalente de entrar em C/M a partir do USR, também coloca em BC a direcção da rotina C/M, neste caso 50000, e é 34B3: THE 'USR' FUNCTION (offset +2D)

The address of this routine is found in the table of addresses. It is called indirectly via fp_calc_2.
This subroutine ('USR number' as distinct from 'USR string') handles the function USR X, where X is a number. The value of X is obtained in BC, a return address is stacked and the machine code is executed from location X.
usr_no 34B3 CALL FIND_INT2 Evaluate the 'last value', rounded to the nearest integer; test 
                                                                 that it is in range and return it in BC.
        34B6 LD HL,$2D2B         Make the return address be that of the subroutine
                                                                 STACK_BC.
        34B9 PUSH HL
        34BA PUSH BC          Make an indirect jump to the required location.

        34BB RET

Note: it is interesting that the IY register pair is re-initialised when the return to STACK_BC has been made, but the important HL' that holds the next literal pointer is not restored should it have been disturbed. For a successful return to BASIC, HL' must on exit from the machine code contain the address of the 'end-calc' instruction at +2758.

34B3: THE 'USR' FUNCTION (offset +2D)

Por exemplo, nesta rotina:

        ORG     50000
        NOP
        LD      IX,16384
        LD      DE,6912
        LD      A,$FF
        BIT     0,C
        JR      Z,LD_ENTRY

        JP      SA_BYTES

A entrar por RAND USR 50000 vai para LD_ENTRY e por RAND USR 50001 salta para SA_BYTES

Note-se, que já que estamos a falar deste tema, que as rotinas código M/C têm de preservar o valor de HL´ antes de voltar ao BASIC (ou restaurá-lo a $2758). Como nota adicional, chamar funções de ROM  a partir de C/M que necessitem de usar o stack FP implica não mexer ou restaurar o registo IY.

quinta-feira, 21 de novembro de 2019

Rescaldo do Moche XL Games World

Após a separação das suas empresas que organizavam até agora o Lisboa Games Week, este ano temos pela primeira vez dois eventos do género separados por uma semana de distância e a poucos metros um do outro. O anterior organizador criou então um novo evento, o Moche XL Games World, que foi realizado no Altice Arena durante os passados quatro dias e a empresa detentora da FIL manteve o nome e o local, passando o Lisboa Games Week para 21 a 24 de Novembro.

Sendo assim, o espaço retro a cargo da Retroshop do Ricardo Saraiva continuou a parceria anterior, passando agora para o Moche XL e o Lisboa Games Week foi buscar o seu antigo parceiro - Nostalgica - para fazer o mesmo, mas no evento concorrente.


Como conseguimos ter acesso a ambos os eventos através de amigos expositores, a quem muito agrademos, iremos agora fazer um pequeno rescaldo do evento. Passando agora ao que por lá vimos, o salão de jogos estava localizado numa sala de difícil acesso, sendo preciso subir um vão de escadas, passando por uma sala dedicada à realidade virtual, descendo depois outras escadas, que essas sim, dariam acesso à sala que mais nos interessa. Ficámos surpreendido pela quantidade de visitantes (ainda mais tendo em conta que a sala estava um pouco escondida) e podemos dizer com toda a certeza que foi o maior público que a Retroshop teve desde que começou a participar nestes eventos, o que prova que o retrogaming não está de todo morto.
 

Não esperávamos assim ver tal quantidade de visitantes, ainda para mais tendo em conta o difícil acesso à sala, mas a combinação de consolas, computadores, máquinas arcade e flippers fez as delícias de miúdos e graúdos. Era possível ver os pais a apresentar aos seus filhos as máquinas onde se tinham divertido na infância, registando o momento para a posteridade e foram também muitos os jovens que decidiram sair do recinto principal para ter o seu primeiro contacto com consolas e computadores de uma época anterior à sua.

Deixamos-vos uma pequena lista (não completa) de computadores e consolas (com os respetivos periféricos) disponíveis ao público: NeoGeo CD, PCEngine com Super SD System 3 da Terraonion, Atari Jaguar, Amiga 600 com processador 68030, Timex 2048 com Dandanator, Atari 2600 e 7800, AtariSTe com CosmoEx, Zx Uno, MiSTer FPGA, N64 com Everdrive, Dreamcast com GDROM, Mega Drive 32X, Amstrad GX4000, Master System 1 e 2, NES, SNES, entre muitos outros.

Devemos relembrar que muitos dos produtos ao dispor, quer dispositivos de emulação FPGA, quer leitores de cartões para computadores e consolas são representados oficialmente pela Retroshop em Portugal. Através deste salão de jogos pudemos ver como ter acesso a toda uma variedade de produtos que permitem desfrutar dos nossos jogos favoritos sem ter investir em hardware antigo ou jogos, que podem ascender muitas vezes a custos incomportáveis para maioria dos entusiastas.




Para finalizar, como não podia deixar de ser, o nosso velho amigo Timex 2048, acompanhado de um monitor Philips monocromático com o Manic Miner, apanhado aqui num dos poucos momentos em que esteve livre. Também importante referir a presença do Museu Load ZX Spectrum, o primeiro museu do Spectrum a nível mundial, criado pelo João Diogo Ramos, nosso parceiro desde o primeiro momento, que teve direito a um rollup para anunciar a sua inauguração no dia 2 de Maio de 2020.

Ficamos a aguardar ansiosamente pelo evento do próximo ano, na expectativa de que se faça ainda mais e melhor e deixando desde já o convite aos seguidores deste blogue para que visitem nessa altura a zona retro do Moche XL Games World.