2010-01-27 1 views
5

Каждый раз, когда я собираю приложение для калькулятора TI-83 + (процессор Z80), он перестает работать на CALL. Вот пример («Привет») - он запускается нормально, но калькулятор зависает в инструкции CALL. Все, что я поставил перед CALL, отлично работает, и все, что я поставил после, не запускается. Это разбор кода, чтобы показывать адреса, а не метки. Я «коснулся его», чтобы показать строки DB, где они попадают, чтобы было легче читать.Z80 (TI-83 +) перестает работать на CALL

У меня никогда не возникало этой проблемы при написании сборки «программ» (которые загружаются в ОЗУ). Единственные проблемы, с которыми я знаю, с запущенными «приложениями» (которые хранятся во Flash ROM) - это то, что они не могут быть самомодифицирующимися, и что из-за необходимости подкачки, доступ к данным на отдельной странице невозможен. Это не самомодификация и только одна страница ... Что я сделал не так?

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

Позволяет ли вызов putc гарантировать сохранение содержимого регистра A? Большая проблема, если нет. Чтобы узнать, есть ли проблема, окружайте вызов putc нажатием и поп, чтобы сохранить A. –

+0

Довольно уверенные приложения начинаются с 4080h. –

+0

Да, putc сохраняет аккумулятор. – c4757p

ответ

9

Видимо, вы собираетесь по адресу 0080h. Это не может быть правильно, потому что диапазон адресов 0000h - 3FFFh заблокирован на странице ROM 0. Действительно, согласно this example, вы собираете до 4000 часов. Поэтому ваша проблема заключается в том, что ваш CALL прыгает в прошивку, а не в вашу заявку.

+2

Да, это был тупой момент. Я бросил «ORG 4000h», и теперь он работает. У меня теперь есть еще одна проблема, хотя ... Ничто, что я 'PutC' не идет на экран - вероятно, глупость. Jeez - первый фригийский язык, который я когда-либо программировал, был ассемблером 8080, и теперь это было так долго, мой код сборки выглядит так, как будто он был написан шимпанзе. – c4757p

+0

Хорошо. Задача решена. Да, проблема PutC также является иронической ошибкой. Спасибо. – c4757p

+3

+1 для запоминания Z80 asm – hirschhornsalz

2

Вот memory map Я нашел для Ti-83 +. Вы не можете загрузить эту программу по адресу $ 0080, вот где живет ПЗУ. Он загружается в другое место. Это работает некоторое время, пока вы не сделаете JP или CALL. CALL $ 0099 не перескакивает на ваш ожидаемый адрес перехода, он переходит в ПЗУ. Это быстрый конец.

Вам нужно выбрать правильную директиву ORG в вашем .asm, чтобы она загружалась в ОЗУ по ожидаемому адресу. Где бы это ни было.