Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:ensamblador:asmz88dk [12-01-2024 15:12] – [Ejemplos varios] sromero | cursos:ensamblador:asmz88dk [21-01-2024 16:52] (actual) – [Enlaces] sromero | ||
---|---|---|---|
Línea 39: | Línea 39: | ||
{ | { | ||
#asm | #asm | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
#endasm | #endasm | ||
} | } | ||
Línea 83: | Línea 83: | ||
#asm | #asm | ||
- | | + | |
- | | + | |
; en la pila por el compilador (valor de Y) | ; en la pila por el compilador (valor de Y) | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
;;; (ahora hacemos lo que queramos en asm) | ;;; (ahora hacemos lo que queramos en asm) | ||
Línea 105: | Línea 105: | ||
Como hemos comentado en un apartado anterior, no tenemos que preocuparnos por hacer '' | Como hemos comentado en un apartado anterior, no tenemos que preocuparnos por hacer '' | ||
- | El problema es que conforme crece el número de parámetros apilados, es posible que tengamos que hacer malabarismos para almacenarlos, | + | El problema es que conforme crece el número de parámetros apilados, es posible que tengamos que hacer malabarismos para almacenarlos, |
<code c> | <code c> | ||
Línea 113: | Línea 113: | ||
#asm | #asm | ||
- | | + | |
- | | + | |
; en la pila por el compilador (z) | ; en la pila por el compilador (z) | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
;;; (ahora hacemos lo que queramos en asm) | ;;; (ahora hacemos lo que queramos en asm) | ||
Línea 150: | Línea 150: | ||
#asm | #asm | ||
- | | + | |
- | | + | |
; en la pila por el compilador (y) | ; en la pila por el compilador (y) | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
; Si hubiera más parámetros, | ; Si hubiera más parámetros, | ||
- | ; "INC HL" para acceder a ellos. Como es el último, no es necesario. | + | ; "inc hl" para acceder a ellos. Como es el último, no es necesario. |
| | ||
;;; (ahora hacemos lo que queramos en asm) | ;;; (ahora hacemos lo que queramos en asm) | ||
Línea 175: | Línea 175: | ||
{ | { | ||
#asm | #asm | ||
- | | + | |
- | | + | |
; en la pila por el compilador (value) | ; en la pila por el compilador (value) | ||
- | | + | |
| | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
#endasm | #endasm | ||
} | } | ||
Línea 197: | Línea 197: | ||
#asm | #asm | ||
- | | + | |
- | | + | |
; en la pila por el compilador (z) | ; en la pila por el compilador (z) | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
;;; (ahora hacemos lo que queramos en asm) | ;;; (ahora hacemos lo que queramos en asm) | ||
- | | + | |
valor_x | valor_x | ||
Línea 262: | Línea 262: | ||
#asm | #asm | ||
- | | + | |
.fadescreen_loop1 | .fadescreen_loop1 | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
.fadescreen_loop2 | .fadescreen_loop2 | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
.fadescreen_ink_zero | .fadescreen_ink_zero | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
.fadescreen_paper_zero | .fadescreen_paper_zero | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
#endasm | #endasm | ||
Línea 317: | Línea 317: | ||
</ | </ | ||
- | Un detalle a tener en cuenta, para demostrar esas pequeñas diferencias entre **z80asm** y **pasmo**, es que z80asm utiliza el nmemónico '' | + | Un detalle a tener en cuenta, para demostrar esas pequeñas diferencias entre **z80asm** y **pasmo**, es que z80asm utiliza el nmemónico '' |
\\ | \\ | ||
Línea 342: | Línea 342: | ||
#asm | #asm | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
#endasm | #endasm | ||
} | } | ||
Línea 377: | Línea 377: | ||
{ | { | ||
#asm | #asm | ||
- | | + | |
- | | + | |
- | | + | |
| | ||
- | | + | |
- | | + | |
- | | + | |
#endasm | #endasm | ||
} | } | ||
Línea 457: | Línea 457: | ||
inc hl | inc hl | ||
pop bc // recuperamos BC | pop bc // recuperamos BC | ||
- | dec bc // Este DEC BC puede hacer BC=0 si los datos | + | dec bc // Este dec bc puede hacer BC=0 si los datos |
// RLE no correctos. Cuidado (mem-smashing). | // RLE no correctos. Cuidado (mem-smashing). | ||
dec bc | dec bc | ||
Línea 474: | Línea 474: | ||
//--- SetRAMBank ------------------------------------------------------ | //--- SetRAMBank ------------------------------------------------------ | ||
// | // | ||
- | // Se mapea el banco (0-7) indicado sobre $C000. | + | // Se mapea el banco (0-7) indicado sobre $c000. |
// | // | ||
// Ojo: en esta función no se deshabilitan las interrupciones y además, | // Ojo: en esta función no se deshabilitan las interrupciones y además, | ||
Línea 488: | Línea 488: | ||
ld b, a | ld b, a | ||
- | ld a, ($5B5C) | + | ld a, ($5b5c) |
and f8h | and f8h | ||
or b | or b | ||
- | ld bc, $7FFD | + | ld bc, $7ffd |
- | ld ($5B5C), a | + | ld ($5b5c), a |
out (c), a ; Realizamos cambio de banco | out (c), a ; Realizamos cambio de banco | ||
# | # | ||
Línea 498: | Línea 498: | ||
</ | </ | ||
- | Con el anterior código podemos mapear uno de los bancos de memoria de 16KB sobre la página que va desde $C000 a $FFFF, pero debido al uso de memoria, variables y estructuras internas que hace Z88DK, debemos seguir una serie de consideraciones. | + | Con el anterior código podemos mapear uno de los bancos de memoria de 16KB sobre la página que va desde $c000 a $ffff, pero debido al uso de memoria, variables y estructuras internas que hace Z88DK, debemos seguir una serie de consideraciones. |
- | * Todo el código en ejecución debe estar por debajo de $C000, para lo cual es recomendable definir los gráficos al final del " | + | * Todo el código en ejecución debe estar por debajo de $c000, para lo cual es recomendable definir los gráficos al final del " |
* Es importantísimo colocar la pila en la memoria baja, mediante la siguiente instrucción (o similar, según la dirección en que queremos colocarla) al principio de nuestro programa: | * Es importantísimo colocar la pila en la memoria baja, mediante la siguiente instrucción (o similar, según la dirección en que queremos colocarla) al principio de nuestro programa: | ||
Línea 511: | Línea 511: | ||
\\ | \\ | ||
- | La regla general es asegurarse de que no haya nada importante (para la ejecución de nuestro programa) en el bloque $C000 a $FFFF cuando se haga el cambio: ni la pila, ni código al que debamos acceder. Tan sólo datos que puedan ser intercambiandos de un banco a otro sin riesgo para la ejecución del mismo (por ejemplo, los datos de un nivel de juego en el que ya no estamos). | + | La regla general es asegurarse de que no haya nada importante (para la ejecución de nuestro programa) en el bloque $c000 a $ffff cuando se haga el cambio: ni la pila, ni código al que debamos acceder. Tan sólo datos que puedan ser intercambiandos de un banco a otro sin riesgo para la ejecución del mismo (por ejemplo, los datos de un nivel de juego en el que ya no estamos). |
Línea 521: | Línea 521: | ||
\\ | \\ | ||
- | **[ [[.: | + | **[ [[.: |