Multi touch interface (parte 3): El marco de LEDs

jueves 21 de agosto, 2008
 

Hoy he estado preparando el marco de LEDs que iluminará el panel acrílico. Como ya había comentado antes, para el prototipo estoy utilizando dos perfiles de aluminio en forma de “L” de 90cm  (el panel mide 76cm, pero los cogí de 90 para actuar como soporte sobre los caballetes) sobre los que colocaré 25 LEDs  infrarrojos.

Todavía no he hecho ningún test, pero ya me ha asaltado la primera duda. Los perfiles que he comprado son en aluminio natural, y probablemente debería haberlos cogido en aluminio pulido para que reflejen mejor los posibles escapes de luz hacia el panel. En todo caso, esto es solo un prototipo de prueba, en la versión final utilizaré ya unos de aluminio pulido y en forma de “U” para cubrir los LED tanto por arriba como por abajo.

La separación entre cada LED es aproximadamente de 3cm y los montaré de forma que los de un borde cubran los puntos no iluminados del otro borde del panel. Para decirlo de un modo más entendible, donde hay un hueco entre dos LED, el extremo contrario tiene uno:

0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0

   0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0 

He impreso unas plantillas para pegarlas sobre los aluminios y de ese modo tener perfectamente marcados los puntos donde debo taladrar.

Marcas para los LED

 

Ajuste del LED en los agujeros del marcoEl grosor de los LED es de 5mm, con lo cual utilizaré, obviamente, una broca para metal de 5mm. La idea es colocar los LED desde la parte posterior del aluminio quedando perfectamente ajustados al mismo, exactamente como en la siguiente foto, en la que he utilizado una regla que casualmente trae un agujero de 5mm.

Una vez taladre los agujeros en los perfiles, el montaje será el siguiente (todavía no he taladrado, por lo tanto está sin LED, pero muestra más o menos el asepcto que tendrá el prototipo):

Mesa sin LEDs

Mañana me pondré manos a la obra, y espero conseguir tambien los cables para el montaje, que por cierto lo haré empleando unos cablecitos con una ficha similar a los jumper de un disco duro, que sirven para no tener que soldar los LEDs ni las resistencias, así será fácil reemplazar o recolocar los componentes si es necesario durante el montaje. De todos modos para un montaje final no son muy recomendables y es preferible soldar.

Multi touch interface (parte 2): Esquema del prototipo

miércoles 20 de agosto, 2008
 

Despues de una larga espera por fin he recibido los materiales para ponerme manos a la obra y hacer las primeras pruebas con el interface FTIR.

Por un lado tengo 100 LEDs (he comprado 100, aunque para este proyecto solo utilizaré 50, pero no está de más ser precavidos). He escogido unos Oshram SFH485, ya que son de los que mejor resultado dan para una configuración FTIR: Emiten con una longitud de onda de 880nm, y un ángulo de emisión de 40º. Longitudes de onda superiores son más difíciles de filtrar para nuestro propósito, y el ángulo de emisión de 40º es ideal para el grosor del plexiglass que tengo.

Oshram SFH485

Por otro lado, al fin me ha llegado el acrílico (es lo que más tiempo tuve que esperar). Tiene un grosor de 8 milímetros y unas medidas de 76×54 centímetros. Podría utilizarse uno más delgado, pero dado el tamaño de la plancha preferí no arriesgarme y asegurarme de que es rígido y no se dobla al presionarlo.  De todas formas como ya digo, los leds tienen un grosor de 5 mm, asi que un panel de 5-6 mm de espesor sería suficiente.

Tambien he encargado un par de perfiles en L de aluminio de 90 centímetros, que actuarán como “raíles” sobre los que apoyar el panel y colocar los LEDs. Escogí la forma de L para el prototipo porque es más cómodo y menos trabajoso, pero obviamente una vez el prototipo esté terminado lo reemplazaré por un marco completo en forma de U para dejarlo bien rematádo y estable.

Lo primero que tuve que hacer llegado a este punto es decidir el esquema de LEDs que voy a emplear en el proyecto. Utilizaré 25 LEDs con 2 centímetros de separación entre ellos, en cada uno de los bordes (a lo largo) del panel, iluminando de esa forma el panel completo.

Los LEDs operan a 100 mA con una caída de voltage de 1,5V. Dado que utilizaré una alimentación de 12V, los colocaré en 10 series en paralelo de 5 LEDs cada una, utilizando una resistencia de 47ohm, 1W en cada serie. Quizá deba escoger resistencias con menos potencia para que los LED brillen más, pero primero probaré con estas para no arriesgarme a quemar los LED, que no son baratos precisamente.

Esquema LEDs

Nota: La fórmula para calcular resistencias para LEDs (siguiendo la Ley de Ohm) es la siguiente:

R = (Voltage de fuente - Caída de voltage del diodo) / Intensidad del LED

 y despues escogemos la resistencia con el valor standard más cercano que sea mayor.

Me queda por solucionar el tema de la película de silicona (la complaint surface), y todavía no tengo proyector ni difusor, pero para empezar a hacer las primeras pruebas y generar los primeros blobs tengo suficiente.

Esta semana me pondré con ello, así que pronto empezaré a poner fotos del proceso explicando los problemas con los que me encuentre en el camino.

Hacks CSS para mostrar páginas casi idénticas en Firefox, IE6 e IE7

viernes 25 de julio, 2008
 

Cuando escribimos una página utilizando CSS lo normal es encontrarnos con que esa página no se muestra de la misma forma en Firefox que en Internet Explorer 6 ni Internet Explorer 7.

Por ejemplo, la propiedad margin no es interpretada de la misma forma en los 3 navegadores,  de manera que cuando logramos que un elemento se muestre correctamente en uno de ellos, en los otros aparece descolocada. Firefox interpreta margin en relación con los elementos padre del mismo, mientras que IE7 lo interpreta en relación a los elementos del mismo nivel.

Este pequeño truco nos permitirá escribir diferentes atributos para cada uno de los navegadores antes mencionados, así como para mostrar diferencias deliberadamente según el navegador:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Clase para Firefox */ 
.elemento { 
margin: 10px 10px 10px 10px; 
background-color: #f00; 
} 
 
/* Clase para IE7 */ 
*:first-child+html .elemento { 
margin: 5px 5px 5px 5px; 
background-color: #0f0; 
} 
 
/* Clase para IE6 */ 
* html .elemento { 
margin: 2px 2px 2px 2px; 
background-color: #00f; 
}

Si asignamos esa clase a un elemento, por ejemplo <div class=”elemento”>, cada navegador tomará la que le corresponde (mostrando, en este caso, un fondo rojo en firefox, un fondo verde en IE7 y un fondo azul en IE6). Como se puede observar, cada navegador aplicará tambien diferentes margenes al elemento, de formas que podemos corregir las diferencias de posición que pudiese haber.

Instalar Vista SP1 en un Vaio TZ

domingo 20 de julio, 2008
 

El Service Pack 1 de Windows Vista es incompatible con una serie de versiones de ciertos drivers; es por ello que el SP1 no aparece en la lista de windows update.

En concreto, el driver conflictivo en un Vaio TZ es el Mobile Intel 954GM Express, puesto que la última versión que proporciona Sony es la 7.14.10.1380, (y las versiones no compatibles con SP1 están entre la 7.14.10.1322 y la 7.14.10.1403 incluídas).

He leido de gente que ha tratado de instalar el SP1 utilizando el instalador standalone, teniendo conflictos por esa razón, por eso es algo que no recomiendo hacer.

La solución es bastante sencilla (aunque truculenta), y di con ella de casualidad. Lo que vamos a hacer es reinstalar el driver de video (con la misma versión que tenemos ahora mismo), lo que forzará a windows update a ofrecernos una actualización opcional con el nuevo driver de video (en concreto la versión 7.14.10.1437, si compatible con el SP1).

  • Primer paso: Actualizar driver con el que tenemos en el equipo: 
  • Segundo paso: Reiniciar el sistema y hacer un windows update. Esta vez deberiamos tener una actualización opcional con el Intel 945GM Express: Lo instalamos
  • Tercer paso: Reiniciar nuevamente el equipo, y comprobar que la nueva versión del driver es mayor a la 1430. Hacer otro windows update y esta vez si deberia salirnos la actualización a SP1.

He de añadir que mi modelo de Vaio es un TZ32VN (en España) con un Vista Business. Es posible que con otros modelos esto no funcione. En ese caso, otra opción es visitar www.sony-drivers.com, y buscar por “7.14.10″, y escoger el driver de cualquier otro Vaio (no tiene porque ser un TZ) que sea mayor que la 7.14.10.1403. Eso debería funcionar sin ningún problema, aunque recomiendo probar primero la solución del windows update.

Vaio TZ con SP1

Estrenamos servidor

viernes 18 de julio, 2008
 

Hace un par de semanas hemos encargado un servidor, reemplazando así el PC que estabamos utilizando hasta ahora como intranet en la empresa. Se trata de un PowerEdge R200 de Dell, nuevo, y que nos ha salido por un precio ridículo (de hecho estuvimos tentados a pedir tres o cuatro y así ir montando la granja de render, pero finalmente decidimos que sería algo precipitado).

El cacharro es cuestión cuenta con un procesador Dual Xeon 2,3 Ghz, 2 GB de RAM, dos discos SCSI de 160 GB preparados para RAID, y tres interfaces GigaLAN. 

PowerEdge R200 Frontal

Le he montado una Fedora Core 9, y despues de optimizar e instalar los servicios que necesitamos, el aparato se comporta de maravilla. Es algo ruidoso (aunque no nos importa demasiado por el lugar donde lo tenemos), pero no se calienta lo más mínimo.

En definitiva, estoy muy contento con esta adquisición, es el primer servidor propiamente dicho que cae en mis manos (al margen de los dedicados que tengo alquilados en Florida), y espero ir ampliando “la colección” a corto/medio plazo. De momento ya le tenemos echado el ojo a unos armarios en rack con monitor y SAI integrados que quedarían que ni pintados en nuestra oficina.

PowerEdge R200 Trasera

Multi touch interface (parte 1): Preparativos

martes 22 de abril, 2008
 

 

You need to a flashplayer enabled browser to view this YouTube video

Desde que vi el video de Jeff Han y su interface multi touch hace ya un año, he quedado totalmente prendado de esa tecnología y me he dedicado a investigar sobre el tema. En realidad es una tecnología no tan nueva, y lo más interesante del tema es que es relativamente sencilla.

Hay todo un movimiento alrededor de los display multi touch, y geeks del todo el mundo se están construyendo sus propios dispositivos de este tipo, e investigando como perfeccionarlos. Los prototipos que están saliendo son de una calidad que nada tendría que envidiar a un dispositivo comercial de estas caracteristicas.

Yo, como buen geek que soy y sobretodo porque soy el primero en babear con esta maravilla tambien he estado investigando y haciendo mis preparativos para construirme mi propio prototipo. Tengo especial interés ya que como programador me abre un montón de posibilidades para experimentar con él una vez lo tenga terminado y funcionando.

Cuando definitivamente me planteé comenzar con este proyecto, lo primero que tuve que hacer fue decidir que tipo de tecnología emplearía en mi interface. Existen dos enfoques principales a la hora de desarrollar un multi touch, que si bien se basan en lo mismo, se construyen de forma totalmente diferente:

FTIR (Frustrated Total Internal Reflection):

Esquema FTIR

Este primer sistema es el más conocido y utilizado hasta el momento, probablemente porque es el sistema que empleó Jeff Han y el que puso de moda esta tecnología.

Con este método utilizamos un panel de acrílico, el cual iluminamos desde sus bordes con LEDs infrarrojos. Utilizamos acrílico y no cristal, porque su transmitancia frente a la luz infrarroja es ideal, mientras que la del cristal no nos sirve para lograr este efecto.

Lo que estamos haciendo es “inundar” el panel de luz IR, la cual va rebotando en su interior (reflexión interna total). Cuando colocamos los dedos sobre el panel, estamos frustrando la reflexión interna y reflejando la luz hacia abajo, donde tenemos una cámara infrarroja, o una videocámara normal con un filtro IR que detectará esos “blobs” de luz, los cuales procesaremos con el ordenador para obtener su posición y de ese modo emplearlos como controladores.

Sobre el panel acrílico colocamos un material difusor sobre el que proyectar la imagen del ordenador desde abajo.

Al utilizar los dedos desnudos sobre el panel, el efecto de “frustración” funciona muy bien, especialmente si tenemos los dedos humedos, debido a que la piel de los dedos es semitransparente y se deforma al apretarla contra el panel, sin embargo al colocar la pantalla difusora, eliminamos el efecto y es necesario hacer bastante presión para obtener el resultado deseado. Para ello debemos utilizar una superficie intermedia entre el panel y el difusor (conocida como complaint surface). Se ha investigado bastante sobre este tema, y actualmente lo que mejor resultado da es crear una fina pelicula de silicona transparente (Sort A Clear Silicone Rubber). Esto complica algo el diseño del prototipo, y lo encarece un poco, aunque no tanto como para frenar a un geek que se precie.

DI (Diffused Illumination):

Esquema DI

El segundo método para este tipo de displays es la iluminación difusa. En este caso no inundamos de luz IR el panel (el cual ahora puede ser de plexiglass, cristal escarchado o lo que queramos), sino que lo iluminamos desde la parte inferior empleando lámparas LED, y procurando que quede totalmente iluminado. Al colocar los dedos sobre el panel, estaremos reflejando la luz que viene desde abajo otra vez hacia allí, donde tenemos nuestra cámara.

Este tipo de paneles ademas de trackear los dedos, pueden identificar tambien imagenes fiduciales (el famoso Reactable es un claro ejemplo de este tipo de displays), aunque los “blobs” generados no son tan claros como en el caso de los FTIR.

Los paneles DI son más fáciles de construir, ya que no necesitamos soldar la circuitería de leds para enmarcar el acrílíco, ni necesitamos la “complaint surface”. Sin embargo el dispositivo debe estar encerrado dentro de una caja y la calibración de las lamparas LED es bastante más compleja par obtener un resultado óptimo. Otra desventaja, aunque es posible solucionarlo, es la luz IR ambiente que se cuela desde arriba, lo cual hace que a veces incluso detecte blobs sin llegar a tocar el panel.

Aunque tengo que reconocer que los sistemas DI me atraen bastante por su capacidad de interpretar patrones fiduciales, al final me decidí por el modelo FTIR como primer prototipo, aunque no descarto explorar el modelo DI en un futuro (especialmente si obtengo buenos resultados con el primero, ya que lo más caro es el proyector; y una vez teniendo uno nada me impide hacer otros experimentos con él).

Ahora mismo estoy empezando a encargar los materiales como el panel acrílico y los leds, seguiré informando sobre el proyecto en cuanto empiecen a llegarme.

Dorama: Las series televisivas japonesas

miércoles 9 de abril, 2008
 

Nodame CantabileHace ya algún tiempo que soy aficionado a los dorama (o jdrama), ya no solo porque me guste la cultura y lengua japonesa, sino porque es un estilo peculiar de hacer series televisivas a las que no estamos acostumbrados en occidente, y que encuentro como un soplo de aire fresco en cuanto a entretenimiento (una buena forma de descansar un poco de la scifi). En serio, es la única razón por la que me gustan…

Pues bien, en Japón las series (de carne y hueso) que emiten en TV se llaman Drama (ドラマ dorama), y abarcan diversas temáticas. Muchas veces están basadas en algún manga o anime de éxito, y en esos casos tambien suelen ser llamadas “live action” (Por ejemplo, Great Teacher Onizuka Live Action, o Gokusen, basadas en los anime del mismo nombre).

Los dorama japoneses se emiten por temporadas (primavera, verano, otoño e invierno), lo que significa que duran unos 3 meses, y suelen constar de 9 a 11 episodios (emitidos semanalmente). Si la serie consiguió un gran éxito, normalmente suelen emitir más tarde un episodio especial, de larga duración, a modo de “bis” y casi siempre contando lo que sucedió despues de que acabara la serie. Esto es algo curioso tambien, ya que la serie no se acaba solo con un final feliz o trágico, sino que despues en el especial aun te enseñan lo que fué de los protas en el futuro.

Gokusen

Este formato de dramas de 9-11 episodios se denominan renzoku (連続 - れんぞく), mientras que los drama que solo constan de 2 o 3 episodios o “partes” (lo que aqui conocemos como miniseries, o tv movies) se denominan tanpatsu (単発 - たんぱつ). Podria decirse que los episodios especiales de los que hablaba antes son tanpatsu.

En muchos casos, las bandas sonoras de los dorama tienen tantos seguidores como la propia serie (al igual que ocurre en el caso de muchos anime), por lo que suelen trabajar compositores o cantantes de renombre en ellas. La música en los jdrama es muy importante, al contrario que en las series occidentales, donde esta pasa a un segundo lugar (no como en el cine).

De aquí en adelante iré haciendo algunos analisis de los dorama que más me han gustado.

Micro Motorola MC68000

lunes 2 de julio, 2001
 

Nota preliminar: Este artículo fue publicado en el número 6 de NetSearch Ezine, en 2001.

 

Esto pretende ser el primero de una serie de artículos (si es que veo interés y tengo tiempo) sobre Eleectronica Digital. Voy a intentar enfocarlo para que cualquiera pueda empezar en este tema. No obstante, dare por hecho ciertos conocimientos básicos sobre informática (numeración hexadecimal, binaria,…).

La electronica digital es un tema muy amplio, por tanto esto será algo así como una guía básica a partir de la cual podreis investigar vosotros mismos y profundizar. Existen multitud de microprocesadores; yo voy a escribir sobre el MC68000 de Motorola, ya que es el que conozco y es un buen micro con el que aprender. Esta claro que despues utilizareis otros, pero sabiendo uno no tendreis problemas en aprender otros.

Estoy hablando de micros, ya que en este artículo voy a empezar con la estructura y la programación del micro. Decidí empezar por aquí porque creo que es lo más interesante para empezar en electrónica, ademas será una buena guía de iniciación a lenguaje ensamblador para la gente que no sabe utilizarlo. Si veo que interesa, en otros artículos escribiré sobre mapeo de memorias, circuiteria de selección,…

En la web podreis encontrar un simulador del MC68000 y un manual de funcionamiento con el que podreis compilar y simular los programas que hagais.

Puede que os esteis preguntando cual es la aplicación de todo el royo que vais a leer, sobre todo aplicado a los temas que os interesan. Programando un micro (en la práctica, lo más seguro es que programeis un PIC, que es un poco más limitado que un micro, pero os llegará de sobra) y creando un circuito digital controlado por el, podeis hacer desde una calculadora hasta un selector entre multiples tarjetas SIM segun el PIN introducido, cerraduras controladas por una tarjeta EPROM, emuladores de… cualquier circuito que conozcais.

Bueno, sin más preambulos empiezo.

1. Indice

  1. Indice
  2. Propiedades hardware
  3. Modelo de programación
  4. La Memoria
  5. Modos de Direccionamiento
  6. Juego de instrucciones
  7. Subrutinas
  8. Excepciones
  9. Interrupciones
  10. Ejemplo práctico

 

2. Propiedades hardware

  • Bus interno: 16 bits
  • Unidad Aritmetico Lógica (ALU) puede operar sobre 16 bits directamente
  • Registros internos de 32 bits (Datos y Direcciones)
  • La Entrada/Salida esta mapeada en memoria (Intel utiliza buses diferentes para entrada/salida)
  • Bus de datos: 16 bits
  • Bus de direcciones: 32 bits (pero solo utiliza las 24 líneas menos significativas)

Micro Motorola MC68000     

* Físicamente solo hay 23 lineas de dirección. A0 se sustituye por UDS y LDS de una forma especial.

[Nota:] Las líneas negadas (con una línea por encima) quieren decir que esa línea se activa con un “0″ lógico, en lugar de un “1″.

  • GND (Ground):  Masa.
  • CLK (Clock):  Señal de reloj.
  • D0-D13 (Data): Bus de datos.
  • A1-A23 (Address): Bus de direcciones.
  • AS# (Address Strobe): Validación de dirección.
  • R/W# (Read/Write): Control Lectura/Escritura.
  • UDS# (Upper Data Strobe): Transferencia por los 8 bits altos del bus de datos.
  • LDS# (Lower Data Strobe): Transferencia por los 8 bits bajos del bus de datos.
  • DTACK# (Data Transfer Acknowledge): Indicador de transferencia completa.  (la recibe del subsistema de memoria)
  • IPL*# (Interrupt Priority Level): Entradas de peticion de interrupción. Codifican un número de 3 bits con el nivel de interrupción.
  • BERR# (Bus Error): Error en el subsistema de memoria o en E/S.
  • RESET#: Es una linea bidireccional: De forma entrante inicializa el micro.    De forma saliente fuerza la inicializacion del entorno.
  • HALT#: Es bidireccional: Como entrada detiene la CPU. Como salida indica al subsistema que la CPU se ha detenido.
  • BR# (Bus Request): Peticion de bus para DMA.
  • BG# (Bus Grant): Concesion de bus.
  • BGACK# (Bus Acknowledge): Reconocimiento de concesión.
  • E: Salida de reloj para perifericos de la familia 68000.  Frecuencia de 1/10 CLK
  • VMA# (Valid Memory Address): Indica que el bus de direcciones contiene una  direccion válida.
  • VPA# (Valid Peripherial Address): Indica que la dirección pertenece a un periférico síncrono.
  • FC* (Function Codes): Señales de status.

 

3. El Modelo de Programación

   El MC68000 tiene dos modos de funcionamiento:

   - Modo Usuario: No se pueden ejecutar ciertas instrucciones y solo se accede al byte bajo del registro de estado.

  • 8 registros de Datos de 32 bits (D0-D7)
  • 7 registros de direcciones de 32 bits (A0-A6)
  • PC (Contador de programa) de 32 bits
  • SP (Stack Pointer o Puntero de Pila de Usuario) de 32 bits (A7)
  • SR (Registro de estado) 8 bits

   - Modo Supervisor: Se accede a todo el juego de instrucciones y a todos los registros.

  • 8 registros de Datos de 32 bits (D0-D7)
  • 7 registros de direcciones de 32 bits (A0-A6)
  • PC (Contador de programa) de 32 bits
  • SSP (Stack Pointer o Puntero de Pila de Usuario) de 32 bits (A7)
  • SR (Registro de estado) 16 bits

[Nota:] Los registros de datos, direcciones y contador de programa son físicamente los mismos para los dos modos.

Los punteros de pila hay uno físicamente para cada modo.

El Registro de estado es físicamente el mismo: El usuario solo utiliza el byte menos significativo, y el supervisor el registro entero.

[Nota:] Los registros que almacenan direcciones (A*, Sp, CP) son de 32 bits pero solo utilizan los 24 bits menos significativos.

[Nota:] Cuando vallamos a utilizar la pila en un programa (ya sea de usuario, para las subrutinas, o de supervisor para las interrupciones) es necesario inicializarla, sino el micro generará un error.

La de usuario la podemos inicializar así:

   MOVE #$40000,A7

La de supervisor:

   ORG $00000

   DC.L $40000

  • Registro de Estados (SR):

bit        15 14 13 12 11 10  9  8 | 7  6  5  4  3  2  1  0

flag        T  #  S  #  # I2 I1 I0 | #  #  #  X  N  Z  V  C

[Nota:] El byte más significativo no es accesible por el modo usuario

  •   T (Trace): Si está a “1″ el micro funciona en modo traza (Paso a paso)
  •   S (Status): Si está a “1″ estamos en modo Supervisor  Si esta a “0″ estamos en modo Usuario
  •   I2 I1 I0 (Máscara de interrupción): Si un periférico solicita una interrupción, el nivel de prioridad debe ser superior al codificado por la máscara.
  •   X (Bit de Extension): Indica el acarreo en operaciones BCD
  •   N (Flag de Signo): Nos indica si la ultima operacion genero un numero negativo.
  •   Z (Flag de Zero): Indica que en la ultima operacion se obtuvo un 0.
  •   V (Flag de Overflow): Cuando esta a “1″ indica que la ultima operacion genero un desbordamiento.
  •    C (Flag de Carry): Indica ke en la ultima operacion se genero un acarreo

 

4. La Memoria

   El 68000 utiliza el formato Big Endian para el almacenamiento de datos superiores al byte en memoria. Esto quiere decir que el byte más significativo se almacena en posiciones de memoria bajas (cercanas al $00000).

              $00000

                 .

                 .

             byte alto

             byte bajo

                 .

                 .

              $FFFFF

La señal R/W# nos indica si vamos a leer o a escribir en memoria:

   

  •   R/W#   Acción

            0    Escribir

            1    Leer

 

La señal AS# se envia al sistema de memoria para decir si la dirección que se ha puesto en el bus de direcciones es válida.

  •    AS#     Indicación

             0    Dirección válida

             1    Dirección no válida

 

  • UDS# y LDS#:

  UDS#    LDS#      Acceso

   0       0        Tamaño palabra (16 bits)

   0       1        Byte bajo

   1       0        Byte alto

   1       1        No hay acceso a memoria

 

  • La señal DTACK# viene del sistema de memoria, e indica si se ha conseguido acceder con exito:

  DTACK#    Indicación

    0       Se ha accedido

    1       No se ha accedido

 

 

5.  Modos de direccionamiento

   Los modos de direccionamiento son los formas de indicar al micro donde encontrar un dato determinado, es decir, cual es su dirección efectiva (direccion física del dato).  En el 68000 tenemos 13 modos de direccionamiento:

  •  Direccionamiento Implícito:

       No se necesita operando. Se refiere a un registro definido en la operación.

       Ej: MOVE $23345,CCR

  • Direccionamiento Inmediato:

       Se expresa la dirección explicitamente en la operación.  Se utiliza el caracter # antes de la dirección.

       Ej: MOVE #$9F,D5

  • Direccionamiento Inmediato Rápido:

       Igual que antes, pero el valor es:

       Número entre 1 y 8 para suma y resta.

       Número entre -128 y 127 en instrucciones de movimiento de datos.

       Se añade el caracter Q al mnemónico y el # antes del número.

       Ej: ADDQ #6,A0

  • Direccionamiento Absoluto Largo:

     El argumento es la dirección efectiva a la que se accede.

   Ej: MULS $25022,D2

  • Direccionamiento Absoluto Corto:

     El argumento es una dirección de tamaño palabra (Word, 2 bytes)

     Si el valor está entre $0000-$7FFF accedemos a los 32k mas bajos de memoria.

     Si el valor está entre $8000-$FFFF accedemos a los 32k mas altos de memoria.

     Ej: EORI.B #$FF,$8000

  • Direccionamiento directo a registro:

    El operando es un registro interno, D* o A*

    Ej: SUB  D1,A2

  •  Direccionamiento Indirecto:

    El operando es una dirección de memoria intermedia, donde está contenida la dirección efectiva.

    Esta dirección de memoria esta contenida en un registro de dirección.

    Ej: ASL.W (A3)

  • Direccionamiento Indirecto con Postincremento:

   Igual que el anterior, pero despues de obtener el argumento el registro de direcciones se incrementa en un valor, segun el tamaño:

   .B (Byte): Se incrementa en 1

   .W (Word): Se incrementa en 2

   .L (LongWord): Se incrementa en 4

   Se utiliza la representacion (A*)+

  Ej: CMPM (A0)+,(A4)+

  Esto es muy útil para recorrer arrays y para actualizar el puntero de pila al sacar datos (El 68000 no tiene instrucción para eso)

  • Direccionamiento Indirecto con Predecremento:

    Primero se decrementa el valor del registro de direcciones y luego se accede al dato.

    Ej: OR.B D3,-(A0)

    Se utiliza para introducir datos en pila.

  • Direccionamiento Indirecto con Desplazamiento:

   La dirección efectiva se obtiene sumando un valor al contenido del registro de direcciones.

   El desplazamiento es un numero con signo de 16 bits.

   Ej:  CHR $24(A4),D3

  • Direccionamiento Indirecto con Indice y Desplazamiento:

    La dirección efectiva se halla sumando 3 valores:

    - El contenido de un registro de direcciones.

    - Un desplazamiento de 8 bits.

    - Un registro de datos.

    Formato:  desplazamiento(A*,D*.B|W|L)

   Ej: DIVU 8(A3,D7.L),D5

  • Direccionamiento Relativo con Desplazamiento:

    Igual que el de desplazamiento pero con el contador de programa.

    Ej: LEA $200(PC),A3

  • Direccionamiento Relativo con Indice y Desplazamiento

    Igual que el de indice y desplazamiento pero con el PC

    Ej: MOVE $B(PC,D1.L),D5

  (más…)