User Tag List

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

Tema: zx-poly

  1. #16

    Fecha de ingreso
    Oct 2007
    Ubicación
    Madrid
    Mensajes
    2,350
    Mencionado
    70 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    127
    Agradecer Thanks Received 
    222
    Thanked in
    Agradecido 149 veces en [ARG:2 UNDEFINED] posts
    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?

  2. #17

    Fecha de ingreso
    Sep 2006
    Mensajes
    4,489
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    567
    Agradecer Thanks Received 
    497
    Thanked in
    Agradecido 366 veces en [ARG:2 UNDEFINED] posts
    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,350
    Mencionado
    70 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    127
    Agradecer Thanks Received 
    222
    Thanked in
    Agradecido 149 veces en [ARG:2 UNDEFINED] posts
    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; 29/06/2018 a las 00:21

  5. #19

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,502
    Mencionado
    54 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    754
    Agradecer Thanks Received 
    365
    Thanked in
    Agradecido 267 veces en [ARG:2 UNDEFINED] posts
    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...
    ...

  6. #20

    Fecha de ingreso
    Oct 2007
    Ubicación
    Madrid
    Mensajes
    2,350
    Mencionado
    70 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    127
    Agradecer Thanks Received 
    222
    Thanked in
    Agradecido 149 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por SplinterGU Ver mensaje
    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...
    Mira Splinter que recientemente me he documentado sobre la CPU que montan los microcontroladores basados en ARM más humildes, aunque es una CPU de 32 bits... y resulta que la CPU ARM Cortex M0 no dispone de instrucción para dividir números, al menos tiene instrucción para multiplicar... pero lo de la división me ha dejado sorprendido.

  7. #21

    Fecha de ingreso
    Sep 2006
    Mensajes
    4,489
    Mencionado
    21 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    567
    Agradecer Thanks Received 
    497
    Thanked in
    Agradecido 366 veces en [ARG:2 UNDEFINED] posts
    Supongo que porque es un microcontrolador y la division se usa "poco", les conviene ahorrar espacio, pero la multiplicacion la necesitas cada vez que accedes a un elemento mediante un indice.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  8. #22

    Fecha de ingreso
    Jan 2016
    Ubicación
    Cádiz
    Mensajes
    1,683
    Mencionado
    19 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    641
    Agradecer Thanks Received 
    298
    Thanked in
    Agradecido 192 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    A ver, tanto modernuras de teles de 4k y el espectrum mueve 48k???

    el mundo se está yendo al garete...

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
  •