OtherTuningSoftware/NintendoGameBoy

Nintendo Gameboy is the best low-cost hardware user interface option for OtherTuningSoftware or controlling/monitoring simple processes.

Why nintendo?

We really looked (for LCDs, PDAs, remote controls, cellphones: see GraphicalDisplay) and found that it's hard to get just the LCD for the price of the gameboy advanced. While adding LCD control, serial communications, CPU and sound might be easy,the buttons and case are hard to get right cost-efficiently in < 1000 quantity.

Some cellular phones come close. See OtherTuningSoftware/JTune/HardWare

How would it relate to tuningsoftware on other platforms?

If we can make a tuningsoftware work for GBA (given screensize, input devices, memory footprint, CPU power) it will be simple to make it perform very well on other platforms (win + unix) with little effort. Some (compile or runtime) configuration is needed for PC to make optimal use of bigger screensize and multikey keyboard + more complete internationalization support (FLTK probably helps in this area).

Therefore MembersPage/RichardBarrington/QTune and GBA software must be unified, built on same base as much as possible.

TODO: split this page, suggestion:


Hardware

Nintendo Gameboy Advance SP (GBA) is of particular interest (see [specificatoins].

Rewriteable (FLASH) cartridge

Flash2Advance_1_s.jpg

This is the 64Mbit flash2advance ULTRA card with 8Mbit SRAM and RTC (the battery is for the RTC). It's based on an ASIC. The non-ultra F2A card can be reflashed from linux too, this might only work from win at the moment. That sounds strange, it should primarily depend on the USB-FBUS chip in the cable not the flashcard:

Bus 004 Device 002: ID 0547:2131 Anchor Chips, Inc. AN2131 EZUSB Microcontroller

(anyone can dig up datasheet or driver code for it? It's possible that they have custom firmware in a small uC)

If the USB-FBUS converter chip ('s communication interface) is supported, the rest runs in the GBA, so should work on any OS. [EZUSB project] seems to have something, but I haven't tried.

  • we found a rewriteable 32Mbit flash cartridge < 15 USD (in biig quantities)
  • USB cables for reflashing like "Flash 2 Advance" or "EZF Flash Advance" are available <15 USD
  • note that cartridge seems simple to design and cheap to manufacture, downto appr. 15 Euro. Check [homemade cartridges] for ideas. Anything is possible, eg.
  • DAC (although it has hifi stereo sound already)
  • ADC (which is often useful in a car, as we know)
  • RTC (realtime clock)
  • RAM besides FLASH (shouldn't be needed)
  • LEDbar driver
  • CAN, etc...

The drawback is that internal RAM is on the low-side, so GTK is out of the question. Porting MegaTunix tuning software seems a waste of time to try.

A software that is usable on GBA is very usable (configured a little differently) on other platforms (with more keys, higher resolution display): IPAQ, Sharp Zaurus, notebook.

Price is about 80..150 USD for a brand-new unit and 30..70 USD used (see your favorite auction-site).


Who would contribute?

Maybe we can get people, eg. from

to help. Once the framework is there, it can be used for many different applications. Actually, tuning the honda-ecu and genboard is very similar. Basically the honda-ecu is just a subset of GenBoard functions. Controlling swimming-pool automation is somewhat different, but still a huge part of the code (framework) could be reused.


What would be really good is an application core written in UML that all OO applications can use. It's a big ask though.

Also, this Java for GBA system might be of interest. It adds cost, and only developer version is available right now, but may be initially easier than a native app... http://www.jemblazer.com/developers/index.htm


Development Environment


Software layer - should it be another page? maybe OtherTuningSoftware/CommonInfrastructure with some cleanup ?

I reviewed [GBA specs]. It kinda takes us back to the C64 (/Atari/Amiga/DOS/you name it) days when we programmed everything. Except we have gcc now and the wonderful ARM processor. Since the GBA software is relatively laborsome, it would be too sad to save 4% work and restrict it to GBA forever. With a little care, a tuningsoftware for the GBA would be much more than that: a tuningsoftware that is damn-easy to port anywhere

GBA 'Comms' Interface

The GBA has a special serial port: it is capable of doing both 16 and 8 bit words, and has a non-standard connector. Its voltage level is standard FBUS (non-inverted 0/3V). We successfully established bidirectional serial connection between PC serial port and our code running on GBA (see CVS gbatune) using an USB-FBUS cable from WebShop. It's still dummy busywait code, instead of interrupt, but at least the HW is working.

The GBA supports the 'netbooting' of firmware (execution in RAM), over the comms interface, using the MultiBoot? protocol. This protocol relies on the use of an uncommon serial format 1/16/1 (i.e. 1 start bit, 1 stop bit, 16 bit word), which makes it difficult to do without a specially designed hardware/software combination. The two common approaches are:

People have had good luck building their own external cables using PICs, and other microcontrollers. One of the most interesting hacks is using an off-the-shelf USB->Serial adapter based on Cyprus' EZ-USB chips:

MultiBoot? is primarily used in development, but it can be also used (with appropriate software already running on the GBA) to reflash writable cartridges inside the unit. This would be useful for upgrading on-cartridge firmware from a laptop.

The GBA's UART also supports more normal modes of serial communication (e.g. 8-bit words), but they can't be used for network booting. These communication modes would be useful for the actual communication with the ECU; the stocked pl2303-based UsbtoFBus cables should work for this, as well as the RS232-FBUS cables.


GBATune Development

gbatune.png

Current Functionality

Gameboy arrow keys move to different, A increases the amount, B decreases it. L and R change between screens (currently disabled). Select changes between widgets on the screen.

Source Availability

Source is in the megasquirtavr SourceForge? CVS repository under the gbatune module.


Executing ROM Images Using VisualBoyAdvance?

VisualBoyadvance? is also available as [debian package]. In practice it means that the following simple command is needed to run the GBA software on a debian machine:

# apt-get install visualboyadvance
$ VisualBoyAdvance /tmp/gbatune.gba

Notes:

A and B gameboy keys map to Z and X, and L and R get mapped to A and S, in the standard VisualBoyAdvance? configuration. Maybe we should standardize on config with same keys as used in GenBoard/MenuSystem


See also