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:interrupciones [21-01-2024 11:05] – [Paginación 128KB y ubicación de nuestra ISR] sromero | cursos:ensamblador:interrupciones [21-01-2024 11:23] (actual) – [Instrucción HALT] sromero | ||
---|---|---|---|
Línea 105: | Línea 105: | ||
==== Instrucción HALT ==== | ==== Instrucción HALT ==== | ||
- | La instrucción '' | + | La instrucción '' |
<code z80> | <code z80> | ||
Línea 111: | Línea 111: | ||
</ | </ | ||
- | Como veremos más adelante, la instrucción | + | Básicamente, la ejecución de nuestro programa se detiene en el '' |
- | Como veremos con detalle a continuación, | + | Como veremos con detalle a continuación, |
+ | |||
+ | Como veremos más adelante, la instrucción '' | ||
\\ | \\ | ||
Línea 1117: | Línea 1119: | ||
ret | ret | ||
</ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | ===== Utilizar un JP como ISR ===== | ||
+ | |||
+ | En muchos juegos comerciales y homebrew, la rutina de ISR no es una rutina en sí misma sino un '' | ||
+ | |||
+ | |||
+ | <code z80> | ||
+ | ; Rutina de ISR ubicada junto a nuestro programa, y no en dirección tipo $XYXY | ||
+ | ORG 40000 | ||
+ | |||
+ | ; Generamos una tabla de 257 valores " | ||
+ | ld hl, $a000 | ||
+ | ld a, $a2 ; A = $a2 | ||
+ | ld (hl), a ; Cargamos $a2 en $fe00 | ||
+ | ld de, $fe01 ; Apuntamos DE a $fe01 | ||
+ | ld bc, 256 ; Realizamos 256 ldi para copiar $a2 | ||
+ | ldir ; en toda la tabla de vectores de int. | ||
+ | |||
+ | ; Activamos im2 con nuestra ISR | ||
+ | di | ||
+ | ld a, $fe ; Definimos la tabla a partir de $fe00. | ||
+ | ld i, a | ||
+ | im 2 ; Saltamos a im2 | ||
+ | ei | ||
+ | |||
+ | ; Nuestro programa | ||
+ | ; (...) | ||
+ | |||
+ | Rutina_ISR: | ||
+ | ; La rutina ISR | ||
+ | (...) | ||
+ | ei | ||
+ | reti | ||
+ | |||
+ | ; Guardamos en una variable de preprocesador la posicion | ||
+ | ; de este punto en el proceso de ensamblado ($) | ||
+ | PUNTO_ENSAMBLADO EQU $ | ||
+ | |||
+ | ; | ||
+ | ; Nuestra rutina de ISR ensamblada en $A2A2: JP a rutina real | ||
+ | ; | ||
+ | ORG $A2A2 | ||
+ | |||
+ | PUNTO_ENTRADA_ISR: | ||
+ | jp Rutina_ISR | ||
+ | </ | ||
+ | |||
+ | De esta forma, la tabla de vectores de interrupción y la rutina ISR (un simple '' | ||
Línea 1173: | Línea 1225: | ||
\\ | \\ | ||
|< 90% >| | |< 90% >| | ||
- | ^ Juego ^ Ubicación tabla vectores ^ Ubicación ISR ^ Tipo de ISR (rutina o salto) ^ Notas ^ | + | ^ Juego ^ Ubicación tabla vectores ^ Ubicación ISR ^ Tipo de ISR (rutina o\\ salto a rutina real) ^ Notas ^ |
- | | La Familia Addams (The Addams Family) | $b900-$ba00 | $5b5b | ISR es '' | + | | La Familia Addams (The Addams Family) | $b900-$ba00 | $5b5b | ISR es '' |
| Where Time Stood Still | $8400-$8500 | $bebe | Rutina ISR | - | | | Where Time Stood Still | $8400-$8500 | $bebe | Rutina ISR | - | | ||
- | | Demo 7th Reality | $6300-$6400 | $6464 | ISR es '' | + | | Demo 7th Reality | $6300-$6400 | $6464 | ISR es '' |
| La Abadia Del Crimen | $be00-$bf00 | $bfbf | Rutina ISR | - | | | La Abadia Del Crimen | $be00-$bf00 | $bfbf | Rutina ISR | - | | ||
- | | Chase HQ 2 | $9b00-$9c00 | $fdfd | ISR es '' | + | | Chase HQ 2 | $9b00-$9c00 | $fdfd | ISR es '' |
- | | Grand Prix Circuit | $8200-$8300 | $6363 | ISR es '' | + | | Grand Prix Circuit | $8200-$8300 | $6363 | ISR es '' |
- | | Robocop 2 | $7700-$7800 | $5b5b | ISR es '' | + | | Robocop 2 | $7700-$7800 | $5b5b | ISR es '' |
- | | Robocop 3 | $7700-$7800 | $7676 | ISR es '' | + | | Robocop 3 | $7700-$7800 | $7676 | ISR es '' |
- | | Spacegun | $be00-$bf00 | $bfbf | ISR es '' | + | | Spacegun | $be00-$bf00 | $bfbf | ISR es '' |
- | | Desafio Total (Total Recall) | $9100-$9200 | $5d5d | ISR es '' | + | | Desafio Total (Total Recall) | $9100-$9200 | $5d5d | ISR es '' |
| Carrier Command | $8300-$8400 | $8585 | Rutina ISR | - | | | Carrier Command | $8300-$8400 | $8585 | Rutina ISR | - | | ||
| El Gran Halcón (Hudson Hawk) | $9000-$8100 | $8181 | Rutina ISR | - | | | El Gran Halcón (Hudson Hawk) | $9000-$8100 | $8181 | Rutina ISR | - | | ||
- | | NARC | $be00-$bf00 | $bfbf | ISR es '' | + | | NARC | $be00-$bf00 | $bfbf | ISR es '' |
- | | Navy Seals | $9100-$9200 | $5d5d | ISR es '' | + | | Navy Seals | $9100-$9200 | $5d5d | ISR es '' |
- | | Pang | $8000-$8101 | $8181 | ISR es '' | + | | Pang | $8000-$8101 | $8181 | ISR es '' |
\\ | \\ | ||