Patch de Melhorias para o Gradius-2
(c) FRS 2009 (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.            ***
***************************************************************************

Contexto
--------

A verso MSX do Gradius-2 (ou Nemesis-2)  uma histria paralela  da srie
Gradius oficial, desenvolvida especificamente para o MSX e posteriormente
portada para o X68000 e para o PSP sob o ttulo de "Nemesis 90 Kai".

Como vrios outros ttulos megarom da Konami para o MSX, o jogo sofre do bug
da temporizao, que permite que ele rode ao dobro da velocidade se a CPU tiver
velocidade suficiente para tal.

Alm disso, o jogo  muito pesado para a CPU Z80A padro de 3,57MHz conseguir
manter a taxa de quadros por segundo plena. Como resultado, o jogo perde quadros
constantemente, rodando a uma velocidade nitidamente inferior  do seu
antecessor, o Gradius (ou Nemesis).

Este patch contm vrias correes e melhorias para a verso MSX do jogo Gradius-2:

1) Otimizaes de velocidade

Vrias rotinas foram otimizadas. H tambm novas rotinas de copia-para-a-VRAM
que tiram vantagem da transferncia rpida do V9958 caso um MSX2+ ou Turbo-R
seja detectado.

2) Para MSX1 e MSX2: Patch de Vsync-Dinmico

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.

A rotina de vsync-dinmico libera CPU suficiente para rodar o jogo a uma
velocidade muito melhor e de forma mais constante. Ela tambm corrige o bug
da temporizao, portanto passa a ser possvel executar o jogo na velocidade
correta em um MSX turbinado.

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) Para MSX2+ e MSX Turbo-R: Scroll fino e TurboFix

O jogo original do MSX tinha o "scroll pulador" (de 8 e 8 pixels), comum nos
jogos de MSX1, mas que sempre fez os jogadores de Nintendinho acharem que
as verses deste video-game tinham desempenho superior, pois parece que o jogo
no MSX est sendo executado a uma taxa de atualizao muito baixa.

Isso nunca foi verdade, a a razo de porque o scroll  assim no tem nada a ver
com a velocidade do sistema: Ocorria simplesmente porque o scroll era executado
movendo-se os tiles que tinham dimenses de 8x8 pixels.

Esta rotina implementa novas rotinas para o scroll fino dentro do mecanismo
do jogo, usando a funcionalidade de scroll fino horizontal do V9958. Elas rodam
consideravelmente bem a 3,57MHz. Claro, se voc rodar o jogo em um MSX2+
turbinado ou em um MSX Turbo-R os resultados sero muito melhores.


3) Patch de invencibilidade

Este no  um bugfix, mas na verdade  uma "trapaa". Vai deixar sua nave
indestrutvel, inclusive contra as paredes.  Eu usei o patch principalmente para
debug, mas decidi inclu-lo aqui como um bnus.


4) Patches para simular a presena de cartuchos especficos

Como vrios outros jogos da Konami, o Gradius-2 possui "combinaes de
cartuchos".

Se voc inserir alguns jogos especficos da Konami em outro slot ir obter
alguns efeitos interessantes:

    - Penguin Adventure
      Efeito: a metalion muda para um pingim azul e os power-ups
      tornam-se peixes.
    - Q-Bert
      Efeito: habilitam-se algumas senhas. Para digit-las pressione <F1> para
      pausar, digite a senha, <RETURN> e pressione <F1> novamente para retornar.
      - METALION
        Sua nave ficar verde e voc ficar invulnervel contra os inimigos.
        O efeito expira aps algum tempo, mas basta redigitar a senha.
      - NEMESIS
        Pula para a fase seguinte.
      - LARS18TH
        Upgrade completo das armas da nave (dois options, lasers, etc), mas sem
        nenhum speed-up.
    - The Maze of Galious
        Efeito: quando sua nave for destruda, voc obter suas armas de volta
        (backup). Entretanto no funciona aps um CONTINUE.

Portanto, h um patch para simular cada combinao de cartucho. Como estes
patches so opcionais, o ExecROM ir perguntar quais voc deseja aplicar.



Este pacote  composto dos seguintes arquivos:
LEIA-ME.TXT  : Este arquivo;
READ-ME.TXT  : Arquivo leia-me em ingls;
GRADIUS2.XPC : Todos os patches acima listados no formato XPC. Este  o formato
               usado pelo EXECROM, um utilitrio desenvolvido pelo Adriano
               para rodar jogos ROM em um MSX real utilizado uma MegaRAM.
               Por enquanto nenhum emulador suporta o formato XPC, ento voc
               pode obter o XPCtools em http://execrom.sf.net para aplicar os
               arquivos diretamente em sua ROM.

Se o seu emulador suportar patchear as ROMs dinamicamente, voc deve
preferir faz-lo.

Todos os patches so compatveis com os GameMasters 1 e 2.

Os patches foram desenvolvidos utilizando-se o dump da ROM original do
Gradius-2, que possui o seguintes checksums:
SHA1(GRADIUS2.ROM)= ab30cdeaacbdf14e6366d43d881338178fc665cb
MD5(GRADIUS2.ROM)= ee3e6a50e3de131d217e5dab55519011

---------------------------------------------------------------------------
Usando o Patch
--------------

H duas maneiras simples de se usar este patch:

1) Mais fcil: Apenas coloque a ROM e o arquivo XPC em um mesmo diretrio (de um
disco que contenha o MSX-DOS, claro) com o mesmo nome de arquivo (p.e: GRADIUS2.ROM
e GRADIUS2.XPC). O ExecROM ir detectar isso e carregar automaticamente o patch.
Voc precisar de uma MegaRAM (o openMSX emula a MegaRAM). Para executar o jogo
apenas digite ExecROM GRADIUS2 no prompt do MSX-DOS.

2) Aplicar o patch diretamente na ROM. V em http://www.sf.net/projects/execrom e
faa o download do XPCtools. Voc pode aplicar os patches exatamente como faria com
um patcheador IPS.

O problema : Muitos emuladores requerem que o jogo tenha um tamanho exato
(mltiplo do tamanho de pgina do megarom em questo) para executar uma ROM.
Caso contrrio ele no executar a ROM corretamente. Voc poder enganar tais
emuladores concatenando um arquivo dummy ao final da ROM antes de aplicar o patch.

Portanto, os passos para patchear a ROM para um emulador so:

1) Procure por "dummy file creator" no Google e obtenha uma ferramenta pra isso;
2) Crie um arquivo dummy de 8KB preenchido com FFh
3) Abra uma prompt de comandos do Windows e digite:
   copy /b NEMESIS2.ROM + dummy8KB.rom GRAD2ENH.ROM
4) Digite: xpcapply GRAD2ENH.ROM GRADIUS.XPC

Se ainda assim o seu emulador recusar-se a carregar a rom, repita o processo
utilizando um arquivo dummy de 128KB (que desperdcio de espao...).

---------------------------------------------------------------------------

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.






