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
    3,441
    Mencionado
    112 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    329
    Agradecer Thanks Received 
    1,183
    Thanked in
    Agradecido 586 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
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  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
    3,441
    Mencionado
    112 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    329
    Agradecer Thanks Received 
    1,183
    Thanked in
    Agradecido 586 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,737
    Mencionado
    64 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    937
    Agradecer Thanks Received 
    571
    Thanked in
    Agradecido 345 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
    3,441
    Mencionado
    112 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    329
    Agradecer Thanks Received 
    1,183
    Thanked in
    Agradecido 586 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
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  8. #22

    Fecha de ingreso
    Jan 2016
    Ubicación
    Cádiz
    Mensajes
    3,308
    Mencionado
    36 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,528
    Agradecer Thanks Received 
    710
    Thanked in
    Agradecido 467 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    3
    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
  •