Farz Hemmati and I are finally releasing IC XBC Firmware Student Edition, which we created between 2006 and 2008. It's a full replacement for the KIPR IC XBC Firmware, with loads of new features.
New features include lots of new CallML's. Look at xport/examples/xrc/botball1/icfirmware/src/libicxbc/XBCRobot.cxx to see the CallML switches; CallML ID's above 1500 (1 argument), 2500 (2 arguments), and 3500 (3 arguments) are our new features. In addition, multiple IC programs can now be stored in flash; there's a menu to choose between them. If you like skinning apps, you can also change the color scheme in the firmware (xport/examples/xrc/botball1/icfirmware/src/libicxportcommon/ICRobot.h). Finally, entire programs can be written in C++; look at xport/examples/xrc/botball1/icfirmware/src/nonpcode/ to see how this is done. Probably lots of other features that I can't remember; I'll post more details here if people request it.
There's no documentation, but feel free to post questions here. That said, keep in mind that I haven't touched this code in 3 years, so I probably don't remember much of it. Farz hasn't been involved with Botball since 2007, so he may not remember much of it either.
Because the source code links with MPL libraries, it is not believed to be GPL-compatible; as such, consider it to be under the Mozilla Public License. Source code is at https://github.com/JeremyRand/XBC-Firmware . Binaries are attached to this post (icxbc.bin if you're loading via serial; icxbcbl.bin if you're loading via Cport).
Enjoy!
Attachment | Size |
---|---|
IC XBC Firmware Student Edition | 721.35 KB |
Jeremy,
How does one turn the *.bin file into a *.frm ??
-Dan
BTW, Thanks again!
They're actually the same format; a rename should do it. I'm not sure why KIPR went with a nonstandard extension; the .frm and .bin files are both just a standard GBA ROM.
-Jeremy Rand
Senior Programmer, Team SNARC (2012-2013), Norman Advanced (2010-2011), Norman HS (2008-2009), Norman North (2005-2007), Whittier MS (2003-2004)
2012-2013 VP of Tech, 2011 President, Botball YAC (2009-2013)
Mentor, Alcott and Whittier MS
Hmm, they look different when you open them in an IDE environment. I use Textpad.
-Dan
by different I mean format, but it did load and is working.
So now if I can get through one build process, then I can start modifying it and having some fun. Any help appreciated!
-Dan
Been quite a while, but to build it, I think what you want to do is install the Xport Devkit from Charmed Labs, copy the devkitadv folder from that into the xport folder that's in the Git repo. Then make libgba, libxrc, and librpc. If those worked, then use the following make command for icfirmware:
make EMBED_BOOTLOADER=1
Just using make by itself for icfirmware will cause it to not play well with KIPR's bootloader. Once you've done that, you'll have the two bin files.
Let me know if you run into any problems. It's been a long time since I did this, but I may remember some tips if you run into a specific error.
-Jeremy Rand
Senior Programmer, Team SNARC (2012-2013), Norman Advanced (2010-2011), Norman HS (2008-2009), Norman North (2005-2007), Whittier MS (2003-2004)
2012-2013 VP of Tech, 2011 President, Botball YAC (2009-2013)
Mentor, Alcott and Whittier MS
So, I've got the xport utility installed and copied/replaced everything from the xport files you posted into the directory created on my pc by the xport utility install. CYGWIN was also installed as outlined in the Charmed labs docs.
So I'm assuming that I would use the Xport Shell to compile the code, right?
So my question now is do I have to be in the proper directory before running the make command on any given file? And you mentioned running a test on the libgba, librcx and librpc, do I need to run those all individually or all together? If all together, what's the procedure, and will this produce a single binary file or three?
Also, when adding the bootloader, how does it produce a single binary file to be used as firmware? And where does the final binary file end up... what folder?
I have tried a few different things, but no success so far.
Sorry for the lack of knowledge here.
-Dan
Running make from within the icfirmware directory gives the following result:
find ./src \< -iname '*.inl' -o -iname '*.h' \> -exec cp '<>' include \;
1 [main] make 4380 fork_copy: linked dll data/bss pass 0 failed, 0x32f000.
.0x32F040, done 0, windows pid 5776, Win32 error 487
make: vfork: Resource temporarily unavailable
Running make EMBED_BOOTLOADER=1 in the same directory give a similar result, if you want I will post that result too.
Problems seem to be something to do with Vista and CYGWIN not playing well together. I am currently downloading the latest version of cygwin and then apparently I will need to do something called rebaseall according to what I've found for the error I get.
I will post my results here for those who are interested.
-Dan
As you discovered, the Charmed Labs distribution of Cygwin doesn't work on Vista/7. I recommend using Cygwin's official installer.
Navigate to libgba, and type make. It will produce a .a binary and copy it to the appropriate place. Do the same for the other two libs.
I think you may also need to make the XBC bootloader; I don't remember what directory that's in, but it should be somewhere in botball1. Once you've done that, the EMBED_BOOTLOADER=1 will compile the firmware with linker settings such that it starts a bit past the start of flash; that empty space is taken by the bootloader on XBC's. It will also generate another binary by catting the bootloader binary with the firmware binary; this file is suitable for Cport download (Cport will replace the bootloader).
Let me know if you have any more questions. :-)
-Jeremy Rand
Senior Programmer, Team SNARC (2012-2013), Norman Advanced (2010-2011), Norman HS (2008-2009), Norman North (2005-2007), Whittier MS (2003-2004)
2012-2013 VP of Tech, 2011 President, Botball YAC (2009-2013)
Mentor, Alcott and Whittier MS
Can you post a quick usage command for playing one of the sound files?
Say I want the robot to play the 1st in your switch set "AUDIO_AHH" I tried doing a simple:
callml(1540, 1);
but it just returns a 0 and doesn't play the sound. Of course that's just in the interactive window, but I presume there is more to it than just the callml.
I'm sure I can figure it out, but it I thought it could be useful to others as well.
-Dan
PS, I plan on documenting everything and posting it on a dedicated XBC/Xport site, most likely on my own servers.