2010-01-27 16 views
5

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 
+0

¿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. –

+0

Las aplicaciones bastante seguras comienzan en 4080h. –

+0

Sí, putc conserva el acumulador. – c4757p

Respuesta

9

Aparentemente, se está preparando para la dirección 0080h. Esto no puede ser correcto porque el rango de direcciones 0000h - 3FFFh está bloqueado en la página ROM ROM. De hecho, de acuerdo con this example, se ensambla a 4000h. Entonces, su problema es que su CALL está entrando en el firmware, no en una parte de su aplicación.

+2

Sí, ese fue un momento tonto. Lancé 'ORG 4000h' y ahora funciona. Ahora tengo otro problema ... Nada que 'PutC' vaya a la pantalla, probablemente sea un error estúpido. Por Dios, el primer lenguaje maldito que programé fue ensamblador 8080, y ahora ha pasado tanto tiempo que mi código de ensamblaje parece que fue escrito por un chimpancé. – c4757p

+0

Ok. Problema resuelto. Sí, el problema de PutC también es un error estúpido. Gracias. – c4757p

+3

+1 para recordar aún Z80 asm – hirschhornsalz

2

Aquí hay un memory map que encontré para el Ti-83 +. No puede cargar este programa en la dirección $ 0080, es donde vive el ROM. Se carga en otro lugar. Eso funciona por un tiempo hasta que haga un JP o CALL. El CALL $ 0099 no salta a su dirección de salto esperada, salta a ROM. Ese es un final rápido.

Debe elegir una directiva ORG apropiada en su .asm para que se cargue en la RAM en la dirección esperada. Donde sea que eso sea

Cuestiones relacionadas