Última versão do VBA-M

Iniciado por Sergio Benjamim, 20 de Março de 2014, 17:50

tópico anterior - próximo tópico

platao

Entao vai ter que fazer uma regressao? Ainda bem que encontraram o problema!
\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

Sergio Benjamim

#46
Citação de: platao online 21 de Maio de 2014, 09:10
Entao vai ter que fazer uma regressao? Ainda bem que encontraram o problema!

Eu poderia fazer a regressão, mas não sei exatamente o porquê da atualização. Melhor eles tentarem consertar. Foi algo que eles mudaram no áudio do sdl, arquivos /trunk/src/common/SoundSDL.h e /trunk/src/common/SoundSDL.cpp.

Quer testar? Dá para ver o código antes do commit 1227, e ainda fazer o download:

http://sourceforge.net/p/vbam/code/1226/tree/

Segue o diff entre o 1226 e o 1229.

http://sourceforge.net/p/vbam/code/1227/tree//trunk/src/common/SoundSDL.h?diff=1086

http://sourceforge.net/p/vbam/code/1228/tree//trunk/src/common/SoundSDL.cpp?diff=1086

http://sourceforge.net/p/vbam/code/1229/tree//trunk/src/sdl/SDL.cpp?diff=1148
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

Sergio Benjamim

#47
Acabei revertendo as modificações nesses 3 arquivos, atualizei o ppa. Acho que vai demorar muito até sair atualização por parte do upstream.

Testei aqui, parou de perder as configurações e dar seg fault ao fechar, agora o negócio é testar.

Obs: uma coisa que está me irritando é essa numeração nova do PPA, não consigo configurar isso. O pacote está como vbam-gtk_1.8.0.1231-0ubuntu3~ubuntu14.04.1_amd64.deb por exemplo... tava como vbam-gtk_1.8.0.1231-ubuntu14.04.1_amd64.deb, mas daí fui tentar atualizar usando o recipe que configurei, e dá erro, imaginava que ele atualizava para "ubuntu14.04.2". Não entendi a lógica dessa numeração ainda...

Obs2: Essa mudança da numeração dos pacotes se deve aos codinomes do ubuntu estarem chegando no fim do alfabeto :D .

Obs3: Conversei com o pessoal do vba-m, pode ser que essa regressão dê problemas em certas ocasiões:

Citar31<sergio-br2>30 squall, was it you that did the most thing of commit 1227-1229 ?
<sergio-br2> i wonder if there is a problem to revert that sound sdl stuff here, in linux
<Squall-L2> yes it will be a problem, because the former code introduced deadlocks, in particular situations.
<Squall-L2> fixing the code would be more appropriate
<Squall-L2> assuming its actually broken

Basicamente, o código foi alterado para se evitar deadlock na execução do vba-m.
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

platao

Estou testando o seu PPA desde quarta e nao crashou ainda nenhuma vez, vamos ver.
\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

Sergio Benjamim

#49
Quem usa o VBA-M pelo RetroArch, provavelmente se deparou com o problema de incompatibilidade entre o .sav (usado pelo VBA-M) e o .srm (usado pelo RetroArch). Eu peguei o meu save de um jogo aqui do meu PC e tentei usar no RetroArch do Android, e não deu certo. Estou falando do save nativo do jogo (bateria, memória eeprom, flash...), não dos Saves States.

Como eu não queria começar tudo de novo, procurei um pouco e achei uma solução. É possível converter um save para outro, com o gbaconv:

https://github.com/libretro/vbam-libretro/blob/master/src/libretro/gbaconv/gbaconv.c

É preciso compilar, é fácil, baixe ou copie e cole no gedit/mousepad/nano/leafpad e salve como gbaconv.c, vá até a pasta onde você salvou com o comando cd e use o gcc, assim:

cd /home/seu-usuario/pasta-onde-foi-salvo
gcc -std=c99 -o gbaconv gbaconv.c


Vai dar alguns warnings, mas não tem problema. Agora é só usar o programa pelo terminal:

./gbaconv seu-save.sav

No meu caso, como o jogo é o Kingdom Hearts (coloque o seu arquivo .sav na mesma pasta do gbaconv):

./gbaconv Kingdom\ Hearts\ -\ Chain\ of\ Memories\ \(E\).sav

Ou ainda, arraste e solte seu arquivo .sav sobre o executável gbaconv.

Após isso, você vai ver um arquivo em .srm na mesma pasta!


É possível converter um .srm para .sav também, usando o mesmo programa.


Bem útil esse gbaconv, agora dá para continuar a jogatina no celular, ou eventualmente no próprio ubuntu, usando o retroarch.


http://emulation.gametechwiki.com/index.php/Game_Boy_Advance_emulators


Obs: se não conseguir copiar lá do link:


#include <stdio.h>
#include <stdint.h>
#ifndef __CELLOS_LV2__
#include <getopt.h>
#endif
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdbool.h>

enum save_type
{
  EEPROM_512B,
  EEPROM_8K,
  FLASH_64K,
  FLASH_128K,
  SAVE_UNKNOWN
};

static const char *save_type_to_string(enum save_type type)
{
  switch (type)
  {
     case EEPROM_512B:
        return "EEPROM 4kbit";
     case EEPROM_8K:
        return "EEPROM 64kbit";
     case FLASH_64K:
        return "FLASH 512kbit";
     case FLASH_128K:
        return "FLASH 1MBit";

     default:
        return "Unknown type";
  }
}

static bool scan_section(const uint8_t *data, unsigned size)
{
  for (unsigned i = 0; i < size; i++)
  {
     if (data[i] != 0xff)
        return true;
  }

  return false;
}

static enum save_type detect_save_type(const uint8_t *data, unsigned size)
{
  if (size == 512)
     return EEPROM_512B;
  if (size == 0x2000)
     return EEPROM_8K;
  if (size == 0x10000)
     return FLASH_64K;
  if (size == 0x20000)
     return FLASH_128K;

  if (size == (0x20000 + 0x2000))
  {
     if (scan_section(data, 0x10000) && !scan_section(data + 0x10000, 0x10000))
        return FLASH_64K;
     if (scan_section(data, 0x20000))
        return FLASH_128K;

     if (scan_section(data + 0x20000, 512) && !scan_section(data + 0x20000 + 512, 0x20000 - 512))
        return EEPROM_512B;
     if (scan_section(data + 0x20000, 0x2000))
        return EEPROM_8K;
  }

  return SAVE_UNKNOWN;
}

static void dump_srm(FILE *file, const uint8_t *data, enum save_type type)
{
  void *buf = malloc(0x20000 + 0x2000);
  memset(buf, 0xff, 0x20000 + 0x2000);

  switch (type)
  {
     case EEPROM_512B:
        fwrite(buf, 1, 0x20000, file);
        fwrite(data, 1, 512, file);
        fwrite(buf, 1, 0x2000 - 512, file);
        break;

     case EEPROM_8K:
        fwrite(buf, 1, 0x20000, file);
        fwrite(data, 1, 0x2000, file);
        break;

     case FLASH_64K:
        fwrite(data, 1, 0x10000, file);
        fwrite(buf, 1, 0x20000 + 0x2000 - 0x10000, file);
        break;

     case FLASH_128K:
        fwrite(data, 1, 0x20000, file);
        fwrite(buf, 1, 0x2000, file);
        break;

     default:
        break;
  }

  free(buf);
}

static void dump_sav(FILE *file, const uint8_t *data, enum save_type type)
{
  switch (type)
  {
     case EEPROM_512B:
        fwrite(data + 0x20000, 1, 512, file);
        break;

     case EEPROM_8K:
        fwrite(data + 0x20000, 1, 0x2000, file);
        break;

     case FLASH_64K:
        fwrite(data, 1, 0x10000, file);
        break;

     case FLASH_128K:
        fwrite(data, 1, 0x20000, file);
        break;

     default:
        break;
  }
}

// One shot cowboy code :)

int main(int argc, char *argv[])
{
  if (argc != 2)
  {
     fprintf(stderr, "Usage: %s <file>\n", argv[0]);
     return 1;
  }

  FILE *file = fopen(argv[1], "rb");
  if (!file)
  {
     fprintf(stderr, "Failed to open file \"%s\"\n", argv[1]);
     goto error;
  }

  fseek(file, 0, SEEK_END);
  long len = ftell(file);
  rewind(file);

  uint8_t *buffer = malloc(len);
  if (!buffer)
  {
     fprintf(stderr, "Failed to allocate memory!\n");
     goto error;
  }
  fread(buffer, 1, len, file);
  fclose(file);
  file = NULL;

  char *out_path = strdup(argv[1]);
  char *split = strrchr(out_path, '.');
  const char *ext = NULL;

  if (split)
  {
     *split = '\0';
     ext = split + 1;

     if (strcasecmp(ext, "srm") == 0)
        strcat(out_path, ".sav");
     else if (strlen(ext) >= 3)
        strcat(out_path, ".srm");
     else
        ext = NULL;
  }

  if (!ext)
  {
     fprintf(stderr, "Cannot detect extension!\n");
     goto error;
  }

  enum save_type type = detect_save_type(buffer, len);
  printf("Detected save type: %s\n", save_type_to_string(type));

  if (type == SAVE_UNKNOWN)
  {
     fprintf(stderr, "Cannot infer save type ...\n");
     goto error;
  }

  file = fopen(out_path, "wb");
  if (!file)
     goto error;

  if (len == (0x20000 + 0x2000))
     dump_sav(file, buffer, type);
  else
     dump_srm(file, buffer, type);
  fclose(file);

  return 0;

error:
  if (file)
     fclose(file);
  return 1;
}

É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

platao

Legal, vai adicionar o aplicativo no seu PPA tbm?
\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

Sergio Benjamim

Citação de: platao online 03 de Julho de 2014, 09:08
Legal, vai adicionar o aplicativo no seu PPA tbm?

Hum, não sei. Será que existe esse problema em outras plataformas?

Eu lembro que existe o problema de ISO's em alguns emuladores, uns usam ISO, outros usam BIN e CUE, ou algo do tipo.

Seria legal ter um app com mais de uma solução. Talvez seja perda de tempo criar um .deb só para esse aí.
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

Sergio Benjamim

Alguém está tendo problema ainda com perda da configuração, no Unity? Aqui no Xfce não tive mais problema, mas um cara me mandou email reclamando à respeito...
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

Sergio Benjamim

#53
Saiu versão Beta 1 do futuro 2.0.0  :o :o :o

Pacotes para ubuntu aqui (64 bits). Edit: atualizei, corrigido alguns bugs e tem o pacote gtk. usar pacotes do PPA VBA-M Trunk

Mudou a interface, está usando Wx agora, testando aqui encontrei vários bugs... quem quiser ajudar à reportar problemas: https://sourceforge.net/p/vbam/bugs/?source=navbar
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

Sergio Benjamim

#54
Atualizado o PPA, de agora em diante vai ter sempre pacotes novos diariamente (está em sincronia com a versão svn do sourceforge).

Edit: Agora tem um pacote comum, vbam-common, que fornece os ícones para ambos pacotes wx e gtk. Se você perceber um pacote quebrado no sistema, desinstale o vbam-wx ou vbam-gtk e instale novamente. Pelo menos agora dá para instalar os dois frontends ao mesmo tempo.
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !

xGrind

Boa noite Sergio,

Corrigiram o problema com lag? Testei esses dias no Xubuntu 14.04 atualizado e nem dava pra jogar. Travando muito, mas no Mageia roda tranquilo. E o Visualboy Advacend da Central de Programas só dá uns lag bobo as vezes.
Sabe se tem como corrigir isso, ou se é algo relacionado a versão do Kernel? Testei com a última versão do kernel 3.13 do ubuntu essa semana.

Sergio Benjamim

Citação de: xGrind online 18 de Fevereiro de 2016, 00:58
Boa noite Sergio,

Corrigiram o problema com lag? Testei esses dias no Xubuntu 14.04 atualizado e nem dava pra jogar. Travando muito, mas no Mageia roda tranquilo. E o Visualboy Advacend da Central de Programas só dá uns lag bobo as vezes.
Sabe se tem como corrigir isso, ou se é algo relacionado a versão do Kernel? Testei com a última versão do kernel 3.13 do ubuntu essa semana.

Problema de lag? Acho que nunca tive com ele. E pra ser sincero, faz tempo que não atualizo esse pacote. Por que você não tenta o mGBA?
É novo no Ubuntu? Já leu o Ubuntu – Guia do Iniciante 2.0 ?
Experimente o Xubuntu 14.04 !