UNIVERSIDAD TECNOLOGICA NACIONAL

Facultad Regional Buenos Aires

Departamento de Electrónica

Técnicas Digitales III - Trabajo práctico número 2

Ejercicio Número 1:

Escribir un programa que pase a modo protegido, borre la pantalla y luego muestre en el extremo superior izquierdo de la pantalla las teclas que se hayan presionado utilizando la interrupción del teclado (IRQ1).

Si se aprieta más de una tecla simultáneamente deberán mostrarse todas las teclas que se apretaron (para ello tener en cuenta los códigos de MAKE y BREAK).

En el caso de caracteres no imprimibles mostrar el nombre de la tecla entre corchetes. Por ejemplo: [Ctrl Izq]x o bien [Alt Der][F11].

Como la cantidad de caracteres a mostrar en pantalla es variable, debido a la diferente cantidad de teclas a mostrar, después de mostrar la/s tecla/s presionadas, mostrar diez espacios para borrar cualquier posible texto previo.

Apretando la tecla Escape el programa deberá borrar la pantalla nuevamente y volver a modo real.

Los códigos de las teclas para la configuración de EEUU son:

Tecla        Make  Break               Tecla   Make  Break

Backspace     0E    8E                  F1      3B    BB
Caps Lock     3A    BA                  F2      3C    BC
Enter         1C    9C                  F3      3D    BD
Esc           01    81                  F4      3E    BE
Left Alt      38    B8                  F7      41    C1
Left Ctrl     1D    9D                  F5      3F    BF
Left Shift    2A    AA                  F6      40    C0
Num Lock      45    C5                  F8      42    C2
Right Shift   36    B6                  F9      43    C3
Scroll Lock   46    C6                  F10     44    C4
Space         39    B9                  F11     57    D7
Sys Req (AT)  54    D4                  F12     58    D8
Tab           0F    8F

            Teclas numéricas           Make   Break

            Keypad 0  (Ins)             52      D2
            Keypad 1  (End)             4F      CF
            Keypad 2  (Down arrow)      50      D0
            Keypad 3  (PgDn)            51      D1
            Keypad 4  (Left arrow)      4B      CB
            Keypad 5                    4C      CC
            Keypad 6  (Right arrow)     4D      CD
            Keypad 7  (Home)            47      C7
            Keypad 8  (Up arrow)        48      C8
            Keypad 9  (PgUp)            49      C9
            Keypad .  (Del)             53      D3
            Keypad *  (PrtSc)           37      B7
            Keypad -                    4A      CA
            Keypad +                    4E      CE

      Tecla   Make  Break             Tecla   Make  Break

        A      1E    9E                 N      31    B1
        B      30    B0                 O      18    98
        C      2E    AE                 P      19    99
        D      20    A0                 Q      10    90
        E      12    92                 R      13    93
        F      21    A1                 S      1F    9F
        G      22    A2                 T      14    94
        H      23    A3                 U      16    96
        I      17    97                 V      2F    AF
        J      24    A4                 W      11    91
        K      25    A5                 X      2D    AD
        L      26    A6                 Y      15    95
        M      32    B2                 Z      2C    AC

      Tecla   Make  Break             Tecla   Make  Break

        1      02    82                 -      0C    8C
        2      03    83                 =      0D    8D
        3      04    84                 [      1A    9A
        4      05    85                 ]      1B    9B
        5      06    86                 ;      27    A7
        6      07    87                 '      28    A8
        7      08    88                 `      29    A9
        8      09    89                 \      2B    AB
        9      0A    8A                 ,      33    B3
        0      0B    8B                 .      34    B4
                                        /      35    B5

Teclas de control         Make            Break

Alt-PrtSc (SysReq)        54              D4
Ctrl-PrtSc                E0 37           E0 B7
Enter                     E0 1C           E0 9C
PrtSc                     E0 2A E0 37     E0 B7 E0 AA
Right Alt                 E0 38           E0 B8
Right Ctrl                E0 1D           E0 9D
Shift-PrtSc               E0 37           E0 B7
/                         E0 35           E0 B5
Pause                     E1 1D 45 E1 9D C5  (sin typematic)
Ctrl-Pause (Ctrl-Break)   E0 46 E0 C6        (sin typematic)

- Las teclas marcadas como "sin typematic" generan una cadena
  de bytes sin código para "break" (ya que los códigos de
  break son parte del código de make).

                 Modo Normal o
               Shift con Numlock
Tecla            Make    Break       Con Numlock encendido
                                      Make          Break
Del              E0 53   E0 D3     E0 2A E0 53   E0 D3 E0 AA
Down arrow       E0 50   E0 D0     E0 2A E0 50   E0 D0 E0 AA
End              E0 4F   E0 CF     E0 2A E0 4F   E0 CF E0 AA
Home             E0 47   E0 C7     E0 2A E0 47   E0 C7 E0 AA
Ins              E0 52   E0 D2     E0 2A E0 52   E0 D2 E0 AA
Left arrow       E0 4B   E0 CB     E0 2A E0 4B   E0 CB E0 AA
PgDn             E0 51   E0 D1     E0 2A E0 51   E0 D1 E0 AA
PgUp             E0 49   E0 C9     E0 2A E0 49   E0 C9 E0 AA
Right arrow      E0 4D   E0 CD     E0 2A E0 4D   E0 CD E0 AA
Up arrow         E0 48   E0 C8     E0 2A E0 48   E0 C8 E0 AA

Key              Con Shift izquierdo           Con Shift Derecho
                 Make          Break          Make          Break
Del           E0 AA E0 53   E0 D3 E0 2A    E0 B6 E0 53   E0 D3 E0 36
Down arrow    E0 AA E0 50   E0 D0 E0 2A    E0 B6 E0 50   E0 D0 E0 36
End           E0 AA E0 4F   E0 CF E0 2A    E0 B6 E0 4F   E0 CF E0 36
Home          E0 AA E0 47   E0 C7 E0 2A    E0 B6 E0 47   E0 C7 E0 36
Ins           E0 AA E0 52   E0 D2 E0 2A    E0 B6 E0 52   E0 D2 E0 36
Left arrow    E0 AA E0 4B   E0 CB E0 2A    E0 B6 E0 4B   E0 CB E0 36
PgDn          E0 AA E0 51   E0 D1 E0 2A    E0 B6 E0 51   E0 D1 E0 36
PgUp          E0 AA E0 49   E0 C9 E0 2A    E0 B6 E0 49   E0 C9 E0 36
Right arrow   E0 AA E0 4D   E0 CD E0 2A    E0 B6 E0 4D   E0 CD E0 36
Up arrow      E0 AA E0 48   E0 C8 E0 2A    E0 B6 E0 48   E0 C8 E0 36
/             E0 AA E0 35   E0 B5 E0 2A    E0 B6 E0 35   E0 B5 E0 36

Para facilitar el debugging del programa, hacerlo primero en modo real y una vez que funcione, pasarlo a modo protegido.

Ejercicio Número 2:

Hacer un programa .COM que pase a modo protegido, ponga el límite de los segmentos DS y ES a 1MB, luego vuelva a modo real y llene todos los bytes desde el inicio del programa + 64KB hasta el final de la memoria convencional con el patrón 55 AA usando direccionamiento de 32 bits, sin modificar ningún registro de segmento (lo que demuestra que los segmentos en modo real conservan el mismo límite que tenían en modo protegido).

Para averiguar la cantidad de kilobytes de memoria convencional, utilizar la palabra que se encuentra en 40h:13h.

Ejercicio Número 3:

Realizar un programa que tenga dos tareas: una normal y una virtual 8086. La tarea 8086 deberá mostrar un contador decimal de 10 dígitos en el extremo superior izquierdo de la pantalla a toda velocidad. La tarea normal sólo se utilizará al principio y final del programa.

El programa deberá terminar y regresar a modo real al presionar una tecla.


En los tres programas, indicar mediante un mensaje en pantalla y terminar la ejecución si el programa ya estaba corriendo en modo protegido (por ejemplo en una ventana de DOS en Windows). Además se deberán deshabilitar todas las interrupciones que no se usen y volverlas a habilitar al salir del programa.

Para aprobar el trabajo práctico, los tres ejercicios deben funcionar correctamente en la PC y el grupo deberá explicar cómo funcionan los programas.

Make your own free website on Tripod.com