#1 is trivial. Software wise, the protocols are well known. Hardware wise, at most you need to change one solder connection.

As for #3... If the Chinese are selling it, it works. If not in theory then at least in practice, most of the times. And if it doesn't work, that's a calculated risk in the form of negative eBay/Ali ratings.

To be specific, no there's no special programming equipment in those cartridges. Not even level shifters. Just flash connected to the GB bus. Some carts are dead on arrival but other than that it "works in practice". Again, at most you need to cut one trace and add a series diode.

I have not moved on, even though I haven't had time to work on LittleFM for a long time now. But I have thought about the exact thing you mentioned. The technical issues are as follows:

1) Accessing the flash from the GB side. Some of these carts don't have the /wr pin hooked up as catskull alluded to. But many do actually have it available, but with scrambled address bits, so A0 and A1 might be swapped for example. This is absolutely no problem to add support for though. Worst case, you'd need to do a small solder mod to connect the /wr pin, which is something that the carts often add the facility to do, because...

2) Some carts being sold actually don't have a battery. Instead, they modify the ROM so that it writes SRAM to flash when saving, and then restores it when the game is started again. This works ok enough for games, except that you get a one second or so delay after saving the game. But these particular cartridges are problematic for LSDj use since they won't retain SRAM contents on power-down.

3) Some carts come with 3.3 V or even 1.8 V flash operated at the Gameboy's 5 V, which is a gross voltage overload. In practice, it often works ok for a $5 product (if you're willing to risk that the cartridge might stop working at any time) as long as you're only READING from the flash. On writing, the flash chip will error out because of the overvoltage. This can often be solved by putting a diode in series with the supply to drop the supply voltage a little, again with the caveat that the cart could stop working at any time. So this might, again, require a hardware modification of the cart.

4) Flash chips are by their nature sector devices. You can write to a certain byte once, but you can't write to the same byte again unless you erase a bigger area called a sector, which are often 32-128 kB big on the devices in question. LittleFM was really a quick hack which took the path of least resistance and saved data corresponding to 1-2 sectors at once. If the sectors are 128 kB big, you might choose to either waste the remaining 96 kB, or do something more tricky like saving multiple copies of the same song, or saving different songs in the same sector and defragmenting the file system every now and then or something like that.

One solution that solves both 2 and 4 simultaneously, would be to implement support for something like a file system that saves every modification to the song to flash sequentially, as an address being changed and what byte was written. This would work very well, except that it would require a lot of modifications to LSDj. At that point I might as well write my own GB tracker. While that's actually a tempting idea, it would take a LOT of work.

67

(9 replies, posted in Nintendo Handhelds)

unexpectedbowtie wrote:

I would play in Live mode, but trying to remember the exact chain for each instrument makes that almost impossible. As in, currently I write the track out... and then 'solo' each channel for a take. Playing Live would mean remembering the exact structure - or building it in the DAW from loops, which I want to avoid.

I don't get what you are saying. Isn't your song just a list of chains? If so, use live mode to play it from top to bottom, once for each channel. No need to split it up into loops just because you're using live mode. Or am I missing something?

68

(9 replies, posted in Nintendo Handhelds)

If the kick is a sample (kit) then this may be a side effect of the antispike fix I suggested that Johan should add a couple of years ago. This makes kits less noisy, and in particular makes them usable at all on GBA, which would otherwise have sounded horrible.

I suggest you record in live mode instead, which lets you literally only play one channel at a time, rather than playing all channels and soloing one channel.

ThreeAndUp: Try e-mailing the BGB author and attach the save state file.

70

(36 replies, posted in Nintendo Handhelds)

e.s.c. wrote:

in what sense? aluminum has been used for everything from business card cases to briefcases to cameras. no reason a game console NEEDS to be plastic, and aluminum has the bonus of helping dissipate heat

Aluminium is heavier than plastic, assuming the same structure. The heat dissipation advantage really only holds true if the heat-producing components are thermally bonded with the case. A Gameboy shouldn't need the extra heat sinking anyway. Also, as I've repeated everywhere I've had the opportunity, I'm 95% sure that's not actually aluminium, but regular ABS plastic with a silver finish. Think the original Nintendo DS's silver finish as an example, and of course any number of random products. Maybe I will have to eat my words when the thing comes out, though...

New version released.

New in BGB 1.5.6 (2017-12-06) - Fixed regression: choppy framerate and sound glitches after pause.

BGB homepage

New version released.

New in BGB 1.5.5 (2017-11-27) - Added support for GUI display scaling. Improved input lag on 120 Hz display mode. Improvements to debug messages. A number of bug fixes and small improvements.

The link port works the same on GBA SP as on any other Gameboy. You can use it to sync etc... Just make sure your link cable has the smaller plug on one or both ends (as needed). The bigger plug is used on DMGs and the smaller plug is used on Gameboy Pocket, Color and Advance.

74

(7 replies, posted in Nintendo Handhelds)

Roni, I've replied to your PM.

75

(6 replies, posted in Releases)

Nice use of "concat". I tried "sincat" to reduce my dependence on felines, but ultimately it instead just made them float in space on harmonically pure waves.

One common cause of this type of fault is that you might've briefly shorted two adjacent pins on the ribbon cable while inserting or removing it. In particular, the LCD drive voltage (-19 V) and the combined line used for reading the state of the left and B buttons. For this reason, you should NEVER insert or remove that ribbon while the power is on.

If this is the case, booth left and B have been permanently fried, and the CPU is basically unusable, unless you find an application where missing those buttons is acceptable. (Maybe external MIDI control?) If the B button is still functional you know that this is NOT the fault though, and you should look for a place where something connected to ground is shorted to something else.

77

(1 replies, posted in Bugs and Requests)

No username changes are allowed, sorry.

Have you checked continuity between the two pin 13's with a meter or only through visual inspection? Something like micro-crack in the trace, or a dry solder joint that has separated from the surface can be hard to detect visually.

If you look at the SID datasheet page 3, you'll see that voice 1 and 2 are in the lower half of the memory map, where A4=0. So it seems like for whatever reason, the second chip is not reacting to writes to the top half of its memory map. This could be because the A4 line is broken on the SID2SID. (If it was broken elsewhere, the same problem would affect both chips equally, even without the SID2SID.) It could also be because the IO1 pin doesn't decode correctly when A4=1 for whatever reason, which could be an issue with the machine itself.

Also check that pin 13 (number 2 counting up from the bottom left corner) has a connection to pin 13 on the other chip/the long legs. You might have a broken trace on the PCB, bad solder joint, missing solder joint etc.

Double check that the CS connection (the wire soldered between the chips) goes to the right place on the C64.