Z80 (TI-83 +) перестает работать на CALL - PullRequest
5 голосов
/ 28 января 2010

Каждый раз, когда я собираю приложение для калькулятора TI-83 + (процессор Z80), оно перестает работать при CALL. Вот пример («Hello») - он запускается просто отлично, но калькулятор зависает по инструкции CALL. Все, что я положил перед 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

Ответы [ 2 ]

9 голосов
/ 28 января 2010

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

2 голосов
/ 28 января 2010

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

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

...