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.
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 ;