[DEZ80 2.T04] TEORIA: Repeticiones y contadores. Bucles

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 ก.พ. 2025

ความคิดเห็น • 13

  • @damianleon2109
    @damianleon2109 4 ปีที่แล้ว +2

    Muchas gracias me ayudaste a entregar un trabajo de la facultad

  • @Cesar-zo6fe
    @Cesar-zo6fe 7 ปีที่แล้ว +3

    La clase de teoria más intensa hasta la fecha, triplicando el número de instrucciones conocidas.

  • @miguelreinosomusic
    @miguelreinosomusic 5 ปีที่แล้ว +2

    Buenas tardes Profesor Retroman. Estos programas en código máquina que hacemos en Winape, como los puedo ejecutar en mi cpc 464 real? Veo que desde Basic puedo invocar rutinas mediante la instrucción Call pero para poder escribir y ejecutar programas directamente en ensamblador y código máquina parece que necesito cargar algún programa... Es decir, mi duda es si no se puede escribir y ejecutar en ensamblador y código máquina directamente en el cpc464 nada más encenderlo...
    Muchas gracias Profesor.

    • @ProfesorRetroman
      @ProfesorRetroman  5 ปีที่แล้ว +6

      En el Amstrad CPC real hay programas ensambladores clásicos y modernos con los que puedes escribir código ensamblador y ensamblarlo a alguna zona de memoria, como por ejemplo ORGAMS. Esa sería la opción elegida por mucha gente por comodidad. Las opciones más clásicas son más sencillas, pero también muy usadas. Por ejemplo, introducir el código máquina a mano en memoria con la instrución POKE. Por ejemplo, POKE &4000,&3E introduciría el valor hexadecimal 3E (Opcode para la instrucción LD A, nn) en la dirección de memoria 4000 en hexadecimal también. Se puede hacer fácilmente un bucle en BASIC que lea el código máquina que queremos introducir desde una lista en órdenes DATA usando READ, y vaya haciendo POKE a memoria de los bytes uno a uno. Después, con un simple CALL a la dirección de inicio del código, lo ejecutaríamos. Otra opción también es hacer un programa en BASIC que nos vaya pidiendo con INPUT los valores a introducir en memoria, y así podemos introducir el código máquina manualmente en memoria.
      Me parece interesante hablar de ello, así que me lo apuntaré para hacer un vídeo con todas estas ideas.
      Espero que te sean de utilidad.

    • @miguelreinosomusic
      @miguelreinosomusic 5 ปีที่แล้ว +2

      @@ProfesorRetroman Fantástica explicación, como siempre. Me da muchas ideas para empezar a probar cosas... Muchas gracias Profesor.

    • @miguelreinosomusic
      @miguelreinosomusic 5 ปีที่แล้ว +1

      @@ProfesorRetroman Buenos tardes Profesor. Gracias a sus pistas he acabado dando con un sencillísimo bucle for-next que dentro contiene la instrucción Poke y que me permite pintar toda la pantalla o una parte de ella con diversas combinaciones de colores... He conseguido columnas de pixeles rojos y amarillos más el color de fondo por toda la memoria de video... Gracias a sus consejos me estoy aproximando a mi idea de poder hacer los ejercicios del curso DEZ80 en mi viejo Cpc, sin necesidad del emulador... Evidentemente el poder del emulador en un PC actual es increíble, pero prefiero trabajar todo lo que pueda con la máquina original... Me transmite unas sensaciones que no se pueden describir...
      Muchas gracias Profesor.

    • @ProfesorRetroman
      @ProfesorRetroman  5 ปีที่แล้ว +1

      Me parece estupendo. Esto siempre es poco a poco y se va aprendiendo y mejorando. Siempre hay que tener la vista puesta en terminar entendiendo todos los detalles posibles, para luego poder hacer uno mismo lo que verdaderamente quiera. Por el camino, muchas veces, se hacen cosas de las que se entiende parcialmente sólo. Pero si se sigue practicando y perseverando se va asentando el conocimiento y entendiendo cada vez más.
      Puedes hacerlo todo en la máquina original, sin problema. Si bien es verdad que para practicar y aprender te será más rápido y productivo el emulador al principio. Pero me parece genial que quieras pasarlo a la máquina real y vayas practicando en ella. Seguro que disfrutarás y aprenderás mucho. Además, luego espero que grabes vídeos de tus resultados en máquina real y nos los compartas para que todos lo disfrutemos.
      Ánimo y a disfrutar mientras aprendes :)

    • @miguelreinosomusic
      @miguelreinosomusic 5 ปีที่แล้ว +4

      Buenos días Profesor Retroman. No puedo agradecerle lo suficiente todo lo que me ha enseñado con sus respuestas. Tal como me explicó, empecé introduciendo el código máquina "a mano" con la instrucción POKE para después, siguiendo sus instrucciones, probar a crear una especie de editor muy sencillo ... He estado trasteando varios dias con las dos propuestas que me planteó , la del constructo READ-POKE-DATA y la otra opción usando INPUT ... Con las dos formas he conseguido que funcione y mi favorita es la que usa INPUT ya que la puedo visualizar en mi CPC464 de manera muy parecida a como se ve la ventanita del volcado de memoria en el WinAPE. Por el camino he podido deducir que usar la instrucción CALL equivale a poner el 'pc' en una determinada posición de memoria y he descubierto lo útil que es la instrucción VAL para no tener que escribir "&" antes de cada número hexadecimal a la hora de introducir el código máquina.
      Es un programita muy sencillo pero lo dejo aquí por si algún compañer@ quiere mirarlo o hacer algo con él:
      5 cls
      10 for memoria=&4000 to &4xxx
      20 input;" ",codigo$
      30 poke memoria,val("&"+codigo$)
      40 next
      50 call &4000
      Muchas gracias Profesor.

  • @cfaluotico
    @cfaluotico 6 ปีที่แล้ว +3

    Profe en que video se explican las instrucciones 36 y 23? gracias

    • @ProfesorRetroman
      @ProfesorRetroman  6 ปีที่แล้ว +4

      Charly Faluotico En los vídeos prácticos, a partir del 2.P04. Como digo al principio del curso, la práctica va primero y por eso, si ves los vídeos de teoría primero, te vas a encontrar referencias de las que ya se ha hablado en la práctica☺

  • @omar-C24
    @omar-C24 2 ปีที่แล้ว

    Hola @Profesor Retroman. Me está carcomiendo una duda. Cuál de los dos de los siguientes bucles es conveniente usar? Ya sea por la estructura lógica del programa o su mejor lectura, rendimiento etc. Es un programa muy pequeño, pero en programas más grandes quizás esto represente un problema de rendimiento, o quizás mi pregunta no tenga sentido. De todas maneras me serviría de mucho su opinión. Gracias.
    21 00 C0 3E 0A 06 3C 36 0F 76 05 20 FC 23 3D 20 F6 18 FE
    21 00 C0 3E 0A 36 FF 06 3C 76 05 20 FC 23 3D 20 F4 18 FE

  • @miprogramacionmexico
    @miprogramacionmexico 3 ปีที่แล้ว +1

    Hola Retroman, porqué usted hasta ahora solo usa jr en lugar de jp? creo que el segundo es más facil de entender, ¿tiene que ver con performance?

    • @ProfesorRetroman
      @ProfesorRetroman  3 ปีที่แล้ว +6

      Hola Ángel. JR y JP son diferentes y tienen distintos usos y aplicaciones. JR es un salto relativo (Jump Relative) mientras que JP es un salto absoluto (JumP). JR, al ser relativo, sólo necesita el desplazamiento, por lo que la instrucción completa ocupa en memoria 2 bytes (Opcode + Desplazamiento). Por su parte JP requiere una dirección de memoria completa (2 bytes) como parámetro, lo que hace que ocupe un total de 3 bytes en memoria (Opcode + dirección). En cuanto al rendimiento (performance) ambas instrucciones cuestan 3 microsegundos en ejecución, en un Amstrad CPC. En otras máquinas Z80, JP es ligeramente más rápido que JR, por 2 ciclos (0.5 microsegundos). Por tanto, en Amstrad, es preferible JR a JP donde sea posible, porque cuesta el mismo tiempo de ejecución pero ahorras 1 byte en memoria. Lo que ocurre es que no siempre es posible: si se quiere saltar más de 128 bytes de distancia, no se puede hacer con JR, tiene que ser con JP.