To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.robotics.handyboardOpen lugnet.robotics.handyboard in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / Handy Board / 8555
8554  |  8556
Subject: 
Re: 0x8000 and main()
Newsgroups: 
lugnet.robotics.handyboard
Date: 
Thu, 3 Jan 2002 20:11:36 GMT
Viewed: 
5927 times
  
I don't think this is quite it -- IC sets the byte if there's a main
fcn.  It also sets up some code so that main fcn gets run.

Fred

On Thursday, January 3, 2002, at 02:57 PM, Dan Gates wrote:

> John,
>  I think it lies in the Pcode, in other words if the pcode sets the
> 0x8000 to 1
> then any program loaded that has main() in it will auto run at startup.
> If the
> pcode does NOT set 0x8000 to 1 then no matter what you have loaded as a
> program
> it will NOT auto run on startup. The startup registry is therefore
> controled by
> the Pcode, not the program with main() in it.
> -Dan
> 
> In lugnet.robotics.handyboard, John R. McDaniel writes:
> > Dan,
> > 
> > Perhaps I'm misinterpreting what you mean by "a startup program".  To
> > me, a
> > "startup program" means there is a file downloaded to the HB that
> > contains a
> > "  main()  " function, i.e., a function which will automatically be
> > executed
> > upon startup (powerup reset) of the HB.  I think this is what Fred
> > means by
> > an "auto-start program".
> > 
> > Therefore, I take Fred's explanation of RAM location 0x8000 to mean
> > that if
> > you have a " main() " function resident on the HB, 0x8000 will be a
> > 1.  If
> > you have a program resident on the HB, but it does not contain a "
> > main() "
> > function, 0x8000 will be a 0.
> > 
> > If 0x8000 is set to 1 if ANY program ( with or without a " main() "
> > functon)
> > is loaded on the HB, I don't see that the value of 0x8000 has much • significance.
> > 
> > When you say you saw 0x8000 set to 1 when you loaded "any" program, did
> > "any" include both programs with and without a " main() " function?
> > This
> > is, in fact, what I see.  Loading ANY program to the HB sets 0x8000 to
> > 1..... hmmmmm?
> > 
> > Smack me up side the head and get me straightened out.
> > 
> > Thanks,
> > John
> > 
> > 
> > 
> > In lugnet.robotics.handyboard, Dan Gates writes:
> > > John,
> > > I just did the same test, I think what Fred was saying is that IC
> > > sets the
> > > 0x8000 to accept a startup program if one is loaded. If I poke a 0 to
> > > that
> > > address then load any program it sets back to 1.  I think he was
> > > wandering if
> > > your IC version was messed up, and not setting that register
> > > correctly. • Anyway,
> > > I'm glad you got to the bottom of it!!  Now we all have more
> > > experience under
> > > our belts.
> > > -Dan
> > > 
> > > In lugnet.robotics.handyboard, John R. McDaniel writes:
> > > > Dan,
> > > > 
> > > > Yes, I did cut the trace for external motor power.  I know the HB
> > > > and the
> > > > motor power "+" sources are isolated because I not only checked with
> > > > a VOM,
> > > > but I removed the motor supply batteries and when I run my motor test
> > > > program (remember, no motor supply batteries installed), the motors
> > > > do not • run.
> > > > 
> > > > In fact, one of the reasons I wrote the program to have output to
> > > > the LCD
> > > > was so I could be positive the program was executing even when the
> > > > motors
> > > > are unpowered.
> > > > 
> > > > Would you mind trying to duplicate my "experiment" relative to RAM
> > > > location
> > > > 0x8000, i.e., would you download a file with " main() " and peek
> > > > 0x8000 .
> > > > Then unload that file and download a file which has NO " main() "
> > > > functon
> > > > and see what value 0x8000 has then?
> > > > 
> > > > I'll rest a little easier if I know someone else gets the same
> > > > results I • did.
> > > > 
> > > > Keep shootin' in the dark ---- I'm almost out of bullets over here !!
> > > > 
> > > > Thanks,
> > > > 
> > > > John
> > > > 
> > > > 
> > > > 
> > > > 
> > > > In lugnet.robotics.handyboard, Dan Gates writes:
> > > > > Wow, What a bugger!  This is one of the strangest cases I've seen.
> > > > > Works • fine
> > > > > while connected, but not when reset.  Works fine on my board either
> > > > > way. • Memory
> > > > > and 68HC11 have been traded out. Scope shows no voltage drop at
> > > > > Mem-power
> > > > > durring reset. Both the free version and the Newton labs version of
> > > > > IC have
> > > > > been tried. What else could it possibly be!!!
> > > > > Did you cut the trace to internal motor power when you added the
> > > > > external
> > > > > motor power?  I'm just shootin' in the dark now, I'm sure you did
> > > > > all that
> > > > > right.
> > > > > -Dan
> > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > > In lugnet.robotics.handyboard, John R. McDaniel writes:
> > > > > > 
> > > > > > Fred,
> > > > > > 
> > > > > > Thanks for the info on how IC determines whether to auto-start a
> > > > > > program • or
> > > > > > not.  Based on your suggestions ----
> > > > > > 
> > > > > > I just finished downloading the open-source (free) version of
> > > > > > IC.    I had
> > > > > > been running Newton Labs 3.1 and most recently 3.2.
> > > > > > 
> > > > > > I unzipped the open-source version of IC files, configured DL and
> > > > > > IC and
> > > > > > successfully downloaded the "new" Pcode to my HB.   My HB LCD
> > > > > > displayed: • "
> > > > > > Interactive C V2.81  9/28/93 " and the heartbeat.
> > > > > > 
> > > > > > Using  peek(0x8000),  showed 0x8000 to be equal to 1 (one).   I
> > > > > > used
> > > > > > poke(0x8000,0); to change memory location 0x8000 to be equal to 0
> > > > > > (zero).
> > > > > > I then used peek(0x8000) to confirm that 0x8000 had been changed
> > > > > > to equal • to
> > > > > > 0 (zero)......it had.
> > > > > > 
> > > > > > With 0x8000 set to 0 (zero), I downloaded my "  main()  " file
> > > > > > (filename:
> > > > > > jrm1.c) to the HB.   Again, using peek(0x8000); I checked 0x8000
> > > > > > and is • was
> > > > > > equal to 1 (one).....so far, so good.
> > > > > > 
> > > > > > I then reset the HB and my "  main()  " program would not run.  I
> > > > > > tried
> > > > > > multiple times.  As always, typing   "    main();  "  on the PC
> > > > > > caused my • "
> > > > > > main()  " program to run properly.
> > > > > > 
> > > > > > Now, it gets more interesting. I unloaded the "  main()  " program
> > > > > > (filename: jrm1.c).  Unloading did not cause 0x8000 to be set
> > > > > > equal to 0
> > > > > > (zero).    This might or might not be ok.
> > > > > > 
> > > > > > To find out,  I confirmed the unload  using " list files ".
> > > > > > Then, I • poked
> > > > > > 0x8000 to equal 0, and confirmed the poke with peek(0x8000);....
> > > > > > 0x8000 • was
> > > > > > equal to 0 (zero).  Calling "  main()  " from the PC resulted in
> > > > > > the
> > > > > > "Function main undefined" message.  So, no " main() " function
> > > > > > resident on
> > > > > > the HB and 0x8000 is equal to 0 (zero).
> > > > > > 
> > > > > > Next, I loaded a file which does NOT have a "  main()  " function • (filename:
> > > > > > music.c)...... peeked 0x8000 and it was now equal  to 1
> > > > > > (one) !!??  Both a
> > > > > > program WITH  a " main() " function and one WITHOUT a " main() "
> > > > > > function
> > > > > > set RAM location 0x8000 to equal 1 (one).....???!!
> > > > > > 
> > > > > > Incidentally, "music.c" worked fine, I could call the various
> > > > > > tunes from • the
> > > > > > PC and it did not start running upon HB reset.  I could further
> > > > > > confirm • that
> > > > > > music.c had no " main() " function by trying to call "  main()  "
> > > > > > from the
> > > > > > PC.......I simply got the "Functon main undefined" message.
> > > > > > 
> > > > > > Just to double check, I then changed everything back to Newton
> > > > > > Labs IC • v3.2.
> > > > > > I downloaded the Pcode (3.10)  and my HB LCD displayed "  IC v3.1
> > > > > > Handy
> > > > > > Board 1.2  " and the heartbeat.  Yes, it does display v3.1, even
> > > > > > though
> > > > > > under Help/About the message says I'm running v3.2  (Newton Labs
> > > > > > take • note).
> > > > > > 
> > > > > > Anyway,  I repeated all the  above peeks, pokes, loads, peeks,
> > > > > > unloads, et
> > > > > > cetera, ......getting exactly the same results.
> > > > > > 
> > > > > > My testing would indicate that 0x8000 being a 1 or a 0 does not
> > > > > > define a
> > > > > > downloaded file which contains a "  main()  " function.  Have I
> > > > > > misinterpreted something....sorry if so.
> > > > > > 
> > > > > > I've looked at the source code, but can't figure out how to
> > > > > > determine the
> > > > > > memory address of PCODE_ORIGIN.....I'll study it more.
> > > > > > 
> > > > > > Suggestions?
> > > > > > 
> > > > > > 
> > > > > > Thanks,
> > > > > > 
> > > > > > John
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > In lugnet.robotics.handyboard, Fred G. Martin writes:
> > > > > > > OK, I looked at the source code to try to understand what could
> > > > > > > be the
> > > > > > > problem.  If anyone wants to download the source themselves, go to
> > > > > > > http://handyboard.com/software/base.html and click on the link at
> > > > > > > the
> > > > > > > bottom of the page.
> > > > > > > 
> > > > > > > The following is true of the open-source (free) version of IC.  I
> > > > > > > don't
> > > > > > > think it's changed in Newton Labs' IC, but I could be wrong.
> > > > > > > 
> > > > > > > The very first byte of battery-backed RAM, 0x8000, marks whether
> > > > > > > or not
> > > > > > > an auto-start program is in place.
> > > > > > > 
> > > > > > > If this byte is 0, there is no auto-start program.
> > > > > > > If this byte is 1, there is an auto-start program, and compiled
> > > > > > > code
> > > > > > > beginning at 0x8001 is executed.
> > > > > > > 
> > > > > > > So, given this, I'd check that you can properly read and write to
> > > > > > > location 0x8000 of your RAM.
> > > > > > > 
> > > > > > > I haven't heard of this problem before so I too am curious as to
> > > > > > > what's
> > > > > > > going on.  Definitely try things with the open-source IC that's
> > > > > > > distributed from the HB site.
> > > > > > > 
> > > > > > > Fred
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > On Tuesday, January 1, 2002, at 11:03 PM, John McDaniel wrote:
> > > > > > > 
> > > > > > > > Dan,
> > > > > > > > 
> > > > > > > > Thanks for hanging tough on this problem.....I'm feeling really
> > > > > > > > inadequate
> > > > > > > > on this one.
> > > > > > > > 
> > > > > > > > I downloaded your revision of my program and it did not help.  Of
> > > > > > > > course, if
> > > > > > > > I do type " main() " on the PC, it does give your "Press
> > > > > > > > Start....."
> > > > > > > > message
> > > > > > > > and waits for me to press START.  After pressing START, the HB
> > > > > > > > beeps • and
> > > > > > > > starts running "my" program.
> > > > > > > > 
> > > > > > > > Yes, I'm downloading the Pcode version 3.1.  However, per your
> > > > > > > > earlier
> > > > > > > > suggestion, I downloaded the "PWM Pcode" to my HB and then
> > > > > > > > downloaded
> > > > > > > > my "
> > > > > > > > main()  " file......no joy!.... same problem.
> > > > > > > > 
> > > > > > > > I will download the 'free' IC version and try everything from a
> > > > > > > > DOS
> > > > > > > > prompt,
> > > > > > > > although that'll have to wait until tomorrow.
> > > > > > > > 
> > > > > > > > Incidentally, I just reattached the battery pack after
> > > > > > > > resoldering • every
> > > > > > > > connection on the HB.....no change.
> > > > > > > > 
> > > > > > > > Well, I've got 103 fewer Toshiba 68HC11's than you, but I'm glad
> > > > > > > > to • hear
> > > > > > > > that you don't think that the Toshiba is the problem -- or maybe
> > > > > > > > I wish
> > > > > > > > it
> > > > > > > > were that.
> > > > > > > > 
> > > > > > > > Please feel free to post any/all of this discussion on the other
> > > > > > > > board....I'll take any help I can get.  You can probably tell
> > > > > > > > that I'm
> > > > > > > > really frustrated with this problem.  I'm ready to get on with
> > > > > > > > my robot
> > > > > > > > project, but I have to get past this problem
> > > > > > > > first......arrrrgh.   If I
> > > > > > > > can't get this squared away, I'm going to have a very expensive
> > > > > > > > paperweight.
> > > > > > > > 
> > > > > > > > Regards,
> > > > > > > > John
> > > > > > > > 
> > > > > > > > 
> > > > > > > > 
> > > > > > > > In lugnet.robotics.handyboard, Dan Gates writes:
> > > > > > > > > John,
> > > > > > > > > I added a little sub routine to your program, see if you can
> > > > > > > > > use it
> > > > > > > > > this way.
> > > > > > > > > Probably not, but hey it's worth a try. Also, if you don't mind
> > > > > > > > > I'd
> > > > > > > > > like to
> > > > > > > > > post it to the yahoo handyboard files too at
> > > > > > > > > http://groups.yahoo.com/group/handyboard/files/
> > > > > > > > > -Dan
> > > > > > > > > 
> > > > > > > > > /* filename: jrm1.c    John R. McDaniel */
> > > > > > > > > 
> > > > > > > > >   void main()
> > > > > > > > >              {
> > > > > > > > > 
> > > > > > > > >   init();         /* Run initialize routine */
> > > > > > > > > 
> > > > > > > > >   while(1){ /*do this loop endlessly*/
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > >   printf("Test Motors !!\n");   /*print 'Test Motors !!' on
> > > > > > > > > LCD*/
> > > > > > > > > 
> > > > > > > > >   ao(); /*both motor off for 2 seconds*/
> > > > > > > > >   sleep(2.0); /*delay start so can unplug cable*/
> > > > > > > > > 
> > > > > > > > >   /*go forward*/
> > > > > > > > >   printf("Forward\n"); /*print 'Forward' on LCD*/
> > > > > > > > >   fd(0); /*left motor forward*/
> > > > > > > > >   fd(2); /*right motor forward*/
> > > > > > > > >   sleep(3.0); /*do this for 3 seconds*/
> > > > > > > > >   alloff(); /*let motors coast to stop*/
> > > > > > > > >   sleep(1.0);
> > > > > > > > > 
> > > > > > > > >   /*turn right*/
> > > > > > > > >   printf("Right\n"); /*print 'Right' on LCD*/
> > > > > > > > >   fd(0); /*left motor forward*/
> > > > > > > > >   bk(2); /*right motor backwards*/
> > > > > > > > >   sleep(2.0); /*do this for 2 seconds*/
> > > > > > > > >   alloff(); /*let motors coast to stop*/
> > > > > > > > >   sleep(1.0);
> > > > > > > > > 
> > > > > > > > >   /*turn left*/
> > > > > > > > >   printf("Left\n"); /*print 'Left' on LCD*/
> > > > > > > > >   bk(0); /*left motor backwards*/
> > > > > > > > >   fd(2); /*right motor forward*/
> > > > > > > > >   sleep(2.0); /*do this for 2 seconds*/
> > > > > > > > >   alloff(); /*let motors coast to stop*/
> > > > > > > > >   sleep(1.0);
> > > > > > > > > 
> > > > > > > > >   /*go backward*/
> > > > > > > > >   printf("Back\n"); /*print 'Back' on LCD*/
> > > > > > > > >   bk(0); /*left motor backwards*/
> > > > > > > > >   bk(2); /*right motor backwards*/
> > > > > > > > >   sleep(3.0); /*do this for 3 seconds*/
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > >   alloff(); /*all motors off, rest until next loop*/
> > > > > > > > >   printf("Loop Done\n"); /*print 'Loop Done' on LCD*/
> > > > > > > > > 
> > > > > > > > >   sleep(5.0); /*pause before doing loop again*/
> > > > > > > > > 
> > > > > > > > >   }
> > > > > > > > >   }
> > > > > > > > > 
> > > > > > > > >   /* end */
> > > > > > > > > 
> > > > > > > > >   /* ****************** Subroutines ************************* */
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > >   void init()
> > > > > > > > >   {
> > > > > > > > >        printf("Press Start to  Go!\n");
> > > > > > > > >        while(!start_button()){}
> > > > > > > > >        tone(800.,1.);
> > > > > > > > >  }
> 
> 



Message has 1 Reply:
  Re: 0x8000 and main()
 
Fred and Dan, For some reason, I'm apparently having trouble explaining my findings, doing something wrong -- or not understanding what Fred is telling me. Now that my HB runs " main() " functions just fine upon powerup reset, I did my experiment on (...) (25 years ago, 5-Jan-02, to lugnet.robotics.handyboard)

Message is in Reply To:
  Re: 0x8000 and main()
 
John, I think it lies in the Pcode, in other words if the pcode sets the 0x8000 to 1 then any program loaded that has main() in it will auto run at startup. If the pcode does NOT set 0x8000 to 1 then no matter what you have loaded as a program it (...) (25 years ago, 3-Jan-02, to lugnet.robotics.handyboard)

16 Messages in This Thread:


Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR