Quadbike Alpha 1

discuss pc<>acorn file transfer issues and the use of other utils
User avatar
scarybeasts
Posts: 971
Joined: Tue Feb 06, 2018 7:44 am
Contact:

Re: Quadbike Alpha 1

Post by scarybeasts »

Diminished wrote:
Wed Jul 13, 2022 4:48 pm
You've mentioned this mysterious heuristic before, and several times I've wondered how it works.
I essentially piled hacks together until it was capable of loading the broadest range of iffy CSW files.

References:
b-em CSW loader: https://github.com/stardot/b-em/blob/d5 ... csw.c#L148
BeebEm CSW loader: https://github.com/stardot/beebem-windo ... w.cpp#L477

beebjit's original approach was similar to b-em and BeebEm, and very simple: look at each half wave length, sequentially, in the CSW file and decide if it's a "0" bit (1200Hz), "1" bit (2400Hz).
Code: https://github.com/scarybeasts/beebjit/ ... csw.c#L111

beebjit's original approach differed from b-em and BeebEm because it was actually pickier in two regards:
1) It checked all CSW half lengths in any bit, requiring each to be "in range". For a "0" bit there are 2x half waves checked and for a "1" bit there are 4x half waves checked. Both b-em and BeebEm look at one half wave only and then skip either 1 or 3 half waves depending on if it's a "0" bit or a "1" bit.
2) The tolerances for acceptable half wave lengths were tighter:
https://github.com/scarybeasts/beebjit/ ... _csw.c#L11
Both b-em and BeebEm, by contrast, appear to differentiate with the simple "<= 0xD".

So the original beebjit CSW loader was less capable of loading wobbly CSWs than b-em or BeebEm.

The heuristic changes applied over time were:

1) Assess the half wave lengths as a sum, not individually. This smooths out any localized wobbles:
https://github.com/scarybeasts/beebjit/ ... 3c52338cd8

2) Fiddle with the exact threshold for detecting a 2400Hz half wave. This is important to lock on to the correct phase at carrier -> data transition.
As can be seen in this change, I also started being more disciplined about collecting and checking in interesting CSW test cases.
https://github.com/scarybeasts/beebjit/ ... fa6be6fbc2

3) Have two different "0" bit bit detection thresholds based on whether the state is in data or in carrier.
This was necessary to get the phase correct at the carrier -> data transition for borderline cases.
https://github.com/scarybeasts/beebjit/ ... d394c16232


Cheers
Chris
User avatar
Diminished
Posts: 877
Joined: Fri Dec 08, 2017 9:47 pm
Contact:

Re: Quadbike Alpha 1

Post by Diminished »

scarybeasts wrote:
Sun Jul 24, 2022 1:24 am
...
Thanks for taking the time to go into detail on this -- there is actually a little less black magic here than I expected!
Post Reply

Return to “software & utilities for the pc, mac or unix”