All so many years ago, I wrote a morse code decoder program for the COMMODORE VIC20 when it first came out. I advertised it in the now defunct- 73 Magazine.. I'm thinking 1980-1984.. I also had a version which ran on the commodore 64..
Both used a 6502 processor. 8bits 4mhz clock.. They could decode to about 45 wpm.
Of course, all documentation I had regarding the programs have been lost in moves from Detroit to Washington, DC to Boston-New England then last 11 years here in Kansas.
But---the basis of program was an article in HAM RADIO Magazine, which is also now defunct. I recalled it was written by a German ham, and he offered a timing scheme comprised of subroutines, that first tested a location for a dit (1) or a dah (1x3). then tested for the space 0 or 0x3 or 0>6.
from there you fell down through a series of subroutines that compiled a number based on the morse code till it hit a intercharacter space, then the "number was converted to a ASCII character and displayed. The timing was self adjusting, based in receiving dits and dah's and measuting the time of a dit and a dah being dit times 3..
The German ham who wrote the article on how to decode morse; wrote it on how to write the program to decode most efficiently. It did not matter the platform, program or even if you wrote in machine code..
I wrote the "engine" in assembly" then once the character was decoded and it was waiting for the next character during the intercharacter space it tossed it to the screen using the COMMODORE VIC/64 to handle display, line wrap, and if the delay was long, add spaces.
The CW transmit was all in basic..
You may want to find the HAM RADIO ARTICLE by a German ham that talks about a self adjusting CW decode program and how he laid it out.
I'm guessing 1978 to 1983 time frame... I also met a ham that did the same thing with an OHIO SCIENTIFIC 8 bit computer.. yet another 6502 based machine of that era.. I met him at a hamfest in ohio.. he used the ESC key on the keyboard as input from the radio through a 567 tone decoder chip. The Ohio Scientific computer used ESC on the keyboard as an interrupt to the processor. So his was an interrupt basis, which made the reception more real time, as the computer never knew when to test for signal
So if the 567 started to decode a tone, that would interrupt the processor indicating "incoming"""
The German ham basically laid out an algorithm that if followed would decode characters by their length.. so E and T were decoded first..it also had a fall through that was like a gobbly-gook character if it got to decoding that it meant to go measure dit's and dahs as most probably the speed had changed, either by operator or change in frequency. as the program does not know if there was a frequency change of the radio..
There are far better tone decoders today than a 567 chip..still with a 4mhz 8 bit 6502 we could decode 45-50 wpm.. With todays R-PI I woul d think 200 WPM is possible.
ARRL Life Member