The assembler compiles the player routines without any modifications so it made sense to me to lump my notes together here.
It couldn't get much easier for the Linux user I think!
Rasm is the z80 cross-compiler. (The R stands for Roudoudou I suppose). Download the Rasm archive, extract it to a folder.
Look for the compilation instructions inside the c file, something like
cc rasm_v0108.c -O2 -lm -lrt -march=native -o rasm
After copying the output rasm to say /usr/local/bin, you can then use rasm inputfile.asm to produce an instant binary from out of the source.
The inputfile.asm contents might be something trivial like this:
This should fill the top third of the screen with garbage.
|The black screen comes from the bin2tap BASIC header|
Then, working with the default output binary name:
bin2tap -b -o mycode.tap rasmoutput.bin
After this, Fuse will happily load the produced mycode.tap and use the BASIC loader to load the binary and execute it at 32768 ($8000).
Rasm is a clever modern macro-assembler with all the repeat functions you'd expect nowadays. With a good editor like sublime-text (with added z80 highlighting) it's a breeze.
For example, the following will generate a table of 192 start addresses for each vertical pixel row, often needed in ZX Spectrum graphics routines:
Using variables, evaluations and local labels inside repeat blocks even quite complex repetitive code can be generated.
Arkos Tracker 2
More information about Arkos Tracker from here. Extract the archive and simply run.
I'm not going too deeply into song creation here, suffice to say this is the easiest cross platform 8-bit tracker I've seen, with an audible default instrument and preset instrument categories for bass, snare etc.
After the pattern has been filled with bleeps and bloops, you can export the creation from the menu option file/export as generic (AKG), choosing source as the export mode.
Pick the PlayerAkg_SPECTRUM.asm from the players/playerAKG/sources folder, and copypaste the contents to the end of your source. (Of course it would be a better practice to include the player routine and the song.)
For example, this is a minimal main loop that will HALT the Spectrum until the next frame, and call the 'play frame' portion of the player routines.
; paste the PlayerAkg_SPECTRUM.asm contents here
; paste the Songname_AKG.asm contents here
The exported song source can be copypasted after the player source. The Songname obviously refers to the filename it was exported with.
The start address is not needed so the org line may need to be removed from the song source. As can be seen the player nicely accepts a flexible start address - no need to copy the song data to some specific address either.
My example is overtly simple, it's not especially useful to simply HALT and call the player routine, it might be better to use an interrupt to play the song.
But this is it for now, I'm super-impressed how easy this was to set up and get running.