practica 03 1x2w

Upload: cristobal-lopez

Post on 01-Mar-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Practica 03 1x2w

    1/6

    Practica 3: El teclado del PC

    Gustavo Romero Lopez

    Arquitectura y Tecnologa de Computadores

    13 de marzo de 2014

    Gustavo Romero Lopez Practica 3: El teclado del PC 1 / 11

    Objetivos

    Objetivos:

    Recordar el funcionamiento de las interrupciones.

    Describir el funcionamiento del teclado.

    Crear una controlador de teclado mediante manejo deinterrupciones en varias fases:

    1 Mnimo: que imprima cualquier cosa al pulsar una tecla.2 Otro que imprima los codigos de las teclas pulsadas.3 Uno ultimo capaz de escribir codigos ASCII.

    Fuentes:

    Hardware:http://www.seasip.info/VintagePC/ibm_1391406.html

    Software:http://wiki.osdev.org/Babystep5

    Recursos x86:

    Arquitectura

    Lenguaje ensamblador

    Gustavo Romero Lopez Practica 3: El teclado del PC 2 / 11

  • 7/26/2019 Practica 03 1x2w

    2/6

  • 7/26/2019 Practica 03 1x2w

    3/6

    Funcionamiento del teclado

    El teclado de los PCs no esta hecho para generar directamenteASCII sino un codigo de busqueda, en realidad dos: uno que seemite al pulsar una tecla y otro al soltarla. Si el codigo de lapulsacion de una tecla es n, al soltarla se emite el codigo n+128o n+0x80.El controlador del teclado debe traducir el codigo de cada pulsaciona su correspondiente valor en ASCII. Las teclas de control debenser tenidas en cuenta porque modifican el caracter final obtenido.Ejemplo de como obtener la letra A mayuscula:

    1 Pulse la tecla Mayus, con lo que se emite el codigo 0x2a.

    2

    Pulse la tecla A

    con lo que se emite el codigo 0x1e.3 Suelte la tecla A y se emite 0x9e = 0x1e + 0x80.

    4 Suelte la tecla Mayus y se emite el codigo 0xae = 0x2a +0x80.

    5 El controlador calcula el codigo ASCII de la A, 0x41.

    Gustavo Romero Lopez Practica 3: El teclado del PC 5 / 11

    Cambio de manejador de interrupcion y fin de interrupcion

    Para cambiar el manejador de interrupcion hemos de cambiar ladireccion de salto almacenada en el vector de interrupcion.Recuerde que la tabla se almacena al principio de la memoria.Primero el desplazamiento y luego el segmento del manejador. Lainterrupcion de teclado es la 0x09.

    16 cli # de s ha b il it a r i n te r r up c io n e s17 mov $0x09 , %bx # in te rr up ci o n h a rd w ar e d el t e cl a do18 shl $2 , %bx # bx = bx * 4 , dir ecc i o n d el v e ct or i nt .19 m o vw $ c o nt r ol a d or , ( % bx ) # c a m bi a r e l d e s p la z a m ie n t o l a i n t . t e c la d o20 movw %ds , 2( % bx ) # c amb iar el seg me nto de la int . t ecla do21 sti # ha bil it ar in t e rr u pc i o ne s

    Cada vez que ejecuta el manejador de una interrupcion hemos deemitir la orden de fin de interrupcion (EOI) para que el controladorde interrupciones 8259 sepa que ya ha sido atendida. Para ello es

    necesario escribir el valor 0x20 en el puerto 0x20.35 mov $0x20 , %al # c o d i g o E O I36 out %al , $0x20 # enviar EOI

    Gustavo Romero Lopez Practica 3: El teclado del PC 6 / 11

  • 7/26/2019 Practica 03 1x2w

    4/6

    Makefile

    1 S HE LL = / b i n / b as h

    2

    3 A SM = $ ( w il dc ar d *. s )

    4 O BJ = $ ( A S M :. s = . o)

    5 B IN = $ ( O B J :. o = . bi n )

    6

    7 all : qemu

    8

    9 c l e a n :

    10 $ ( RM ) - rf v $( B IN ) $ ( OB J ) co re . * *~

    11

    12 q em u : $ ( B IN )

    13 k il la ll - q q em u - s ys te m - i 38 6 | | e ch o " n o th in g t o k il l "

    14 q emu - s ys te m - i 38 6 - fd a $ < - s & > / d ev / n ul l &15

    16 %. bin : %.o

    17 $ ( LD ) - - o fo rm at b in ar y - T te xt 0 x 7 c0 0 $ < - o $@

    Gustavo Romero Lopez Practica 3: El teclado del PC 7 / 11

    El mas sencillo: basico.s I

    1 . code 16 # c o d ig o de 1 6 b it s23 . text # secci o n d e c o d i g o4 . g lo bl _s ta rt # pu nt o d e e nt ra da56 _ s t a r t :7 x o r %a x , %a x8 mov %ax , %ds # ds = 09 m ov %ax , %ss # ss = 0 | pila en

    10 m ov $ 0x 9c0 0 , %sp # s p = 0 x0 9c 00 = 0 x 7c 00 + 0 x 200 0 | ss : sp1112 m ov $ 0x b8 00 , %a x # 0 xb 80 0 - -> ax |13 mov %ax , %es # ax - -> es | video --> es : di = 0 xb800014 xor %di , %di # 0 -- > di |1516 cli # de s ha b il it a r i n te r r up c io n e s17 mov $0x09 , %bx # in te rr up ci o n h a rd w ar e d el t e cl a do18 shl $2 , %bx # bx = bx * 4 , dir ecc i o n d el v e ct or i nt .19 m o vw $ c o nt r ol a d or , ( % bx ) # c a m bi a r e l d e s p la z a m ie n t o l a i n t . t e c la d o20 movw %ds , 2( % bx ) # c amb iar el seg me nto de la int . t ecla do21 sti # ha bil it ar in t e rr u pc i o ne s2223 s t o p :

    24 hlt # hace falta ?25 j mp stop # bucle vac o2627 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #2829 c o n t r o l a d o r :

    Gustavo Romero Lopez Practica 3: El teclado del PC 8 / 11

  • 7/26/2019 Practica 03 1x2w

    5/6

    El mas sencillo: basico.s II

    30 in $0x60 , %al # leer c o d ig o d e t ec la p ul s ad a

    3132 mov $0x0f , %ah # c olor : bla nco sobre negro33 stosw # im pri mi r car ac ter : %ax --> %es :( % di ++)3435 mov $0x20 , %al # c o d i g o E O I36 out %al , $0x20 # enviar EOI3738 i ret # volver de la in te rr up ci o n3940 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #4142 . org 510 # posi ci o n de m emor ia 51043 . word 0 xAA55 # marca del secto r de ar ra nqu e4445 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    Gustavo Romero Lopez Practica 3: El teclado del PC 9 / 11

    2a version: impresion de codigos numericos

    1 Cree un nuevo directorio con una copia de

    basico.s y Makefile.2 Modifique basico.s de forma que se imprima el

    codigo numerico que se obtiene al pulsar cada

    tecla. Recuerde que al liberarla tambien se emite

    otro codigo diferente.

    Gustavo Romero Lopez Practica 3: El teclado del PC 10 / 11

  • 7/26/2019 Practica 03 1x2w

    6/6

    3a version: impresion de caracteres ASCII

    1 Cree un nuevo directorio con una copia debasico.s y Makefile.

    2 Modifique basico.s de forma que obtenga el

    codigo de cada pulsacion, lo traduzca al

    caracter ASCII equivalente e imprima dicho

    caracter.

    Gustavo Romero Lopez Practica 3: El teclado del PC 11 / 11