Controlador de controlador doméstico

Descripción del contenido de la página

Palabras para Abersoft Forth, para la Sinclair ZX Spectrum, que permiten controlar un controlador doméstico.

Etiquetas:

El controlador doméstico de Indescomp era una interfaz para la ZX Spectrum que permitía controlar circuitos eléctricos. Era una delicia para los aficionados a la robótica, a la inteligencia artificial o simplemente a meterse en líos.

El aparatito se conectaba a la ranura de expansión de la computadora. Tenía cuatro entradas, en las que era posible detectar el paso de corriente, y cuatro salidas o interruptores que permitían cerrar y abrir circuitos eléctricos. Desde un programa se podía comprobar el estado de cada entrada y cerrar o abrir cada salida. Esto se hacía con los ocho bitios de un puerto de entrada y salida.

Durante años hice muchos experimentos con el controlador doméstico, en BASIC y en Forth. Pero un día me despisté y lo puse o lo quité sin acordarme de desconectar antes la corriente de la ZX Spectrum... que murió en el acto.

Estas sencillas palabras en Forth facilitaban controlar el controlador (¿pero quién habría de controlar al controlador del controlador?). Su único interés ahora es servir de pequeño ejemplo de cómo Forth nos permite reescribir el propio lenguaje para crear cualquier sintaxis a nuestro gusto, adaptada a cada tarea. Además, con unos pequeños cambios en el código sería fácil de adaptar a cualquier otro dispositivo similar.

Código fuente

( Controlador de controlador doméstico )

( Copyright [C] 1986, 2009 Marcos Cruz http://programandala.net )
( Licencia / License: http://programandala.net/license )

( Abersoft Forth, Sinclair ZX Spectrum )

( 1986-08-01 Primera versión )
( 2009-05-27 La palabra # es renombrada como CONECTOR )

( Palabras para manejar un controlador doméstico. )
( Pemiten expresiones como las siguientes:)
( ACTIVAR SALIDA B )
( DESACTIVAR SALIDA C )
( ENTRADA D ACTIVADA? )
( ENTRADA A DESACTIVADA? )

: TASK ;

16 CONSTANT ENTRADA
 1 CONSTANT SALIDA

1 CONSTANT CERRAR
2 CONSTANT ABRIR

65311 CONSTANT PORT

0 VARIABLE ORDEN
0 VARIABLE BOUT

: ACTIVAR  CERRAR ORDEN !  ;
: DESACTIVAR  ABRIR ORDEN !  ;

: OUTB  DUP BOUT ! PORT OUTP  ;

: CIERRA  0 ORDEN !  BOUT @ OR OUTB  ;
: ABRE  0 ORDEN !  255 XOR BOUT @ AND OUTB  ;

: CONECTOR
  * ORDEN @
  CASE
  CERRAR OF CIERRA ENDOF
  ABRIR OF ABRE ENDOF
  ENDCASE
  ;

: A  1 CONECTOR  ;
: B  2 CONECTOR  ;
: C  4 CONECTOR  ;
: D  8 CONECTOR  ;

: ACTIVADA?  PORT INP AND  ;
: DESACTIVADA?  ACTIVADA? NOT  ;