Unidad 4 Programación de dispositivos - JosueGGC/Lenguajes-de-Interfaz GitHub Wiki
4.1 El Buffer de video en modo texto.
Un buffer (o búfer en español) es un espacio de memoria dedicado al almacenamiento temporal de información, en el cual se guardan datos durante el tiempo de espera antes de ser procesados. El ejemplo más común de un buffer es el streaming, que es la ejecución de audio o video sin descargarlo a la computadora o dispositivo en el que se quiere utilizar, ya que de no utilizar un búfer de video la posibilidad de que se corte la reproducción por un problema en el ancho de banda es mayor.
El buffer de video en modo texto también permite una programación más sencilla de la presentación de texto en la pantalla y puede ser útil para la creación de interfaces amigables con el usuario.
4.2 Acceso a discos en lenguaje ensamblador.
El acceso a discos desde ensamblador es complejo y requiere que se entiendan varios conceptos para poder utilizarlo.
El primero es que para poder escribir o leer desde un disco, se tiene que realizar en bloques de bytes y no byte por byte ya que el acceso implica movimientos mecánicos del disco y que la información en él se almacena por sectores. El proceso de acceso a disco no es llevado a cabo por la UCP, ésta solo envía comandos a la interfaz que maneja la unidad de disco, la cual se encarga de leer o escribir información del área de acceso directo a memoria o DMA (Direct Memory Access), la cual es un espacio de memoria especial para estos procesos.
El segundo concepto importante es cómo está constituido un disco de almacenamiento. Los discos están conformados físicamente por discos a los que se les denomina caras, los cuales están divididos en anillos concéntricos a los cuales se les denomina pistas (track) y está dividido en un numero determinado de sectores, los cuales son divisiones de las pistas
Forma de acceder a los discos en ensamblador
Los datos se registran sobre la superficie del disco en una serie de circunferencias concéntricas llamadas pistas (track).Varias pistas , una por cada cara del disco (generalmente 2) , componen un clúster. cada pista esta divida en porciones iguales llamadas sectores. un sector es la unidad básica del almacenamiento en un disco. El tamaño de un sector se mide en bytes y depende de las características del disco. Un ejemplo de las 3 rutinas son : que permiten lectura y escritura absoluta de sectores, así como la determinación del espacio libre disponible en un disco.
Las rutinas son las siguientes:
-
_AbsoluteRead: La cual transfiere el contenido de un o más sectores del disco al buffer especificado, y acceder directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.
-
_AbsoluteWrite: Transfiere el contenido del buffer especificado a uno o más sectores de disco, y acceder directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código de error.
-
_FreeDiskSpace: Devuelve en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de acarreo.
4.3 Programación del puerto seria.
La programación del puerto serie en lenguaje ensamblador se utiliza para permitir la comunicación entre un sistema informático y dispositivos externos a través de un puerto serie . Este proceso implica la manipulación de los registros de control del puerto para configurar la velocidad de transmisión, el control de flujo y otros parámetros de comunicación. En lenguaje ensamblador, se pueden utilizar instrucciones específicas para acceder a la memoria y los registros, y así controlar la comunicación a través del puerto serie.
Por ejemplo, se pueden utilizar instrucciones de entrada/salida específicas para leer o escribir datos en los registros del puerto serie, y así enviar y recibir información desde y hacia dispositivos externos. Es importante tener en cuenta que la programación del puerto serie en lenguaje ensamblador requiere un conocimiento detallado de la arquitectura del sistema y de los registros de control del puerto serie en particular.
Se pueden utilizar diversas instrucciones específicas para acceder a los registros del puerto y configurar la velocidad, bits de datos, bits de parada, paridad, entre otros parámetros. Una vez configurado el puerto, se pueden utilizar instrucciones de entrada y salida para leer y escribir datos desde y hacia el puerto serial.
Por lo general, se usan interrupciones para comunicarse con el puerto serial. Cuando el puerto recibe datos, se genera una interrupción que notifica al procesador. Luego se pueden leer los datos desde los registros del puerto serial mediante la utilización de instrucciones específicas, y procesarlos según sea necesario. Del mismo modo, se pueden enviar datos desde el procesador a través del puerto serial utilizando instrucciones específicas, lo que permite comunicarse con dispositivos externos.
4.4 Programación del puerto paralelo.
Antes de utilizar el puerto paralelo, es importante comprender que está compuesto por los siguientes tipos de pines:
- Pines de estado: Proporcionan información al sistema, al igual que los pines de control.
- Pines de datos: Son los más importantes, ya que transmiten información crucial utilizada para mostrar las salidas de datos.
En lenguaje ensamblador, se puede leer un dato del puerto mediante la instrucción IN, o escribir un dato en el puerto con la instrucción OUT. En ambos casos, el registro AL debe participar activamente en la instrucción, ya sea como fuente (en operaciones de escritura) o como destino (en operaciones de lectura) del dato. A continuación, se presentan los siguientes casos:
- OUT DX, AL: Transfiere el contenido del registro AL al puerto DX.
- IN AL, DX: Transfiere el contenido del puerto DX al registro AL.
Es importante destacar que el número del puerto sobre el cual se realizará la transferencia de datos debe estar especificado en el registro DX, a excepción de los casos en los que el número del puerto es inferior a 255 (FFh), en los cuales la instrucción de lectura o escritura puede referirse directamente al puerto.
La programación del puerto paralelo en lenguaje ensamblador es la opción más sencilla en comparación con otras alternativas de entrada y salida de datos.
4.5 Programación híbrida.
Es una técnica que combina el uso del lenguaje ensamblador con lenguajes de alto nivel , creando programas que aprovechan las ventajas de ambos enfoques. Esta técnica permite beneficiarse de la velocidad y bajo nivel de programación que ofrece el lenguaje ensamblador, mientras se facilita la programación utilizando lenguajes de alto nivel.
Para implementar esta técnica , se debe utilizar un compilador que permita integrar ambos lenguajes. Se pueden crear rutinas en lenguaje ensamblador que puedan ser invocadas desde un programa en un lenguaje de alto nivel , lo que aporta las ventajas de ambos enfoques. Se pueden utilizar instrucciones específicas de ensamblador para acceder a hardware y memoria, lo que permite una mayor flexibilidad en la programación de dispositivos y sistemas incrustados.
La programación híbrida puede ser útil en diversas situaciones. Por ejemplo, se puede utilizar código ensamblador para optimizar partes críticas de un programa, como bucles o algoritmos intensivos en cálculos. Además, el ensamblador puede ser útil para interactuar con hardware específico o realizar operaciones que no están disponibles directamente en el lenguaje de alto nivel.
4.6 Programación del puerto USB.
El Bus Universal en Serie (USB) es un estándar industrial que define los cables, conectores y protocolos utilizados para la conexión, comunicación y suministro de energía a dispositivos y periféricos. Fue desarrollado por empresas con el objetivo de unificar la forma de conectar periféricos a los equipos. Aunque la versión 1.0 del estándar se publicó en 1996, no fue hasta la especificación 1.1 en 1998 que se comenzó a utilizar ampliamente.
La programación en ensamblador del puerto USB tiene como principales objetivos optimizar el rendimiento de los periféricos y aprovechar al máximo sus capacidades, además de permitir la creación de nuevos dispositivos. El puerto USB se puede utilizar para trabajar con dispositivos externos.