Cada vez que ensamblo una aplicación para la calculadora TI-83 + (procesador Z80), deja de ejecutarse en CALL. Aquí hay un ejemplo ("Hola"): comienza a funcionar bien, pero la calculadora se congela en la instrucción CALL. Todo lo que pongo antes de CALL funciona bien, y todo lo que pongo no se ejecuta. Esto es un desmontaje del código, para mostrar direcciones en lugar de etiquetas. Lo he "retocado" para mostrar las líneas de DB donde se encuentran, para facilitar la lectura.Z80 (TI-83 +) deja de funcionar en CALL
Nunca he tenido este problema al escribir "programas" de ensamblaje (que se cargan en la memoria RAM). Los únicos problemas que conozco con la ejecución de "aplicaciones" (que se guardan en Flash ROM) son que no se pueden modificar por sí mismos, y que debido a que es necesario paginar, no es posible acceder a los datos en una página separada. Esto no es auto-modificable y solo 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
¿La llamada putc garantiza que conservará los contenidos del registro A? Gran problema si no. Para saber si ese es el problema, rodee la llamada de putc con un push y un pop para preservar A. –
Las aplicaciones bastante seguras comienzan en 4080h. –
Sí, putc conserva el acumulador. – c4757p