Offline
Sweeeeeeden
stargazer wrote:

Just gave it a shot. This is amazing! I'm on linux (easier drivers!) and I love that I can now use multirom again! Some suggestions I had were:

Any way you could make the multirom part work without a copy of LSDJ in the rom? It seems like most of the code is already there. I'd just like to be able to fit more stuff onto bank 2.

Absolutely. I just added it to LittleFM because it seemed natural. The plan is to eventually release a standalone menu ROM and patcher. Ideally, I want to wait until I've made a ROM which handles SRAM management properly. What I have in mind is a to store sav for games/other software in an LSDj type file system, so LSDj could share a cartridge with other thing using SRAM, and so that the standalone version will use SRAM more efficiently than current menus.

However do you really need a version without LSDj? You've still got 3 MB of free space. Do you need the extra 1 MB for other ROMs? If not I'd just put the same big multi-ROM on both "pages" so you don't have to worry about switching/being stuck on page 2.

stargazer wrote:

Ability to return back to the menu via some kind of button combo? This isn't a big deal I just thought it would be cool.

I already have a way of doing this. However, this currently requires manual patching of each ROM to add a bootstrap for the return trip. I've actually already done this to a number of ROMs for testing. If you tell me which extra ROMs you want, I can prepare a ROM for you.

Offline
SLC, UT
nitro2k01 wrote:

Absolutely. I just added it to LittleFM because it seemed natural. The plan is to eventually release a standalone menu ROM and patcher. Ideally, I want to wait until I've made a ROM which handles SRAM management properly. What I have in mind is a to store sav for games/other software in an LSDj type file system, so LSDj could share a cartridge with other thing using SRAM, and so that the standalone version will use SRAM more efficiently than current menus.

That sounds amazing...I would love to be able to understand it more though. I'm sure the rest of the gameboy dev community would love it too. It just makes the EMS carts so much more accessible.

nitro2k01 wrote:

However do you really need a version without LSDj? You've still got 3 MB of free space. Do you need the extra 1 MB for other ROMs? If not I'd just put the same big multi-ROM on both "pages" so you don't have to worry about switching/being stuck on page 2.

That's exactly what I figured out this morning after I wrote that. I realize now the only advantage to having lsdj and roms on a separate bank is that I couldn't get them to live in harmony on the same bank with EMS' software.

nitro2k01 wrote:

I already have a way of doing this. However, this currently requires manual patching of each ROM to add a bootstrap for the return trip. I've actually already done this to a number of ROMs for testing. If you tell me which extra ROMs you want, I can prepare a ROM for you.

Yeah, now that I have all roms together on both banks it's really not a big deal to power cycle. I would be cool if you built everything into the java application to patch and combine all roms. A simple cat command can't be too hard to implement in java could it?

Anyways, very thankful for what you've already put out there and very excited for whatever comes next!

Offline
Sweeeeeeden
stargazer wrote:

Yeah, now that I have all roms together on both banks it's really not a big deal to power cycle. I would be cool if you built everything into the java application to patch and combine all roms. A simple cat command can't be too hard to implement in java could it?

There are two problems.
1) The ROMs need to be aligned. With a cat command you have to take care of this manually, or unaligned ROMs will simply fail to load. This is not very hard to add to patcher application.
2) For the menu return function, you need to find the button read procedure, some free space in the ROM and patch it for the button detection and then do a sequence of writes to the cartridge to restore it to its original state and jump back. This is a little more difficult, but not super difficult. And different ROMs may need slightly different treatment.
However I still need to spend the time doing it, including making a sensible GUI and so on. With a cat command, all the "error handling" is the task of the user, not the code. Together with save data handling, which I want to finish together with this, it becomes a bigger project.

Offline
Sweeeeeeden

However, the offer to make a ROM with a return mechanism for your other ROMs for you is still open. Of course, this already works in LSDj by default. (sel+start+B+A.)

Offline
SLC, UT

Thanks I appreciate it but as of now I don't really see any huge need to have that option. I do really appreciate the offer though!

As far as the save data goes, what exactly does that entail? Is it simply manually telling the cart where in sram you want the savs to go and then essentially cramming them all together? Almost like a bookmark, just remembering where each sav is located? Or is it far more complex than that? (That's way too many questions in one paragraph to not be annoying, sorry!)

Interesting side note, when testing this on my super gameboy I noticed that when I'm booted into one of the other roms through littlefm and I do a reset with the super nintendo, it reboots the sgb and boots directly into the rom I previously was in. I'm assuming this is because it doesn't fully kill power to the cart. It does come in handy when nerdrix starts glitching out on me!

Offline
Sweeeeeeden

That would be for non-LSDj stuff. So for example when you load mGB, its configuration is loaded, and then saved again when you quit mGB or on the next power cycle. This way, other programs won't overwrite LSDj's currently open song.

Offline
SLC, UT

Oh okay, so almost like sneaking the other savs in behind LSDJ. I would love to learn/see some of the code that goes behind this. I guess I'll PM you?

Offline
Sweeeeeeden

This code does not exist yet. That's why I'm trying to explain that it's a big project. tongue

Offline
SLC, UT

Oh yeah sorry, I understand that. I was mostly looking for a sample of what you'd have to do. Or really just any more information. But I PM'ed you.

Offline
Toronto, Canada
Infinity Curve wrote:
nitro2k01 wrote:

Well, I need to write the post about adding samples. However, I'm almost disappointed you didn't end the thing with lowering the pitch slowly to the slowest setting.

I know you are busy, but any word on this?  I will love you long time!

Offline
Sweeeeeeden

Ok, brief explanation on how to do it, but then you're on your own. Create a file that is a 1 bar loop. Convert it to 8 bit unsigned mono and 32768 samples long. Hint on the last part, making it exactly 1 second long and then converting it to 32678 Hz sample rate should at least get you close. You might need to manually trim or add a couple of samples with a hex editor. If you're adding samples, repeat the last sample value in the file or so. (Who ever said this was supposed to easy?)
Run the following Python script. It will convert the file you've created to the 4-bit format the Gameboy so much craves and create a new ROM with your sample.

def fourbit(x):
    return ord(x) & 0xf0

def fatconv(fn):
    f = open(fn + ".raw", "rb")
    x = f.read()
    f.close()

    if len(x) != 32768:
        print "File should be 32768 samples long, yo. 8-bit unsigned mono is where it's at, dawg. Raw with no header. (That's what bshe said.)"
        return

    g = open("amenizer.gb", "rb")
    gb = g.read(16384)
    g.close()


    y=map(fourbit,x)
    y=zip(y[0::2],y[1::2])

    #f = open(fn + "-conv.bin", "wb")
    g = open(fn + "-rom.gb", "wb")
    g.write(gb)

    for i in y:
        #f.write(chr(i[0] | i[1]>>4))
        g.write(chr(i[0] | i[1]>>4))

    f.close()

fatconv("filenamehere")

However, the final version of this application, when it comes out, will surely blow your minds. Just a prediction.

Offline
Sweeeeeeden

This happened during the development of this week's project, but this is not this week's project.

http://soundcloud.com/nitro2k01-gameboy … esey-sound

Offline
SLC, UT
nitro2k01 wrote:

This happened during the development of this week's project, but this is not this week's project.

http://soundcloud.com/nitro2k01-gameboy … esey-sound


Hahaha that actually sounds awesome. I wish I could make sounds that cool on purpose!

Offline

Ooook so, I understand close to nothing of this technical stuff, all I wanted to know is this, nitro:
once your project is complete, will we be able of having multiple games and savs? Because I was thinking about keeping 2 carts, one for LSDJ and the other to have multiple games on the go big_smile
And if it is so, how many games are we talking about? 3/4?
Thanks in advance, sorry for the newbignorance tongue

Last edited by Adhrast (Mar 10, 2013 9:36 am)

Offline
West Yorks, UK

the slicetest is wicked, any plan to add button controlled/ 1chn sequencer slice triggering?
that woul be siiiick. expecially with midi in sync, and yeah further out into hopefullness a way to change the sample.

good work anyhow

Offline
Sweeeeeeden

Writing walls o' text takes times, and I'm not going to be finished today, so I'm dropping the ROM early.
http://blog.gg8.se/gameboyprojects/week … diflt0.zip

What it is: A rough and ready MIDI synth with a filter. Use it with an Arduinoboy or NL MIDI adapter in raw MIDI mode. It has no UI except dirt lines to show that the CPU busy. Please excuse the bug (or rather, lacking implentation so far) where all sound is cut whenever any key is released. Could be annoying if played with a keyboard, but sending it notes from a sequencer should work ok. It accepts a cutoff on CC 71 (hex 47 if that's your thing.) The actual filtering currently pre-rendered and same as an LP fade on a sawtooth from 10-FF in, with a Q of 2, in LSDj. The novelty however is how the sound is loaded into the wave buffer, which sounds really smooth. Hint try connecting a modulation source (LFO, envelope) to send to the CC, if your client allows it. At a high frequency if you want. It's not finished yet, but just imagine the possibilities in the meantime.