Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Estructura y Tecnología de Computadores (página 2)




Enviado por Pablo Turmero



Partes: 1, 2

Monografias.com

# Ejemplo de fichero Makefile

all: drvmio.com test.exe

drvmio.com: drvmio.obj
TLINK /t /v drvmio.obj

test.exe: test.obj teclado.lib
TLINK /V test.obj teclado.lib

.asm.obj:
TASM /zi $<

.obj.lib:
TLIB $&.lib -+$<

clean:
del *.obj del *.map del *.exe del *.lib del *.com
Makefiles
Si ponemos make all se ejecutan todos estos procesos
Proyecto 1: drvmio.com
Proyecto 2: test.exe
Reglas de construcción genéricas
Limpieza

Monografias.com

Práctica 2
Práctica 2: Diseño driver generador de notas

Hacer un driver que use el TMR2 y el RTC para generar un tono a la frecuencia de cada nota musical. Este driver sustituirá al proporcionado en la práctica anterior.

Opcional: Que el driver saque sonidos por el puerto paralelo

Práctica 2
Driver
INT 61H

Generador Notas musicales por TMR y RTC
Práctica 1

Teclado Electrónico

Monografias.com

Práctica 2: Interrupciones involucradas
Interrupción 61h: Driver
Acceso a las funciones del driver desde programas externos
Interrupción software. No PIC, no EOI, IRET, síncrona.
Hay que instalar la interrupción

Interrupción 70h: Reloj Tiempo Real (RTC)
Cada vez que suene una nota se activará para medir el tiempo que tiene que sonar. Cuando salte ‘n-veces’ la interrupción desactivaremos el sonido.

Hay que instalar la interrupción y configurar los PIC, los registros A y B del RTC con la interrupción PIE del mismo.

Interrupción hardware: PIC, EOI, IRET, asíncrona

Interrupción 1Ch: Generada por el TMR (INT 08h)
Se llama 18.2/seg y nos servirá para hacer efecto gráfico. Se configura al instalar el driver, y se desactiva al desinstalar el driver. Hay que instalar la interrupción.

Pseudo-software: No PIC, no EOI, IRET, asíncrona

Monografias.com

Práctica 2: Estructura Driver

Se accede mediante interrupción software: INT61H

Nos ofrece servicios, seleccionables por registro AH

Resto de registro para paso de parámetros

Configura vectores interrupción
Deja parte residente en memoria
Estructura Driver
Parte 1: Instalación
Parte 2: Residente en memoria
Palabra de seguridad 0FECAH

Monografias.com

PUSH DS
MOV AX,CS
MOV DS,AX
MOV AX,DATO2
POP DS
IRET
Práctica 2: Segmento de datos
Programa Principal
Driver
DATO2
DATO1
DS
CS
ES
SS
1
MOV AX,DATO1
INT 61h

MOV AX,DATO2

IRET
2
2
3

Monografias.com

Práctica 2: El Temporizador (TMR 8253)
El Chip 8253 contiene tres temporizadores de 16-bits

Lo vamos a usar para generar sonidos.

Registros internos (Accesibles directamente en los puertos siguientes):
40h : Contador 0 -> controla el reloj sistema -> INT8 -> INT 1Ch
41h : Contador 1-> Refresco memoria RAM
42h : Contador 2 -> Generación de tonos en el altavoz
43h : Registro de control

Se accede a ellos mediante las instrucciones IN/OUT
Amplificador y Filtro
Puerto 61h
7 1 0
0
1
2
18.2Hz (INT 1CH)
Puerto 42h

Monografias.com

Práctica 2: Temporizador Registro de Control
SC1..SC0: Seleccionan el contador que vamos a configurar
0 0 : Contador 0
0 1 : Contador 1
1 0 : Contador 2
1 1 : Sin uso

RL1..RL0: Modo de acceso a los contadores
0 0 : Captura de la cuenta en un latch (leer sin para contador)
0 1 : Leer/Escribir el byte más significativo
1 0 : Leer/Escribir el byte menos significativo
1 1 : Leer/Escribir ambos bytes (primero menos significativo)

M2..M0: Modo de funcionamiento
(x11 -> Aestable, generador de onda cuadrada)

BCD: Cuenta en modo BCD

Monografias.com

Práctica 2: Reloj en Tiempo Real (RTC)
El Chip MC146818 mantiene la hora del sistema cuando esta apagado

Lo vamos a usar para temporizar la duración del sonido. Usaremos su capacidad de generar interrupciones hardware.

Tiene 64 registros internos, de los cuales nosotros vamos a usar:
Registro A (Dirección 10): Configuración general (Frecuencia)
Frec. Osc. = 32.768khz
Registro B (Dirección 11): Configuración interrupciones (PIE). PIE=1, SQWE=0
Registro C (Dirección 12): Estado (PIE). Con leer se borran los flags.

El acceso a sus registros internos se hace indirectamente a través del puerto 70h y 71h mediante instrucciones IN/OUT.

Para realizar lectura:
Se escribe (OUT) en el puerto 70h la dirección de la posición que se desea leer.
Se realiza una lectura en el puerto 71h.

Para realizar una escritura
Se escribe (OUT) en el puerto 70h la dirección de la posición que se desea escribir
Se escribe (OUT) en el puerto 71h el dato que se quiere escribir

Monografias.com

Práctica 2: Controlador Interrupciones (PIC)
Direcciones del PIC-0 (maestro): 20h y 21h
Direcciones del PIC-1 (esclavo): A0h y A1h
Interrupciones PIC-0: 08h (IR0), 09h (IR1)…0Fh (IR7)
Interrupciones PIC-1: 70h (IR8), 71h (IR9)…7Fh (IR15)

Monografias.com

Práctica 2: Controlador Interrupciones (PIC)
El RTC genera la interrupción 70h que proviene del PIC-esclavo.
Para poderla recibir tenemos que configurar el PIC maestro y el esclavo.

Para indicar que hemos recibido una interrupción tenemos que mandar EOI no especifico (OCW2 = 020h) al PIC esclavo y maestro.

Configuración:

PIC Maestro:
21h: Máscara de interrupción (habilitar entrada IR2 – esclavo)
20h: Mandar comandos (EOI no específico OCW2)

PIC esclavo:
A1h: Máscara de interrupción (habilitar entrada IR0 – RTC)
A0h: Mandar comandos (EOI no específico OCW2)

Ejemplo:
IN AL, 021h ; Leo máscara interrupción del PIC maestro
AND AL, 0FBh ; Pongo a cero (habilito) entrada del PIC esclavo
OUT 021h,AL ; Guardo el valor en la máscara

Monografias.com

Práctica 3
Práctica 3: Interacción de Ensamblador con el Lenguaje C

Hacer un programa en C y una librería intermedia que llame al driver anterior y reproduzca canciones escritas en un fichero.

Opcional: Tener un teclado y poder reproducir y guardar canciones.
Driver
INT 61H

Generador Notas musicales por TMR y RTC
Practica 3
Programa en C para leer canciones de fichero
Librería en ASM que hace de interfaz entre C y el driver

Monografias.com

Paso de parámetros de C a ASM
Paso de parámetros de C a ASM

El paso de parámetros se realizará por lo PILA.

int funcion_asm(char param1, int param2, long int param3)

; Lectura de Param2

PUSH BP ; BP como índice
MOV BP,SP
MOV AX, SS:[BP+8] ; AX=Param2

POP BP ; equilibrado PILA
RET
+2
+2
+2
+2

Monografias.com

Paso de parámetros de ASM a C
Paso de ASM a C

El paso de parámetros se realiza por DX:AX

int funcion_asm(int param1, int param2, int param3)

Retorno de 16 bits en AX
Retorno de 32 bits en DX:AX

Ejemplo:

Un entero se devuelve en AX
Un puntero se devuelve en DX (segmento):AX (offset)

; Función en Ensamblador
PUSH BP
MOV BP,SP
MOV AX, [BP+8] ; AX = Param2
POP BP
RET

Esta función devuelve el valor de PARAM2 ( { return param2 } )

Monografias.com

Paso de parámetros de C a ASM
Ejemplo implementación de la práctica:

Fichero 1: Programa en C

#include “libdriver.h”

void main() {
int id;

id = driver_identificador(); // obtener el identificador
if (id!=0xEE01) {
printf(“Errorn”); // si no es 0xEE01 salgo
else {
driver_playnota(1); // toco una nota hasta que pare
while (driver_estado() == 1) ;
}

}

Monografias.com

Paso de parámetros de C a ASM
fichero 2 : libdriver.h (Usado para compilar en C)

int driver_identificador();
void driver_playnota(unsigned int);
int driver_estado() ;
fichero 3 : libdriver.asm (Librería puente)

_LIBDRIVER segment
assume cs:_LIBDRIVER

db 10h DUP (?)
(… código de las funciones —)

_LIBDRIVER ends
public _driver_identificador
public _driver_playnota
public _driver_estado
end

Monografias.com

Paso de parámetros de C a ASM
;————————————
; int driver_identificador()
;————————————

_driver_identificador PROC FAR
push bp

mov ah,0 ; función identificación del driver
int 61h ; Resultado en AX
pop bp

ret ; En AX esta el valor de indentificacion

_driver_identificador ENDP

(*) PUSH BP, POP BP no haría falta dado que en este caso no tenemos que acceder a la pila para buscar parámetros. Es una función que solo devuelve un valor

(**) Es necesario poner “_” para que C pueda encontrar las funciones de la librería.

Monografias.com

Paso de parámetros de C a ASM

; int driver_playnota(int nota)
; stack-4 -> offset retorno
; stack-2 -> segmento retorno (Si lo definimos como NEAR no se guarda el CS)
; stack -> nota
; por AX devuelvo el resultado

_driver_playnota PROC FAR
push bp
mov bp,sp ; para acceder a la PILA

mov ax,ss:[bp+6] ; saco la posición a leer de la PILA
mov ah,2 ; función Play Nota (En AL está la NOTA)
int 61h

xor al,al ; En AH =0 si no hay Error
pop bp
ret
_driver_playnota ENDP

Monografias.com

Paso de parámetros de C a ASM
Compilación:

testc.exe: testc.c libdriver.asm

tcc -v -ml -Ic:compilatcinclude -Lc:compilatclib testc.c libdriver.asm

Programa en C
Librería ASM
Compilador de C
Depuración y modo FAR

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter