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
- fMSX60.zip: fMSX 6.0 Source Code.
- DiskUtilities16.tar.gz: Disk Utilities para Linux.
- fmsxroms.zip: Pacote de ROMs para o fMSX.
Links
- fMSX: Site oficial do fMSX.