sexta-feira, maio 12, 2023

MSX: fMSX 6 no Ubuntu

O fMSX ainda é um ótimo emulador e roda muito bem em maquinas menos potentes, principalmente em ambiente Unix/Linux.

Alteração no Makefile

A partir do GCC 10, ocorre o famoso problema de 'multiple definition of ARGC/ARGV', isto por conta que a partir desta versão, o GCC adota a flag no-common como padrão.

Uma pequena alteração no Makefile ajusta isso. O Makefile fica em fMSX/Unix, basta incluir na linha CFLAGS a opção '-fcommon' e a compilação transcorre tranquilamente, mas ainda não compile pois alguns pacotes são necessários.

Makefile

    CFLAGS += -Wall -I$(LIBZ80) -fcommon

Pacotes necessários

Claramente precisamos do compilador C, então o primeiro pacote necessário e o build-essential.

    sudo apt install build-essential

Outros pacotes necessários são a xlib, xextensions e pulseaudio, que podem ser instaladas usando:

    sudo apt install libx11-dev libxext-dev libpulse-dev

DSK Archive Tools

É bem útil ter os programas para criar arquivos DSK e extrair arquivos de DSKs, e o fMSX tem duas ferramentas simples mas muito boas para linha de comando. Após baixar e descompactar os fontes, inclua a stdlib.h tanto no rddsk.c qanto no wrdsk.c:

rddsk.c

    #include <stdlib.h>

wrdsk.c

    #include <stdlib.h>

Elas podem ser incluídas logo após a stdio.h.

O comando para compilar é trivial:

        gcc rddsk.c DiskUtils.c -o rddsk

        gcc wrdsk.c DiskUtils.c -o wrdsk

Eu coloco no mesmo diretório do fmsx, no caso o /usr/local/bin

Compilando

A compilação é trivial, basta entrar no diretório fMSX/Unix e comandar

        make

Após a compilação, mova o fmsx para /usr/local/bin

Basta agora baixar o pacote de ROMs compatíveis e colocar no diretório de sua preferencia, eu recomendo o próprio /usr/loca/bin. Para executar o emulador:

        fmsx -home /usr/local/bin

 Teclas de Atalho

  • [CONTROL] - CONTROL (também: botão FIRE-A joystick).
  • [SHIFT] - SHIFT (também: botão FIRE-B joystick).
  • [ALT] - GRAPH (também: troca joysticks).
  • [INSERT] - INSERT.
  • [DELETE] - DELETE.
  • [HOME] - HOME/CLS.
  • [END] - SELECT.
  • [PGUP] - STOP/BREAK.
  • [PGDOWN] - COUNTRY.
  • [F6] - Carrega o estado do emulador de um arquivo .STA.
  • [F7] - Salva o estado do emulador em um arquivo .STA.
  • [F8] - Retrocede o estado do emulador no tempo.
  • [F9] - Acelera a emulação.
  • [F10] - Chama o menu interno de configuração.
  • [F11] - Reinicializa o hardware.
  • [F12] - Encerra o emulador.
  • [CONTROL]+[F8] - Troca o estado das 'scanlines' ligada/desligada.
  • [ALT]+[F8] - Troca o estado de suavização da tela ligado/desligado.
  • [CONTROL]+[F10] - Chama o depurador interno.

Opções de linha de comando

Uso: fmsx [-opção1 [-opção2...]] [arquivo1] [arquivo2]

  [arquivo1] = nome do arquivo a ser carregado no slot A

  [arquivo2] = nome do arquivo a ser carregado no slot B

  -verbose {nível} - Seleciona o nível de mensagens [1]

                     0 - Silencioso

                     1 - Mensagens de Inicialização

                     2 - operações do V9938

                     4 - Disco/Fita

                     8 - Memoria

                    16 - Operações Ilegais do Z80

  -skip {porcentagem} - Porcentagem de frames descartados [25]

  -pal/-ntsc - Seleciona o perído HBlank/VBlank conforme padrão 

               PAL/NTSC [NTSC]

  -help - Mostra a página de ajuda

  -home {diretório} - Define o diretório que contém as ROMs do 

                      sistema [off]

  -printer {arquivo} - Redireciona a saída da impressora para 

                       o arquivo [stdout]

  -serial {arquivo} - Redireciona o E/S serial para o arquivo 

                      [stdin/stdout]

  -diska {arquivo} - Imagem de disco a ser usada no drive A: 

                     [DRIVEA.DSK]

                     (opções multiplas -diska são aceitas)

  -diskb {arquivo} - Imagem de disco a ser usada no drive B: 

                     [DRIVEB.DSK]

                     (opções multiplas -diskb são aceitas)

  -tape {arquivo} - Arquivo de imagem de cassete a ser 

                    carregado [off]

  -font {arquivo} - Define a fonte (fixa) para os modos 

                    texto [DEFAULT.FNT]

  -logsnd {arquivo} - Define o arquivo de log de audio [LOG.MID]

  -state {arquivo} - Define o nome do arquivo de salvamento de 

                     estado [automatic]

  -auto/-noauto - Habilita o disparo automático na tecla 

                  ESPACO [off]

  -ram {páginas} - Número de páginas de 16Kb disponíveis na 

                   RAM [4/8/8]

  -vram {páginas} - Número de páginas de 16kB na VRAM 

                    [2/8/8]

  -rom {tipo} - Seleciona o tipo de mapeamento da MegaROM [8,8]

                (duas opções -rom são aceitas)

                0 - Generica 8kB

                1 - Generica 16kB (MSXDOS2)

                2 - Konami5 8kB

                3 - Konami4 8kB

                4 - ASCII 8kB

                5 - ASCII 16kB

                6 - GameMaster2

                7 - FMPAC

                }7 - tenta adivinhar o tipo de mapeamento



  -msx1/-msx2/-msx2+  - Seleciona o modelo do MSX [-msx2]

  -joy {type}         - Select joystick types [0,0]

                        (two -joy opçãos accepted)

                        0 - No joystick

                        1 - Normal joystick

                        2 - Mouse in joystick mode

                        3 - Mouse in real mode

  -simbdos/-wd1793    - Simulate DiskROM disk access calls [-wd1793]

  -sound [{quality}]  - Sound emulation quality (Hz) [44100]

  -nosound            - Same as '-sound 0'

  -sync {frequency}   - Sync screen updates to {frequency} [60]

  -nosync             - Do not sync screen updates [-nosync]

  -static/-nostatic   - Use static color palette [-nostatic]

  -tv/-lcd/-raster    - Simulate TV scanlines or LCD raster [off]

  -linear             - Scale display with linear interpolation [off]

  -soft/-eagle        - Scale display with 2xSaI or EAGLE [off]

  -epx/-scale2x       - Scale display with EPX or Scale2X [off]

  -cmy/-rgb           - Simulate CMY/RGB pixel raster [off]

  -mono/-sepia        - Simulate monochrome or sepia CRT [off]

  -green/-amber       - Simulate green or amber CRT [off]

  -4x3                - Force 4:3 television screen ratio [off]

  With #define DEBUG:

  -trap {address}     - Trap execution when PC reaches address [FFFFh]

                        (when keyword 'now' is used in place of the

                        {address}, execution will trap immediately)

  With #define MITSHM:

  -shm/-noshm         - Use MIT SHM extensions for X [-shm]

  With #define UNIX:

  -saver/-nosaver     - Save/don't save CPU when inactive [-saver]

  -scale {factor}     - Scale window by {factor} [2]

  With #define MSDOS:

  -vsync              - Sync screen updates to VBlank [-vsync]

  -480/-200           - Use 640x480 or 320x200 VGA mode [-200]

OBS: Quando compilado com #define ZLIB, o fMSX lê automaticamente arquivos compactados no formato GZIP ou PKZIP (apenas um arquivo por container).

Download

Links

  • fMSX: Site oficial do fMSX.