From: andrey (ubc) <an...@ec...> - 2004-02-14 06:41:26
|
Hi, I am wondering how can I get ihex file from asm file. I successfully = compiled my asm file into rel file but I do not know how to get it into = ihex. I have run through documentation but could not find an answer. Can = anybody point me in right direction? Thanks, Andrey |
From: Jean-Paul <tch...@fr...> - 2004-02-14 08:22:40
|
Hello, Converting .rel to .ihx is the job of aslink. You can find everything you need (and probably much more) in /usr/local/share/sdcc/doc/aslink/asmlnk.doc (which happens to be a text file and not a Micro$oft Word file). However, the simplest and safest way, instead of typing a long command=20 line for aslink, or making a my_project.lnk file, with multiple options=20 and parameters, is to simply type: sdcc my_main_module.rel another_module.rel the_last_module.rel and voil=E0. You'll find in 'my_main_module.lnk' (generated by sdcc) the command file=20 you should have written, with segments, libraries and files to relocate: -myuxi -b CSEG =3D 0x0000 -b XSEG =3D 0x0000 -b ISEG =3D 0x0080 -b BSEG =3D 0x0000 -k /usr/local/share/sdcc/lib/small -l libsdcc -l libint -l liblong -l libfloat my_main_module.rel another_module.rel the_last_module.rel -e You can edit the file to change a parameter and run again aslink: aslink -f my_main_module aslink then looks for the command file 'my_main_module.lnk' and produces=20 the new my_main_module.ihx file. Regards Jean-Paul On Fri, 13 Feb 2004 22:38:33 -0800, andrey (ubc) <an...@ec...>=20 wrote: > Hi, > > I am wondering how can I get ihex file from asm file. I successfully=20 > compiled my asm file into rel file but I do not know how to get it into= =20 > ihex. I have run through documentation but could not find an answer. Ca= n=20 > anybody point me in right direction? --=20 NEVER jump into a LOOP! |
From: Andrey (UBC) <an...@ec...> - 2004-02-16 08:18:07
|
Hi Jean-Paul, thanks for info. It did worked for me. I will check what I will find in documentation for aslink - probably it will take not one day. Only one small notice -- why this information is not avilable on http://sdcc.sourceforge.net/doc/sdccman.html/ it could make my and probably somebody else life a little easier. If this information will not be available, this question will be asked again and again. I guess that sdcc community will prefer do not answer this question many times. Thanks again, Andrey ----- Original Message ----- From: "Jean-Paul" <tch...@fr...> To: <sdc...@li...> Sent: Saturday, February 14, 2004 12:16 AM Subject: Re: [Sdcc-user] Assembler asx8051 rel to ihex Hello, Converting .rel to .ihx is the job of aslink. You can find everything you need (and probably much more) in /usr/local/share/sdcc/doc/aslink/asmlnk.doc (which happens to be a text file and not a Micro$oft Word file). However, the simplest and safest way, instead of typing a long command line for aslink, or making a my_project.lnk file, with multiple options and parameters, is to simply type: sdcc my_main_module.rel another_module.rel the_last_module.rel and voilà. You'll find in 'my_main_module.lnk' (generated by sdcc) the command file you should have written, with segments, libraries and files to relocate: -myuxi -b CSEG = 0x0000 -b XSEG = 0x0000 -b ISEG = 0x0080 -b BSEG = 0x0000 -k /usr/local/share/sdcc/lib/small -l libsdcc -l libint -l liblong -l libfloat my_main_module.rel another_module.rel the_last_module.rel -e You can edit the file to change a parameter and run again aslink: aslink -f my_main_module aslink then looks for the command file 'my_main_module.lnk' and produces the new my_main_module.ihx file. Regards Jean-Paul |
From: Jean-Paul <tch...@fr...> - 2004-02-16 10:01:19
|
Attention Bernhard Held: Please find hereafter something like a complaint about sddc documentation= . Although the subject is more general than specific to sdcc, I think it=20 could be useful to add a paragraph to describe the long walk from source=20 files to .ihx files. The description in 3.1.1 doesn't tell a word about aslink and .lnk files. I would give some hints and point out that the process can be entered at=20 this stage with .rel files produced by an assembler as well as the=20 compiler. That would also prevent some questions about memory mapping. Regards Jean-Paul ------------------------------------------------------------ Andrey, I suppose that many of us don't even think that such questions can be=20 asked, until someone asks. We have been programming for quite some time=20 now, with other tools, and we got used to issue distinct successive=20 commands (be they included in a script or batch file) to preprocess,=20 compile, assemble, then link the modules of a project. SDCC now does all=20 that automagically. SDCC and its documentation are works in progress. Help progress with your= =20 questions. By the way: I just looked at the header of your message and I see you're=20 using X-Mailer: Microsoft Outlook Express 6.00.2800.1158, in other words ;-)=20 Windows. I have no idea where Windows stores the file we're after: > /usr/local/share/sdcc/doc/aslink/asmlnk.doc is the standard location in= =20 > Linux installations. Regards Jean-Paul On Mon, 16 Feb 2004 00:14:24 -0800, Andrey (UBC) <an...@ec...>=20 wrote: > Hi Jean-Paul, > > thanks for info. It did worked for me. I will check what I will find in > documentation for aslink - probably it will take not one day. Only one=20 > small > notice -- why this information is not avilable on > http://sdcc.sourceforge.net/doc/sdccman.html/ it could make my and=20 > probably > somebody else life a little easier. If this information will not be > available, this question will be asked again and again. I guess that sd= cc > community will prefer do not answer this question many times. > > Thanks again, > > Andrey > > ----- Original Message ----- > From: "Jean-Paul" <tch...@fr...> > To: <sdc...@li...> > Sent: Saturday, February 14, 2004 12:16 AM > Subject: Re: [Sdcc-user] Assembler asx8051 rel to ihex > > > Hello, > > > Converting .rel to .ihx is the job of aslink. > > You can find everything you need (and probably much more) in > /usr/local/share/sdcc/doc/aslink/asmlnk.doc > (which happens to be a text file and not a Micro$oft Word file). > > However, the simplest and safest way, instead of typing a long command > line for aslink, or making a my_project.lnk file, with multiple options > and parameters, is to simply type: > > sdcc my_main_module.rel another_module.rel the_last_module.rel > > and voil=E0. > > You'll find in 'my_main_module.lnk' (generated by sdcc) the command fil= e > you should have written, with segments, libraries and files to relocate= : > > -myuxi > -b CSEG =3D 0x0000 > -b XSEG =3D 0x0000 > -b ISEG =3D 0x0080 > -b BSEG =3D 0x0000 > -k /usr/local/share/sdcc/lib/small > -l libsdcc > -l libint > -l liblong > -l libfloat > my_main_module.rel > another_module.rel > the_last_module.rel > > -e > > You can edit the file to change a parameter and run again aslink: > > aslink -f my_main_module > > aslink then looks for the command file 'my_main_module.lnk' and produce= s > the new > my_main_module.ihx file. > > Regards > Jean-Paul > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=3D1356&alloc_id=3D3438&op=3Dclick > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > --=20 NEVER jump into a LOOP! |
From: Bernhard H. <ber...@be...> - 2004-02-16 10:26:12
|
> Attention Bernhard Held: Ooops, why me? I'm building the online documentation, but I'm not responsible for the contents. If you think you've to make an important suggestion then please file it here: http://sourceforge.net/tracker/?atid=536150&group_id=599&func=browse Bernhard |
From: Andrey V. <an...@ec...> - 2004-02-16 18:15:17
|
Hi Jean-Paul, well, yes this time I was using Windows (Evil Empire) to send email (I was looking some stuff on eBay and usually do it from Windows). But I do programming for microcontrollers in linux through SSH channel. Well with your's and Jesus Calvino help I have came up with next type of make file --- Makefile for sdcc ----------------------- TARGETS = lcd4.hex lcd3.hex ASM = asx8051 PACKIHX = packihx SDCC = sdcc FASM = -plosgff all: ${TARGETS} %.hex: %.ihx ${PACKIHX} < $< > $@ %.ihx: %.rel @${SDCC} $< || echo $? %.rel: %.asm ${ASM} ${FASM} $< clean: rm *.[ihlmrs]* --- Makefile for sdcc ------------------------ only what I found a very strange is that sdcc return code by some reason taken as "fail" by make. I think that something is not right here? Or you guys do not use makefiles for your projects? I had to add "|| echo $?" to go around this small problem and pass on next step. Basically what is require to use this makefile -- modify "TARGETS =" and add there {asm_files1.hex asm_file2.hex ..... asm_filen.hex} and make will generate files from "asm" to "hex" format. Or if you work only with one asm file you could make it like this univ03:~/MCU/8051/LCD> make lcd8.hex asx8051 -plosgff lcd8.asm library file /usr/share/sdcc/lib/small/libsdcc.lib library file /usr/share/sdcc/lib/small/libint.lib library file /usr/share/sdcc/lib/small/liblong.lib library file /usr/share/sdcc/lib/small/libfloat.lib No definition of area CSEG No definition of area DSEG No definition of area XSEG No definition of area ISEG No definition of area BSEG lcd8.rel packihx < lcd8.ihx > lcd8.hex packihx: read 15 lines, wrote 11: OK. rm lcd8.rel lcd8.ihx univ03:~/MCU/8051/LCD> Not sure about "No definition of area" messages as in my case I do not use any segments (sorry I am learning as I go -- never used assembler before), but I think that for my case I can just ignore this messages. By the way is "$$0e" same like "#0x0e" as I found it in asx8051 documentation? (I guess that most people use second form, but in lst file it looks exactly the same except that under some conditions assembler refused to process a line like "mov data,$ff" and accepted "mov data,#0xff". May be it will sounds silly but I just tried and both forms worked for me, but last Friday I had a problem and thanks to Jesus Calvino for pointing that #0xff is right form of using hex numbers in asm program). --- lcd8.asm ------------------------------------------- ; ; Tutorial: Introduction to LCD Programming ; ; Decription: 8051 talk to LCD over 8 wires ; URL: http://www.8052.com/tutlcd.phtml ; ; Prepared by: Andrey Vlassov (andreyv(at)ece.ubc.ca) ; db0 = P1.0 db1 = P1.1 db2 = P1.2 db3 = P1.3 db4 = P1.4 db5 = P1.5 db6 = P1.6 db7 = P1.7 en = P3.7 rs = P3.6 rw = P3.5 data = P1 wait_lcd: setb en ; Start LCD command clr rs ; It's a command setb rw ; it's a read command mov data,0xff ; Set all pins to FF initially mov a,data ; Read the return value jb acc.7,wait_lcd ; If bit 7 high, LCD still busy clr en ; Finish the command clr rw ; Turn off rw for future commands ret init_lcd: setb en clr rs mov data,$$38 clr en lcall wait_lcd setb en clr rs mov data,$$0e clr en lcall wait_lcd setb en clr rs mov data,$$06 clr en lcall wait_lcd ret clear_lcd: clr rs mov data,$$01 clr en lcall wait_lcd ret write_text: setb en setb rs mov data,a clr en lcall wait_lcd ret lcall init_lcd lcall clear_lcd mov a,'H lcall write_text mov a,'E lcall write_text mov a,'L lcall write_text mov a,'L lcall write_text mov a,'O lcall write_text setb en clr rs mov data,$$c4 clr en lcall wait_lcd mov a,'W lcall write_text mov a,'O lcall write_text mov a,'R lcall write_text mov a,'L lcall write_text mov a,'D lcall write_text setb en clr rs mov data,$$01 clr en lcall wait_lcd ret write_text: setb en setb rs mov data,a clr en lcall wait_lcd ret lcall init_lcd lcall clear_lcd mov a,'H lcall write_text mov a,'E lcall write_text mov a,'L lcall write_text mov a,'L lcall write_text mov a,'O lcall write_text setb en clr rs mov data,$$c4 clr en lcall wait_lcd mov a,'W lcall write_text mov a,'O lcall write_text mov a,'R lcall write_text mov a,'L lcall write_text mov a,'D lcall write_text --- lcd8.asm ------------------------------------------- Well it comes a time when I should try to "burn" program on the mcu. (need put some components together) Andrey > Andrey, > > I suppose that many of us don't even think that such questions can be > asked, until someone asks. We have been programming for quite some > time now, with other tools, and we got used to issue distinct > successive commands (be they included in a script or batch file) to > preprocess, compile, assemble, then link the modules of a project. > SDCC now does all that automagically. > SDCC and its documentation are works in progress. Help progress with > your questions. > > By the way: I just looked at the header of your message and I see > you're using > X-Mailer: Microsoft Outlook Express 6.00.2800.1158, in other words > ;-) Windows. > I have no idea where Windows stores the file we're after: > >> /usr/local/share/sdcc/doc/aslink/asmlnk.doc is the standard location >> in Linux installations. > > > Regards > Jean-Paul |
From: Andrey V. <an...@ec...> - 2004-02-16 18:22:58
|
Sorry, correction to my previous post -- there is a difference and big one univ03:~/MCU/8051/LCD> diff lcd8_1.lst lcd8_2.lst 25c25 < 0006 85 FF 90 25 mov data,$$ff ; Set all pins to FF initially --- > 0006 75 90 FF 25 mov data,#0xff ; Set all pins to FF initially 35c35 < 0017 85 38 90 35 mov data,$$38 --- > 0017 75 90 38 35 mov data,#0x38 40c40 < 0023 85 0E 90 40 mov data,$$0e --- > 0023 75 90 0E 40 mov data,#0x0e 45c45 < 002F 85 06 90 45 mov data,$$06 --- > 002F 75 90 06 45 mov data,#0x06 53c53 < 003C 85 01 90 53 mov data,$$01 --- > 003C 75 90 01 53 mov data,#0x01 81c81 < 0074 85 C4 90 81 mov data,$$c4 --- > 0074 75 90 C4 81 mov data,#0xc4 univ03:~/MCU/8051/LCD> by some unknown to me reason binary bytes is swapped. Can anybody provide a comment for this subject? Andrey > By the way is "$$0e" same like "#0x0e" as I found it in asx8051 > documentation? (I guess that most people use second form, but in lst > file it looks exactly the same except that under some conditions > assembler refused to process a line like "mov data,$ff" and accepted > "mov data,#0xff". May be it will sounds silly but I just tried and > both forms worked for me, but last Friday I had a problem and thanks > to Jesus Calvino for pointing that #0xff is right form of using hex > numbers in asm program). |
From: Jean-Paul <tch...@fr...> - 2004-02-16 23:02:12
|
Andrey, Perhaps you don't know that the $ sign is a heresy in Intel's world. It i= s=20 typically Motorola parlance (and SGS...). People get flamed for less than that ;-). On Mon, 16 Feb 2004 10:18:21 -0800, Andrey Vlassov <an...@ec...>=20 wrote: > Sorry, > > correction to my previous post -- there is a difference and big one > > univ03:~/MCU/8051/LCD> diff lcd8_1.lst lcd8_2.lst > 25c25 > < 0006 85 FF 90 25 mov data,$$ff ; Set=20 > all pins to FF initially If you don't put a # sign, you are writing an address, not data. The assembler understands: MOV data addr, data addr, so the opcode is $85 (Moto) or 85h (Intel) or=20 0x85 (C). copy from address to address > --- > > 0006 75 90 FF 25 mov data,#0xff ; Set=20 > all pins to FF initially > 35c35 Here you write #, the assembler understands: MOV data addr, immediate data, the opcode is 0x75. copy immediate data to address That is _the_ difference. > > by some unknown to me reason binary bytes is swapped. Can anybody=20 > provide a comment for this subject? > I don't know what happens with a double non existing $ sign! For the time being, I would stick to the official syntax and try some=20 creativity a bit later :-) I had a look at http://www.8052.com/tutlcd.phtml. I don't see any $ sign=20 at all, is it a typing error? Jean-Paul > Andrey > >> By the way is "$$0e" same like "#0x0e" as I found it in asx8051=20 >> documentation? (I guess that most people use second form, but in lst=20 >> file it looks exactly the same except that under some conditions=20 >> assembler refused to process a line like "mov data,$ff" and accepted=20 >> "mov data,#0xff". May be it will sounds silly but I just tried and bot= h=20 >> forms worked for me, but last Friday I had a problem and thanks to=20 >> Jesus Calvino for pointing that #0xff is right form of using hex=20 >> numbers in asm program). > > > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=3D1356&alloc_id=3D3438&op=3Dclick > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > --=20 NEVER jump into a LOOP! |
From: Jesus Calvino-F. <Je...@ec...> - 2004-02-16 23:33:35
|
The problem is that the # is missing in one of the constructs. For instance mov data, #$$ff and mov data, #0xff results in the same opcodes: 0000 75 90 FF 22 mov data, #0xff 0003 75 90 FF 23 mov data, #$$ff Jesus At 02:54 PM 2/16/2004, you wrote: >Andrey, > >Perhaps you don't know that the $ sign is a heresy in Intel's world. It is >typically Motorola parlance (and SGS...). >People get flamed for less than that ;-). > >On Mon, 16 Feb 2004 10:18:21 -0800, Andrey Vlassov <an...@ec...> wrote: > >>Sorry, >> >>correction to my previous post -- there is a difference and big one >> >>univ03:~/MCU/8051/LCD> diff lcd8_1.lst lcd8_2.lst >>25c25 >>< 0006 85 FF 90 25 mov data,$$ff ; Set all >>pins to FF initially >If you don't put a # sign, you are writing an address, not data. >The assembler understands: >MOV data addr, data addr, so the opcode is $85 (Moto) or 85h (Intel) or >0x85 (C). >copy from address to address > >>--- >> > 0006 75 90 FF 25 mov data,#0xff ; Set >> all pins to FF initially >>35c35 >Here you write #, the assembler understands: >MOV data addr, immediate data, the opcode is 0x75. >copy immediate data to address > >That is _the_ difference. > >> >>by some unknown to me reason binary bytes is swapped. Can anybody >>provide a comment for this subject? > >I don't know what happens with a double non existing $ sign! >For the time being, I would stick to the official syntax and try some >creativity a bit later :-) > >I had a look at http://www.8052.com/tutlcd.phtml. I don't see any $ sign >at all, is it a typing error? > >Jean-Paul > >>Andrey >> >>>By the way is "$$0e" same like "#0x0e" as I found it in asx8051 >>>documentation? (I guess that most people use second form, but in lst >>>file it looks exactly the same except that under some conditions >>>assembler refused to process a line like "mov data,$ff" and accepted >>>"mov data,#0xff". May be it will sounds silly but I just tried and both >>>forms worked for me, but last Friday I had a problem and thanks to Jesus >>>Calvino for pointing that #0xff is right form of using hex numbers in >>>asm program). >> >> >> >> >> >>------------------------------------------------------- >>SF.Net is sponsored by: Speed Start Your Linux Apps Now. >>Build and deploy apps & Web services for Linux with >>a free DVD software kit from IBM. Click Now! >>http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click >>_______________________________________________ >>Sdcc-user mailing list >>Sdc...@li... >>https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > >-- >NEVER jump into a LOOP! > > >------------------------------------------------------- >SF.Net is sponsored by: Speed Start Your Linux Apps Now. >Build and deploy apps & Web services for Linux with >a free DVD software kit from IBM. Click Now! >http://ads.osdn.com/?ad_id56&alloc_id438&opick >_______________________________________________ >Sdcc-user mailing list >Sdc...@li... >https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > > >--- >Incoming mail is certified Virus Free. >Checked by AVG anti-virus system (http://www.grisoft.com). >Version: 6.0.571 / Virus Database: 361 - Release Date: 1/26/2004 |
From: Andrey V. <an...@ec...> - 2004-02-17 17:31:09
|
Hi Jesus, thank you, now I better understand meaning of # sign in assembler command. (# indicates a number, if I skip it I will get an address). I just was a little confused by documentation (as I said I didn't use assebler before) but Paul explained that $$07 (Motorola), 07h (Intel) and 0x07 (C) represent an address 07 in hex notation from different distributors (but represent same value -- in this case an address 07). If I prefix these numbers with # -- #$$07 (Motorola), #07h and #0x07 I will get a nuber 07 instead address. I recompiled asm files with both forms ($$ and 0x) and got exactly the same lst files. Thanks again, Andy Jesus Calvino-Fraga wrote: > The problem is that the # is missing in one of the constructs. For > instance > > mov data, #$$ff > > and > > mov data, #0xff > > results in the same opcodes: > > 0000 75 90 FF 22 mov data, #0xff > 0003 75 90 FF 23 mov data, #$$ff > > Jesus |
From: Andrey V. <an...@ec...> - 2004-02-17 18:09:28
|
Hi Jean-Paul, thanks for explanation ($$07 (Motorola), 07h (Intel), 0x07 (C) = address 07 in hex; #$$07 (Motorola), #07h (Intel), #0x07 (C) = data 07 (number) in hex) > > I don't know what happens with a double non existing $ sign! well I got an error on "orl data, #0F0" (http://www.8052.com/tutlcd2.phtml) and start look for documentation and came accross document (file:///tmp/sdcc/as/doc/asxhtm.html in sdcc-2.3.0 source tree - dated Aug 1998) with $$ format and at the end got confused. > > For the time being, I would stick to the official syntax and try some > creativity a bit later :-) well I am not about creativity -- I am trying to get it work ;-) > I had a look at http://www.8052.com/tutlcd.phtml. I don't see any $ > sign at all, is it a typing error? well it related to "orl data, #0F0" described earlier in this post, I had to look for other format to represent hex number 0F0 (but I didn't know meaning of # at that moment yet) > Jean-Paul Sorry, for not so smart questions (I am still learning assembler programming) and thank you for all your help. Andy |
From: Jean-Paul <tch...@fr...> - 2004-02-18 08:00:32
|
On Tue, 17 Feb 2004 10:05:05 -0800, Andrey Vlassov <an...@ec...>=20 wrote: >> >> I don't know what happens with a double non existing $ sign! > > well I got an error on "orl data, #0F0"=20 > (http://www.8052.com/tutlcd2.phtml) and start look for documentation=20 > and came accross document (file:///tmp/sdcc/as/doc/asxhtm.html in=20 > sdcc-2.3.0 source tree - dated Aug 1998) with $$ format and at the end=20 > got confused. Here is what I read there: The label must not start with the sequence $$, as this represents the temporary radix 16 for constants. (I never used this assembler by itself.) > > well I got an error on "orl data, #0F0" orl means logical OR between accumulator and immediate data, or=20 accumulator and memory, etc. > > Sorry, for not so smart questions (I am still learning assembler=20 > programming) and thank you for all your help. Don't worry! As I program in C, have programmed 51 chips in PL/M 51 before, have=20 programmed a lot of others but never the 51 chips in assembler, I'm=20 learning details of 51 assembly with you. Go on! Jean-Paul > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=3D1356&alloc_id=3D3438&op=3Dclick > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user --=20 NEVER jump into a LOOP! |