In the process of attempting to write assembly for my TI-84 PlusCE I came across an odd "bug". Consider the following code:
#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 is a portion of free ram. _PutC is a rom call that prints the value of A to the screen. See this chart: http://tibasicdev.wikidot.com/83lgfont. I have confirmed the _PutC does not affect any registers. The output of this code to the screen is v[CursorInsertSecond]. (CursorInsertSecond is a character on the calculator). These are equivalent to the hex 03 or 73 and E5. I can't tell if the v is the regular v or the italic v.
Clearly (HL) and (DE) are accessing different parts of memory. This is also the same when using BC. The odd thing is I can't find this information recorded anywhere. It would seem a major detriment to only have one register pair for accessing memory. Indeed it has made my own code feel very bloated.
The final odd thing that I have noticed is that this only seems to apply when adding to HL. Consider this code: (Minus the header portion).
 ld HL, s_mem_start + 2
 ld DE, s_mem_start + 2
 ld A, (HL)
 call _PutC
 ld A, (DE)
 call _PutC
This results in the output vv. What could be going on here? Why do (HL) and (DE) give different outputs but only some of the time.
- My calculator screen after running the first program: https://i.stack.imgur.com/jYbzK.jpg
 - My ti84pce.inc file: https://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File
 - Calculator model: TI-84 Plus CE
 - Compiler: https://github.com/alberthdev/spasm-ng/releases
 - Linker: TI-Connect