Hi and welcome aboard! Good job on your first HT2 track. Of course there's always things that can be improved, but I think this is actually pretty solid. For being new to trackers, you certainly didn't chose the easiest route wink

That's a pity. Well, at least we're getting this excellent music release. Anyway, thanks for the good read. Looking forward to the upcoming ones, especially the data format one. I'm also curious about your experiences with VIC. Writing a player with support for "viznut" waveforms has been on my bucket list for a long time. Sounds like I might be in for some nasty surprises, though.

Ahh yes! Fantastic work. Still blows my mind that monophonic stuff can sound so great.

So he didn't use your music in the game after all?


(4 replies, posted in Sinclair)

Lol, was too lazy to add a keyhandler, cause I thought nobody would use this anyway yikes
Pushed an updated version with keyhandling to github. Source is for Pasmo assembler, btw.


(101 replies, posted in Sinclair)

Yay for new docs, and for Robin. Does that one predate Tim Follin's first engine, actually?

SquatE engine still segfaults on entering a note. It does not segfault in v0.29, so the bug is somewhere in 1tracker itself, not in the engine.

./instrument_editor.h:646:187: error: use of undeclared identifier 'FALSE'
  ...set_input_string(instrumentGuiParamXOff, instrumentGuiList[instrumentGuiCursor].y + PATTERN_YPOS + 1, instrumentGuiList[instrumentGuiCursor].max_len, MODE_INSTRUMENT_INPUT_DONE, FALSE, (char*)&module.instrument[curInstrument].data[...

Should be "false", I suppose?

Also, gui.h:72, char is always < 128, so the "||c>=128" is redundant.

Compiler is also throwing a lot of warnings about strncat ("the value of the size argument in 'strncat' is too large, might lead to a buffer overflow"), doesn't seem to be an actual problem though.


(4 replies, posted in Sinclair)

ud - Ultimate Drum Synth

Added one to the collection of reusable click drum routines. This one can mix tone slides (kick/tom) and noise. Pitch and volume control for everything. Unlike the "kick" routine, the kick synth in ud uses only exponential pitch decay, but the decay speed can be controlled. 16-bit tempo control, because why not.

The source code can be found in the CLICK_DRUMS directory on my 1-bit engine github repo.


(86 replies, posted in Sinclair)

Ok, thanks. Let's hope he'll discover some more advanced engines eventually.


(6 replies, posted in Sinclair)

I've been wondering for some time if there is a way of replacing the usual 16-bit frequency counters with an LFSR or something of that sort. Feels like such a waste to spend 4 registers on a simple counter every time.


(86 replies, posted in Sinclair)

Thanks! That was some very strong competition from you guys. Listening again, I think "Repeating Itself" is actually my favourite from this compo. And yup, I was likewise a bit puzzled by "who the hell is trying to beat me at Squat", but the "author's comment" was a give-away. Now who's hellraver, though?

Did you check out AMP16k already?


(6 replies, posted in Sinclair)

Ah, yes, Serzhsoft delivers, as usual. Thanks for reminding me about that one, I forgot to check that out when it was released!


(6 replies, posted in Sinclair)

Sounds surprisingly nice for being so simple.

  ld b,1
  ld hl,#4000
  ld a,(hl)
  add a,b
  ld b,a
  ld (hl),a
  out (#fe),a
  inc hl
  ld a,h
  cp #58
  jp nz,loop
  jp start

Could've easily shaved at least 3 bytes off, though yikes

I still would like to see a bytebeat interpreter for beeper one day. Or rather, bitbeat... I don't see how it could be done though, considering the thing needs to run in constant time.


(4 replies, posted in Sinclair)

Should've done this much earlier, I guess, but anyway: This will be where I announce my new engines from now on, instead of spamming the board with a new thread every time.

So, here we go, first new Speccy beeper engine of 2021. Basically this one is just wrapping up my recent experiments with PD synthesis. Might still tweak things later on, but for a simple proof-of-concept it's good enough as is methinks. No converter for now, though of course it'll be available in Bintracker sooner or later.


Aczidbox is a 1-bit sound engine for the ZX Spectrum beeper. It implements a simplified version of Phase Distortion Synthesis, as introduced by the Casio CZ range of synthesizers.

The two tone channels each feature a 16-bit base oscillator and a LFO-controlled 12-bit resonant oscillator. Channels each use 7 bits of volume information internally, which are reduced to 4 bits for the final mix.

3 different configurable click drum modes are available: synthesized kicks, synthesized noise, and PWM sample playback. Drums interrupt tone playback.

The core synthesis runs at 7812 Hz (double 224 cycle loop).

The source code is available on github, as usual.


(105 replies, posted in Sinclair)

Horray, got it working in 2 channels, with lfo-controlled resonance. That was surprisingly tough. Sadly, no room for a low-pass. It's also fairly noisy when mixing 2 channels. Will try to get it a little cleaner than this, though I'm slowly running out of ideas.


(105 replies, posted in Sinclair)

Yes, was thinking the same thing. What I'd really want is to have some sort of an lfo-controlled lo-pass. A simple FIR lo-pass at a fixed cut-off is fairly easy to implement, but I haven't been able to pull off a variable cut-off in constant CPU time. Maybe could be done with another table lookup but I'm currently already short one register pair for implementing the second channel.


(105 replies, posted in Sinclair)

Cooking up some new stuff. Seems like I've got phase distortion synthesis working. Not entirely sure if I got the maths correct, but it sounds interesting at least.


(9 replies, posted in Other Platforms)

Alright, with that I was able to load the program (no autotyping S1000 but whatever). Now what? I can move around in the menu. INIT and EXIT do something. I gather Q should exit from the menu, but nothing happens when I press that. No other keypress seems to do anything. Overall the program is extremely sluggish, barely reacting to keypresses. Is it the prog itself, or the emul? Before starting klavesin, it's pretty responsive though.
Will have to sit down again with this in a couple of days, when I have more time.


(9 replies, posted in Other Platforms)

Hm, it compiled without a problem, and generally it seems to work. However, when I load klavesin.bin and press any key, it puts garbage on the screen and then crashes (hangs with 100% CPU usage). Does that happen with the Windows version? Am I supposed to press a specific key? If I run in FOCAL mode, I get some error message instead.


(9 replies, posted in Other Platforms)

I don't have a working Windows anymore so need to find another way. Managed to get the machine to work in MAME. However, that will only accept tape images. Any idea what would be needed to convert klavesin to the appropriate tape format? And how to load it? Otherwise I can inject the bin into memory via the Lua console, but that'd be a bit tedious and I'd need to know the load address.

Does register 177716 do anything else besides driving beeper/tape? Otherwise it might be quite easy to fake some pcm on the machine.


(9 replies, posted in Other Platforms)

How is the beeper accessed on this one? Direct like on Spectrum?
Also, how compatible is it with PDP-11? Iirc there were various music programs for the PDP-11, would be interesting to know if some of these work on BK-0010.
Also, I faintly remember there being a port of Tritone for it, or was that another machine?

I'm not sure what you're trying to say. If you want you can write in Dutch, then I'll translate.

Good work! But indeed I think you've got a bug somewhere, sounds like several notes are missing to me.

Hoi Crisis, welkom wink Weren't you also experimenting with beeper sound on 16K/contended memory a while ago?

Done: https://github.com/mamedev/mame/issues/7559
Can't upload the .prg there, cause github managed to break file uploads from ff on linux again.


(10 replies, posted in Sinclair)

I think the approach is interesting. It could indeed produce very compact data. In theory Bintracker could support such a format (though at this point it's still missing various required bits here and there). The interface would not reflect the data structure at all though. It'd still be just a normal tracker interface and then conversion to the actual format would be done by the compiler/optimizer. I even have reasonably accurate scale/mood recognition working, though it's just a very simple proof-of-concept at this point.

One problem I see though is that this format optimizes for a certain style of writing the music. Someone who doesn't care about time signature and/or mood might not benefit from size savings as much. Then again, the chance that someone is going to write dubsteb with that thing isn't that high I guess.