<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Commodore_64_%28VICE%29</id>
	<title>Commodore 64 (VICE) - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Commodore_64_%28VICE%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Commodore_64_(VICE)&amp;action=history"/>
	<updated>2026-08-30T15:04:03Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Commodore_64_(VICE)&amp;diff=256253&amp;oldid=prev</id>
		<title>Joan: /* Llista de jocs */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Commodore_64_(VICE)&amp;diff=256253&amp;oldid=prev"/>
		<updated>2017-05-23T14:31:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Llista de jocs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Introducció=&lt;br /&gt;
Vice -  the Versatile Commodore Emulator&lt;br /&gt;
*http://vice-emu.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Petita història de Commodore:&lt;br /&gt;
*https://www.raspberrypi.org/forums/viewtopic.php?f=78&amp;amp;t=69353&lt;br /&gt;
&lt;br /&gt;
Manual d'usuari (pdf):&lt;br /&gt;
*http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm&lt;br /&gt;
&lt;br /&gt;
=Instal.lació=&lt;br /&gt;
'''NOTA'''. Ho he instal.lat a la RPi3 sense problemes. En canvi, a la RPi B+ he tingut problemes en la compilació.&lt;br /&gt;
&lt;br /&gt;
*31 March 2017. Version 3.1 released (no hi ha canvis importants respecte la versió 3.0 que em puguin afectar)&lt;br /&gt;
descarrego: vice-3.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Segueixo també:&lt;br /&gt;
*http://www.fsays.eu/Blogging/Blog/Details/19&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Prerequisits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install libice-dev -&amp;gt; ja ho tenia&lt;br /&gt;
$ sudo apt-get install libreadline-dev&lt;br /&gt;
$ sudo apt-get install libsdl1.2-dev -&amp;gt; ja ho tenia&lt;br /&gt;
$ sudo apt-get install libxt-dev&lt;br /&gt;
$ sudo apt-get install libxmu-dev&lt;br /&gt;
$ sudo apt-get install libxaw7-dev&lt;br /&gt;
$ sudo apt-get install libx11-dev -&amp;gt; ha fet alguna modificació&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
També:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install byacc&lt;br /&gt;
$ sudo apt-get install flex&lt;br /&gt;
&lt;br /&gt;
$ tar xvzf vice-3.1.tar.gz&lt;br /&gt;
$ cd vice-3.1/&lt;br /&gt;
&lt;br /&gt;
./configure --enable-sdlui --with-sdlsound -with-x=no&lt;br /&gt;
prefereixo fer-ho amb&lt;br /&gt;
./configure --enable-sdlui --with-alsa -with-x=no&lt;br /&gt;
&lt;br /&gt;
$ make&lt;br /&gt;
$ sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hi ha varis executables, però a mi m'interessa l'emulador del Commodore 64:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ x64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
F12 és per accedir al menu de l'emulador.&lt;br /&gt;
&lt;br /&gt;
Un cop arrenca l'emulador tinc el prompt igual que tenia en el Commodore 64. Per exenmple, puc escriure Basic en la línia de comandes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 PRINT &amp;quot;HOLA MON&amp;quot;&lt;br /&gt;
RUN&lt;br /&gt;
HOLA MON&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Configuració=&lt;br /&gt;
Tutorial bàsic de com configurar el VICE per carregar un joc:&lt;br /&gt;
*https://www.youbioit.com/en/article/shared-information/2225/tutorial-commodore-64-vice-emulator&lt;br /&gt;
&lt;br /&gt;
Opcions que necessitaré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-sounddev alsa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
In order to enlarge the screen go to the Options menu and select the Double Size option&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A mi m'interessa que un joc es pugui carregar automàticament:&lt;br /&gt;
*http://vice-emu.sourceforge.net/vice_3.html#SEC23&lt;br /&gt;
&lt;br /&gt;
Aquestes són les principals opcions que em poden interessar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ x64 --help&lt;br /&gt;
...-config &amp;lt;filename&amp;gt;&lt;br /&gt;
	Specify config file&lt;br /&gt;
&lt;br /&gt;
-autostart &amp;lt;Name&amp;gt;&lt;br /&gt;
	Attach and autostart tape/disk image &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-1 &amp;lt;Name&amp;gt;&lt;br /&gt;
	Attach &amp;lt;name&amp;gt; as a tape image&lt;br /&gt;
&lt;br /&gt;
-directory &amp;lt;Path&amp;gt;&lt;br /&gt;
	Define search path to locate system files&lt;br /&gt;
&lt;br /&gt;
-menukey &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu activate key&lt;br /&gt;
-menukeyup &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu up key&lt;br /&gt;
-menukeydown &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu down key&lt;br /&gt;
-menukeyleft &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu left key&lt;br /&gt;
-menukeyright &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu right key&lt;br /&gt;
-menukeyselect &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu select key&lt;br /&gt;
-menukeycancel &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu cancel key&lt;br /&gt;
-menukeyexit &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu exit key&lt;br /&gt;
-menukeymap &amp;lt;key&amp;gt;&lt;br /&gt;
	Keycode of the menu map key&lt;br /&gt;
&lt;br /&gt;
-confirmonexit&lt;br /&gt;
	Enable confirm on exit&lt;br /&gt;
+confirmonexit&lt;br /&gt;
	Disable confirm on exit&lt;br /&gt;
-nativemonitor&lt;br /&gt;
	Enable native monitor&lt;br /&gt;
+nativemonitor&lt;br /&gt;
	Disable native monitor&lt;br /&gt;
&lt;br /&gt;
-keymap &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify index of keymap file (0=symbolic, 1=positional, 2=symbolic (user), 3=positional (user))&lt;br /&gt;
-keyboardmapping &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify host keyboard layout&lt;br /&gt;
-keyboardtype &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify emulated keyboard type&lt;br /&gt;
-symkeymap &amp;lt;Name&amp;gt;&lt;br /&gt;
	Specify name of symbolic keymap file&lt;br /&gt;
-poskeymap &amp;lt;Name&amp;gt;&lt;br /&gt;
	Specify name of positional keymap file&lt;br /&gt;
&lt;br /&gt;
-sdlglfilter &amp;lt;mode&amp;gt;&lt;br /&gt;
	Set OpenGL filtering mode (0 = nearest, 1 = linear)&lt;br /&gt;
&lt;br /&gt;
-pal&lt;br /&gt;
	Use PAL sync factor&lt;br /&gt;
&lt;br /&gt;
-model &amp;lt;Model&amp;gt;&lt;br /&gt;
	Set C64 model (c64/c64c/c64old, ntsc/newntsc/oldntsc, drean, jap, c64gs, pet64, ultimax)&lt;br /&gt;
&lt;br /&gt;
-keyset&lt;br /&gt;
	Enable keyset&lt;br /&gt;
+keyset&lt;br /&gt;
	Disable keyset&lt;br /&gt;
&lt;br /&gt;
-hotkeyfile &amp;lt;name&amp;gt;&lt;br /&gt;
	Specify name of hotkey file&lt;br /&gt;
&lt;br /&gt;
-eventstartmode &amp;lt;Mode&amp;gt;&lt;br /&gt;
	Set event start mode (0: file save, 1: file load, 2: reset, 3: playback)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
És interessant veure la barra de Status (F12 &amp;gt; Status) per tal de veure la velocitat. És correcte que surti 100% i 50fps. En el menú puc escollir una velocitat més ràpida per a la càrrega d'un joc. (200% o no-limit, que significa el màxim)&lt;br /&gt;
==Configuració que funciona==&lt;br /&gt;
'''important''': El so anava fatal fins que he trobat: disable resid sound emulation by choosing '''fastsid''' as your sid chip model &amp;quot;machine settings-&amp;gt;model settings-&amp;gt;SID settings-&amp;gt;SID model-&amp;gt;6581 (FastSID)&lt;br /&gt;
this will give you a huge performance boost. Do not enable double size or enable a render filter for games that need a lot of CPU time ( but it is off default )&lt;br /&gt;
&lt;br /&gt;
Aquesta opció en línia de comanda és:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-sidenginemodel &amp;lt;engine and model&amp;gt;&lt;br /&gt;
	Specify SID engine and model (0: FastSID 6581, 1: FastSID 8580, 256: ReSID 6581, 257: ReSID 8580, 258: ReSID 8580 + digiboost)&lt;br /&gt;
&lt;br /&gt;
-sidenginemodel 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;c64/set_joan.cfg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/x64 -sounddev alsa -sdlbitdepth 8 -sidenginemodel 0 -config /home/pi/roms/c64/set_joan.cfg -autostart /home/pi/roms/c64/1942.d64&lt;br /&gt;
/usr/local/bin/x64 -config /home/pi/roms/c64/set_joan.cfg -autostart /home/pi/roms/c64/1942.d64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si el fitxer de configuració està ben configurat, no calen altres opcions. En qualsevol cas, les opcions que fiqui en línia de comandes passen per sobre de les que hi pugui haver en el fitxer de configuració.&lt;br /&gt;
&lt;br /&gt;
El fitxer de configuració ''c64/set_joan.cfg'', en el menú em deixa redefinir keymap1 i keymap2, i associar els joysticks als keymaps. Ara ho tinc amb left, right, up, down i 3 (Fire), i l'altre J,L,I,K i A (fire). Hi ha jocs (com el ''1942'') que per defecte utilitzen keymap2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SidEngine=0&lt;br /&gt;
SidModel=0&lt;br /&gt;
KeySet1North=273&lt;br /&gt;
KeySet1East=275 &lt;br /&gt;
KeySet1South=274&lt;br /&gt;
KeySet1West=276 &lt;br /&gt;
KeySet1Fire=51  &lt;br /&gt;
KeySet2North=105&lt;br /&gt;
KeySet2East=108 &lt;br /&gt;
KeySet2South=107&lt;br /&gt;
KeySet2West=106&lt;br /&gt;
KeySet2Fire=97&lt;br /&gt;
KeySet2Y=97&lt;br /&gt;
KeySet2N=97&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Load &amp;quot;*&amp;quot;,8,1==&lt;br /&gt;
Aquesta és la comanda que fem servir per carregar un programa en memòria.&lt;br /&gt;
*https://superuser.com/questions/318928/meaning-of-parameters-in-classic-load-8-1-commodore-command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD &amp;quot;*&amp;quot;,8,1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The general syntax is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD [&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;[, &amp;lt;device number&amp;gt;[, &amp;lt;secondary number&amp;gt;]]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*The filename * means the first file on the the disk&lt;br /&gt;
*The first number parameter is a device number. 8 is the device number for the first disk drive. From the Wikipedia article on Commodore DOS. By convention, the first disk drive unit on a system has device number 8, the second drive, if present, 9, etc., up to a maximum of 15. This seems to come from the IEEE-488 bus, which the Commodore PET used.&lt;br /&gt;
*The second number parameter, in this case 1, means to load the stored program into memory, starting at the memory location specified by the first two bytes in the file you are loading. This is generally used for machine language programs. 0, by contrast, is the default value, and would load the stored program to $0801 (the beginning of BASIC memory)&lt;br /&gt;
&lt;br /&gt;
Si fico els dos punts (:) significa fer RUN un cop s'ha carregat en memòria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD &amp;quot;*&amp;quot;,8,1:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Sortir amb el '0'==&lt;br /&gt;
Ha costat una mica aquesta vegada.&lt;br /&gt;
&lt;br /&gt;
En el '''VICE''', per sortir de l'emulador primer hem de fer F12 per entrar en el menú principal, aleshores escollir Quit Emulator, i Enter. En el Retropie així és com ho fan, tenint en compte que es pot mapejar la tecla F12 a una altra tecla.&lt;br /&gt;
&lt;br /&gt;
La idea és associar el '''0''' com a tecla per entrar al menú UI, i captar el codi que s'executa quan entrem en el menú, i allà provocar la sortida del programa. Es fa de la següent manera:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Select – Settings Management&lt;br /&gt;
Select – Define UI Keys (compte!, perquè aquesta opció queda amagada a sota, no es veuen totes les opcions)&lt;br /&gt;
Select – Activate Menu -&amp;gt; ho canvio pel 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I gravo els meus settings a un fitxer de settings. En el fitxer de configuració (''set_joan.cfg'' de moment) queda l'entrada:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MenuKey=48&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
on el 48 és la tecla 0.&lt;br /&gt;
&lt;br /&gt;
I ara del que es tracta és d'aconseguir que quan obri el menu, en realitat faci un shutdown de l'aplicació.&lt;br /&gt;
&lt;br /&gt;
cerquem per F12 dins els fitxers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/vice-3.1/src/&lt;br /&gt;
$ find . -type f -print | xargs egrep -i F12 | more&lt;br /&gt;
...&lt;br /&gt;
./arch/sdl/ui.c:&lt;br /&gt;
./arch/sdl/kbd.c:    { 293, SDLK_F12 },&lt;br /&gt;
&lt;br /&gt;
./arch/sdl/ui.c, línia 596:&lt;br /&gt;
void ui_sdl_quit(void) -&amp;gt; aquesta serà la funció per finalitzar el programa&lt;br /&gt;
{&lt;br /&gt;
    if (confirm_on_exit) {&lt;br /&gt;
        if (message_box(&amp;quot;VICE QUESTION&amp;quot;, &amp;quot;Do you really want to exit?&amp;quot;, MESSAGE_YESNO) != 0) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
ui.c, línia 733&lt;br /&gt;
void ui_shutdown(void) -&amp;gt; funciona quan sortim del menú, però no del programa&lt;br /&gt;
{&lt;br /&gt;
printf(&amp;quot;FINAL.......\n&amp;quot;);&lt;br /&gt;
    DBG((&amp;quot;%s&amp;quot;, __func__));&lt;br /&gt;
    sdl_ui_file_selection_dialog_shutdown();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El directori que m'interessa és ''arch/sdl''. El directori ''arch/unix'' fa referència a Linux amb les X. Però jo des de l&lt;br /&gt;
Quan faig canvis en el directori ''arch/sdl'' he de recompilar, però si faig ''make'' i ''sudo make install'' triga molt. Per recompilar s'ha de fer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/vice-3.1/src&lt;br /&gt;
cd arch/sdl/&lt;br /&gt;
make&lt;br /&gt;
cd ../..&lt;br /&gt;
#en comptes de fer make en el directori src/ faig (només vull actualitzar l'aplicatiu x64):&lt;br /&gt;
g++  -g -O3  -Wstrict-prototypes -Wall -W -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT  -Wl,-rpath -Wl,/usr/local/lib/vice/lib -o x64 alarm.o attach.o autostart.o autostart-prg.o cbmdos.o cbmimage.o charset.o clipboard.o clkguard.o cmdline.o color.o crc32.o datasette.o debug.o dma.o embedded.o event.o findpath.o fliplist.o gcr.o info.o init.o initcmdline.o interrupt.o ioutil.o kbdbuf.o keyboard.o lib.o libm_math.o log.o machine-bus.o machine.o main.o network.o opencbmlib.o palette.o ram.o rawfile.o rawnet.o resources.o romset.o screenshot.o snapshot.o socket.o sound.o sysfile.o translate.o traps.o util.o vicefeatures.o vsync.o zfile.o zipcode.o midi.o ../src/tapeport/libtapeport.a ../src/c64/libc64.a ../src/tapeport/libtapeport.a ../src/c64/cart/libc64cartsystem.a ../src/c64/cart/libc64cart.a ../src/c64/cart/libc64commoncart.a ../src/drive/iec/libdriveiec.a ../src/drive/iecieee/libdriveiecieee.a ../src/drive/iec/c64exp/libdriveiecc64exp.a ../src/drive/ieee/libdriveieee.a ../src/drive/libdrive.a ../src/drive/tcbm/libdrivetcbm.a ../src/iecbus/libiecbus.a ../src/lib/p64/libp64.a ../src/parallel/libparallel.a ../src/vdrive/libvdrive.a ../src/sid/libsid.a ../src/monitor/libmonitor.a ../src/joyport/libjoyport.a ../src/samplerdrv/libsamplerdrv.a ../src/sounddrv/libsounddrv.a ../src/mididrv/libmididrv.a ../src/socketdrv/libsocketdrv.a ../src/hwsiddrv/libhwsiddrv.a ../src/iodrv/libiodrv.a ../src/gfxoutputdrv/libgfxoutputdrv.a ../src/printerdrv/libprinterdrv.a ../src/rs232drv/librs232drv.a ../src/diskimage/libdiskimage.a ../src/fsdevice/libfsdevice.a ../src/tape/libtape.a ../src/fileio/libfileio.a ../src/serial/libserial.a ../src/core/libcore.a ../src/vicii/libvicii.a ../src/raster/libraster.a ../src/userport/libuserport.a ../src/diag/libdiag.a ../src/rtc/librtc.a ../src/video/libvideo.a ../src/arch/sdl/libarch.a   ../src/imagecontents/libimagecontents.a ../src/resid/libresid.a  ../src/platform/libplatform.a -lpulse-simple -lpulse -lasound   -ljpeg -lpng  -lz -ldl  ../src/arch/sdl/libarch.a  -lnsl  -lreadline -lvorbisenc -lvorbisfile -lvorbis -logg -lm -ldl  -L/usr/lib/arm-linux-gnueabihf -lSDL -lGL -lSDLmain -lSDL  -lvorbisfile -logg -lvorbis -lvorbisenc&lt;br /&gt;
&lt;br /&gt;
ls -la x64 #per comprovar la data de creació del binari&lt;br /&gt;
cd arch/sdl/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i compte perquè sense fer ''sudo make install'', l'executable que val està a ''~/vice-3.1/src/x64''.&lt;br /&gt;
&lt;br /&gt;
Els principals fitxers candidats dins del directori ''arch/sdl'' on he de mirar per capturar quan entro dins el menú principal són:&lt;br /&gt;
*ui.c&lt;br /&gt;
*kbd.c&lt;br /&gt;
*uimenu.c&lt;br /&gt;
*x64_ui.c&lt;br /&gt;
*menu_common.c&lt;br /&gt;
*menu_settings.c&lt;br /&gt;
&lt;br /&gt;
Per ex, codi que he mirat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
x64_ui.c:&lt;br /&gt;
    { &amp;quot;Quit emulator&amp;quot;,&lt;br /&gt;
      MENU_ENTRY_OTHER,&lt;br /&gt;
      quit_callback,   &lt;br /&gt;
      NULL },&lt;br /&gt;
    SDL_MENU_LIST_END&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void c64ui_shutdown(void)&lt;br /&gt;
{&lt;br /&gt;
    uikeyboard_menu_shutdown();&lt;br /&gt;
    uisid_menu_shutdown();&lt;br /&gt;
    uicart_menu_shutdown();&lt;br /&gt;
    uipalette_menu_shutdown();&lt;br /&gt;
    uijoyport_menu_shutdown();&lt;br /&gt;
&lt;br /&gt;
./menu_common.h:extern UI_MENU_CALLBACK(quit_callback);&lt;br /&gt;
./menu_common.c:UI_MENU_CALLBACK(quit_callback)&lt;br /&gt;
&lt;br /&gt;
menu_common.c:&lt;br /&gt;
UI_MENU_CALLBACK(quit_callback)&lt;br /&gt;
{ &lt;br /&gt;
    if (activated) {&lt;br /&gt;
        ui_sdl_quit();&lt;br /&gt;
    }&lt;br /&gt;
    return NULL;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
ui.c:&lt;br /&gt;
    switch (e.type) {&lt;br /&gt;
        case SDL_QUIT:&lt;br /&gt;
            DBG((&amp;quot;ui_handle_misc_sdl_event: SDL_QUIT&amp;quot;));&lt;br /&gt;
            ui_sdl_quit();&lt;br /&gt;
            break;&lt;br /&gt;
&lt;br /&gt;
ui.c:&lt;br /&gt;
void ui_sdl_quit(void)&lt;br /&gt;
{&lt;br /&gt;
    if (confirm_on_exit) {&lt;br /&gt;
        if (message_box(&amp;quot;VICE QUESTION&amp;quot;, &amp;quot;Do you really want to exit?&amp;quot;, MESSAGE_YESNO) != 0) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
x64_ui.c:&lt;br /&gt;
static const ui_menu_entry_t x64_main_menu[] = {&lt;br /&gt;
    { &amp;quot;Autostart image&amp;quot;, &lt;br /&gt;
      MENU_ENTRY_DIALOG, &lt;br /&gt;
      autostart_callback,&lt;br /&gt;
      NULL }, &lt;br /&gt;
...&lt;br /&gt;
    { &amp;quot;Help&amp;quot;,&lt;br /&gt;
      MENU_ENTRY_SUBMENU,&lt;br /&gt;
      submenu_callback,  &lt;br /&gt;
      (ui_callback_data_t)help_menu },&lt;br /&gt;
    { &amp;quot;Settings management&amp;quot;,&lt;br /&gt;
      MENU_ENTRY_SUBMENU,   &lt;br /&gt;
      submenu_callback,     &lt;br /&gt;
      (ui_callback_data_t)settings_manager_menu },&lt;br /&gt;
    { &amp;quot;Quit emulator&amp;quot;,&lt;br /&gt;
      MENU_ENTRY_OTHER,&lt;br /&gt;
      quit_callback,   &lt;br /&gt;
      NULL },&lt;br /&gt;
    SDL_MENU_LIST_END&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
x64_ui.c:&lt;br /&gt;
int c64ui_init(void)&lt;br /&gt;
{&lt;br /&gt;
#ifdef SDL_DEBUG&lt;br /&gt;
    fprintf(stderr, &amp;quot;%s\n&amp;quot;, __func__);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
    sdl_ui_set_menu_params = NULL;&lt;br /&gt;
&lt;br /&gt;
    uijoyport_menu_create(1, 1, 1, 1, 0);&lt;br /&gt;
    uisampler_menu_create();&lt;br /&gt;
    uicart_menu_create();&lt;br /&gt;
    uidrive_menu_create();&lt;br /&gt;
    uikeyboard_menu_create();&lt;br /&gt;
    uipalette_menu_create(&amp;quot;VICII&amp;quot;, NULL);&lt;br /&gt;
    uisid_menu_create();&lt;br /&gt;
    uiclockport_rr_mmc_menu_create();&lt;br /&gt;
    uiclockport_ide64_menu_create();&lt;br /&gt;
&lt;br /&gt;
    uimedia_menu_create();&lt;br /&gt;
&lt;br /&gt;
    sdl_ui_set_main_menu(x64_main_menu);&lt;br /&gt;
    sdl_ui_set_menu_font(mem_chargen_rom + 0x800, 8, 8);&lt;br /&gt;
    sdl_vkbd_set_vkbd(&amp;amp;vkbd_c64);&lt;br /&gt;
#ifdef HAVE_FFMPEG&lt;br /&gt;
    sdl_menu_ffmpeg_init();&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
He mirat tots aquests fitxers amb deteniment, posant punts de control, i no me n'en sortia. També he mirat dins el directori ''src/'' alguns fitxers com ara event.c, init.c, interrupt.c, però tampoc ho aconseguia.&lt;br /&gt;
&lt;br /&gt;
Com que estic en un punt difícil, torno a compilar, fent: ''--enable-debug'' per tal de què em doni més pistes, i efectivament això ha sigut providencial:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --enable-debug --enable-sdlui --with-alsa -with-x=no&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
una possible solució cutre és:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Select – Settings Management&lt;br /&gt;
Select – Define UI Keys (compte!, perquè aquesta opció queda amagada a sota, no es veuen totes les opcions)&lt;br /&gt;
Select – Activate Menu -&amp;gt; ho canvio pel 0&lt;br /&gt;
Select – Return -&amp;gt; ficar el 1, que és una de les tecles que faig servir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I aleshores puc fer exit amb 0, els cursors, i 1. &lt;br /&gt;
&lt;br /&gt;
Però la '''solució''' bona és la següent. Com que he compilat amb ''--enable-debug'', veig que quan acaba el programa surt un missatge:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uimenu.c:377: Warning: Memory bluimenu.c:377: Warning: Memory block(s) allocated here was not free'd (Memory le&lt;br /&gt;
callstack:&lt;br /&gt;
&lt;br /&gt;
uimenu.c:173: Warning: Memory block(s) allocated here was not free'd (Memory le&lt;br /&gt;
callstack:&lt;br /&gt;
&lt;br /&gt;
attach.c:518: ock(s) allocated here was not free'd (Memory le&lt;br /&gt;
callstack:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El fitxer '''uimenu.c''' ja me l'havia mirat molt, però no mirava en el lloc correcte. Fico un control en la línia 373, i efectivament veig que es printa quan entro en el menú. Per tant, és aquí on provoco la sortida de l'aplicació ''x64'':&lt;br /&gt;
&lt;br /&gt;
uimenu.c, línia 373:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static void sdl_ui_trap(WORD addr, void *data)&lt;br /&gt;
{&lt;br /&gt;
    //printf(&amp;quot;sortim\n\n&amp;quot;);&lt;br /&gt;
    ui_sdl_quit();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''trap'' significa precisament això, atrapar l'event del teclat. I torno a compilar tal com he fet més amunt.&lt;br /&gt;
===Resum per sortir amb el '0'===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/vice-3.1/src/arch/sdl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Editar uimenu.c, línia 373:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static void sdl_ui_trap(WORD addr, void *data)&lt;br /&gt;
{&lt;br /&gt;
    //printf(&amp;quot;sortim\n\n&amp;quot;);&lt;br /&gt;
    ui_sdl_quit();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make&lt;br /&gt;
cd ../..&lt;br /&gt;
#en comptes de fer make en el directori src/ faig (només vull actualitzar l'aplicatiu x64):&lt;br /&gt;
g++  -g -O3  -Wstrict-prototypes -Wall -W -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT  -Wl,-rpath -Wl,/usr/local/lib/vice/lib -o x64 alarm.o attach.o autostart.o autostart-prg.o cbmdos.o cbmimage.o charset.o clipboard.o clkguard.o cmdline.o color.o crc32.o datasette.o debug.o dma.o embedded.o event.o findpath.o fliplist.o gcr.o info.o init.o initcmdline.o interrupt.o ioutil.o kbdbuf.o keyboard.o lib.o libm_math.o log.o machine-bus.o machine.o main.o network.o opencbmlib.o palette.o ram.o rawfile.o rawnet.o resources.o romset.o screenshot.o snapshot.o socket.o sound.o sysfile.o translate.o traps.o util.o vicefeatures.o vsync.o zfile.o zipcode.o midi.o ../src/tapeport/libtapeport.a ../src/c64/libc64.a ../src/tapeport/libtapeport.a ../src/c64/cart/libc64cartsystem.a ../src/c64/cart/libc64cart.a ../src/c64/cart/libc64commoncart.a ../src/drive/iec/libdriveiec.a ../src/drive/iecieee/libdriveiecieee.a ../src/drive/iec/c64exp/libdriveiecc64exp.a ../src/drive/ieee/libdriveieee.a ../src/drive/libdrive.a ../src/drive/tcbm/libdrivetcbm.a ../src/iecbus/libiecbus.a ../src/lib/p64/libp64.a ../src/parallel/libparallel.a ../src/vdrive/libvdrive.a ../src/sid/libsid.a ../src/monitor/libmonitor.a ../src/joyport/libjoyport.a ../src/samplerdrv/libsamplerdrv.a ../src/sounddrv/libsounddrv.a ../src/mididrv/libmididrv.a ../src/socketdrv/libsocketdrv.a ../src/hwsiddrv/libhwsiddrv.a ../src/iodrv/libiodrv.a ../src/gfxoutputdrv/libgfxoutputdrv.a ../src/printerdrv/libprinterdrv.a ../src/rs232drv/librs232drv.a ../src/diskimage/libdiskimage.a ../src/fsdevice/libfsdevice.a ../src/tape/libtape.a ../src/fileio/libfileio.a ../src/serial/libserial.a ../src/core/libcore.a ../src/vicii/libvicii.a ../src/raster/libraster.a ../src/userport/libuserport.a ../src/diag/libdiag.a ../src/rtc/librtc.a ../src/video/libvideo.a ../src/arch/sdl/libarch.a   ../src/imagecontents/libimagecontents.a ../src/resid/libresid.a  ../src/platform/libplatform.a -lpulse-simple -lpulse -lasound   -ljpeg -lpng  -lz -ldl  ../src/arch/sdl/libarch.a  -lnsl  -lreadline -lvorbisenc -lvorbisfile -lvorbis -logg -lm -ldl  -L/usr/lib/arm-linux-gnueabihf -lSDL -lGL -lSDLmain -lSDL  -lvorbisfile -logg -lvorbis -lvorbisenc&lt;br /&gt;
&lt;br /&gt;
ls -la x64 #per comprovar la data de creació del binari&lt;br /&gt;
&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ara ja tinc el binari ''x64'' modificat a ''/usr/local/bin''.&lt;br /&gt;
==Remapejar les tecles (TBD)==&lt;br /&gt;
*Molts jocs utilitzen Y, N and capslock (run/stop), i s'haurien de remapejar.&lt;br /&gt;
*https://wpguru.co.uk/2014/09/how-to-map-your-commodore-keyboard-in-vice-2-4/&lt;br /&gt;
*http://vice-emu.pokefinder.org/index.php/Keymaps&lt;br /&gt;
&lt;br /&gt;
Opcions línia de comanda:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-keymap &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify index of keymap file (0=symbolic, 1=positional, 2=symbolic (user), 3=positional (user))&lt;br /&gt;
-keyboardmapping &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify host keyboard layout&lt;br /&gt;
-keyboardtype &amp;lt;number&amp;gt;&lt;br /&gt;
	Specify emulated keyboard type&lt;br /&gt;
-symkeymap &amp;lt;Name&amp;gt;&lt;br /&gt;
	Specify name of symbolic keymap file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Fitxer:Remap keys vice.png | thumbnail]]&lt;br /&gt;
*https://wiki.libsdl.org/SDLKeycodeLookup&lt;br /&gt;
*https://i0.wp.com/wpguru.co.uk/wp-content/uploads/2014/09/Screen-Shot-2014-09-01-at-15.34.50.png&lt;br /&gt;
&lt;br /&gt;
=Llista de jocs=&lt;br /&gt;
En format TAP:&lt;br /&gt;
*https://www.emuparadise.me/Commodore_64_(Tapes)_ROMs/34&lt;br /&gt;
I en format D64 (roms), millor:&lt;br /&gt;
*http://www.planetemu.net/roms/commodore-c64-games-d64&lt;br /&gt;
&lt;br /&gt;
Creo la carpeta roms/c64&lt;br /&gt;
&lt;br /&gt;
Els millors jocs:&lt;br /&gt;
*http://www.lemon64.com/games/votes_list.php&lt;br /&gt;
*https://www.retrogamer.net/top_10/top-ten-commodore-64-games/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1942&lt;br /&gt;
Airborne Ranger&lt;br /&gt;
Alter Ego: Male Version&lt;br /&gt;
Alternate Reality II: The Dungeon&lt;br /&gt;
Archon: The Light and the Dark&lt;br /&gt;
Armalyte&lt;br /&gt;
Ballblazer&lt;br /&gt;
Barbarian: The Ultimate Warrior&lt;br /&gt;
Bard's Tale II, The: The Destiny Knight&lt;br /&gt;
Bard's Tale III, The: Thief of Fate&lt;br /&gt;
Bard's Tale, The: Tales of the Unknown&lt;br /&gt;
Barry McGuigan World Championship Boxing&lt;br /&gt;
Beach-Head II: The Dictator Strikes Back&lt;br /&gt;
&lt;br /&gt;
Boulder Dash&lt;br /&gt;
Boulder Dash Construction Kit&lt;br /&gt;
Boulder Dash II: Rockford's Revenge&lt;br /&gt;
&lt;br /&gt;
Bruce Lee&lt;br /&gt;
Bubble Bobble&lt;br /&gt;
Buggy Boy&lt;br /&gt;
&lt;br /&gt;
California Games&lt;br /&gt;
Champions of Krynn&lt;br /&gt;
Crazy Comets&lt;br /&gt;
Creatures&lt;br /&gt;
Creatures 2: Torture Trouble&lt;br /&gt;
Curse of the Azure Bonds&lt;br /&gt;
Defender of the Crown&lt;br /&gt;
Detective Game, The&lt;br /&gt;
Dino Eggs&lt;br /&gt;
Dropzone&lt;br /&gt;
Elite&lt;br /&gt;
Emlyn Hughes International Soccer&lt;br /&gt;
Encounter&lt;br /&gt;
Enforcer: Fullmetal Megablaster&lt;br /&gt;
Exile&lt;br /&gt;
Fort Apocalypse&lt;br /&gt;
Ghostbusters&lt;br /&gt;
Grand Prix Circuit&lt;br /&gt;
Great Giana Sisters, The&lt;br /&gt;
Gunship&lt;br /&gt;
H.E.R.O. - Helicopter Emergency Rescue Operation&lt;br /&gt;
Head Over Heels&lt;br /&gt;
Heart of Africa&lt;br /&gt;
Heavy Metal Paradroid&lt;br /&gt;
IK+&lt;br /&gt;
Impossible Mission&lt;br /&gt;
International Karate&lt;br /&gt;
Jumpman&lt;br /&gt;
Katakis&lt;br /&gt;
Laser Squad&lt;br /&gt;
Last Ninja 2&lt;br /&gt;
Last Ninja, The&lt;br /&gt;
Leaderboard Executive&lt;br /&gt;
Leaderboard Golf&lt;br /&gt;
Legacy of the Ancients&lt;br /&gt;
Lode Runner&lt;br /&gt;
Lords of Midnight&lt;br /&gt;
M.U.L.E.&lt;br /&gt;
Mad Doctor&lt;br /&gt;
Maniac Mansion&lt;br /&gt;
Mayhem in Monsterland&lt;br /&gt;
Mercenary: Escape from Targ&lt;br /&gt;
MicroProse Soccer&lt;br /&gt;
Midnight Resistance&lt;br /&gt;
Montezuma's Revenge&lt;br /&gt;
MYTH: History in the Making&lt;br /&gt;
Neuromancer&lt;br /&gt;
Newcomer&lt;br /&gt;
Paradroid&lt;br /&gt;
Pirates!&lt;br /&gt;
Pitstop II&lt;br /&gt;
Pool of Radiance&lt;br /&gt;
Prince of Persia&lt;br /&gt;
Project Firestart&lt;br /&gt;
Project Stealth Fighter&lt;br /&gt;
Racing Destruction Set&lt;br /&gt;
Raid on Bungeling Bay&lt;br /&gt;
Rainbow Islands&lt;br /&gt;
Realm of Impossibility&lt;br /&gt;
Rescue on Fractalus&lt;br /&gt;
Rodland&lt;br /&gt;
Samurai Warrior: The Battles of Usagi Yojimbo&lt;br /&gt;
Sentinel, The&lt;br /&gt;
Seven Cities of Gold&lt;br /&gt;
Silent Service&lt;br /&gt;
Skate or Die!&lt;br /&gt;
Space Taxi&lt;br /&gt;
Spy vs Spy&lt;br /&gt;
Street Rod&lt;br /&gt;
Stunt Car Racer&lt;br /&gt;
Summer Games&lt;br /&gt;
Summer Games 2&lt;br /&gt;
Supremacy&lt;br /&gt;
Times of Lore&lt;br /&gt;
Train, The: Escape to Normandy&lt;br /&gt;
Turrican&lt;br /&gt;
Turrican II: The Final Fight&lt;br /&gt;
Ultima III: Exodus&lt;br /&gt;
Ultima IV: Quest of the Avatar&lt;br /&gt;
Ultima V: Warriors of Destiny&lt;br /&gt;
Uridium&lt;br /&gt;
Wasteland&lt;br /&gt;
Way of the Exploding Fist, The&lt;br /&gt;
Winter Games&lt;br /&gt;
Wizard of Wor&lt;br /&gt;
Wizball&lt;br /&gt;
World Class Leader Board&lt;br /&gt;
World Games&lt;br /&gt;
Zak McKracken and the Alien Mindbenders&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Autor}}, maig 2017&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>