I think extended Octode versions should be allowed, as they has quite different timbre. Yes, it opens up a 'lazy' shortcut, but well, original Octode (and ZX-7, actually) wasn't used too much by anyone besides Mister Beep anyways.

Savage newcore, on the other hand, is the same thing as the original Savage, just with cleaner sound, so it makes sense to exclude it.

Overall, yes, I'd propose to disallow Special FX, Huby, Music Studio, Music Box, original Octode, QChan, Phaser1 (any mod), Savage old and newcore, original Tritone. It makes sense to disallow ZX- family, although ZX-3 may be allowed, as it barely had any use as far as I know. Not sure on Lyndon Sharp's engine, it had limited use in modern times, but not much.

There is some old engines (such as Earth Shaker, ZX-10, Follin's) that didn't have much attention yet, so maybe it is better to exclude particular currently popular ones instead of just sorting them out by year of release.

Sometime I have a thought that it would be nice to run another compo. However, instead of many categories, do a single one, with a rule - use an unpopular engine. I mean, lately we got tons of new cool engines with huge potential that is waiting to be explored. Of course there is issue with the authoring tools, but those won't develop if no one interested in new engines, so we need to make some push. Not sure on the list of prohibited engines, but it should include Phaser1, Tritone, Special FX, Savage - ones used the most.

454

(135 replies, posted in Sinclair)

Not yet, did some experiments, wasn't really satisfied, but I'm going to try some more.

455

(135 replies, posted in Sinclair)

Very impressive. There is like 100 engines already, but beeper continues to amaze. So does utz.

456

(10 replies, posted in Sinclair)

But there is really no stereo AY output in the original models, it is a feature of DIY Russian clones that is totally inconsistent between all of them (different channel layouts, different mixing ratios). And even if one wants stereo, two RCAs is a good option. At least you can easily connect such device to a modern TV, without adapters, they still have composite and stereo in. With Jack you forced either to phones, or a number of cable adapters, as either TVs or standalone amplifiers normally don't accept 3.5 jack.

Well, it is understandable why they went 3.5, the board space and connectors price. Cutting corners indeed.

457

(10 replies, posted in Sinclair)

VGA is outdated, but it provides very good picture quality, compared to RCA. So if you want to use, say, ProTracker 3 with this device (4x8 font), it will be really tiresome for the eyes, while VGA would give a crisp picture, just like on emulators. Maybe they only thought about playing retro games, that always were blurry with the original hardware that was rarely used with RGB displays.

458

(16 replies, posted in Atari)

You can take a look at my recent engine BuzzKick (available in 1tracker) - it is basically a Special FX replica (the same sound generation loop), but without interrupts and with sampled drums.

I personally would like to get an x86 portable device such as Portfolio, to make a tracker or something. Unfortunately, didn't see them around since early 2000, like some HP portable with WinCE.

459

(10 replies, posted in Sinclair)

Nice piece of hardware, but WHY composite only? That's horrible idea these days. VGA or HDMI is a must. And, if one sticks to composite nevertheless, WHY no RCA audio output then, for consistency? Lots of converters and adapters around such small board just to connect it to modern equipment is not that cool.

Vega is a software emulator on ARM SoC, though.

461

(164 replies, posted in Sinclair)

Sure, just edit palette of the font.bmp, with Graphics Gale or something. It was configurable like that since the very first version. Details on the palette indexes is in the docs/readme.txt

462

(164 replies, posted in Sinclair)

Implemented block list and names. Press Space to split the song into blocks, press Ctrl+F inside a block to edit its name. All blocks listed on the right, along with their names. There is the old navigation with Home/End keys that allows to jump between blocks, thus inside the list, so there is no separate keys for this.

The issues I mentioned in the post above were fixed too.

463

(164 replies, posted in Sinclair)

I'm thinking how to implement it in 1tracker. SNESGSS had similar feature (Ctrl+F), worked well.

Found a number of issues with copy/paste and expand/shring after previous changes, so I need to fix them first.

464

(164 replies, posted in Sinclair)

1tracker updated to v0.22. Changed the markers (set by the Space button) into blocks, just like SNESGSS, where it proved to work much better. Ctrl+L (select channel) and Ctrl+A (select all channels) now alternate between the whole song and current block on each press, which is really convinient. Font and color scheme is tweaked to (hopefully) more pleasant experience.

465

(9 replies, posted in Sinclair)

Unfortunately, combining the pins gives different timbre. Not sure how to describe it, and I didn't analyze it, but it feels like it has different harmonics. Engines of this kind, with separate pins, were underdeveloped in modern era. In the past it was FuzzClick, the Code Masters engine (Whittaker's?), Tim Follin's, the one from Dark Fusion, etc, and currently there is next to none (just original Beep Tracker). Worth experimenting, I think.

The overall delay1+delay2 always equals to the same time, so width of a pin (0 and 1 parts) is always the same. Initial values are tricky for FuzzClick, delay1 is the frequency counter value shifted >>2 or >>3 (for channel 1 and 2 respectively, gives different 'volume'), and delay2 is 1. I replicated exactly the same, as I wanted to have the same sound.

466

(9 replies, posted in Sinclair)

The UI changes is just different font.bmp file, it allows to customize the looks (along with the .cfg file). Tried to do something more comfortable to work with on my PC. Tracker code itself had no changes yet, although yes, I want to eventually add some things from SNESGSS interface, that also had pattern-less approach.

Sound generation loop from this engine, that closely matches SpecialFX:

soundLoop

    ld a,3                ;7 - this part is just 62t delay, to align the (empty) loop to 168t, allowing to have lowest E note
    dec a                ;4
    jr nz,$-1            ;7/12=50t
    jr $+2            ;12

    dec d                ;4 - channel 1 8-bit counter
    jp nz,.ch2            ;10

.ch1freq=$+1
    ld d,0            ;7 - reload counter

.ch1delay1=$+1
    ld a,0                ;7 - first variable delay, that is like bottom of a pin, it gets changed by the decay envelope
    dec a                ;4
    jr nz,$-1            ;7/12

.ch1out=$+1
    ld a,0                ;7  - output a set bit (or reset, if the channel is muted)
    out (#fe),a            ;11

.ch1delay2=$+1
    ld a,0                ;7 - second variable delay, that is top of a pin
    dec a                ;4
    jr nz,$-1            ;7/12

    out (#fe),a            ;11 - reset output, pin is ended

.ch2

    ld a,3                ;7 - the same for the second channel
    dec a                ;4
    jr nz,$-1            ;7/12=50t
    jr $+2            ;12

    dec e                ;4
    jp nz,.loop            ;10

.ch2freq=$+1
    ld e,0                ;7

.ch2delay1=$+1
    ld a,0                ;7
    dec a                ;4
    jr nz,$-1            ;7/12

.ch2out=$+1
    ld a,0                ;7
    out (#fe),a            ;11

.ch2delay2=$+1
    ld a,0                ;7
    dec a                ;4
    jr nz,$-1            ;7/12

    out (#fe),a            ;11

.loop

    dec b                ;4
    jr nz,soundLoop        ;7/12=168t

The weird part of PFM engines of this kind, with separate pins (not combined like QChan or Octode), that I don't really understand, is that they output both 0 and 1 parts of a pin with corresponding delay, not just 1. If you omit the 0 part with its delay, cross-detune gets just horrible, even with two channels.

467

(9 replies, posted in Sinclair)

In order to do some experiments with the mixed PFM/square synthesis, I decided to make a FuzzClick-like engine first. It uses the same sound synthesis loop, the same two channels with sustain control, but different, much simpler format and parsing code. It also has some features I wanted to have - no interrupts enabled (no random clicks), detune support, per-row speed control, and customizeable sampled drums (lifted up from Phaser3).

You can re-download 1tracker to get this engine.

However, the engine sounds somewhat different than the original FuzzClick, and has more noticeable cross-detune issues (compared side-by-side). Honestly, I never fully understood the concept of this exact kind of engines, so maybe I did something wrong. So, utz and introspec, please look into it by a chance. Would be nice to sort out the issues before moving further.

468

(135 replies, posted in Sinclair)

Not really next gen, but something that I think hasn't been tried yet: mix a FuzzClick-like PFM engine with Music Box-like engine.

FuzzClick has two 50t delays between channels, so there is quite a lot of time to add extra channels, but adding the same PFM channels adds serious cross-detune. However, adding a Wham-like channel (xor'ing an output at counter overflow) won't introduce detune, as it is fixed-time code that could be added instead these delays.

How to add it is the question. I experimented with it, and it seems this will give interesting result:


sound loop

first counter and pulse on overflow (as in FuzzClick)
50-t delay (as in FuzzClick)
second counter and pulse on overflow (as in FuzzClick)

third counter and the extra chnanel output flip on overflow
output third channel to #fe
short delay (affects the volume, to make proper volume balance)
output 0 to #fe


This gives quite clean square tone and still-recognizeable timbre of FuzzClick-like engine for the other two channels.

Unfortunately I can't provide example code at the moment, it is complete mess, but here is what it sounds like. Of course it is not something as impressive as latest utz's wavetable engines, but still, interesting mix of two kinds of the 1-bit sound.

http://shiru.untergrund.net/temp1/pfm_square.wav

Honestly, I don't know. I seen this track, and recall some other demo track (probably the one originally reffered in this list), but I don't have any details on these engines. I can only guess Oleg was working on an engine in ~2012, that's why he disassembled a number of classic engines back then (Dark Fusion, Star Bowls, Trantor). We should probably ask him directly.

I think there were more than one Oleg Origin beeper engine, maybe versions of it. This one has sampled drums: http://zxart.ee/eng/authors/o/oleg-orig … gine-test/

Oh, sorry, my bad, missed that last part.

Maybe I missed something, but isn't it is easier to just use MSB of the 16-bit accumulator as LSB of the sample pointer? Did that before.

I mean,

add hl,de
ld c,h
ld b,MSB (all samples aligned to 256 bytes)
ld a,(bc)

473

(5 replies, posted in Sinclair)

There is some issues with 1tracker for this engine. There is no means to make samples that long, so it either would be WAV import, or some interpolated sample - like, 32 positions by more than 4 levels that gets converted into proper sample internally. And a bigger issue, there is no FX tables concept whatsoever, so that would need to be added. A hacky way would be to make instrument share both wavetables and FX tables data, like, when cursor in the instrument column, you see only waveform editor in the instrument editor, and when it is in the FX table column, you see FX table editor in the instrument editor.

Well, and another issue that almost no one wants to use 1tracker anyway. So we likely just need another editor, a mix of Beepola/1tracker concepts (streamlined Beepola GUI with short patterns and stuff, but with plugin system, I'd propose JS this time around).

474

(65 replies, posted in Sinclair)

The routine reads keyboard and one of common joystick port to check if there is a key has been pressed, to stop the player. That's common situation in games, music plays until it ends, or a key is pressed.

The 1-bit ambient thread made me think of combining Phaser and QChan like synthesis in one. This would give us both dynamic timbral changes of the Phaser synth and volume envelopes.

The approach:

- remember old output value of the 16-bit generator pair
- do the phaser stuff
- compare old value with the new one
- if there was change, generate a pin of desired duration (hence 'volume')

The question is how to do all this fast enough, to get at least two channel polyphony. Well, if 3.5 MHz is not enough, this still could be useful for something faster than ZX Spectrum.

Here is a crude proof-of-concept code:

begin

    ld hl,0
    ld ix,0
    
    ld bc,2000
    ld de,2001
        
loop
phase=$+1
    ld a,0
    ld (prevphase),a
    
    add hl,bc
    jr c,$+4        ;7/12 - note that this part could be replaced with sbc a,a, this gives a different kind of sound
    jr $+4          ;7/12
    xor 16          ;7

    add ix,de
    jr c,$+4        ;7/12
    jr $+4          ;7/12
    xor 16          ;7 - should be 255 in case with sbc a,a above

prevphase=$+1
    cp 0
    ld (phase),a

    jr nz,pin  ; there was change, generating a pin
    
    exx        ; otherwise keep steady timing (roughly in this case)
    ld b,20
    djnz $
    exx
    
    jp loop
    
pin
    exa
    exx
    
volume=$+1
    ld c,15           ;this is volume 0..15, can be changed with an envelope in the outer loop, giving us slow attacks and decays

    ld a,16
    out (#fe),a
    
    ld b,c
    inc b
    djnz $
    
    xor a
    out (#fe),a
    
    ld a,c
    xor 15
    ld b,a
    inc b
    djnz $
    
    exx
    exa
    
    jp loop

Compiled test is attached, there is no volume changes though, just to evalate the sound. Isn't too great, and has artifacts, but the volume (once changed manually) works pretty well.