Z80 (TI-83 +) smette di funzionare su CALL
-
23-09-2019 - |
Domanda
Ogni volta che assemblare un'applicazione per la TI-83 + calcolatrice (processore Z80), esso smette di funzionare alle CALL. Ecco un esempio ( "Ciao") - è comincia a correre bene, ma la calcolatrice si blocca con l'istruzione CALL. Tutto ciò che ho messo prima di CALL funziona bene, e tutto ciò che ho messo dopo non viene eseguito. Questo è un disassemblaggio del codice, per mostrare gli indirizzi anziché etichette. Ho "toccato it up" per mostrare le linee di DB dove coloro calo, per rendere più facile la lettura.
Non ho mai avuto questo problema di scrittura di assemblaggio "programmi" (che vengono caricati nella RAM). Gli unici problemi che io sappia con l'esecuzione di "applicazioni" (che sono tenuti in Flash ROM) sono che non possono essere auto-modifica, e che a causa di paging è necessario, l'accesso ai dati in una pagina separata non è possibile. Questo non è auto-modifica e ha una sola pagina ... Cosa ho fatto di male?
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
Soluzione
A quanto pare, si sta assemblando per affrontare 0080h. Questo non può essere corretto, perché l'intervallo di indirizzi 0000H - 3FFFH è bloccata a ROM è la pagina 0. Infatti, secondo questo esempio, si riuniscono per 4000H. Quindi il problema è che la chiamata sta saltando nel firmware, non una parte della vostra applicazione.
Altri suggerimenti
Ecco un ho trovato per la TI-83 +. Non si può essere il caricamento di questo programma all'indirizzo $ 0080, è lì che vive ROM. Esso viene caricato altrove. Che funziona per un po 'fino a quando si effettua una JP o una chiamata. La chiamata $ 0099 non salta al tuo indirizzo di salto previsto, salta in ROM. Questa è una rapida fine.
È necessario scegliere una direttiva ORG corretta nel vostro .asm in modo che viene caricato nella RAM all'indirizzo previsto. Ovunque essa sia.