A .gbs is a Game Boy's music, cut out of the game: the sound engine and its
data, with a 112-byte header saying where to load it and which routine to call. It is the same
idea as an NSF for the NES, and it is simpler, because the Game Boy has no expansion chips and
nothing in the header is reserved for anything. A player loads the code, calls
init with a song number, then calls play sixty times a second.
Sixteen bytes of numbers, then three 32-byte text slots. Every multi-byte value is little-endian, as the Game Boy's processor is. The code follows immediately and runs to the end of the file.
The code is placed at load. init is called once per song with the song number in register A. play is called on every tick, and is the routine that actually writes the sound registers.
A file whose code runs past $7FFF is not wrong: a player maps
the excess as switched banks, the way a cartridge does. One that loads at $0070
is unusual and real -- the code sits over the interrupt vectors -- and a reader names it
rather than refusing it.
Two bytes that say how often play is called. Both zero means
every VBlank, 59.7 times a second, which is what nearly every game did. Non-zero values
program the Game Boy's hardware timer instead, for engines that ran faster than the frame.
Title, author, copyright. Each slot is always 32 bytes; a NUL ends the text inside it without ending the field. A reader that scans for the NUL instead of stopping at the slot runs a full 32-byte title into the author, which is how the composer's name ends up appended to the game's.
Nothing declares the encoding. Nominally ASCII; a Japanese rip may carry Shift-JIS, and no byte says so.
No per-song titles, no lengths, no expansion-chip flags, no bankswitching table. An NSF header has all four. The Game Boy's sound is four channels on one chip with no variants, and banking needs no table: the code is loaded from the load address up to $7FFF, and whatever is left fills 16 KB ROM banks from bank 1, which the engine maps in at $4000-$7FFF by writing a bank number to $2000, the way an MBC1 cartridge does. A file larger than the address space is the normal shape of a whole game's music. The song count and the first song are the whole of the per-song information.
Three letters and a version byte. The letters alone open ordinary text; the version byte is checked with them, and every file ever made is version 1.
The Game Boy's processor is an 8-bit Z80 relative and stores words low byte first. Every address in the header follows it.