Morse Trainer in Quartus Forth

General Description

I wrote my morse trainer program in Quartus Forth, which is Forth implementation for PalmOS 3.0 and higher. Main reason why I chose Forth was that it was available for free (trial version). I have had some experience with Forth from the eighties; this was also important.

The program consists of two files: morse-table.txt defines encoding table. The other, morse.txt, contains definition of the words.

Words

Basic Words

MS ( n -- )
This word is a re-definition of Quartus' MS word, which makes a pause of n milliseconds. There is a bug in older versions of Quartus, which sometimes (quite often) causes your Palm to hang indefinitely.
Unit! ( n -- )
Sets basic element duration in milliseconds. "Basic element" is duration of a "dot" or the space between two sounds within a morse character.
Unit@ ( -- n)
Reads current basic element duration. There is a variable UNIT behind both these words.
Hz ( n -- )
Sets the beep tone to n Hz. (Hertz is a unit of frequency, s-1). This word should be perhaps spelled as Hz! to keep conventions, but I gave it this name and so far did not decide otherwise.
Hz? ( -- n )
Similarly to the previous word, this reads current value of the beep tone frequency. As above, it should be spelled differently, such as Hz@. Variable TONE is behind both these words.

Useful Words

PARIS ( n -- )
Calculates and sets basic element duration using PARIS method.
CODEX ( n -- )
Calculates and sets basic element duration using CODEX method. 300 PARIS is the same speed as 250 CODEX, I think.
WPM ( n -- )
Calculates and sets basic element duration using WPM (words per minute). Although I cannot swear that my assumption was correct, WPM speed is defined as number of CODEX groups (words) per minute. Therefore speed in CODEX equals WPM*5. If anybody knows if this is right (or wrong), pls let me know.
csend ( addr u -- )
Transmits counted string in morse at the defined speed and frequency, using Palm's beeper as output device.
ssend ( addr -- )
Transmits counted string stored at address addr in morse.
zsend ( addr -- )
Transmits zero-terminated string in morse.
>morse ( c1 -- c2 )
Converts ASCII character c1 to its binary morse code c2. If c1 does not have morse equivalent, c2 is 0.
CW. ( c -- )
Transmits character c in morse.

"Practical" Words

QBF ( -- )
Transmits "QUICK BROWN FOX JUMPS OVER THE LAZY DOG 1234567890 =?/.-+"
CQ ( -- caddr )
Leaves address of counted string "CQ CQ CQ" on TOS.
+K ( -- caddr )
Leaves address of counted string "PSE K" on TOS.
Tcvr ( -- )
This is a loop which prompts cw>, waits for 1 line input (max. 85 chars) and then transmits it in morse. Exits after input of empty line. Within this word you cannot (at least in the current version) change speed or beep frequency.

Copyright © 2001, Jindra Vavruska (OK1FOU). All rights reserved.