Z80 (TI-83 +) deja de funcionar en LLAMADA
-
23-09-2019 - |
Pregunta
Cada vez que ensamblar una aplicación para la TI-83 + calculadora (procesador Z80), que deja de funcionar en CALL. Aquí hay un ejemplo ( "Hola") - que comienza a funcionar muy bien, pero la calculadora se congela a la instrucción CALL. Cualquier cosa que puse antes de la llamada funciona muy bien, y todo lo que puse después no se ejecuta. Se trata de un desmontaje del código, para mostrar direcciones en lugar de etiquetas. He "tocado arriba" para mostrar las líneas de base de datos donde los caída en, para hacer más fácil la lectura.
Nunca he tenido este problema montaje escribir "programas" (que se carga en la RAM). Los únicos problemas que yo sepa con el funcionamiento de "aplicaciones" (que se mantienen en la memoria Flash ROM) son que no pueden ser auto-modificación, y que debido a la paginación es necesario, acceder a los datos en una página separada no es posible. Esto no es auto-modificable y sólo tiene una página ... ¿Qué he hecho mal?
0080 218900 LD HL, 0089h
0083 cd9900 CALL 0099h ; --- App stops here
0086 c38f00 JP 008fh
0089 48656c6c6f00 DB "Hello", 0
008f fd360500 LD (IY+05h), 0
0093 ef RST 28h ; B_CALL (
0094 364c DB 4C36h ; _ReloadAppEntryVecs)
0096 ef RST 28h ; B_CALL (
0097 2740 DB 4027h ; _JForceCmdNoChar) --- App should end here
0099 7e LD A, (HL) ; --- Call goes to here
009a ef RST 28h ; B_CALL (
009b 0445 DB 4504h ; _PutC)
009d fe00 CP 0
009f c8 RET Z
00a0 23 INC HL
00a1 18f6 JR 0099h
Solución
Al parecer, que está ensamblando a la dirección 0080h. Esto no puede ser correcto porque el rango de dirección 0000h - 3FFFh está bloqueado en ROM página 0. De hecho, según este ejemplo, que se monten a 4000h. Por lo que su problema es que su llamada está saltando en el firmware, no una parte de su aplicación.
Otros consejos
Aquí hay una href="http://en.wikibooks.org/wiki/TI_83_Plus_Assembly/Memory" rel="nofollow noreferrer"> mapa de memoria he encontrado para la TI-83 +. Usted no puede ser cargado este programa en la dirección $ 0080 que es donde vive la ROM. Se pone en otro lugar cargado. Que funciona por un tiempo hasta que se haga un juez de paz o una llamada. El LLAMADA $ 0099 no salta a la dirección de salto se esperaba, salta en la ROM. Eso es un final rápido.
Usted tiene que elegir una directiva ORG adecuada en su asm por lo que se carga en la memoria RAM en la dirección esperada. Donde quiera que sea.