Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TECNOLOGICO SUPERIOR
DE LAS CHOAPAS
Semestre: 6 Grupo: B
11 DE MAYO DE 2017
INDICE
4.1 El Buffer de video en modo texto ...................................................................... 2
4.1.1 Escritura directa en el buffer de video ......................................................... 4
4.1.2 Ejemplos en modo texto .............................................................................. 4
4.2 Acceso a disco en lenguaje ensamblador ......................................................... 5
4.2.1 Particiones del DOS .................................................................................... 6
4.2.2 Parmetros absolutos de un disco duro ...................................................... 6
4.2.3 Acceso a dispositivos de almacenamiento .................................................. 7
4.2.3 Acceso a disco usando lenguaje ensamblador ........................................... 7
4.3 Puerto ................................................................................................................ 9
4.3.1 Puerto Fsico ............................................................................................... 9
4.3.2 Puerto Lgico ............................................................................................ 11
4.4 Programacin del puerto serial ........................................................................ 11
4.4.1 Estndar RS 232 ....................................................................................... 13
4.4.2 Tipos de conectores y cables .................................................................... 14
4.4.3 Explicacin de los registros ....................................................................... 15
4.4.4 Abrir un canal asociado a un puerto serie ................................................. 16
4.4.5 Modificar los parmetros de transmisin ................................................... 17
4.4.6 Monitorizacin de eventos ........................................................................ 19
4.4.7 Escribir en el puerto serie ......................................................................... 19
4.4.8 Esperar a que haya algo que leer ............................................................. 20
4.4.9 Leer desde el puerto serie ........................................................................ 21
4.5 Programacin del puerto paralelo ................................................................... 22
4.5.1 Conector del puerto paralelo ..................................................................... 26
4.6 Programacin hibrida ...................................................................................... 27
4.6.1 Operadores ............................................................................................... 28
4.7 Programacin del puerto USB ......................................................................... 30
CONCLUSIONES.................................................................................................. 31
BIBLIOGRAFIA ..................................................................................................... 32
PROGRAMACION DE DISPOSITIVOS
4.1 El Buffer de video en modo texto
Se llama modo texto a cualquier modo de vdeo de un ordenador en el que el
contenido de la pantalla se representa internamente en trminos de caracteres
textuales en lugar de pxeles individuales.
Las ventajas de los modos de texto respecto a los grficos incluyen el menor
consumo de memoria y la ms rpida manipulacin de pantalla. Adems, las
aplicaciones en modo texto tienen unos requisitos de ancho de banda relativamente
bajos en uso remoto. Una desventaja obvia del modo texto es la restriccin del
contenido de pantalla, que lo hace inviable para muchos tipos de aplicaciones.
Una caracterstica importante de los programas en modo texto es que asumen un
ancho constante de las fuentes, donde cada carcter tiene la misma anchura en
pantalla, lo que permite mantener fcilmente la alineacin vertical cuando se
muestran caracteres semi-grficos.
La distincin entre los programas en modo texto y grfico puede a veces ser difusa,
especialmente en ordenadores con tarjetas VGA, debido a que muchos programas
en modo texto recientes llevaron al extremo las posibilidades de dicho hardware
manipulando la controladora de vdeo. Por ejemplo, redefinan el juego de
caracteres para crear caracteres semi-grficos a medida, e incluso simulaban un
curso de ratn grfico redefiniendo la apariencia de los caracteres sobre los que
dicho cursor quedaba en cada momento. Tambin pueden usarse estas tcnicas
para videojuegos 2D que necesiten aprovechar la mayor velocidad de manipulacin
de los modos de texto respecto a los grficos. Muchos programas modernos con
interfaz grfica simulan el estilo de los programas en modo texto, especialmente
cuando es importante preservar la alineacin vertical del texto, por ejemplo, durante
la programacin. Existen tambin componentes software que emulan modos de
texto, tales como los emuladores de terminal o la consola de Windows.
Bfer de vdeo. Fsicamente se encuentra ubicada en la tarjeta de vdeo, pero forma
parte de la memoria RAM del PC, aunque su acceso es mucho ms lento que sta.
Aqu se almacenan los datos que posteriormente sern visualizados en el monitor.
Rutina_FreeDiskSpace: Devuelven
en DX:AX el espacio libre en disco (en
Kb). En caso de error, se enciende el
bit de acarreo. (Scribd, s.f.)
4.3 Puerto
Es una interfaz a travs de la cual se pueden enviar y recibir los diferentes tipos de
datos.
La interfaz puede ser de tipo fsica (hardware) o puede ser a nivel lgico o de
software, en cuyo caso se usa frecuentemente el trmino puerto lgico (por ejemplo,
los puertos de redes que permiten la transmisin de datos entre diferentes
computadoras).
Se denomina puerto lgico a una zona o localizacin de la memoria de acceso
aleatorio (RAM) de la computadora que se asocia con un puerto fsico o un canal de
comunicacin, y que proporciona un espacio para el almacenamiento temporal de
la informacin que se va a transferir entre la localizacin de memoria y el canal de
comunicacin. (wikipedia, s.f.)
Puerto Serie: Transmite un bit a la vez, e.g. RS-232. Un puerto serie o puerto serial
es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por
computadoras y perifricos, donde la informacin es transmitida bit a bit enviando
un solo bit a la vez, en contraste con el puerto paralelo que enva varios bits
simultneamente.
Baud Rate Divisor High (BRDH): Velocidad del canal, parte alta.
Interrupt Enable Register (IER): Activar o desactivar las interrupciones para
el puerto COM.
Registro base+2:
Registro base+4:
Registro base+5:
Registro base+6:
Modem Status Register (MSR): Muestra el estado del Modem.
Pin Funcin
TXD (Transmitir Datos)
RXD (Recibir Datos)
DTR (Terminal de Datos Listo)
DSR (Equipo de Datos Listo)
RTS (Solicitud de Envo)
CTS (Libre para Envo)
DCD (Deteccin de Portadora)
Las seales TXD, DTR y RTS son de salida, mientras que RXD, DSR, CTS y DCD
son de entrada. La masa de referencia para todas las seales es SG (Tierra de
Seal). Finalmente, existen otras seales como RI (Indicador de Llamada), y otras
poco comunes que no se explican en este artculo por rebasar el alcance del mismo.
Numero de Pin Seal Descripcin E/S
En DB-25 En DB-9
1 1 - Masa chasis -
2 3 TxD Transmit Data S
3 2 RxD Receive Data E
4 7 RTS Request To Send S
5 8 CTS Clear To Send E
6 6 DSR Data Set Ready E
7 5 SG Signal Ground -
8 1 CD/DCD (Data) Carrier Detect E
15 - TxC(*) Transmit Clock S
17 - RxC(*) Receive Clock E
20 4 DTR Data Terminal Ready S
22 9 RI Ring Indicator E
24 - RTxC(*) Transmit/Receive Clock S
Stop: Indica el nmero de bits de stop que enviar (o esperar) del puerto. Lo
normal es poner un 0 en este bit para conseguir un bit de stop. Pero si ponemos un
1, el canal usar 1.5 bits de stop si el nmero de bits de la palabra (configurada en
Nm.) es de 5. En caso de que sean ms de 5, se usaran 2 stop bits. Puede que en
determinados momentos nos sea de utilidad, pero yo lo nico que veo es que enva
10 bits en lugar de 9, cosa que implica ms tiempo en l envi, as que siempre
ponemos un 0 (1 stop bit).
Paridad: Indica si hay paridad en la comunicacin serial. Con un 0 le diremos que
nos queremos paridad, y con un 1 que s. La paridad es una manera de detectar
errores, pero debemos programar nuestro programa para que lo detecte. As que
de momento ponemos un 0.
Tipo: Este bit nos indicar el tipo de paridad que vamos a usar. Con un 0 le
indicaremos que vamos a mirar la paridad de modo impar, mientras que con 1
miraremos la paridad de modo par.
Stick: Indica el nivel que usaremos para la paridad, si ponemos un 0, contaremos
el nmero de 1 para la paridad. Y si ponemos un 1 contaremos el nmero de 0 para
la paridad.
Break: Fuerza un corte de la comunicacin. Si lo dejamos a 0 no pasar nada, pero
si lo ponemos a i cortamos la comunicacin y forzamos la salida a 0.
DLAB: Bit interno, de uso no es decisivo. Lo que hace es configurar una vez el
puerto poniendo a 1 este bit, configurar la velocidad (los 2 registros) y luego volver
a configurar el puerto poniendo un 0. (El oraculo, s.f.)
De todos los valores que incluye la estructura DCB, de momento slo nos
preocuparemos por unos pocos:
1. DWORD BaudRate: velocidad en baudios. Este parmetro puede tener
los siguientes valores: CBR_110, CBR_300, CBR_600, CBR_1200,
CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200,
CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000 y
CBR_256000.
2. BYTE ByteSize: tamao de los datos en bits. Tradicionalmente 7 u 8.
3. BYTE Parity: valor de paridad. Se admiten los valores EVENPARITY,
para paridad par; MARKPARITY; NOPARITY, para no paridad y
ODDPARITY, para paridad impar.
4. BYTE StopBits: Bits de stop. Admite los valores ONESTOPBIT, 1 bit de
stop; ONE5STOPBITS, 1.5 bits de stop y TWOSTOPBITS, 2 bits de stop.
5. DWORD fBinary:1 Una bandera, en un campo de bits, que indica el
modo de transmisin: binario o texto. 1 para modo binario, 0 para modo
texto. La diferencia es que en modo texto se verifica la recepcin del
carcter EOF, que detiene la transmisin.
6. DWORD fAbortOnError:1 Otra bandera que indica si interrumpe la
transmisin o recepcin en caso de error. 1 para interrumpir, 0 para no
interrumpir.
Una vez que hemos actualizado la estructura de datos podemos configurar el puerto
envindosela mediante la funcin SetCommState.
m_dcb.BaudRate = CBR_115200;
m_dcb.ByteSize = 8;
m_dcb.Parity = NOPARITY;
m_dcb.StopBits = ONESTOPBIT;
m_dcb.fBinary = FALSE;
m_dcb.fAbortOnError = TRUE;
SetCommState(idComDev, &dcb);
Por ltimo, podemos modificar los timeouts. Se trata de unos intervalos de tiempo
definidos para que las rutinas de lectura y escritura distingan entre diferentes
paquetes de datos.
Generalmente, las comunicaciones por el puerto serie se harn por bloques, de los
que no siempre conoceremos el tamao. Estos tiempos nos permiten detectar
divisiones entre bloques, de modo que el API las detecta y pone a nuestra
disposicin la informacin leda.
El sistema calcula dos tiempos, uno para lectura y otro para escritura, en funcin de
ciertos parmetros (que veremos ahora como fijar), y de los caracteres requeridos
o escritos.
Estos tiempos se definen en una estructura COMMTIMEOUTS, y se puede ver el
uso de cada campo en la descripcin de ella.
La eleccin de los tiempos y la necesidad de modificarlos depender del tipo de
comunicacin serie que necesitemos para nuestra aplicacin. Estos tiempos harn
que las operaciones de lectura y escritura puedan terminar antes de que se haya
completado las funciones de lectura o escritura, para los datos indicados. Su uso
es, de todos modos, opcional.
Para modificarlos usaremos la funcin GetCommTimeouts para obtener los
timeouts actuales en una estructura COMMTIMEOUTS. Modificaremos esos
tiempos a nuestro criterior, y los activaremos usando la funcin SetCommTimeouts.
// Leer time-outs actuales:
GetCommTimeouts (hComm, &m_CommTimeouts));
// Establecer timeouts:
SetCommTimeouts (hComm, &m_CommTimeouts));
(Articulos con clase, s.f.)
4.4.6 Monitorizacin de eventos
Podemos especificar qu eventos de los que se pueden producir en el puerto serie
nos interesa procesar o monitorizar. De este modo, el sistema operativo nos
avisar cada vez que se produzca uno de esos eventos.
El modo de especificar los eventos de inters es mediante una mscara, y para
hacerlo usaremos la funcin SetCommMask.
Se pueden especificar varios eventos, pero generalmente nos interesaran slo dos
de ellos, al menos en la aplicacin normal:
1. EV_RXCHAR: se ha recibido un carcter y se a colocado en el buffer de
entrada.
2. EV_TXEMPTY: de ha enviado el ltimo carcter del buffer de salida.
4.4.7 Escribir en el puerto serie
Para enviar caracteres al puerto serie se usa la funcin WriteFile.
Sin embargo, como ya hemos explicado, no basta con enviar los caracteres al
puerto serie, el destinatario puede interrumpir la transmisin si no es capaz de
procesar los datos a la misma velocidad que se los enviamos, de modo que los
datos que intentamos enviar pueden no ser enviados por completo.
Para estar seguros de que enviamos toda la informacin que queremos, usaremos
uno de los parmetros que devuelve la funcin, y que nos dice cuntos caracteres
se han enviado.
Colocando la funcin WriteFile en un bucle, podemos enviar los caracteres que an
estn pendientes hasta que todos hayan sido enviados.
WriteFile puede retornar con valor false si se ha producido un error. Sin embargo,
uno de los errores no es tal, el error ERROR_IO_PENDING en realidad slo nos
informa de que no se ha completado la operacin de escritura. En caso de recibir
ese error, debemos continuar enviado datos al puerto serie.
Si estamos seguros de que el receptor puede procesar los datos enviados, o si
hemos diseado un mecanismo para que el receptor nos informe de que los datos
no han llegado correctamente, podemos ignorar el valor de retorno y el
de iBytesWritten de la funcin WriteFile, y continuar asumiendo que los datos fueron
enviados.
void EscribirSerie(HANDLE idComDev, char *buf)
{
char oBuffer[256]; /* Buffer de salida */
DWORD iBytesWritten;
iBytesWritten = 0;
strcpy(oBuffer, buf);
WriteFile(idComDev, oBuffer, strlen(oBuffer), &iBytesWritten, NULL);
}
En la mayor parte de los casos, y sobre todo cuando somos los responsables de
programar los dos extremos de la comunicacin serie, este modo de trabajar puede
ser suficiente.
Si, por el contrario, el otro extremo de la comunicacin no es responsabilidad
nuestra, puede que debamos depurar algo ms esta funcin.
Podemos usar el valor del parmetro iBytesWriten posterior a la ejecucin para
actualizar el buffer de salida. Indicaremos algn valor de retorno
en EscribirSerie para indicar que la operacin de escritura no ha enviado todos los
caracteres del buffer, y el proceso que la ha invocado debe llamar de nuevo para
completar la transmisin. (Articulos con clase, s.f.)
Ya hemos definido la mscara de eventos que queremos recibir del puerto serie.
Para saber si se ha producido uno de esos eventos tenemos que llamar a la funcin
WaitCommEvent.
Pero, tal como hemos configurado el puerto serie, esta funcin no regresa mientras
no se produzca uno de los eventos que hemos definido. Esto nos impide que nuestro
programa realice otras tareas, como, por ejemplo, enviar informacin al puerto.
En nuestro caso, slo se puede producir un evento, de modo que una funcin
posible para procesarlo es:
do {
ClearCommError(idComDev, &leidos, &cs);
leidos=0;
/* Leer buffer desde puerto serie */
if(cs.cbInQue) {
cad = new char[cs.cbInQue+3]; // Caracteres en buffer, ms retorno de
lnea, ms nulo
ReadFile(idComDev, cad, cs.cbInQue, &leidos, NULL);
ProcesarDatos(cad);
delete[] cad;
}
Sleep(100); // Esperar entre una lectura y otra.
} while(true);
return 0;
}
El tiempo de espera en la funcin Sleep est elegido arbitrariamente, se puede
indicar un tiempo menor, si se necesita una respuesta ms rpida por parte del
programa. Sin embargo, siempre es necesario dejar algn tiempo, para no
sobrecargar la CPU excesivamente.
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
int main()
//las 2 siguientes
while(1)
int input;
//Le pedimos al usuario que introduzca un nmero
scanf("%d", &input);
if(input==-1) break;
outb(input, DATAPORT);
return 0;}
La funcin ioperm() modifica los permisos de acceso a los puertos. Recibe tres
enteros: el primero le indica la direccin del primer puerto cuyos permisos queremos
modificar, el segundo es el nmero de puertos y el tercero debe ser 1 para conceder
el permiso y 0 para denegarlo. De esta manera, la sentencia ioperm(DATAPORT,
3, 1) asigna permiso a 3 puertos, esto es, al de datos, al de estado y al de control.
Al final del programa restablecemos el estado dejando todo como estaba con
ioperm(DATAPORT, 3, 0).
Para conectar y desconectar los dispositivos, as como para que la computadora los
reconozca de manera correcta, es necesario apagar y reiniciar la computadora.
4.6.1 Operadores
Operadores Aritmticos: Pueden emplearse libremente (+), (-), (*) y (/). En este
ltimo caso la divisin es siempre entera. Tambin se admiten los operadores MOD
(resto de la divisin) y SHL/SHR (desplazar a la izquierda/derecha cierto nmero de
bits).
Operadores Lgicos:
Pueden ser el AND, OR, XOR y NOT. Realizan las operaciones lgicas en las
expresiones.
Operadores relacionales:
Operadores de Atributos:
Trabajando con varios segmentos, PTR puede redefinir una etiqueta NEAR de uno
de ellos para convertirla en FAR desde el otro, con objeto de poder llamarla.
(Ramirez, 2013)
CONCLUSIONES
La computadora est compuesta por 2 tipos de puertos, el fsico que comprenden
los hardware que van directamente hacia la placa madre y que comnmente los
conocemos como entradas USB, conector de video VGA, conector de cable
Ethernet, conectores PCI y PCI Express, Conectores ADSL y los lgicos que estn
ubicadas en la memoria de la computadora, estn asociados con un puerto fsico o
un canal de comunicacin (antena para conexin inalmbrica o wifi), los puertos
lgicos ms conocidos son los que encontramos en la barra del URL de nuestro
navegador, HTTP, FTP, HTTPS, SMTP, todos estos tienen en comn el puerto fsico
de red ya que sin este no se podra trabajar con estos puertos. Dentro de los puertos
fsicos se desprenden 2 tipos, el puerto serian es mejor conocido como el VGA y los
mini-DIN que ya casi no son usados y los puertos paralelos que eran usados para
la conexin de impresoras y cables IDE de la placa madre.
BIBLIOGRAFIA
(s.f.). Obtenido de http://www.informaticamoderna.com/El_puerto_serial.htm
(s.f.). Obtenido de http://www.informaticamoderna.com/El_puerto_paralelo.htm
Abre los ojos al ensamblador. (s.f.). Obtenido de
http://www.abreojosensamblador.net/Productos/AOE/html/Pags/Cap08.html
Articulos con clase. (s.f.). Obtenido de
http://articulos.conclase.net/?tema=comunicacion&art=serie&pag=000
Blogspot. (s.f.). Obtenido de http://montoyavelgara-
lenguajes.blogspot.mx/2013/11/acceso-discos-en-lenguaje-
ensamblador.html
cruz, E. d. (08 de mayo de 2012). Scribd. Obtenido de
https://es.scribd.com/doc/92795344/Puertos-fisicos-y-logicos
El oraculo. (s.f.). Obtenido de http://elsoportec.blogspot.mx/2010/10/primer-
problema-configuracion-de-puerto.html
hernandez, P. a. (s.f.). Scribd. Obtenido de
https://es.scribd.com/document/75846730/Unidad-4-Programacion-hibrida-
Pablo-Adrian-Garcia-Hernandez
Prezi. (s.f.). Obtenido de https://prezi.com/8-0txbmqsyfn/copy-of-42-acceso-a-
discos-en-lenguaje-ensamblador/
Ramirez, D. M. (05 de noviembre de 2013). Scribd. Obtenido de
https://es.scribd.com/doc/181614836/Unidad-IV-docx
Scribd. (s.f.). Obtenido de https://es.scribd.com/doc/260040422/4-2-Acceso-a-
Discos-en-Lenguaje-Ensamblador
TeknoPLOF. (s.f.). Obtenido de
http://www.teknoplof.com/2009/11/25/programacion-del-puerto-paralelo/
wikipedia. (s.f.). Obtenido de
https://es.wikipedia.org/wiki/Partici%C3%B3n_de_disco
wikipedia. (s.f.). Obtenido de
https://es.wikipedia.org/wiki/Puerto_(inform%C3%A1tica)