SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

Electronica Digital - Parte II

      3990

Autor: Jnzero
-[ 0x0C ]--------------------------------------------------------------------
-[ Electronica Digital - Parte II ]------------------------------------------
-[ by jnzero  ]-------------------------------------------------------SET-23-




 -= ELECTRONICA DIGITAL O COMO CREARSE UN PENTIUM CON UN SOLDADOR =-
    _____________________________________________________________


           Parte II                                    por jnzero

[..............................................]
Y aquella noche yo estaba celebrando
que hacia doce a~os que no me comia una rosca,
doce a~os sin estar con una mujer,
ni siquiera una shupailla en el pescuezo,
ni un solo beso en la boca,
doce a~os y en solitario,
doce a~os y a palo seco,
doce a~os jugando al cinco contra uno,
por eso aquella noche yo estaba convencido de que iba a triunfar,
de que iba a comerme algo
y me lo comiiii...
vaya si me lo comi...                       
y en mala hora me lo comi,
[...]
y ella se llamaba manolo.                   (Mojinos Escozios) 
[...............................................]



  Weeeeeeeeeeeeeeeee!. Pero que os habeis tomado para tenerle tanto
aprecio a la electronica como para seguir leyendo!. Wow! eso son ganas.
Como recompensa a todos aquellos que se tragaron el tordo del numero
pasado aqui va un regalito.


------------------4. Modulos combinacionales basicos.
                     ===============================

  O la maravilla de la abstraccion.

------------------------------------4.1 Descodificador


                      E
                   ___|____
                  | _____/ |-- z3
             x1 --|        |-- z2
             x0 --| _____  |-- z1
                  |______\_|-- z0

  Imaginaos que habeis estado utilizando numeros 900 hasta decir basta,
desde vuestra casa y sin ningun tipo de precaucion (lo cual no dice mucho
a vuestro favor puesto que mi articulo en SET 21 lo dejaba *muy* claro)
Y claro os entra la paranoia y quereis colocar un sistema de seguridad
en vuestra casa, de tal manera que metais un codigo y os deje pasar y en
caso contrario te salga una TV con el Sanchez Drago dando la co~a (lo cual
espanta al mas pintado). 
Pues con un descodificador puedes hacerlo.

   El funcionamiento del descodificador es sencillo. Tiene 'x'
entradas y '2^x' salidas, luego en el caso de arriba  tenemos 2 entradas
y 4 salidas (es un descodificador 2 a 4).
Lo cachondo del asunto es que metiendo un numero por las entradas
(binario se entiende) la correspondiente salida se pone a 1.

  Ex:
     Queremos que nuestro sistema de 'seguridad' desactive el
programa de Sanchez Drago cuando le metemos un 2.
Esto traducido a binario es '10', luego en las entradas tendremos que poner

x1: 1
x0: 0

ademas de la entrada E (llamada de capacitacion), que es lo que permite
que el circuito vaya bien, luego E=1.

  Asi pues imaginaos el circuito siguiente:

                      E
                   ___|____
                  | _____ /|-- z3------------[DRAGO]
             x1 --|        |-- z2--------------------------[ABRIR
PUERTA]
             x0 --| _____  |-- z1------------[DRAGO]
                  |______\_|-- z0------------[DRAGO]


 Mientras metamos el codigo '10' la puerta se abrira, en caso
contrario, plaf! adios vida social.



------------------------------------4.2 Codificador

  Ahora imaginaos que sois unos enfermos y en vez de poner cuatro
posibles salidas poneis muchas mas. Introducir a pelo 64 o 128 
'1's o '0's seria cuanto menos infernal. 
Que tal si le acoplamos un teclado en el que cada letra tenga su  
correspondiente codificacion binaria? por ejemplo, si pulsamos la
tecla '2' que salga '10'.

  Voila, tenemos un dispositivo que nos permite hacer eso.

                      E
                   ___|____
              x3--|  \ _   |
              x2--|        |-- z1
              x1--|    _   |-- z0
              x0--|__/_____|
  
    Bien, que pasa si metemos un 1 en x3? pues que la salida sera:

z1: 1
z0: 1
    que es lo mismo que '3' en binario. Tiene gracia no? metemos
un uno en 'x3' (nota para lentos: lleva un 3) y sale '11' que es '3' en
binario. Todo esto teniendo E=1


                       E              E
       K            ___|____       ___|__
       E------ x3--|  \ _   |     | __ / |--[DRAGO] 
       Y------ x2--|        |--*--|      |----------[ABRIR PUERTA]
       B______ x1--|    _   |--*--| __   |--[DRAGO]
       |______ x0--|__/_____|     |____\_|--[DRAGO]


  Que circuito mas estupido pensaran los gurus! Pues si, pero es
ilustrativo. Si en nuestro teclado (KEYB) pulsamos el 2 (x2) se activara
la salida ABRIR PUERTA del descodificador y no tendremos que ver 30
veces 'Sonrisas y lagrimas' para desintoxicarnos.

   Ups! que no se me olvide. Algunos codificadores llevan una salida
adicional: A (active) que indica si alguna de las entradas esta a 1.

  Que pasaria si fueramos unos manazas y tocasemos mas de un boton a
la vez. Pues con los codificadores 'normales' no tendriamos garantia de
su funcionamiento. Pero eso se arregla con un peque~o circuito de
prioridad. Alla va.

         o = puerta NOT        -|- = cruce (los cables no se tocan) 
        -*- = nodo


       ,------------------o _____
x0-----|-------------------|     |
       |                ,-o| AND |---------  z0	
       |            ,---|-o|_____|
       |            |   |  
       |            |   |    _____
x1-----*------------|---|---|     |
                    |   *--o| AND |--------- z1
                    *---|--o|_____|
                    |   |
                    |   |    _____
x2------------------*---|---|     |
                        |   | AND |--------- z2
                        *--o|_____|
                        |
                        |    
x3----------------------*------------------- z3


 Hala! a tomar por el weich! Ahora la salida con mayor prioridad sera
la de mas alto valor. Luego si ponemos x3 y x1 a 1, la que ganara sera
x3.


------------------------------------4.3 Multiplexor


  Conoceis eso que hacen las TV's Digitales para metere 60 canales en
un ancho de banda relativamente peque~o? Bueno yo no, pero oi a un tio
en la fruteria que habia leido en una revista que eso se llama
multiplexacion de canales, es decir, meter varios canales en una 
frecuencia, en vez de en varias, lo cual seria mas caro para la
compa~ia. Pues bien el multiplexor no tiene, repito _NO_ tiene nada que ver.
Solo se asemeja de lejos al funcionamiento de esas TV.


                      E
                   ___|____
              x3--|  \ _   |
              x2--|       \|__ z1
              x1--|    _  /|
              x0--|__/_____|
                     | |
                    c1 c0

  Lo que hace el MUX (multiplexor) es, dadas unas posibles entradas
'x' y unas entradas de control 'c', la salida 'z' se define por la entrada
'x' se~alada por las entradas 'c'.

  Ex: Pillamos este MUX con la entradas siguientes.

                       E
                    ___|____
      x3        0--|  \ _   |
      x2        0--|       \|__z1
      x1        1--|    _  /|
      x0        0--|__/_____|
                      | |
                     c1 c0

  Si por ejemplo, teniendo E a 1, introducimos en c1c0, la
informacion 

c1=0
c0=1       La salida sera 1.

  Si nos damos cuenta hemos metido un '1' en las entradas de control
'c' luego la salida sera la correspondiente a la entrada x1 que es 1.

  Nada mas, imaginaos cualquier circuito sicodelico, que se me acaban
las gracias :) (naaaa).



------------------------------------4.4 De-multiplexor


  PUF! QUE DIFICIL! lo mismo de antes pero al reves. ;)

z = salida
c = entrada de control
x = entrada de datos

                      E
                   ___|____
              z3--|  \ _   |
              z2--|       \|__ x
              z1--|    _  /|
              z0--|__/_____|
                     | |
                    c1 c0

  Mira! ahora lo de los canales tiene algo mas de sentido. Es mas se
me esta ocurriendo un posible circuito para transmitir multiples
informaciones por un mismo canal.

    CIRCUITO SENCILLIN (ASCII sux y paso de piratear el ORCAD)

  Imaginaos que teneis cuatro amigos a los que quereis mandar cuatro
textos diferentes. En cada texto, poneis verde al siguiente. Por ejemplo.


Texto 0: Green Legend pone a caldo a Krip7ik
Texto 1: Krip7ik pone a caldo a MORTIIS
Texto 2: MORTIIS pone a caldo a Doing 
Texto 3: Doing pone a caldo a Green Legend. 

  (hehe)

  Total que un individuo, llamemosle, ehm..., no se... 'jn0' es
poseedor de los cuatro textos y como buen ciudadano quiere poner en
conocimiento de los inculpados que es lo que pasa.
Pero claro el amigo 'jn0' pasa de enviar todos los textos a cada uno,
porque a Krip7ik posiblemente se la sude si MORTIIS pone a caldo a Doing.

  Despues de un tiempo pensando llego a una conclusion: utilizando
las lineas de Telefonica, mandaria por el mismo canal toda la
informacion y que cada uno, con su clave personal pudiera recoger su texto 
sin recibir los demas.


  Luego el esquema es:
			
   [jn0] --------------------------------------.
 4 textos      [^RTB^]        |     |     |    |
                           Doing  Krip  Mort  Green  


 jn0 hace lo siguiente: crea un protocolo binario de tal manera que
mande los cuatro mensajes en la misma linea, sin que haya conflictos luego:


                 E
              ___|____
     texto3--|  \ _   |
     texto2--|       \|__ z1
     texto1--|    _  /|
     texto0--|__/_____|
                | |
            [CONTADOR modulo 4] 

  NOTA: un contador modulo 4 es un circuito secuencial (es decir que
cambia de estado y salida a lo largo del tiempo). Ya lo explicare. Solo
tened clara una cosa, es un circuito que durante un tiempo vale 0, luego 1, 
luego 2, 3, 0, 1, 2 etc.

  Ahora jn0, famoso donde los haya, genera un codigo especial, de tal
manera que cada palabra valga 1,2 o 3 bits.

NICKS
-----
Green Legend = 00
Doing	     = 01
Krip7ik      = 10
MORTIIS      = 11

Flames
------
es un gualtrapa = 00
es un lameron   = 01
es un julai     = 10
es un mariposon = 11


De tal manera que nuestros textos quedan:


Texto 0: Krip7ik es un julai
            10           10

Texto 1: MORTIIS es un gualtrapa
            11           00

Texto 2: Doing es un lameron
            01           01

Texto 3: Green es un mariposon
            00           11


 Ahora jn0, en su buen saber hace un circuito sencillismo (que
explicare mas adelante) que hace los siguiente: 
soltar un bit cada vez que el contador marca su numero.

Es decir:

                E
              ___|____
     [0011]--|3 \ _   |
     [0101]--|2      \|__ z1
     [1100]--|1   _  /|
     [1010]--|0_/_____|
                | |
            [CONTADOR modulo 4]

  Luego entonces, el contador empieza en 00, entonces sale el primer
caracter de la palabra que esta en x0 es decir 1:


                 E
              ___|____
     [0011]--|3 \ _   |
     [0101]--|2      \|__ 0
     [1100]--|1   _  /|
     [101 ]--|0_/_____|
                | |
                0 0
  
  Ahora se aumenta en un el contador y por lo tanto el MUX pilla el
primer bit del texto1.



             E
              ___|____
     [0011]--|3 \ _   |
     [0101]--|2      \|__ --> 0  -  0
     [110 ]--|1   _  /|        ^^^^^
     [101 ]--|0_/_____|     Eh! empezamos a transmitir informacion! 
                | |
                0 1

  Llegados al caso en el que el contador este a 3 (11):


                E
              ___|____
     [001 ]--|3 \ _   |
     [010 ]--|2      \|__ --> 1  -  1  -  0  -  0
     [110 ]--|1   _  /|
     [101 ]--|0_/_____|
                | |
                1 1

  el contador pasa a 0 y empieza con el siguiente bit.


              E
              ___|____
     [001 ]--|3 \ _   |
     [010 ]--|2      \|__ -->  1  -              1  -  1  -  0  -  0
     [110 ]--|1   _  /|        ^                  ^^^^^^^^^^^^^^^^^^^
     [10  ]--|0_/_____| 2-bit del primer txt     Primeros bits de los
txt
                | |
                0 0



 etc. asi hasta el que se queden los textos a 0.

 
Ahora, los cuatro textos van viajando por la misma linea, separados
por un peque~o espacio de tiempo:


          ========================================================
              1   ->     1   ->      1     ->     0    ->       0
          ========================================================




 HAHAHAHA y ahora como cohones hacemos que cada uno llegue a su
destinatario y no al equivocado?. El amigo jn0 despues de varios 
a~os de reflexion, un dia llego a la conclusion de que habia que
utilizar exactamente lo mismo para descodificar. Cuando llegase el primer 
bit, empezar a colocarlos en el mismo orden en el que habian salido. 
Esto es: el primer bit que llegara seria el primer bit (!)
(no olvideis lo del MSB y LSB, mirad el primer articulo)
del primer texto.


  Luego jn0 hizo lo que el llamo un 
,---------------------------------------------.
| broadcasterrouteadorpasarelawingatero (c),  |
 ---------------------------------------------'

 que al final se quedo en demultiplexor chapucero porque el otro
nombre estaba con copyright. El esquema que resulto fue el siguiente:



[LINEA DE DATOS]                 .--------.
=================================| DEMUX  |
                                 '--------'
        Puente de Green__________|  |  | |_____________Casa de Doing
       Chabola de Krip______________|  |_______________Metro de MORTIIS


jn0 queria que a cada uno le llegase la misma informacion: ahora solo
tenia que recomponer los paquetes de bit que habia enviado. Pues cogio un
DEMUX y aplico el mismo truco

                 E
              ___|_____
  [DATA]     |       3 |--[    ] Green
 =========___|       2 |--[    ] Doing
 1->0->0     |       1 |--[    ] MORTIIS
             |_______0_|--[    ] Krip7ik
                | |
            [CONTADOR modulo 4]

llega el primer bit, luego nuestro contador esta a 00;

                E
              ___|_____
  [DATA]     |       3 |--[    ] Green
 =========___|       2 |--[    ] Doing
   1->0      |       1 |--[    ] MORTIIS
             |_______0_|--[   0] Krip7ik
                | |
                0 0


               E
              ___|_____
  [DATA]     |       3 |--[   1] Green
 =========___|       2 |--[   1] Doing
             |       1 |--[   0] MORTIIS
             |_______0_|--[   0] Krip7ik
                | |
                1 1

Y asi hasta rellenar los cuatro cajetines. Ahora cada uno pilla su
correspondiente mensaje y lo traduce:


Green tiene [0011] que segun el codigo de jn0 es: Green es un mariposon.
Doing tiene [0101]:   Doing es un lameron.
Mortiis tiene [1100]: Mortiis es un gualtrapa.
                             etc.
-------------------------------------------

Nota: Si alguien no lo ha entendido, que cante aquello de 'en las
cabinas no se orina, para eso estan la esquinas'.
Que me haya ocupado casi 14k y no te hayas enterado es delito chaval.


 
------------------------------------4.4 Memoria ROM.

  Waw! Esto te suena mas eh eh!. Pues en fin, si, si que es famosa,
teniendo en cuenta que muchos dispositivos (por que creias que se llamaban
EEPROMS ) hacen uso de ellas.
Aunque os voy a dar los fundamentos basicos, os explicare algunas de ellas,
para que le tomeis gustillo:

ROM: Read Only Memory. Memoria de solo lectura.

PROM: Programable ROM. Memoria en la que se puede escribir,
      normalmente con una tension de 21v. Las tarjetas de la gran T.

EPROM: Erasable Programable ROM. Programables y que se pueden borrar
       aplicando una luz ultravioleta.


  Que es una ROM? Pues nada mirad el ascii.



             E

          ___|____
         | _____/ |-------*------------ 
    x1 --|        |-------|-*---------- 
    x0 --| _____  |-------|-|-*--------
         |______\_|-------|-|-|-*------
      |______________|    | | | |
                         [   OR  ]
                             | 
			     z0


  Pues una ROM no es mas que eso: un descodificador y puertas OR
enganchadas a las salidas. Eso si donde veis los * significan conexiones
y esa es la parte programable del asunto. Por supuesto podemos repetir
toda esa parte (OR) para tener varias funciones de salida en un mismo modulo.

  Si queremos implementar un circuito parecido al de la alarma de tal
manera que la eleccion de la clave haga sonar una musiquilla de Roberto
Carlos, solo tenemos que destruir (tal cual) el nodo que lo une a la puerta
OR y ya esta.
  La representacion que pongo ahora es la que se suele utilizar. Como
no me apetece escribir y como se que no sois unos inutiles dejare a vuestra
intencion su transcripcion:

                      E
                      |
                  -----
                 |  1  |
             x1- |  1  | 
             x0- |  0  |
                 |  1  |
                  -----
                    | z0
               [Gramofono]


------------------------------------4.5 Memoria PAL.

PAL: Programmable Array Logic. Vector Logico Programable.

  Como curiosidad, los circuitos programables basicos (ROM's PAL's)
se componen de dos modulos: la matriz de AND's y la matriz de OR's. Como
hemos visto, la matriz de AND's en la ROM es estatica ya que al funcionar
igual que un descodificador no hace falta modificarla. En la ROM, la matriz
programable es la de puertas OR.

  La memoria PAL tiene como curiosidad la programacion de la matriz
AND, teniendo como matriz estatica (no modificable) la de las puertas OR.

 Los * indican nodos programables, los . indican nodos indestructibles.

      x1              x0
      |___            |___
      |   |           |   |
      |  [NOT]        |  [NOT]
      |   |           |   |
      *---*-----------*---*--------[AND]-------.
      |   |           |   |                    |
      *---*-----------*---*--------[AND]-------.
      |   |           |   |                    |
      *---*-----------*---*--------[AND]-------|---------.
      |   |           |   |                    |         |
      *---*-----------*---*--------[AND]-------|---------.
                                               |         |
                                              [OR]     [OR]
                                               |         |
     |_____________________________________|   z1       z0
              Matriz AND

                                              |____________|
                                                Matriz OR 


 Explicamos: Para no tener que dibujar mas cables, suponemos que en
los cable corren dos bits muy juntitos es decir

  |             |  |
 [OR]   ==      [OR]
  |              |               Lo mismo para las matrices AND.


 Para la representacion tambien puede usarse lo de la matriz de 1's y
0's


------------------------------------4.5 Memoria PLA.


  Con los tiempos que corren no nos podemos permitir el lujo de
gastar dos modulos si queremos tener  total flexibilidad a la 
hora de implementar sistemas combinacionales. Para ello estan la PLA.

  Las PLA (me parecen que tambien se llaman PLD) permiten programar
tanto la matriz AND como la OR.




   x1              x0
      |___            |___
      |   |           |   |
      |  [NOT]        |  [NOT]
      |   |           |   |
      *---*-----------*---*--------[AND]-------*
      |   |           |   |                    |
      *---*-----------*---*--------[AND]-------*
      |   |           |   |                    |
      *---*-----------*---*--------[AND]-------|---------*
      |   |           |   |                    |         |
      *---*-----------*---*--------[AND]-------|---------*
                                               |         |
                                              [OR]     [OR]
                                               |         |
     |_____________________________________|   z1       z0
              Matriz AND

                                              |____________|
                                                Matriz OR


----------------------------------------------------------------------
----------------------------------------------------------------------

  Y por este numero se acabo. Pensaba escribir algo sobre sistemas
secuenciales (con reloj, biestables y todas esas cosas). Pero uno
tiene una vida propia, una amiga con derecho a roce que mantener y
unos estudios que dejar de lado... si os ha parecido poco, enhorabuena 
porque significa que teneis ganas de aprender. 
Si teneis algo de dinero os recomiendo este libro:

   'Contemporary Logic Design'
    Randy Katz
    Benjamin-Cummings, 1994.

  Es un libro muy chulo, con pastas duras y de color plateado, con la
foto del tio que lo ha escrito (una combinacion de Bill Gates y Hawking
- el de los agujeros negros -), pero esta muy bien en la parte de la 
circuiteria combinacional, y sobre todo en lo de los dispositivos 
programables basicos.
-----------------------------

  Si los vapores etilicos Eristroffistas no acaban conmigo, el
proximo numero sera algo mas interesante, porque empezare con sistemas
secuenciales con lo que podreis hacer relojes, reconocedores de secuencias, 
bombas nucleares y otras gracias.

  Visitad la pagina de mi grupo libertario : http://flt.cjb.net

  Escribid a 				   : jnzero@phreaker.net


 *EOF*