============================= Versión 1.0 =================================
								  (19-6-98)

Primera versión que funcionó correctamente con el prototipo conectado a
internet. Sus principales características son:

* Protocolo SLIP implementado mediante máquina de estados en la rutina de
interrupción del puerto serie asíncrono (SCI).

* Soporta paquetes IP.v4 de hasta 576 bytes sin fragmentación ni opciones de
cabecera. Este MTU permite la implementación sin problemas del protocolo
tftp.

* Implementa las funciones de eco, tanto ICMP (ping) como UDP.

* Implementa un servidor de Trivial FTP como principal mecanismo de
comunicación. En este servidor son accesibles una serie de ficheros
virtuales que permiten conocer el estado del prototipo y consultar los datos
capturados. Los principales ficheros son:

index	- Directorio del prototipo.
stat	- Información acerca del estado del prototipo. Destacan los campos
	  de tareas, estadísticas de tráfico de paquetes y configuración de
	  la captura de datos.
data	- Niveles actuales de las 8 entradas analógicas del 68hc11.
alldata	- Volcado de todos los datos capturados por el prototipo desde el
	  momento de su encendido o configuración, en formato ASCII.
mem/[*]	- Volcados de diversas zonas de la memoria.

  El servidor permite mantener abiertos simultáneamente hasta 4 ficheros si
su tamaño supera los 512 bytes, mientras que los ficheros más cortos no
tinen este tipo de restricción pues se contestan con un único paquete UDP.
La dexconexión por "timeout" no se produce hasta que resulta necesario para
atender una nueva conexión.

* Configuración remota: Mediante un paquete UDP, y una clave elegida en el
momento de la compilación, se pueden establecer nuevos parámetros para la
captura de datos, como son el periodo de muestreo y la máscara de canales de
datos que nos permite seleccionar los canales de interés entre las 8
entradas analógicas del 68hc11.

* Multitarea. El esquema seguido es muy simple: Una interrupción periódica
conmuta cada 13 ms aproximadamente a la tarea número 0 que es la más
prioritaria. Cuando una tarea no tiene nada que hacer conmuta a la siguiente
tarea menos prioritaria mediante la instrucción "swi" (interrupción por
software). La última tarea de la cadena de prioridades consume el tiempo de
CPU restante en un bucle infinito. Se han previsto hasta 4 tareas, aunque
sólo se emplean dos de ellas en la actualidad: La tarea numero 0 se encarga
de la captura periódica de datos y la tarea 1 de las comunicaciones IP. Cada
tarea tiene su propia pila mientras que el acceso a las variables de otras
tareas es total, por lo que más que de multitarea deberíamos hablar de
"multithreads".

* El código está escrito en lenguaje ensamblador y C. Las principales partes
son:

Código ensamblador:

- Arranque, variables globales y tabla de vectores 
  de interrupción:					crt0.s
- Gestión de memoria para paquetes:			mem.s
- Gestión de colas de punteros:				colas.s
- Interrupción del puerto serie y protocolo SLIP:	sci.s
- Interrupción de tiempo real y conmutación de tareas:	task.s
- Temporización de precisión (interrupción OC2):	timer.s
- Checksum IP:						checksum.s

Código C:

- Captura de datos:					data_ad.c
- Gestión de paquetes IP:				ip.c
- Gestión de paquetes ICMP (echo):			icmp.c
- Gestión de paquetes UDP:				udp.c
- Configuración remota:					config.c
- Servidor tftp y sistema de ficheros:			tftp.c

El programa también hace uso de rutinas de librería de propósito general,
como son las funciones de tratamiento de cadenas en C y "printf", además de
algunas rutinas artitméticas de bajo nivel (libgcc.a).

============================= Versión 1.1 =================================
								  (22-6-98)

Básicamente es una versión que incorpora optimizaciones en el código fuente,
especialmente en lo relativo al código ensamblador. Los principales cambios
son:

* Recopilación de rutinas en una librería específica de la aplicación:
  directorio ./lib

* Rutina "sprintf". Se eliminó código de "printf" para hacer esta rutina
  sólo útil para imprimir en cadenas de caracteres. Se retorna el número de
  bytes impresos.

* Rutina "strcpy" se modificó del estándar para retornar el puntero al final
  de la cadena destino en lugar de al principio. Por ello se cambió su
  nombre por "strcpy_m". El cambio simplifica la concatenación de cadenas en
  programas C.

* Rutina "memcpy" totalmente reescrita para acelerar el movimiento de
  bloques de datos. Para ello se recurre a la copia de datos de 16 bits
  cuando es posible y se evitan las cargas y descargas de registros índice.
  Se estima que la nueva rutina es al menos 4 veces más rápida que su
  antecesora, aunque ocupa aproximadamente el doble de memoria.

* Rutina de Checksum IP. Ahora usa instrucciones de suma con acarreo de 8
  bits, lo que permite una ligera mejora de velocidad al no tener que
  consultar el flag de acarreo en cada suma.

* Fuente "tftp.c" bastante modificado para hacer uso de las nuevas rutinas.
  Se consiguen eliminar las llamadas a la rutina "strlen". El resultado es
  un código objeto notablemente más corto y rápido.

Además de estos cambios se incorporan correccciones ortográficas, nuevas
líneas de comentarios y una estructuración más racional de determinadas
partes del código fuente.

Las moficicaciones redujeron el código objeto en unos 500 bytes
aproximadamente.

============================= Versión 1.2 =================================
								  (23-6-98)

* Corrección de un error estúpido en la longitud del fichero "Index".
  (Gracias a Ciriaco García de Celis)

* Eliminación de retardo activo en la rutina "adquire" de "data_ad.c". Esto
  supone una reducción del consumo de CPU de la terea más prioritaria, con
  lo que se agiliza la respuesta de la tarea 1 (tráfico IP). Como
  contrapartida el periodo mínimo de muestreo ha sido aumentado de 20 a 30
  ms.

============================= Versión 1.3 =================================
(No terminada: Versión 1.2 pr 3)				 (DD-MM-YY)

* Cambiado el nombre de "cfg.s" por "nvvar.s". En este fichero se declaran
  las variables globales que van en RAM no volátil.

=============================  Por Hacer  =================================

(Versión 1.3)
* Añadir una variable de tiempo estilo Unix.
* Convertir Tarea_2 en un proceso de cronómetro.
* Modificar "tftp.c" para devolver "time_stamp" en el fichero "alldata".
* Modificar "config.c" para permitir la puesta en hora remota.

(Versión 1.4)
* Registro de IP's: Se pretende llevar una lista LRU de los últimos IP_src
  que han accedido al HC11.
* añadir fichero "last" con información de últimos IP's registrados.

