Emulateurs et logiciels thomson sous linux

Couvre tous les domaines de l'émulation logicielle ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Emulateurs et logiciels thomson sous linux

Message par Zaxxon »

Bonsoir,

Suite à mon passage sur fedora 64 bits, j'en profite pour créer un post pour recenser les problèmes rencontrés sous linux avec les émulateurs thomson.

Certains possèdent un makefile qu'il faut modifier, d'autres rencontrent des problèmes divers. En espérant que cela puisse aider certains.

Pour résoudre les problèmes de son liés à /dev/dsp introuvable et pulseaudio :

Certains emulateurs utilisent /dev/dsp pour le son mais avec pulse audio, ce dernier n'est plus présent. résultat plus de son sur les émulateurs.

La solution très simple consiste à utiliser padsp , qui est un wrapper. Pour l'utiliser avec vos émulateurs (pas forcément thomson), faire

padsp ./votreprogramme
et voilà le son reviens :).

Ou de créer un petit lanceur
Exemple pour thom,
créer un fichier gothom.sh avec
padsp ./thom
puis faire chmod 755 gothom.sh.


Pour la compilation des différentes émulateurs, certains ont placé l'option -W -Werror, enlevez là car même si elle est sensée elle peut bloquer la compilation (les warnings sont considérés comme des erreurs).

J'utilise souvent le parametre -m=native pour compiler pour mon processeur, supprimez là si vous voulez compiler pour que cela soit compatible quelque soit le type de processeur ;)

Emulateur Thom :

Recompilation avec succès en modifiant le makefile :

Code : Tout sélectionner

#ifdef PGCC
#   OFLAGS = -mcpu=pentium -O6 -ffast-math
#else
#ifdef PENTIUMONLY
#   OFLAGS = -march=pentium -O2 -funroll-loops -ffast-math
#else
   OFLAGS = -march=native -O2 -pipe -fomit-frame-pointer  -ffast-math
#endif
#endif
Ou supprimer les commentaires # pour faire plus propre

Code : Tout sélectionner

   OFLAGS = -march=native -O2 -pipe -fomit-frame-pointer  -ffast-math
Utilitaire sapfs
Dans le makefile.lnx,
supprimer les -W et -WERROR
Modifier la ligne contenant OGFLAGS :
OFLAGS = -march=native -pipe -O2 -fomit-frame-pointer

Et voila beaucoup de warnings mais ça compile et fonctionne.

Teo 1.7.6 et Teo 1.8.2
Modifier le makefile comme j'ai indiqué dans le poste
http://forum.system-cfg.com/viewtopic.php?f=24&t=4611

Edit : Apres test, la version 1.8.2 fonctionne très bien. Afin d'éviter tout bug d'affichage il est primordial d'utiliser un gestionnaire de fenêtre proposant un mode composite et s'assurer qu il soit activé (gnome3, kde.., xfce, unity peut être).
si ce n'est pas le cas, Installer compton (léger) ,xcompmgr (plus ancien), ou compiz règlera le soucis.
voir http://doc.ubuntu-fr.org/xcompmgr
ou encore https://wiki.archlinux.org/index.php/Compton

Pour la version 1.7.6 modifier en plus le fichier main.h dans include/linux à la ligne 59, et virer le mot static car il semblerait que gcc 4.x ne l'aime pas.

Emuto8

En cours de patch. Apparemment il semblerait que le problème en plus du makefile se situe dans le fichier video.h. l'incrementation de pointeur dans les define poserait des problèmes :

Code : Tout sélectionner

#define PUTPIXEL_BPP2(ptr, data) *(tt_u16 *)ptr++ = data
provoque l'erreur suivante sous gcc 4.x

Code : Tout sélectionner

erreur: lvalue required as increment operand
Cependant après modifications de ce fichier puis recompilation, j'obtiens un écran noir au lancement (qui n a peut être aucun rapport).

Je suis donc en investigation pour ce dernier.

Je vous invite à partager les problèmes rencontrés sous linux, et les solutions trouvées :)

bonne soirée.
Dernière modification par Zaxxon le 30 mai 2013 00:00, modifié 2 fois.
Thomas,
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Emulateurs et logiciels thomson sous linux

Message par gilles »

pour

Code : Tout sélectionner

erreur: lvalue required as increment operand
il faut regarder à quel endroit est utilisé le define.
tu peux compiler en mode -E par exemple pour voir comment tout est défini après le passage du préprocesseur , ou utiliser cpp à la place de (g)cc
Si il prend le ++ sur quelquechose qui ne lui plait pas, c'est peut être un problème de parenthèses qui était ambigu:
essaye

Code : Tout sélectionner

#define PUTPIXEL_BPP2(ptr, data) *((tt_u16 *)(ptr)++) = data
Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Re: Emulateurs et logiciels thomson sous linux

Message par Zaxxon »

Bonjour Gilles, et merci de ta réponse.

Je viens de t'envoyer un message justement via Sourceforge, concernant la nouvelle version de Teo :)

Hier soir, j'ai justement testé ça et réussi à le compiler avec gcc, je n'ai pas mentionné cette modification, car après compilation, au lancement j'ai un écran noir.

Gcc 4.0.0 est devenu moins permissif, ce qui pose pas mal de problème de compilation pour d'anciens programmes.

En mode console le debuggueur apparaît, mais la fenêtre de l'émulateur demeure noire, et comme je ne me souviens plus trop de cet émulateur, il va falloir que je creuse un peu le sujet pour emuto8

Bonne journée,
Thomas
Thomas,
Zaxxon
Messages : 402
Inscription : 22 mai 2013 01:10
Localisation : Paris / Eure

Re: Emulateurs et logiciels thomson sous linux

Message par Zaxxon »

Pour ceux qui souhaitent compiler teo sur une archi 64 bits et/ou le packager,

Je joins à ce message un makefile.all qui devrait faciliter la compilation et le packaging.

Code : Tout sélectionner

#
#  Shared makefile for building Teo. Requires GNU make.
#
#  Available options:
#
#     Environment variables:
#        DEBUGMODE=1       selects a debug build.
#        PROFILEMODE=1     selects a profiling build.
#        STATICLINK=1      use static linking (mingw32 only).
#        PGCC=1            use PGCC compiler switches (djgpp and mingw32 only).
#        PENTIUMONLY=1     make the library faster, but pentium-only.
#        DEBIANBUILD=1     adapt pathes for DEBIAN build (Linux only)
#        FRENCH=1          (by default) create a french build (djgpp and mingw32 only).
#        ENGLISH=1         create an english build (djgpp and mingw32 only).
#
#     Targets: 
#        default:          build teo
#        install:          build and install teo in $(HOME)/emu/teo
#        compress:         compress the executable files (mingw32 and djgpp only).
#        all:              build, compress and install teo
#        clean:            remove objects and executable files.
#        veryclean:        remove all generated files.
#        depend:           regenerate the dependency files.
#
#  The "clean" and "veryclean" targets require a Unix-style rm command
#  to be installed, eg. from the djgpp fileutils package.
#
#  The "depend" target requires long command line support and the stream
#  editor sed to be installed. 


.PHONY: _default

_default: default

BINDIR = $(DESTDIR)$(PREFIX)/usr/bin
DATADIR = $(DESTDIR)$(PREFIX)/usr/share/teo
DOCDIR = $(DATADIR)/doc

# ------ sources files ------

TEO_SRC_FILES =         \
   src/media/joystick.c \
   src/media/cass.c     \
   src/media/memo.c     \
   src/media/keyboard.c \
   src/media/mouse.c    \
   src/media/disk/controlr/thmfc1.c  \
   src/media/disk/sap.c \
   src/media/disk/hfe.c \
   src/media/disk/fd.c  \
   src/media/disk/daccess.c  \
   src/media/disk.c     \
   src/media/printer/pr906xx.c  \
   src/media/printer/pr90582.c  \
   src/media/printer/pr90042.c  \
   src/media/printer/pr90055.c  \
   src/media/printer.c  \
   src/errors.c         \
   src/hardware.c       \
   src/image.c          \
   src/ini.c            \
   src/std.c            \
   src/option.c         \
   src/teo.c

TEO_SRC_ALLEG_FILES =        \
   src/alleg/acolor8.c       \
   src/alleg/agfxdrv.c       \
   src/alleg/amouse.c        \
   src/alleg/asound.c        \
   src/alleg/atruecol.c      \
   src/alleg/ajoyint.c       \
   src/alleg/amode40.c       \
   src/alleg/amode80.c       \
   src/alleg/agui.c          \
   src/alleg/agui/asetting.c \
   src/alleg/agui/adisk.c    \
   src/alleg/agui/acass.c    \
   src/alleg/agui/amemo.c    \
   src/alleg/agui/aprinter.c \
   src/alleg/agui/aabout.c

TEO_SRC_DOS_FILES =   \
   src/file/bmp.c     \
   src/dos/ddebug.c   \
   src/dos/dfloppy.c  \
   src/dos/dkeybint.c \
   src/dos/dmain.c    \
   src/dos/dmemmng.c  \
   src/dos/dvga.c

TEO_SRC_LINUX_FILES =         \
   src/file/png.c             \
   src/linux/ufloppy.c        \
   src/linux/udisplay.c       \
   src/linux/ugraphic.c       \
   src/linux/umain.c          \
   src/linux/usound.c         \
   src/linux/ugui.c           \
   src/linux/ugui/usetting.c  \
   src/linux/ugui/udisk.c     \
   src/linux/ugui/umemo.c     \
   src/linux/ugui/ucass.c     \
   src/linux/ugui/uprinter.c  \
   src/linux/ugui/uabout.c    \
   src/linux/ugui/udebug.c

TEO_SRC_MC68XX_FILES =   \
   src/mc68xx/dasm6809.c \
   src/mc68xx/mc6809.c   \
   src/mc68xx/mc6821.c   \
   src/mc68xx/mc6846.c

TEO_SRC_WIN_FILES =        \
   src/file/png.c          \
   src/win/wgui.c          \
   src/win/wkeybint.c      \
   src/win/wmain.c         \
   src/win/wgui/wabout.c   \
   src/win/wgui/wsetting.c \
   src/win/wgui/wcass.c    \
   src/win/wgui/wdisk.c    \
   src/win/wgui/wprinter.c \
   src/win/wgui/wmemo.c    \
   src/win/wdialog.rc


# ------ compiler flags ------ 

CC = gcc

WFLAGS = -Wall -Werror

ifdef PGCC
   OFLAGS = -O6 -ffast-math
else
ifdef PENTIUMONLY
   OFLAGS = -march=pentium -O2 -funroll-loops -ffast-math
else
   OFLAGS = -O2 -msse2
endif
endif

# ------ object files ------

VPATH = src src/mc68xx src/media src/media/printer src/media/disk src/media/disk/controlr src/file

COMMON_OBJ_LIST = $(basename $(notdir $(TEO_SRC_FILES) $(TEO_SRC_MC68XX_FILES)))

include $(MAKEFILE_INC)

CFLAGS += -fsigned-char

ifdef UNIX_TOOLS
CFLAGS += -DUNIX_TOOL
endif

OBJ = $(addprefix $(OBJ_DIR)/, $(addsuffix .o , $(OBJ_LIST)))

CLEAN_FILES = $(OBJ) $(EXE_NAME)


$(OBJ_DIR)/%.o: %.c
	$(CC) -c $(CFLAGS) -I./include -o $@ $<


$(EXE_NAME): $(OBJ)
	$(CC) $(LFLAGS) -o $(EXE_NAME) $(OBJ) $(LIB)



# ------ target rules ------ 

.PHONY: default install compress all clean veryclean depend

default: $(EXE_NAME)
	@echo The $(DESCRIPTION) $(PLATFORM) version has been compiled.

install: $(EXE_NAME)
	
	mkdir -p $(BINDIR)
	mkdir -p $(DATADIR)/system
	mkdir -p $(DATADIR)/system/printer
	mkdir -p $(DATADIR)/system/printer/042
	mkdir -p $(DATADIR)/system/printer/055
	mkdir -p $(DATADIR)/system/printer/582
	mkdir -p $(DATADIR)/system/printer/600
	mkdir -p $(DATADIR)/system/printer/612
	mkdir -p $(DATADIR)/system/rom
	mkdir -p $(DATADIR)/icons
	mkdir -p $(DESTDIR)/$(PREFIX)/share/pixmaps
	mkdir -p $(DOCDIR)
	mkdir -p $(DOCDIR)/images
	mkdir -p $(DOCDIR)/wiki
	mkdir -p $(DESTDIR)/$(PREFIX)/usr/share/pixmaps
	install -m 0755 $(EXE_NAME) $(BINDIR)
	install -m 0644 src/linux/teo.desktop $(DATADIR)
	install -m 0644 misc/pack/debian/teo/usr/share/pixmaps/teo.png $(DESTDIR)/$(PREFIX)/usr/share/pixmaps
	install -m 0644  licence*.txt $(DOCDIR)
	install -m 0644 readme*.txt $(DOCDIR)
	install -m 0644 doc/images/* $(DOCDIR)/images
	install -m 0644 doc/wiki/* $(DOCDIR)/wiki
	install -m 0644 system/printer/042/* $(DATADIR)/system/printer/042/
	install -m 0644 system/printer/055/* $(DATADIR)/system/printer/055/
	install -m 0644 system/printer/582/* $(DATADIR)/system/printer/582/
	install -m 0644 system/printer/600/* $(DATADIR)/system/printer/600/
	install -m 0644 system/printer/612/* $(DATADIR)/system/printer/612/
	install -m 0644 system/rom/* $(DATADIR)/system/rom
	xdg-desktop-menu install --novendor $(DATADIR)/teo.desktop
uninstall: $(EXE_NAME)
	xdg-desktop-menu uninstall --novendor $(DATADIR)/teo.desktop
	rm $(DESTDIR)/$(PREFIX)/usr/share/pixmaps/teo.png	
	rm $(BINDIR)/$(EXE_NAME)
	rm -rf $(DATADIR)
	
compress: $(EXE_NAME)
	upx $(EXE_NAME)

all: $(EXE_NAME) compress install

clean:
ifdef UNIX_TOOLS
	rm -f $(CLEAN_FILES)
else
   define RM_FILES
      $(foreach file, $(CLEAN_FILES), if exist $(subst /,\,$(file)) del $(subst /,\,$(file))
      )
   endef
	-$(RM_FILES)
endif

veryclean: clean
ifdef UNIX_TOOLS
	rm -f $(OBJ_DIR)/makefile.dep
else
	-if exist $(subst /,\,$(OBJ_DIR)/makefile.dep) del $(subst /,\,$(OBJ_DIR)/makefile.dep)
endif


# ------ automatic source dependencies ------

-include $(OBJ_DIR)/makefile.dep
Thomas,
Répondre