Пытаясь написать сборку для своего TI-84 PlusCE, я обнаружил странную ошибку. Рассмотрим следующий код:
#include "includes\ti84pce.inc"
s_mem_start = saveSScreen
.assume ADL=1
.org userMem-2
.db tExtTok,tAsm84CeCmp
;relevant portion
ld HL, s_mem_start
ld DE, 2
ADD HL, DE
ld D, H
ld E, L
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
;/relevant portion
ret
saveSScreen
- это часть свободного барана. _PutC
- это вызов ROM, который выводит значение A
на экран. См. Эту диаграмму: http://tibasicdev.wikidot.com/83lgfont. Я подтвердил, что _PutC
не влияет ни на какие регистры. Вывод этого кода на экран - v[CursorInsertSecond]
. (CursorInsertSecond - это символ на калькуляторе). Они эквивалентны шестнадцатеричному символу 03
или 73
и E5
. Я не могу сказать, является ли v обычным v или курсивом v.
Очевидно, что (HL)
и (DE)
обращаются к разным частям памяти. То же самое и при использовании BC
. Странно то, что я нигде не могу найти записанную информацию. Казалось бы, большой ущерб иметь только одну регистровую пару для доступа к памяти. Действительно, из-за этого мой собственный код стал очень раздутым.
И последнее, что я заметил, это то, что это применимо только при добавлении к HL
. Рассмотрим этот код: (без заголовка).
ld HL, s_mem_start + 2
ld DE, s_mem_start + 2
ld A, (HL)
call _PutC
ld A, (DE)
call _PutC
Это приводит к выводу vv
. Что здесь может происходить? Почему (HL)
и (DE)
дают разные результаты, но только иногда?
- Экран моего калькулятора после запуска первой программы: https://imgur.com/a/C6zGCz2
- Мой файл ti84pce.inc: https://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File
- Модель калькулятора: TI-84 Plus CE
- Компилятор: https://github.com/alberthdev/spasm-ng/releases
- Линкер: TI-Connect
_PutC
портит ваши данные наs_mem_start+2
. Может быть, это все-таки не свободный барабан :) Что произойдет, если вы загрузите(DE)
перед первым_PutC
и нажмете значение, а затем вставите его для второго вызова? Что произойдет, если вы сначала напечатаете(DE)
и(HL)
вторую? - person Jester   schedule 09.08.2020s_mem_start
, а неs_mem_start+2
. Может тогда попробовать? - person Jester   schedule 09.08.2020