viernes, 24 de mayo de 2019

Menu para disquete de Amstrad CPC

Recupero un viejo programa Basic que usaba para poder cargar distintos programas que tuviera en un disquete con un menú como éste:


Nos podemos mover por las entradas con los cursores o el joystick y seleccionarla con las teclas ESPACIO, ENTER o el disparo 0 del joystick.

Este es el listado del programa:

10 REM Ejemplo Menu para seleccionar diversos programas en disquete.
20 MODE 1
30 PEN 1:PAPER 0
40 DIM B$(20)
50 cabecera$="EJEMPLO MENU DE DISCO (CPCBEGIN)"
60 X%=19-LEN(cabecera$)/2
70 ESPACIOS%=4+LEN(cabecera$)
80 PAPER 3
90 FOR Y%=1 TO 3
100 LOCATE X%,Y%:PRINT SPACE$(ESPACIOS%)
110 NEXT Y%
120 LOCATE X%,2
130 PRINT"  "+cabecera$
140 PAPER 0:READ Z%:FOR I%=1 TO Z%:READ a$,b$(i%):LOCATE 5,I%*(2+(z%>10))+5:PEN 2:PRINT USING"##";i%;:PRINT") ";:PEN 1:PRINT a$:NEXT i%
150 REM PEN 3:LOCATE 11,25:PRINT CHR$(164)+" 2019, MENSAJE COPYRIGHT";
160 opcion%=1
170 LOCATE 5,opcion%*(2+(z%>10))+5:PEN 0:PAPER 2:PRINT USING"##";opcion%;:PRINT") ";:a$="":WHILE a$="":a$=INKEY$:WEND
180 IF a$=CHR$(241) OR a$=CHR$(10) THEN LOCATE 5,opcion%*(2+(z%>10))+5:PAPER 0:PEN 2:PRINT USING"##";opcion%;:PRINT") ";:opcion%=opcion%+1:IF opcion%=Z%+1 THEN opcion%=Z%
190 IF a$=CHR$(240) OR a$=CHR$(11) THEN LOCATE 5,opcion%*(2+(z%>10))+5:PAPER 0:PEN 2:PRINT USING"##";opcion%;:PRINT") ";:opcion%=opcion%-1:IF opcion%=0 THEN opcion%=1
200 IF VAL("0"+a$)>0 THEN opcion%=VAL(a$):GOTO 230
210 IF a$<>CHR$(13) AND a$<>"X" AND a$<>" " THEN a$="":GOTO 170 ELSE 230
220 PRINT"Cargando..."b$(opcion%)
230 FOR j%=1 TO z%
240 PEN 2:PAPER 0
250 IF opcion%=j% THEN PRINT CHR$(24);
260 LOCATE 5,j%*(2+(z%>10))+5:PRINT USING"##";j%;:PRINT") ";
270 NEXT j%
280 PEN 1:PAPER 0:RUN B$(OPCION%)
290 END
300 'Use this syntax in DATA line:
310 'DATA number of programs,description 1,access 1,description 2,access 2,...
320 DATA 19,ALGEBRA,ALGEBRA.BAS,"BARAJA ESPANOLA",BARAJA.BAS,EDITOR DE CARACTERES,CARACTER.BAS,CRONOS I,CRONOS.BAS,IMPRIME DIRECTORIOS,DIR.BAS,DIRECCIONES Y TELEFONOS,DIRECCIO.BAS,CALCULO DIVISORES,DIVISOR.BAS,DEMO TINTAS,INKERS.BAS,TEST JOYSTICK
330 DATA JOYTEST.SPA,CALCULO NIF,NIF.SPA,PAGINADOR,PAGINAS.BAS,PIRAMIDE MALAGA,PIRAMIDE.BAS,NUMEROS PRIMOS,PRIMOS.BAS,QUIMICA JBL,QUIMICA.BAS,QUINIELA ALEATORIA,QUINIELA.BAS,TELEFONOS Y PREFIJOS,TELEFONO.BAS,TYPE AMSDOS,TYPE.BAS
340 DATA LEA ESTO,README.BAS,ENGLISH SOFTWARE,ENGLISH.BAS
350 'autosaving
360 SAVE"disc.bas",a


Para adaptarlo a tus necesidades basta con que cambies las lineas de DATA según lo que dice la linea 300, el primer dato es el número de programas.
También deberías cambiar el texto de la cabecera con el nombre que le des al disco o compilación.

Deben sobrar al menos 2K en el disquete para que quepa el programita.

Para grabarlo en un CPC real o emulado, recuerda que ya hemos visto como hacerlo con disquetes, inyectar código en un DSK con un editor de texto profesional. y que emuladores como RVM permiten inyectar y extraer archivos de las imágenes de disquetes muy fácilmente.

domingo, 19 de mayo de 2019

Tostar un archivo DSK en un disco de 3" desde la unidad de 3.5" del propio Amstrad CPC con dsk-cpc

Imagina que tu copia original de CP/M deja de funcionar (y todas las copias de seguridad que deberías haber hecho), ¿qué haces ahora? ¿cómo vas a hacer tareas habituales en el CPC como formatear disquetes?

La solución es estampar en un disco el archivo DSK del disco estropeado desde la unidad B del propio Amstrad, ¿cómo? con la utilidad dsk-cpc.

¿Qué necesito?


Preparando los discos de 3.5" en el PC

  • Copiamos la aplicación dsk-cpc a un disco de 3.5" en algún formato que lea el CPC tal y como vimos en un artículo anterior.
  • Formateamos el segundo disco de 3.5" como disco IBM de doble densidad:
    SistemaComando para formatear en doble densidad
    DOS/Windows unidad internaformat a: /t:80 /n:9 /v:dsks
    GNU/Linux unidad internafdformat /dev/fd0u720
    DOS/Windows unidad USBufiformat -f
    GNU/Linux unidad USBsudo ufiformat -f 720 -v /dev/sdd #sustituir sdd por lo que corresponda con la disquetera
  • Copiamos los dsk que queramos tostar en este segundo disco, arrastrándolos desde el explorador por ejemplo.

Nota para disqueteras USB

  • Para GNU/Linux: sustituir /dev/sdd por lo que corresponda según lo que nos diga el comando mount.
    ¡Ojo! Si nos equivocamos podemos machacar la información de otra unidad.
  • Para Windows: el driver de la disquetera y la versión del S.O. debe soportar discos de doble densidad.
  • Para ambos: la disquetera debe soportar discos de doble densidad (se puede comprobar con el comando ufiformat -i

Uso de dsk-cpc en el Amstrad CPC

  1. Encendemos la disquetera de 3.5" y el Amstrad CPC.
  2. Introducimos el disquete de 3" a machacar y el disco de 3.5" con el programa dsk-cpc.
  3. Seleccionamos la unidad B: con el comando:
    |B
  4. Ejecutamos dsk-cpc
    RUN"dsk-cpc
  5. Sacamos el disquete de 3.5" con dsk-cpc y lo sustituimos por el disquete con las imagenes DSK.
  6. Pulsamos 1 para seleccionar el DSK.
  7. Seleccionamos el dsk que queramos tostar.
  8. Seleccionamos 1 para tostar el dsk en el disco de 3".
  9. Cuando termine podemos reiniciar y probamos que funciona el disco de 3".
Advertencia: este procedimiento no funciona con todas las imágenes dsk, especialmente si están protegidas o tienen pistas extrañas.

martes, 14 de mayo de 2019

Instalar Marble en Ubuntu Mate 18.04

Marble es una excelente alternativa libre a Google Maps que además consume muchos menos recursos y da un resultado muy bueno.



Se puede instalar desde los repositorios oficiales de Ubuntu Mate con este comando:

sudo apt-get install marble-qt marble-plugins marble-maps marble-data libmarblewidget-qt5-23 libastro

Si quieres instalarla en otras distros consulta este artículo.

martes, 7 de mayo de 2019

Poner una disquetera de 3.5'' al Amstrad CPC 6128


En realidad, este cable lo tenía hecho y comprobado por Diego Vizcaíno hace muchos años pero yo nunca había conseguido hacer que funcionara, ¿por qué? porque hay que alimentar a la disquetera como es debido, 5V 2A, hace poco me regalaron algunos componentes viejos de PC que me podían servir como una fuente de ordenador de las antiguas.

El cable

El cable utilizado es el que usaban para conectar las viejas disqueteras de 5.25" con ciertas modificaciones:
  • Pines 33 y 34: deben estar cortocircuitados permanentemente para conseguir la señal Ready.
  • Pines 31 y 32: cortocircuitados leen la "cara B" del disco, sin unir leen la "cara A".
  • Pines 11 y 12: hacen que la unidad externa se convierta en la unidad A, lo que nos permitiría ejecutar programas que estén pensados para arrancar solo desde esa unidad, como diversos juegos y el propio CP/M.
Lo más recomendable es poner interruptores entre los pines que se conectan o desconectan según nuestra necesidad, por precaución mejor no conectarlos o desconectarlos con el CPC encendido,

 
Otra opción válida para alimentarla es suministrar 5V 2A por el conector de alimentación de la disquetera (como se ve en la foto de la disquetera por detrás), un alimentador de raspberry pi 2 podría servir y no sería tan aparatoso como el de un PC.
La disposición de los pines depende de si la muesca para el cable está abajo o arriba, de todas formas el cable solo debería entrar solo de la manera correcta en la disquetera (pin 1 al cable rojo), en el Amstrad sí hay que tener más cuidado como vamos a ver.

 

Conectándolo al CPC y a la disquetera

Hay que fijarse en el pin 1, que es el cable rojo:
  • A la disquetera debe ir al pin 1 de la disquetera, la mayoría de cables y disqueteras traen una muesca para que se conecten como debe ser, pero mejor comprobar este punto.

    En la serigrafía inferior podemos ver que el cable rojo está en el pin 1, en la etiqueta estaba puesto arriba porque así tenía que ser en la disquetera que iba a usar originariamente, que resultó estar cascada.
  • Al CPC debe conectarse de manera que el cable rojo sea el más alejado de la disquetera de 3" interna, normalmente junto al cable de vídeo.
¡CUIDADO!: En el manual oficial del Amstrad os encontraréis este esquema:


NO LE HAGÁIS NI CASO, es válido para las unidades Amstrad por que los pines se montaron al revés que la norma de las disqueteras de PC, es decir, el 1 sería el 34, el 2 el 33...


Funcionamiento 

Una vez conectado todo, encendemos la fuente que alimenta la disquetera y a continuación el propio CPC.
Para usarla como unidad B tecleamos
|B
y los comandos habituales para cargar o ejecutar programas.

Hay que tener en cuenta que algunos juegos y el propio CP/M solo permiten arrancar con la unidad A, así que en esos casos tenemos que unir los pines correspondientes para anular la unidad interna y que la externa funcione como A:

Una advertencia: si hacéis CAT sobre una unidad sin disquete el Amstrad se quedará bloqueado hasta que lo apaguéis y  volváis a encender.
Lo más cómodo es tener un disquete en cada una para evitaros el incordio.


Acabados (mucho por mejorar)

Como habéis visto en las fotos, he metido la fuente de alimentación y la disquetera en una caja de cartón recortada y agujereada, es cutre pero por ahora es lo que hay.
Eso sí le he hecho muchos agujeros para que escape el calor por algún lado pero de todas formas voy a estar pendiente de posibles calentamientos.

También tengo que poner un par de interruptores para cambiar de cara y puede que también para usar como unidad A.

También puedo añadir conectores para alimentar al propio Amstrad CPC para cuando quiera usar monitores externos distintos al CTM-644.

En este vídeo podéis verlo en acción.


Fuentes y enlaces de interés


miércoles, 1 de mayo de 2019

Copiar archivos a disquetes de doble densidad desde el PC para el Amstrad CPC (mediante disquetera USB en máquina virtual VirtualBox)

El objetivo es pasar archivos a disquetes de doble densidad desde el PC en un formato que sea capaz de leer el Amstrad CPC, pero con dos limitaciones:
  • Hacerlo en un equipo moderno que no trae disquetera interna.
  • Hacerlo en un equipo que solo tiene como sistema nativo GNU/Linux (Ubuntu Mate 18.04).

Vamos a ver que necesito.

Hardware

Necesitaremos tres cosas:
  • Disquetes de doble densidad (DD Disks), si solo tienes de alta no hay problema, le pones un trozo de celo opaco tapando el agujero derecho como puedes ver en el disquete negro de la foto y ya es un disco de doble densidad como el azul (que no tiene el agujero).
  • Una disquetera USB que soporte discos de doble densidad, como la que me pille hace unos meses.
  • Un PC, en mi caso voy a usar mi i7.

Software

  • VirtualBox, se recomienda instalar el Extension Pack correspondiente a la  versión que instales para tener un soporte completo USB.
    Lo puedes instalar desde el centro de software de tu distro.
  • La máquina virtual con Windows, al menos XP, que es la que soporta el programa para pasar los disquetes.
    Simplemente se crea la máquina virtual y lo instalas en ella como si fuera un ordenador real, os dejo un manual para quien no sepa.
  • La disquetera USB la puedes montar a posteriori una vez arrancado el Windows virtual haciendo clic en el icono para mapear dispositivos USB pero mi recomendación es añadir un filtro de dispositivo USB en el apartado USB de la configuración de la máquina virtual antes de arrancarla y así hacer que se mapee automáticamente.
  • CPCDiskXP, el programa que va a pasar los archivos al disquete y que lógicamente hay que descargar e instalar en el Windows XP virtual.
    Debe ser la última versión que es la que permite usar disqueteras USB con limitaciones que veremos a continuación.
  • Los archivos sueltos o archivos dsk que queramos pasar que también deben estar en el sistema virtual.
 

Uso de CPCDiskXP

Este programa se distribuye en un archivo ZIP como aplicación portable, por tanto, basta con copiarla en una carpeta y hacer doble clic en el ejecutable CPCDiskXP.exe (crear un acceso directo para más comodidad).
También incluye otro binario llamado FDInstall.exe que es el driver para usar el disquete de forma nativa pero no es compatible con las unidades USB.
Recomiendo mantener conectada la disquetera con el disquete dentro desde que iniciamos la máquina virtual hasta que salgamos de ella.
Puede que algunos disquetes con tantos años fallen pero ya vimos que unos buenos soplidos en su interior hace maravillas.

Bueno, vamos al lio:
  1. Arrancamos la máquina virtual con la unidad conectada y el disquete dentro.
  2. Ejecutamos CPCDiskXP.
  3. Hacemos clic en el botón DSK EDITOR.
  4. Clic en New.
  5. Marcamos la opción USB Floppy Drive  Compatible Formats y dejamos el que nos ofrece por defecto.
  6. Hacemos clic en el botón Add Files para añadir archivos sueltos y/o..
  7. Hacemos clic en el botón Add Files From Another DSK para incluir archivos sueltos incluidos en un DSK que no esté protegido.
  8. Una vez incluidos todos los archivos deseados pulsamos los botones Write USB Floppy y Write Disk.
  9. Si todo ha ido bien cerramos la aplicación y salimos de la máquina virtual, ya tenemos nuestro disquete listo para usar en una unidad 3.5'' conectada a nuestro CPC.

Limitaciones

  • Realmente solo puede copiar ficheros sueltos, aunque los lea de un dsk desprotegido, no se podría "quemar" una imagen tal cual en el disquete (raw).
  • Hay que usar formatos IBM y además compatible con la ROM que tenemos en nuestro CPC, que en mi caso es la estándar.
  • Por otro lado sólo podemos grabar la cara A, lo que nos hace aprovechar muy poco del disco.
  • El disquete no se podrá releer desde la aplicación por lo que siempre hay que empezar de cero.
  • Posiblemente no sea reconocido ni por GNU/Linux ni por el Windows virtual. 

Videotutorial

El tutorial 'hacer un disco de 3.5 usando una disquetera USB' es bastante clarificador pero añado otro mío para las peculiaridades de hacerlo en una máquina virtual desde GNU/Linux:


Última hora

El compañero KaosOverride, una vez más, nos proporciona información interesante desde el grupo de Telegram Amstrad Power.
Se puede hacer directamente desde GNU/Linux con las aplicaciones dsk2ima y dd. 
Tomo buena nota para futuro artículo.

jueves, 25 de abril de 2019

Instalar Refacta Devuan en un Pentium III

Recientemente ha vuelto a la casa el pentium III que tenía en casa de mis padres, un equipo de 2000 con solo 384Mb de RAM y muy pocos recursos. ¿que GNU/Linux más o menos actual le podría poner a esta pieza de museo?

Después de probar con Devuan puro (un fork de Debian sin systemd), que se instaló sin problema en una máquina virtual pero que se resiste en este equipo tan viejo probé con un fork de Devuan llamado Refracta.



Esto es lo que he hecho para instalarla en el pentium III:

Descarga y grabación de la ISO

Nos descargamos la última versión estable de refracta que podemos localizar en sourceforge.
La tostamos con K3B en un CD virgen desde mi i7 a la velocidad más baja para que no dé la lata con la lectora del pentium III que tiene sus añitos y sus limitaciones.


Instalación

Ya desde el pentium III:
  1. Accedemos a la BIOS y seleccionamos la unidad de CD-ROM al principio del arranque.
  2. Antes de pulsar F10 para grabar los cambios en la BIOS introducimos el CD.
  3. Elegimos 'Refracta (default). 
  4. Una vez arrancado iniciamos el asistente de instalación que podemos encontrar desde el Menú:
    Menú ► System ► Refracta Installer
  5. Elegimos el método 'use sudo'. 
  6. Elegimos 'Simple Instalation'.
  7. Seleccionamos 'Run GParted' y preparamos las particiones para instalar el sistema, hay que tener en cuenta dos cosas:
    • Debemos crear una partición tipo ext4 para el sistema (también puede ser ext2 pero no tendremos journaling para bien o para mal) y una linux-swap con el doble de memoria que tenga nuestro viejo equipo.
      Tomamos buena nota de la partición ext4 porque en el siguiente paso nos la van a pedir, y mejor que no nos confundamos si tenemos otro sistema.
    • Si es un disco nuevo no nos va a dejar crear particiones hasta que creemos una tabla de particiones, que podemos hacer mediante las opciones:
      Device ► Create Partition Table ► Elegimos el tipo: MSDOS ► Apply.No crear la tabla si  ya está creada y hay datos que queremos conservar pues esto borra todo el disco duro.
  8. Aplicamos todas las operaciones haciendo clic en el botón de la flechita verde y salimos de GParted.
  9. Elegimos la partición ext4 previamente creada.
  10. Hacemos clic en el botón para proceder con la instalación y confirmamos.
  11. Definimos el nombre del host y el de usuario.
  12. Permitimos sudo para nuestro usuario pero no por defecto.
    Desactivamos también la opción 'Use sudo only for shutdown'.
  13. Definimos las claves
  14. Reiniciamos retirando el CD para arrancar desde el disco interno.

Afinando el sistema

  • Actualizamos el sistema como si fuera un Ubuntu. 
  • Configuramos el teclado en castellano, para ello donde pone us en la parte superior de la pantalla, hacemos doble clic borramos los que no nos interesa e incluimos Español (a secas).
  • Después de la instalación tendríamos que desinstalar software que no se puedan ejecutar fluidamente en el equipo.
  • También pararemos los servicios que solo ralentizan este viejo equipo y no se van a poder usar de una manera práctica como el soporte bluetooth.
    Para ello ejecutamos el comando sysv, navegamos con los cursores y vamos desactivando lo que no nos interese con el espacio.
    Cuando terminemos pulsamos la tecla q.
  • Si instalamos aplicaciones extra debemos tener en cuenta lo limitado del equipo, GNU/Linux es muy bueno pero no hace milagros, porque donde no hay NO HAY, por ejemplo:
    sudo apt install mc vim
    Especial cuidado si añadimos servicios o programas que se ejecutan todo el rato.
  • Si es un equipo sin datos sensibles y queremos que esté disponible para toda la familia sin introducir una clave, podemos activar el autologin.
  • Para configurar la wifi hay que ir a:
    Menu > Internet > Wicd Network Manager
    Vamos a la pestaña Switch Off Wifi, seleccionamos nuestro SSID le ponemos la clave en properties, activamos que se conecte automáticamente a ella y le damos a Connect


viernes, 19 de abril de 2019

Activar la pantalla HAT o la HDMI en raspbian

Pero tenían un problema: no tenía forma de poner la imagen en la pantalla HDMI cuando necesitara usarla, ya tengo la solución para poder cambiar entre una y otra:
  1. Actualizamos raspbian y el firmware a una versión que soporte las dos: pantallas (framebuffers):
    sudo apt-get update
    sudo apt-get -y upgrade
    sudo rpi-update fe525d2
    reboot
  2. Instalamos el gestor de framebuffers fbi (aunque este paso puede no ser necesario):
    sudo apt-get install fbi
  3. Editamos el archivo /usr/share/X11/xorg.conf.d/99-fbturbo.conf y nos fijamos en la línea:
    Option "fbdev" "/dev/fb1"
  4. Si cambiamos fb1 por fb0 usará la tele enganchada al HDMI mientras que si dejamos fb1 usará la pantallita HAT.
  5. Para mayor comodidad podemos copiar las dos versiones de este archivo en otro directorio (p.e.: /home/pi/xconfs) y con un par de scripts copiar uno u otro en la configuración de las X.
Gracias a la ayuda de Kike de fororaspberry y al artículo de jamesh en el foro oficial por ayudarme a encontrar la solución.

Por ahora queda averiguar cómo hacer que funcionen las dos a la vez que según lo visto en el siguiente vídeo, es posible.