This is an archived, read-only copy of the United-TI subforum , including posts and topic from May 2003 to April 2012. If you would like to discuss any of the topics in this forum, you can visit Cemetech's z80 & ez80 Assembly subforum. Some of these topics may also be directly-linked to active Cemetech topics. If you are a Cemetech member with a linked United-TI account, you can link United-TI topics here with your current Cemetech topics.

This forum is locked: you cannot post, reply to, or edit topics. Z80 & 68k Assembly => z80 & ez80 Assembly
Author Message
splinter


Newbie


Joined: 04 Apr 2010
Posts: 21

Posted: 17 May 2010 01:00:44 pm    Post subject:

Hi,

I already searched on the internet for compiling my source code.
Well in one tutorial is explained how, but it doesn't work. Here's the link: click
OK, the example shown there works pretty fine. But when I want to compile my own source code with this methode the linker (83lnk.exe, which is used in the tutorial) does not link my object file.
The tutorial says, that I have to delete the first 8 digits and the last two futhermore i have to delete the complete last line.
Now the problem is, my obect file is 4 lines long...
I dont know what to delete. And if I delete the colons the linker does nothing.

I tried also to link with devpac83 but when I want to execute the program the calculator gives me a sytax error.

I heard about squish, but I didn't try it yet.

greets
Back to top
thepenguin77


Advanced Newbie


Joined: 17 Jul 2009
Posts: 72

Posted: 17 May 2010 03:47:44 pm    Post subject:

Well the first thing you have to realize is that the 83 is different than the 83+. So for the most part, if it just says 83 it won't work. That guide is for the 83 so the info that it has will not work right.

A much better tutorial is Learn TI-83 Plus Assembly in 28 Days. This the page I linked to shows how he (and I) assemble files.

On the calculator side. If the program sent, then all went well in linking. The computer checks to make sure that the file is valid. To run on the calculator you have to go to Catalog > asm(. Use that for assembly programs.

Also, I wouldn't run a program you made with that tutorial as .org $9327 will not work well in an 83+. Your first jp or call will send you somewhere bad.

Squishing is only when you type the program in by hand on the calculator. Squishing just turns the text into real hex.
Back to top
splinter


Newbie


Joined: 04 Apr 2010
Posts: 21

Posted: 18 May 2010 11:47:21 am    Post subject:

Sorry, I forgot to say that I have a TI-82 STATS (TI-83) without any plus.
I know how to run ASM-programs on a TI-83: Send(9prgm...
But when I want to execute a program it always says, that there's a syntax error.
The funny thing about this is, that the example works fine...
So there must be a fault in my source code.


Last edited by Guest on 18 May 2010 11:51:33 am; edited 1 time in total
Back to top
FloppusMaximus


Advanced Member


Joined: 22 Aug 2008
Posts: 472

Posted: 27 May 2010 09:40:31 pm    Post subject:

That tutorial is rather confusing...

Basically, if you want to run an assembly program using the Send(9 syntax, it should consist of ASCII hex code, followed by "End" / "0000" / "End". (If you put a number other than 0000 there, the OS will allocate an additional block of memory for you to use as temporary storage. This might have been a useful feature if Send(9 weren't so horribly wasteful to begin with.)

So, for instance, a program to jump to the GetKey routine (4CFE - not to say that using GetKey is a particularly smart idea on the TI-83):

Code:

C3FE4C
End
0000
End


If you've assembled a program using TASM, the output is written in Intel hex format, which contains some extra metadata in addition to the actual hex code you're interested in. For instance:

Code:

:03932700C3FE4C36
:00000001FF

In this case, you can ignore the metadata (i.e., the first 8 digits and the last 2 digits on each line.) The remaining digits are what you want to type into the calculator, as shown above.

I don't know of any programs that do this conversion automatically, but it would certainly be easy enough to write one.

What I would recommend, though, is that you don't use Send(9 at all. Use Venus or Ion instead.
Back to top
splinter


Newbie


Joined: 04 Apr 2010
Posts: 21

Posted: 30 May 2010 09:58:52 am    Post subject:

OK, I was already so far. But my linking program is complaining about everything...
What Linker are you using to link your object files, which you modified in the explained way before?

BTW: I'm using "83lnk.exe"


Last edited by Guest on 30 May 2010 09:59:22 am; edited 1 time in total
Back to top
FloppusMaximus


Advanced Member


Joined: 22 Aug 2008
Posts: 472

Posted: 31 May 2010 05:06:00 pm    Post subject:

Sorry, I'm not familiar with 83lnk.exe; where did it come from?

Almost all of the conversion tools/"linkers" that I've seen require binary input (though some accept Intel hex) and produce a binary program file as output (which you can execute using Venus, Ion, ZASMLOAD, or whatever, depending on the program file format.) In most cases, this is a good idea (Venus plus a binary program file is almost always smaller and faster to load than an "unsquished" program using Send(9.)

If you really need to have a program that you can execute with Send(9, then you need to "unsquish" it first (i.e., convert it into the ASCII hex format I described above.) I don't know of any programs to do that automatically; I think I wrote one once and never released it. One fairly easy way to do the conversion manually would be to copy and paste the relevant hex data into the Graph Link program editor.
Back to top
splinter


Newbie


Joined: 04 Apr 2010
Posts: 21

Posted: 01 Jun 2010 04:35:08 am    Post subject:

Thanks a lot, dude!
It works fine with the TI-GraphLink Software.

But isn't there any other way to do this without TI-GraphLink?

Btw: I also don't know where 83lnk comes from, I just know that it was mentioned in a tutorial.

[EDIT]
In the following tutorial is explained how to use 83lnk.exe: klick
And now i know how to use it.
And it works Rolling Eyes


Last edited by Guest on 01 Jun 2010 04:46:18 am; edited 1 time in total
Back to top
contra-sh


Newbie


Joined: 05 Aug 2009
Posts: 9

Posted: 03 Jul 2010 05:20:43 am    Post subject:

Hi !

It seems working for you, congrats Smile
Personnaly, [under Windows] I use Tasm and Obj83.exe and it works perfectly.

With these tools, no need to "squish" or "unquish" the binary file :P

If you want to use Linux (Spasm/zasm and bin2var/bin8x) it's a bit more complicated Sad
Depending on each assembler, each converter... But Spasm and bin2var seems to be a good choice.
But to work with Send(9 , you need to make modification on the file, using one of the following method.


floppusmaximus: here's the tool that you talk about :

Quote:
#include <stdio.h>/* standard input output header */
#include <malloc.h>/* malloc */
#include <string.h>/* strcpy */
/* You should use spasm or maybe z80asm to compile your files */
/* zasm seems not working */
/* After generate the new *****.bin, you must use bin2var (bin8x seems not working) to generate a 83p file */

int main(int argc, char * argv[]) {

FILE * fpr;
FILE * fp;
int e;
char * outfilename;
char c;
char end[] =
{0x3F ,0xD4 ,0x3F ,0x30 ,0x30 ,0x30 ,0x30 ,0x3F ,0xD4};

printf("bin2bin83 by Thibault Duponchelle : t.duponchelle@gmail.com\n\n");
/* open bin files */
if(argc<2) {
printf("*******Not enough args*******\n");
printf("usage : bin2bin83 input.bin [output] \n");
printf("output is not necessary, by default \"output.bin\" will be generated.\n");
printf("output parameter must be like this : \"WORM\" NOT like \"WORM.BIN\".\n");
printf("Example : 'bin2bin83 foo.bin BAR'\n");
printf("The output will be \"BAR83.bin\".\n(note : '83.bin' have been automatically added).\n");
return 0;
} else {
if((fpr = fopen(argv[1], "r+b"))) {
if(argc>2) {
outfilename=malloc(strlen(argv[2])+7);
strcpy(outfilename,argv[2]);
strcat(outfilename,"83.bin\0");
if(!(fp=fopen(outfilename,"w+b"))) {
printf("CAN NOT open output.bin");
fclose(fpr);
return 1;
}
}else {
outfilename=malloc(strlen("output.bin")+1);
strcpy(outfilename,"output.bin");
if(!(fp=fopen(outfilename,"w+b"))) {
printf("CAN NOT open output.bin\n");
fclose(fpr);
return 1;
}
}

while((e=fgetc(fpr))!=EOF)
{
//printf("%c= %02X ",c, c); //Print hexa code could bug the console ;D
fprintf(fp,"%02X",e);
}
fwrite(&end,9,1,fp);
printf("output : %s\n",outfilename);
fclose(fp);
fclose(fpr);

} else {
printf("CAN NOT open %s\n",argv[1]);
}
printf("Please send me your feedback : t.duponchelle@gmail.com\n");
return 0;
}
}


Or a free-cholesterol method written by Kevin Kofler thx to him (independantly from me) to replace the lost "unsquish83" tool used by _your_ "universal" romdumper in libticalcprotocol (maybe unsquish83 was written by you Benjamin??! However it was impossible to find this executable ("unsquish83") on the web Sad )

Quote:
#!/bin/bash
hexdump -e `wc -c "$1" | sed -e 's/ .*$//g'`'/1 "%02X"' "$1" >"$2"
echo -n -e '?\xd4?0000?\xd4' >>"$2"

(A bit more complicated , isn't it %))
In fact just dump hex code, convert it with magic sed, and finally add the "end" string.

Further information here : http://svn.calcforge.org/viewvc/calcforgelp/libcalcprotocols/trunk/src/romdump_8x/

You need to use one of these after assembling the file, but before convert it !!!!
Like this :
Quote:
spasm tib.asm
bin2bin83 tib.bin TIB.BIN
bin2var TIB83.BIN TIB83.83P

(here my tool is called "bin2bin83")

Or a Sample Makefile:
Quote:

all: MOVCH83.83p

MOVCH83.83p: movch83.bin
bin2var movch83.bin MOVCH83.83p

movch83.bin: movch.bin
bin2bin83 movch.bin movch

movch.bin: movch.asm
spasm movch.asm



clean:
rm -f *.bin
rm -f *.83p

.PHONY: all clean



I hope sincerly this will help you Splinter. :D

Regards.

Thibault Duponchelle
Back to top
splinter


Newbie


Joined: 04 Apr 2010
Posts: 21

Posted: 10 Nov 2010 02:01:23 pm    Post subject:

Thank you so much!

I wasn't here a long time, but now, as I tried it like you described it works even if I compile with SPASM.
(If I wanted to compile with TASM I had to copy TASM.EXE and TASM80.TAB because TASM wasn't able to locate the Table through the PATH variable, unfortunately.)
Anyway, your tool (bin2bin83) is quite awesome ;)

Thanks dude.
Back to top
Display posts from previous:   
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
    »
» View previous topic :: View next topic  
Page 1 of 1 » All times are UTC - 5 Hours

 

Advertisement