Herramientas de usuario

Herramientas del sitio


tutorial_de_ensamblador

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
tutorial_de_ensamblador [26/02/2018 21:17]
zako [Hola Ventana]
tutorial_de_ensamblador [13/03/2018 11:09] (actual)
zako
Línea 530: Línea 530:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 650: Línea 650:
 <code asm> <code asm>
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
 </​code>​ </​code>​
  
-SECTION define una sección de código, como su propio nombre indica, un bloque de código que queremos definir y colocar en una posición específica de la memoria. El ensamblador del RGBDS nos permite definirle un nombre "​start"​ y una dirección de inicio, la dirección a partir de la cual, colocamos ese código en memoria. En la GameBoy, hemos visto en el mapa de memoria, que la ROM del cartucho, donde debe ir nuestro propio código, comienza en $0000, pero los 256 primeros bytes ($100), están reservados para las rutinas de interrupción,​ por lo que debemos colocar nuestro código a partir de la dirección, $0100, por eso colocamos la sección "​start"​ a partir de HOME ($0000) + $100.+SECTION define una sección de código, como su propio nombre indica, un bloque de código que queremos definir y colocar en una posición específica de la memoria. El ensamblador del RGBDS nos permite definirle un nombre "​start"​ y una dirección de inicio, la dirección a partir de la cual, colocamos ese código en memoria. En la GameBoy, hemos visto en el mapa de memoria, que la ROM del cartucho, donde debe ir nuestro propio código, comienza en $0000, pero los 256 primeros bytes ($100), están reservados para las rutinas de interrupción,​ por lo que debemos colocar nuestro código a partir de la dirección, $0100, por eso colocamos la sección "​start"​ a partir de ROM0 ($0000) + $100.
 Entonces ejecutamos un **nop**, esta instrucción de gbz80, no hace nada, literalmente (No OPeration). Sirve para perder tiempo (4 ciclos) o para rellenar bloques de datos que necesitemos vacios (1 byte). Entonces ejecutamos un **nop**, esta instrucción de gbz80, no hace nada, literalmente (No OPeration). Sirve para perder tiempo (4 ciclos) o para rellenar bloques de datos que necesitemos vacios (1 byte).
 Después ejecutamos la instrucción **jp**, que sirve para hacer saltos de un lugar a otro del programa, pudiendo definir condiciones para realizar el salto o no. Después ejecutamos la instrucción **jp**, que sirve para hacer saltos de un lugar a otro del programa, pudiendo definir condiciones para realizar el salto o no.
Línea 852: Línea 852:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 992: Línea 992:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 1239: Línea 1239:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 1575: Línea 1575:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp  inicio     jp  inicio
Línea 2418: Línea 2418:
  
 ; interrupción de vBlank ; interrupción de vBlank
-SECTION "​Vblank",​HOME[$0040]+SECTION "​Vblank",​ROM0[$0040]
     call DibujaCronometro     call DibujaCronometro
     reti     reti
  
 ; interrupción de desbordamiento del timer ; interrupción de desbordamiento del timer
-SECTION "​Timer_Overflow",​HOME[$0050]+SECTION "​Timer_Overflow",​ROM0[$0050]
     ; cuando hay una interrupción del timer, llamamos a esta subrutina     ; cuando hay una interrupción del timer, llamamos a esta subrutina
     call    ControlTimer     call    ControlTimer
Línea 2429: Línea 2429:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 3064: Línea 3064:
  
 ; interrupción de vBlank ; interrupción de vBlank
-SECTION "​Vblank",​HOME[$0040]+SECTION "​Vblank",​ROM0[$0040]
     reti     ; no hacemos nada, volvemos     reti     ; no hacemos nada, volvemos
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp      inicio     jp      inicio
Línea 3790: Línea 3790:
  
 ; El programa comienza aqui: ; El programa comienza aqui:
-SECTION "​start",​HOME[$0100]+SECTION "​start",​ROM0[$0100]
     nop     nop
     jp          inicio     jp          inicio
tutorial_de_ensamblador.txt · Última modificación: 13/03/2018 11:09 por zako