Bugfixes e otimizaes para o Salamander do MSX
(c) 2009 FRS (sd_snatcher@yahoo.com)

***************************************************************************
*** Voc deve ler a licena e concordar com ela antes de rodar, copiar  ***
*** ou distribuir estes patches. Se voc no concordar com os termos    ***
*** condies, dever deletar todos os arquivos dos patches.            ***
***************************************************************************

Este pacote contm dois bugfixes para a verso MSX do jogo Salamander:

1) Patch de Vsync-Dinmico

O Salamander  um dos mais (se no o mais) pesados jogos da Konami para o
MSX. Como resultado, quando o jogo  executado em uma mquina padro de
3,57MHz, ele rasteja como uma lesma. Roda muito mais lento que o Gradius-1
e quando comparado ao Salamander do fliperama o jogo parece estar em
cmera-lenta.

Isso ocorre porque a 3,5MHz o jogo perde quadros. Muitos. Constantemente.
Mais de um quadro perdido para cada quadro desenhado. At pior que isso
em telas muito populadas.

Mas o principal problema  que, como ocorre com vrios jogos megarom da
Konami para o MSX, h um bug na rotina te temporizao que faz com que o
jogo rode ao dobro da velocidade se a CPU puder faz-lo.

A rotina de temporizao da Konami era baseada em vsync esttico. Qualquer
um que tenha jogado no PC recentemente sabe que o vsync consome muito
tempo de CPU, resultando em uma taxa menor de quadros-por-segundo (fps).
O que no se sabia at recentemente era como isso poderia afetar uma CPU
to lenta como o Z80. E no final ficou claro que o Z80 ainda tinha muito
poder de processamento que estava sendo desperdiado pela rotina.

Este patch substitui a rotina-bugada-de-tratamento-de-interrupo-com-vsync-esttico da Konami por uma que faz vsync dinmico. Este  um novo
mtodo, usado por consoles recentes de jogo (como o Xbox-360) e placas
de vdeo 3D, que habilita e desabilita automaticamente o vsync em tempo
real, de acordo com o consumo de CPU. Quando a CPU estiver sendo
insuficiente para manter o nmero de quadros por segundo desejados, o
vsync ser desabilitado. Ao se chegar em uma rea do jogo que requeira
menos uso de CPU, o vsync ser habilitado novamente.

Com a rotina de vsync-esttico original, mesmo que corrigida, os
requisitos de CPU do Salamander eram muito elevados. Mesmo um Z80 de 7MHz
no era suficiente o jogo ir perdia vrios quadros. O jogo requeria no
mnimo um Z80 de 15MHz para rodar a plena velocidade na maior parte do
tempo.

A rotina de vsync-dinmico permite liberar tanto poder de CPU que mesmo
o Z80 padro de 3,57MHz passa a rodar o jogo 50% mais rpido! Isso
significa que o jogo agora rodar nele a 70% da velocidade desejada,
bem melhor que os ridculos 47% que ele obtinha antes. 

Sendo uma rotina novinha em folha, este patch de vsync-dinmico permitir
tambm que voc rode o jogo em MSXzes turbinados, para poder obter 100%
da velocidade correta o tempo todo. E agora basta um Z80 de 5,37MHz para
conseguir rodar o jogo a plena velocidade a maior parte do tempo.

Foram tambm feitas algumas otimizaes em algumas rotinas, resultando em uma
taxa de quadros-por-segundo ainda melhor em mquinas com clock de 3,57MHz.

O patch tambm habilitar automaticamente no boot o turbo das seguintes
mquinas da Panasonic, pois elas no possuem um boto externo que permita ativar o turbo com o jogo rodando. Essa funcionalidade foi includa tambm para permitir as pessoas no habituadas ao MSX a obter os benefcios do patch apenas selecionando "Turbo-R" nos seus emuladores de MSX.

- Turbo-Rs
  - FS-A1ST
  - FS-A1GT

- MSX2+
  - FS-A1WSX
  - FS-A1WX
  - FS-A1FX

"De brinde", o patch ajustar a paleta para o CoolColors em um MSX2 ou superior. O CoolColors  uma paleta melhorada especialmente desenvolvida
por mim para melhorar o visual dos jogos de MSX1 quando executados em
um VDP V99x8. Se alguma vez voc j comparou algum jogo de MSX1 rodando
em um MSX1 e em um MSX2 (ou superior), provavelmente deve ter percebido
que as cores esto todas erradas no MSX2. Isso ocorre porque o BIOS do MSX
ajusta a paleta para valores que tentam balancear o uso no dia-a-dia com
a compatibilidade retroativa. O resultado ficou bom para utilizar o MSX-DOS
e programas de terminal, mas muito ruim para rodar jogos de MSX1. L nos
anos 90 eu criei o CoolColors para resolver isso. Foram cerca de dois anos
de desenvolvimento e testes extensivos at chegar ao resultado final,
publicado em 1997 e usado por vrios programadores de MSX desde ento.

2) Correo para o bug do Ripple laser

O ripple  um laser e na verso fliperama do Salamander ele se comporta
como tal. Em qualquer Gradius, os lasers sero apenas obstrudos por
paredes e grandes inimigos, mas nunca pelos pequenos inimigos voadores.

Mas na verso MSX deste jogo havia um bug na rotina que lida com os vrios
tipos de armas disponveis. Ela claramente inclua uma "modificao rpida
de ltima hora", provavelmente includa s pressas para poder lanar o
jogo a tempo. Mas essa modificao acabou tendo um efeito colateral
indesejvel: o ripple laser acabava sendo tratado da mesma forma que
as armas no-laser, tornando a arma praticamente intil.

Este patch corrige a rotina, de modo que o ripple laser passa a comportar-
se corretamente como um laser.

3) Patch de invencibilidade

Este no  um bugfix, mas na verdade  uma "trapaa". Vai deixar sua nave
indestrutvel, inclusive contra as paredes. Os crditos deste patch vo
para o Adriano. Eu usei o patch principalmente para debug, mas decidi
inclu-lo aqui como um bnus. Para questes de licenciamento ou de
distribuio deste patch especfico, voc dever contactar o Adriano
em http://www.alsoftware.com.br


Este pacote  composto dos seguintes arquivos:
LEIA-ME.TXT : Este arquivo;
READ-ME.TXT : Arquivo leia-me em ingls;
Salamander_DynamicVsync_CoolColors.ips: Patch de correo do Turbo-Fix no
                            formato IPS. Patches IPS so normalmente
                            utilizados em computadores PC e Mac;
Salamander_RippleFix.ips  : Patch de correo do bug do ripple-laser no
                            formato IPS;
Salamander_Invincible.ips : "Trapaa" da invincibilidade em formato IPS.
salamand.xpc  : Todos os patches acima em formato XPC. Este  o formato
                usado pelo EXECROM, um utilitrio desenvolvido pelo Adriano
                para rodar jogos ROM em um MSX real utilizado uma MegaRAM.

Se o seu emulador suportar patchear as ROMs dinamicamente, voc deve
preferir faz-lo. Caso contrrio aplique o patch usando seu utilitrio
preferido.

Todos os patches foram testados e funcionam corretamente tanto com a ROM
original de 128KB do Salamander, quanto com a verso de 256KB
"SalaNem2" (verso que inclui o Nemesis-2 internamente. O Nemesis-2 
obrigatrio, seja internamente ou conectado a um outro slot, para que se
possa finalizar o jogo, ).

Este patch foi desenvolvido utilizando-se o dump da ROM original, que possui
os seguintes checksums: 
SHA1(SALAMAND.ROM)= 0d459788b6c464b50cbc2436e67a2cef248e0c4a
MD5(SALAMAND.ROM)= ec869b375d7517a7ba6161b10f5dee06

Tambm, a ROM "SalaNem2" (Salamander+Nemesis2) testada foi:
SHA1(SALANEM2.ROM)= a676173780dc3ef4523ff3123fdf179279d22932
MD5(SALANEM2.ROM)= 4ea86c034313f9b1299df9d6d4da30f7





Agradecimentos especiais para:

- Desenvolvedores do openMSX, pelo excelente emulador e o openMSX Debugger
- Adriano Rodrigues Camargo da Cunha, pelo xpctools

===========================================================================
                             Licena
                           Termos de uso
---------------------------------------------------------------------------

1) Esses patches so gratuitos para propsitos no comerciais. Voc s
   poder rodar, fazer cpias backup ou distribuir o patch se obedecer 
   essa condio estrita.

2) Voc s poder distribuir os arquivos de patch (online ou em mdia
   removvel) se obedecer s seguintes condies:
   2.1) Nenhuma transao comercial de qualquer tipo estiver envolvida
   2.2) Todos os arquivos leia-me (em portugus e ingls) forem
   distribudos juntamente com os patches, dentro do mesmo arquivo
   comprimido.

3) Se voc quiser usar este patch para propsitos comerciais, voc dever
   me contactar primeiramente para negociar os termos e as condies. Use
   o e-mail fornecido no incio deste documento para contactar-me.






