User Tag List

Página 2 de 2 PrimerPrimer 12
Resultados 16 al 19 de 19

Tema: zx-poly

  1. #16
    Fecha de ingreso
    Oct 2007
    Ubicación
    Madrid
    Mensajes
    2,265
    Agradecer
    116
    Agradecido 206 veces en 135 posts
    Mencionado
    64 Post(s)
    Tagged
    0 Tema(s)
    Cita Iniciado por swapd0 Ver mensaje
    el Z80 no tiene instrucciones de multiplicación y division

    Ya sólo con eso vaya tela, la verdad no me había documentado a este nivel; pero siempre pensé que el Z80 al menos multiplicaría números enteros...
    (por eso de que es una versión optimizada del 8080).

    ¿entonces las multiplicaciones las hace a base de iterar sumas?
    La maestría interior...

  2. #17
    Fecha de ingreso
    Sep 2006
    Mensajes
    4,224
    Agradecer
    489
    Agradecido 400 veces en 299 posts
    Mencionado
    20 Post(s)
    Tagged
    0 Tema(s)
    Cita Iniciado por masteries Ver mensaje
    Ya sólo con eso vaya tela, la verdad no me había documentado a este nivel; pero siempre pensé que el Z80 al menos multiplicaría números enteros...
    (por eso de que es una versión optimizada del 8080).

    ¿entonces las multiplicaciones las hace a base de iterar sumas?
    No creo ya que dependiendo del lo grande que sean los números tardarías mas, supongo que se hacen con sumas y desplazamientos. IIRC ningún procesador de 8 bits tiene instrucciones de multiplicaciones ni division.

    De todas formas para el Elite en vez de usar matrices de rotacion y multiplicar vectores, usaban logaritmos. Log(a*b) = Log(a) + Log(b). Asi se ahorran las multiplicaciones.
    http://www.gdcvault.com/play/1014628...ame-Postmortem

    -----Actualizado-----

    Y si no vas justo de memoria puedes usar esto, pero creo que solo funciona para números positivos. Sacado de una pagina sobre 6502.
    Código:
    ;Fast Multiplication;
    ;The idea stems from Stephen Judd.
    ;You find it in The Fridge and in the C=Hacking magazine:
    ;
    ;Let f(x) = x^2 / 4.  Then
    ;
    ;       a*b = f(a+b) - f(a-b)
    ;
    ;You need 2 tables of squares with 9 bit input size and
    ;16 bit result size.
    ;
    ;You can save the building of the 2th complement
    ;
    ;   EOR #$ff
    ;   CLC
    ;   ADC #1
    ;
    ;by shifting the second table 1 byte down and
    ;using the 1th complement:
    ;
    ;   EOR #$ff
    ;
    ;This algorithm is very useful when you want to multiply
    ;multiple bytes by the same factor. Then you can set the
    ;zp addresses once and just modify the y register.
    ;With the same trick you can easily extend this algorithm
    ;to 16 bit. But if you want to be fast you will need more
    ;than the 8 zp addresses.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  3. El siguiente usuario agradece a swapd0 este mensaje:

    JoJo_ReloadeD (29/06/2018)

  4. #18
    Fecha de ingreso
    Oct 2007
    Ubicación
    Madrid
    Mensajes
    2,265
    Agradecer
    116
    Agradecido 206 veces en 135 posts
    Mencionado
    64 Post(s)
    Tagged
    0 Tema(s)
    Cita Iniciado por swapd0 Ver mensaje
    No creo ya que dependiendo del lo grande que sean los números tardarías mas, supongo que se hacen con sumas y desplazamientos. IIRC ningún procesador de 8 bits tiene instrucciones de multiplicaciones ni division.

    De todas formas para el Elite en vez de usar matrices de rotacion y multiplicar vectores, usaban logaritmos. Log(a*b) = Log(a) + Log(b). Asi se ahorran las multiplicaciones.
    http://www.gdcvault.com/play/1014628...ame-Postmortem

    -----Actualizado-----

    Y si no vas justo de memoria puedes usar esto, pero creo que solo funciona para números positivos. Sacado de una pagina sobre 6502.
    Código:
    ;Fast Multiplication;
    ;The idea stems from Stephen Judd.
    ;You find it in The Fridge and in the C=Hacking magazine:
    ;
    ;Let f(x) = x^2 / 4.  Then
    ;
    ;       a*b = f(a+b) - f(a-b)
    ;
    ;You need 2 tables of squares with 9 bit input size and
    ;16 bit result size.
    ;
    ;You can save the building of the 2th complement
    ;
    ;   EOR #$ff
    ;   CLC
    ;   ADC #1
    ;
    ;by shifting the second table 1 byte down and
    ;using the 1th complement:
    ;
    ;   EOR #$ff
    ;
    ;This algorithm is very useful when you want to multiply
    ;multiple bytes by the same factor. Then you can set the
    ;zp addresses once and just modify the y register.
    ;With the same trick you can easily extend this algorithm
    ;to 16 bit. But if you want to be fast you will need more
    ;than the 8 zp addresses.
    Encantado con la info, lo de emplear las reglas de los logaritmos en lugar de multiplicar (dado que no podían) es excelente; aunque debo dar por hecho que tendrán unas tablas de logaritmos precalculadas y luego con otra relación obtienen más valores o algo semejante.

    Conozco un procesador de 8 bits que sí tiene instrucción de multiplicar y de dividir, de hecho la de multiplicar da como resultado un número de 16 bits, que se guarda en dos campos / registros de 8 bits. El procesador incluído como núcleo en el microcontrolador 8051, que data de 1980 por Intel:

    8051 MUL instruction:

    http://www.keil.com/support/man/docs/is51/is51_mul.htm

    8051 DIV instruction:

    http://www.keil.com/support/man/docs/is51/is51_div.htm

    ¿Así que el Z80 se encuentra en desventaja frente a un 8051? ¿El 8051 era mucho más "élite" que el Z80? Lo que si sé, es que el código máquina generado por un programa en C de 8051 en el que hagas cálculos con números de 32 bits ocupa más que el equivalente en Z80, ahora como hagas multiplicaciones y divisiones ya sabemos cual va a ser mejor; y luego para mover bloques de datos, en 8051 tienes lo básico, moverlos byte a byte a memoria externa cuesta 2 instrucciones por byte a mover.

    Es un microcontrolador, pero le puedes colocar hasta 64 KB de RAM externa y con otros pines de entrada/salida puedes hacer bank switching y elevar esa cifra a 128 KB o a 256 KB pero sin despeinarte, y entonces ya tendrías convertido el 8051 en procesador de 8 bits. Es una práctica habitual, o al menos lo era, para los computadores en sistemas ferroviarios en los 80; había placas madre con un 8051, RAM externa, disquetera y adaptador de vídeo; además de puerto serie RS-422 y 485 Y se siguen usando, montando y reparando; como les funcionan no las cambian,

    Ahora, a nivel de eficiencia en la ejecución de las intrucciones ya no sé quien gana, si el Z80 o el 8051


    Por otra parte, gran parte de la magia del 68000 es que ya tiene lista la siguiente instrucción a ejecutar mientras está ejecutando la anterior... pipelining, creo que es el primero en llevar de esto,
    Última edición por masteries; 28/06/2018 a las 23:21
    La maestría interior...

  5. #19
    Fecha de ingreso
    Jul 2009
    Mensajes
    8,454
    Agradecer
    734
    Agradecido 330 veces en 251 posts
    Mencionado
    52 Post(s)
    Tagged
    0 Tema(s)
    https://chuntey.wordpress.com/2013/1...es-chapter-15/

    a veces con simples rotaciones de bits bastaba, depende por cuanto se queria multiplicar o dividir...
    ...

Página 2 de 2 PrimerPrimer 12

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •