Omnimaga

Calculator Community => TI Calculators => TI-BASIC => Topic started by: TiAddict on May 27, 2011, 04:28:07 pm

Title: need code to get the address in hexadecimal (code in basic)
Post by: TiAddict on May 27, 2011, 04:28:07 pm
For people who knows how hexadecimal programing works, and ti basic language,
So I'm trying to create a on-calc assembler, and i need code to get the address in hexadecimal? (i already have a basic prgm that will convert number in a (decimal) to hexadecimal,prgm that will change letters to hexadecimal) i just cant figure out how it works. i read the code from OTBP, TASM again and again, but i coudnt figure out how they get it.
for example,

ld hl,0h                   ;210000
ld (currow),hl           ;224B48
ld hl,text                 ;21A29D this is the part i dont know how to get
bcall puts                ;EF0A45
ret                          ;c9
text:                       ;48454C4C4F20574F524C442100
.db "hello world",0
i know that prgm starts at $9D95 ($959D)
Please help!
if this is too much, you can still give me some tips to do this. thanks
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: SirCmpwn on May 28, 2011, 06:43:01 pm
Okay, so you need to keep track of the address as you're assembling.  Here's how I would do it with your program: perform two passes, and keep track of everything you need to know an address for.  Like this:
Code: [Select]
ld hl,0h                   ;9D95: 210000
ld (currow),hl           ;9D98: 224B48  (plus 3 bytes to current address)
ld hl,text                 ;9D9B: 210000  (default the value to 0000, and store the word "text" somewhere, and the address 9D9B)
bcall puts                ;9D9E: EF0A45
ret                          ;9DA1: c9
text:                       ;9DA2 (save this somewhere - text = 9DA2)
.db "hello world",0 ;48454C4C4F20574F524C442100
Then, go find everywhere that mentions "text" and replace the value with A29D (don't forget little endian)
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: TiAddict on May 29, 2011, 01:35:42 am
Ah thank you! that explained so much! ahaha :) but what should i do if there is more address to save? that i will need more strings right? or is there a way to store in a list?

and does using "Ans" faster?
for example,
:1+1->A
or
:1
:Ans+1->A
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: SirCmpwn on May 29, 2011, 01:44:49 am
Using ans is tricky and requires careful planning of the whole program.  For something as complex as an assembler, I would stick to variables.  As for strings, I suggest using a combination of a list, a string, and sub(.  For example, with the text label and an example label, the string could be "testexample" and the list could contain the starting position and length of each labels name, and the address they represent.
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: TiAddict on May 29, 2011, 01:48:57 am
oh I see. Thank you so much for helping! :D
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: SirCmpwn on May 29, 2011, 01:53:30 am
Sure thing.  Be sure to post any other troubles you encounter, and watch for an upcoming tutorial of mine on the subject.
Title: Re: need code to get the address in hexadecimal (code in basic)
Post by: TiAddict on May 29, 2011, 11:43:00 pm
oh thank you :D and i will! i cant wait!