viernes, 28 de noviembre de 2025

Demo TENTE para Amstrad CPC, ¿cómo se hizo?

Hace unos años hice un carrusel de 43 imágenes de modelos de TENTE para simular lo que hubiera podido sacar la compañía como demo para los ordenadores de la época, en este caso en un Amstrad CPC.
 
Si todavía no tienes esta demo, la puedes descargar aquí
 


Esta demo la hice con mínima programación en Basic usando algunas herramientas que tenía a mano:

  • Las capturas ya las tenía echas hace tiempo para PC con los programa LDView y Povray, que no es que saque unos renders espectaculares pero precisamente por eso son imágenes ideales para pasarlas a ordenadores de 8 y 16 bits.
  • Para facilitar la conversión, algunas imágenes las retoqué con GIMP para reducirle el número de colores mediante la opción Colores y Posterizar.
    En su cuadro de diálogo vas subiendo la cantidad de colores hasta que se vea más o menos bien.
  • La conversión de las imágenes de PC a CPC la hice con el programa ConvImgCPC que te permite guardar imágenes comprimidas incluso con su paleta de colores. Aunque soporta la paleta de la gama plus opté por la estándar para poderlo ver en cualquier CPC, incluido mi Amstrad CPC6128.
    Con algunas tuve que jugar con diversas opciones hasta obtener un resultado aceptable.
    Por cierto, este programa incluye información para hacer el cargador Basic de las imágenes.
  • Para inyectar los archivos de imágenes resultantes usé CPCImgDSK pero bien podría haber usado directamente Retro Virtual Machine que sí usé para crear el cargador.

El listado del cargador fue éste:

10 ' TENTE 3D DEMO FOR AMSTRAD CPC
20 MEMORY &1FFF:LOAD"!dpkslide.bin",&A400
30 MODE 2:BORDER 0:INK 0,0:INK 1,26:PRINT"Tente 3D slide-show..."
40 READ numberofimages
50 FOR i=1 TO numberofimages
60 READ imagename$
70 LOAD"!"+imagename$+".scr",&2000
80 CALL &A400
90 NEXT
100 REM GOTO 50
110 CALL &BB18:REM pause
120 MODE 1
130 PRINT "DEMO TENTE 3D FINALIZADA"
140 PRINT "========================"
150 PRINT
160 DATA 43
170 DATA T3D,AUTOBUS,CRUZROJA,AERODESL,AUTOBAR
190 DATA AVION,LASERAY,BUSESPAC,VIKING,CASTILLO
200 DATA CENTROMC,COCHE,DEDALO,FICTENTE,CASA
210 DATA ADOSADO,TUXFLAT,USRESCUE,YATEXALO,VOLQUETE
220 DATA ERMITA,CHINESE,DESINALT,CABINA,LINKAUTO
230 DATA CHOZA,MOZAMBIQ,QUITANIE,TURANIO,TRENTOUR
240 DATA EXPLOESP,PAPAMOV,ESURANIO,HAITOBUS,PATRU91
250 DATA TRASHTRU,TUXTENTE,TRANSPSP,TRANSAER,SUNSHINE
260 DATA SUPERAT,SCUTTY,SATURNOM

Si no tienes un Amstrad real recuerda que puedes usar cualquier emulador de Amstrad que soporte disco para disfrutarla. 

viernes, 21 de noviembre de 2025

SANYO M2402-7F, reparaciones (I)

Voy a empezar una nueva sección donde contaré mis aventuras y desventuras reparando, o al menos intentando, mi colección de radiocassettes y otros aparatos que están faltos cariño para volver a ser lo que fueron.

El primer conejillo de indias va a ser este radiocassette Sanyo M2402-7F de los años 70 y que perteneció a mis abuelos.


Como veis, lo primero que hago es identificar el modelo, algo que suele aparecer en la parte de atrás del aparato, en este caso en una pegatina con las características, muy importante para conseguir información si hay complicaciones.

El problema de esta unidad es que el cassette se escucha lento, por lo que sospecho que toca cambiar la goma que ya tiene medio siglo.

Para acceder al mismo retiro los tornillos que hay en la parte de atrás y lo abro como un libro con cuidado con el cable de alimentación que está soldado a la fuente de alimentación, ya que aún no era común el conector de 8 de alimentación.


Me llama la atención que, incluso están indicados donde van los tornillos de la placa principal, igualito que ahora que casi hemos perdido el derecho a reparar.

Como siempre hay que tener mucho cuidado y orden para que no se estropeen los tornillos y luego lo volvamos a montar como antes, cada uno en su sitio.

Para retirar la goma y cambiar la nueva he tenido que retirar el tornillo de la rueda grande a la que va la goma porque no pasaba, también he tocado el tornillo que hay en el motor, me parece que esto ha sido un error.

Cierro el radiocassette y hago la prueba con una cinta que no sea muy valiosa por si se enrenda y... bueno, no se enreda pero ahora se escucha más rápido y con interferencia.

Así que toca vuelvo a abrir y repasar, pensando en que algún tornillo era el potenciómetro y resulta que el culpable era...

 

La goma que era muy gruesa, pongo otra más fina y ya suena la música a la velocidad correcta. 

Me queda quitarle un sonido de estática, pero la limpieza de E.T. la dejo para otro día. 

Continuará.... 


viernes, 14 de noviembre de 2025

Mostrar el contenido de un archivo de texto en Amstrad CPC

Si en un Amstrad CPC tecleas el comando:

CAT misdatos.txt

No te mostrará el contenido del archivo de nombre misdatos.txt, en el mejor de los casos te mostrará el nombre del archivo si está en el directorio del disquete o si lo encuentra recorriendo la cinta.

Entonces, ¿cómo puedo ver el contenido de un archivo de texto en el Amstrad CPC?

La idea es sencilla: 

  1. Para empezar ponemos el ordenador en MODE 2 para usa el modo de 80 columnas.
  2. Abrimos el archivo como texto con el comando:
    OPENIN "misdatos.txt"
  3. Abrimos un bucle que vaya leyendo líneas por el canal 9 hasta que llegue al final del archivo al tiempo que la sacamos por pantalla (canal por defecto) o por impresora (canal 8):
    WHILE NOT EOF
    LINE INPUT #9,l$
    PRINT l$
    WEND
  4. Cerramos el archivo como texto:
    CLOSEIN
  5. El programa lo podemos enriquecer para que nos pida el nombre del archivo a mostrar, detecte el final de línea y nos pida interacción, sacar la salida por pantalla o impresora (canal 8), etc... como podéis ver en este ejemplo real del programa que usaba en su momento para esta tarea.


Esta técnica es muy útil para acompañar de un manual interactivo a un programa o juego que se vea en el propio Amstrad.

Eso sí, si incluís un archivo creado en un PC hay que definir el archivo de texto con las siguientes propiedades:

  • Character encoding ASCII, ISO-8859-1 o ISO-8859-15. 
  • Saltos de línea de DOS/Windows.

Hay que tener especial cuidado con evitar acentos, eñes y otros caracteres especiales que no existan en los CPC o sean distintos.

viernes, 7 de noviembre de 2025

Accesos directos en el menú de MATE con categorías y subcategorias (niveles ilimitados)

Este artículo trata sobre algo que tenía ganas de hacer y que es muy difícil encontrar información: tener accesos directos en menús en categorías y subcategorías nuevas y distintas a las que ya tienes en el sistema. Vamos a verlo paso a paso.

Antes de continuar, recomiendo tener activado etckeeper por si nos equivocamos en la creación de la estructura de accesos directos y categorías, aunque en todo caso se pueden borrar los archivos que relacionan accesos directos y categorías.
 

1. Crear un acceso directo

Hace tiempo expliqué como crear un archivo .desktop para crear un acceso directo, en este caso, como queremos que sea un acceso en el menú del sistema, debemos crearlo en la carpeta /usr/share/applications, por poner un ejemplo muy simple, podríamos crear un archivo caprice32.desktop para crear un acceso directo al emulador Caprice32 con este contenido:

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Caprice 32 (Amstrad CPC)
Name[es]=Caprice 32 (Amstrad CPC)
Comment=Amstrad CPC/CPC+ Emulator
Comment[es]=Emulador de Amstrad CPC/CPC+
Icon=caprice32cp
Exec=./cap32
Path=/opt/linuxemus/caprice32
Terminal=false
Categories=Games;

En este ejemplo, definimos:

  1. Las dos primeras líneas definen que el tipo de acceso es para ejecutar una aplicación (Type=Application) y la codificaciones de caracteres, unicode (UTF-8) para representar acentos, por ejemplo. 
  2. El nombre del acceso directo (Name).
  3. La descripción que se mostrará al situar el ratón sobre el mismo (Comment).
  4. El nombre del icono, que en este caso debería estar creado en la ruta absoluta /usr/share/pixmaps/cap32.png (el formato de imagen recomendado es png).
  5. El comando a ejecutar, si se va a ejecutar en una ruta concreta debe ir precedido por ./ mientras que si se puede ejecutar en cualquier directorio sería simplemente:
    Exec=cap32
  6. La ruta desde la que se va a ejecutar el comando, en este caso /opt/linuxemus/caprice32, si es un comando que se puede ejecutar desde cualquier ruta no ponemos una línea que empieza por Path=
  7. Terminal, indica si se va a abrir una terminal para ejecutar el programa o no, es útil, cuando vamos a ejecutar programas que se muestran en consola.
  8. La categoría en la que va a estar el programa (Categories), en este caso iría a la de juegos pero en este ejemplo habría que eliminar esta línea si solo queremos que aparezca en la categoría que vamos a crear. 
  9. Las etiquetas que terminan en [es] indican el texto alternativo para el idioma español. 

 

2. Crear una nueva categoría (de primer nivel)

Si queremos crear una nueva categoría, por Ejemplo emuladores hay que añadir tres archivos más:

  1. Un nuevo icono para la categoría, por ejemplo,  /usr/share/pixmaps/emulators.png.
  2.  El archivo que define la nueva categoría, que debe estar en la ruta /usr/share/desktop-directories, vamos a llamar al archivo emulators.directory con el siguiente contenido:
    [Desktop Entry]
    Version=1.1
    Name=Emulators
    Name[es]=Emuladores
    Comment=Emulation and retrocomputing
    Comment[es]=Emuladores y retroinformática
    Icon=emulators
    Type=Directory
  3. El archivo que indica que el acceso directo previamente creado debe estar en esta nueva categoría que debe estar en la ruta absoluta /etc/xdg/menus/applications-merged/caprice32cp.menu con el siguiente contenido.
    <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
        "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
    <Menu>
        <Name>Applications</Name>
        <Menu>
             <Menu>
               <Name>Amstrad</Name>
               <Directory>amstrad.directory</Directory>
               <Include>
                 <Filename>caprice32cp.desktop</Filename>
               </Include>
             </Menu>
        </Menu>

 Y con esto ya tendríamos el acceso directo en nuestra nueva categoría emuladores.

Repetimos todo el proceso para todos nuestros emuladores, creando sus accesos directos y creando nuevos archivos para relacionarlos con la categoría, que deben ser exactamente iguales, salvo por la línea que empieza por <Filename> 

 

3. Crear más profundidad de categorías

Bueno, pues ya hemos creado accesos directo para las 3 docenas de emuladores que tenemos instalados, pero el menú se hace muy largo y desorganizado, ¿no podríamos crear subcategorías para cada tipo de emulador?

Pues sí, para ello solo tenemos que crear un nuevo acceso directo y un nuevo archivo de definición de categoría como hemos visto en el punto anterior, en las rutas:

  • /usr/share/pixmaps/amstrad.png
  • /usr/share/desktop-categories/amstrad.png

El archivo que va a tener que cambiar algo con respecto al anterior caso va a ser el de relaciona el acceso directo con la categoría ya que debe definir que dentro de la categoría Emuladores debe haber una categoría Amstrad y dentro de ella el acceso directo al emulador, de forma que el archivo /etc/xdg/menus/applications-merged/caprice32cp.menu ahora quedaría así:

 <Menu>
    <Name>Applications</Name>
    <Menu>
         <Name>Emulators</Name>
         <Directory>emulators.directory</Directory>
         <Menu>
           <Name>Amstrad</Name>
           <Directory>amstrad.directory</Directory>
           <Include>
             <Filename>caprice32cp.desktop</Filename>
           </Include>
         </Menu>
     </Menu>
</Menu>

El resto de emuladores de Amstrad deben tener un archivo igual para relacionar las categorías y el acceso directo que solo van a cambiar en el nombre del archivo y en la referencia a su acceso directo en la línea <FILENAME>

Igualmente podríamos crear más subcategorías para el resto de sistemas, que diferirían con ésta de Amstrad también en las dos líneas que definen la subcategoría y que deben ser iguales en las del mismo sistema para no duplicar subcategorías.

Este truco debe funcionar en la mayoría de entornos gráficos de GNU/Linux.