El driver se maneja a través de dos
mecanismos. Uno es desde la aplicación de usuario, mediante la interrupción 61h
y el otro mecanismo es a través de una interrupción hardware periódica. Para
comunicarse con este servicio se utilizan los registros de la CPU.
Al ejecutar int 61h, en el registro AH
deberá estar el grupo de la función (servicio), en AL estará 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.
La instalación del driver produce
los siguientes 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. |
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 |
Número fijo |
CL |
S |
X |
Número del grupo de práctica
(1,2,3) |
DL |
S |
X |
Letra del grupo A 1, B 2, C 3. |
DH |
S |
X |
Número de pareja |
Parámetros de entrada
BL= Unidad de medida 0=
microsegundos
1=
milisegundos
cualquier
otro valor = error
CX= Periodo del reloj,
FFFF – Reloj externo
0 - Máxima velocidad (pooling)
otro – periodo entre las muestras según BL
DX = desplazamiento de la primera muestra (hacia el pasado) antes de la
condición de disparo. Tendrá un valor fijo e igual a 10.
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 en 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)
(Opcional)
1
1 1 Flanco de Subida (0->1) (Opcional)
SI – número de muestras de la duración de la señal de START. ( 0 –
ignorar) (Opcional)
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)
(Opcional)
1
1 1 Flanco de Subida
(0->1) (Opcional)
(Ver el apartado de abajo).
Parámetros de entrada:
> DS:SI – buffer del generador.
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 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 (ver
párrafo anterior)
Parámetros de salida (además de AL):
| BL= unidad del reloj (0=
microsegundos, 1= milisegundos).
| CX= periodo del reloj,
respecto de BL
Parámetros de salida (además de AL):
| CL,BH,BL = como en el servicio START
| CH,DH,DL = como en el servicio STOP
Parámetros de salida (además de AL):
| CX - número de muestras en el
buffer.
| DX - capacidad del buffer
(número muestras posibles).