El emulador se maneja a través de la
interrupción 61h. Para comunicarse con este servicio se utilizan los registros
de la CPU.
Al ejecutar int 61h, en el registro AH
está el grupo de la función (servicio), en AL está el detalle (subservicio) de
la función y en los demás registros los parámetros de entrada.
Al volver de la int 61h el servicio cambia
los registros, también llamados parámetros de salida.
Cada uno de los servicios se describe con
sus parámetros de entrada, parámetros de salida y efectos
colaterales. No se permite el cambio de los registros no mencionados como
salida.
Efectos colaterales
1. LPT1 se pone
en modo de entrada.
2. Captura del
vector 61h y los vectores necesarios para manejar el tiempo.
3. El programa se
queda residente (TSR).
Como norma
general, si no se dice otra cosa, al volver del servicio en AH está el estatus
del resultado:
Registro |
Entrada /salida |
Valor |
Descripción |
AH |
S |
0 |
Operación completada con éxito |
AH |
S |
0Feh |
Error de rango de algún parámetro. |
AH |
S |
0FDh |
función no implementada |
AH |
S |
0FCh |
Función no funcional por razones
de limitaciones del hardware. |
Parar y
desinstalar el driver.
Efecto colateral:
Al terminar
correctamente el programa para. No vuelve nunca.
Registro |
Entrada /salida |
Valor |
Descripción |
AH |
E |
0 |
Comprobación del driver |
AX |
S |
55Abh |
Numero fijo |
CL |
S |
X |
Numero del grupo de practica (1,2,3) |
DL |
S |
X |
Letra del grupo a, b ó c (1 para a,
2 para b y 3 para c). |
DH |
S |
X |
Número de pareja |
Parámetros de entrada
CX= Periodo del reloj,
FFFF – Reloj externo, *
0 - Máxima velocidad (poling) *
otro – periodo entre las muestras en milisegundos
DI = desplazamiento de la primera muestra (hacia el pasado) a partir de
la condición de disparo.
Si no esta implementado con DI!=0 da error. *
DI < 1/4 BUFFER SIZE
SI = muestras a tomar después de la condición de disparo
Si no esta implementado con SI!=0 da error. *
SI < 1/4 BUFFER
SIZE
Parámetros de entrada:
a cada canal corresponde un bit en CL, BH, BL. Para cada canal la condición se define de la siguiente manera:
CL,BH,BL – condición de START.
bit in CL, BH, BL
0 0 0
IGNORAR Se ignora el bit al evaluar la condición
1 0 1
Nivel ALTO
1 0 0
Nivel BAJO
1 1 0
Flanco de Bajada (1->0) *
1 1 1
Flanco de Subida (0->1) *
SI – tiempo mínimo de la duración de la señal de START. ( 0 -
ignore) *
Los señales por flanco se ignoran después del primer
flanco.
Parámetros de entrada:
CL,BH,BL - condiciones.
Condición de parada de la lectura de datos.
El significado es como en el servicio anterior.
bit in CL, BH, BL
0 0
0 IGNORAR
1
0 1 Nivel ALTO
1
0 0 Nivel BAJO
1
1 0 Flanco de Bajada (1->0)
*
1
1 1 Flanco de Subida (0->1) *
(Ver el apartado de abajo).
Parámetros de entrada:
> DS:SI – buffer del generador.
Entradas en el buffer:
{ número_repeticiones(DW) longuitud(DW) forma de la salida(DB) }
número_repeticiones FFFF – hasta el infinito.
Parámetros de entrada:
> ES:DI – espacio del programa del usuario (buffer) con longitud
mínima de CX reservada para los datos.
> CX - número máximo de
muestras para devolver.
Parámetros de salida:
| CX - número real de muestras
devueltas
| DX - Número de muestras
todavía en el buffer del driver.
| AL
- 0 ok.
1 buffer
overrun
Efectos
colaterales:
Se libera tanto espacio en el buffer del driver como datos se han
leído.
Parámetros de
entrada:
> ES:DI – espacio del programa del usuario (buffer) con longitud
mínima de CX reservada para los datos.
> CX - número máximo de
muestras para devolver.
Parámetros de salida:
| CX - número real de muestras
devueltas
| DX - Número de muestras
todavía en el buffer del driver.
| AL
- 0 ok.
1 buffer overrun
Efectos
colaterales:
1. Se libera tanto espacio en el buffer del driver como datos se
han leído.
2. Por cada grabación se emite la señal correspondiente del buffer del generador
de muestras.
Parámetro de
salida para todos los servicios de petición de status:
AL – estado funcional del driver
| AL=0 – Parado. Antes de arrancar.
| AL=1 – en espera de la condición de arranque (START)
| AL=2 – lee datos de la interfaz
| AL=3 – Parada normal, por encontrar la condición de STOP.
| AL=4 – Parada por rellenar el buffer.
| AL=5 – Parada por petición del usuario (AH=3, AL=0).
Parámetros de salida:
Solo el estatus en AL
Parámetros de salida:
| CX= el periodo del reloj en
ms.
| DX= Desplazamiento de la
primera muestra en el buffer.
Parámetros de salida:
| CL,BH,BL = como en el servicio START
| CH,DH,DL = como en el servicio STOP
Parámetros de salida:
| CX - número de muestras en el
buffer.
| DX - capacidad del buffer
(número muestras posibles).
0. Espera la
condición de START, grabando los datos. Los datos no son accesibles para el
usuario.
1. Al encontrar la
condición de START comprueba por lo menos si esta dura mas del tiempo mínimo
requerido. Los datos en el buffer hay que guardarles pos lo menos el tiempo de
pre-fetch.
2. Si la condición
de START esta encontrada, la grabación de la señal se hace con la expiración de
cada periodo de muestreo, y termina al rellenar el buffer o al encontrar la
condición de STOP.
3. Al encontrar la
condición de STOP, al rellenar el buffer o al recibir comando explicito de
parar el proceso la adquisición de datos para.