Programming of a EPROMs for morse code
Translation of article in the FUNKAMATEUR (German ham radio magazin) number 7 (1991) page 408
In order to program EPROM for a caller or a memory morse key according to (1) or a (2), I wrote a small BASIC program. The program runs on a KC87 (a CP/M-based computer used in the late German Democratic Republic), uses no computer-specific items, but generally usual basic instruction, so that it can be used also for other computers.
It be able 16 of texts to be stored, which are so organized that they occupy twice eight channels. After the start of the program it expects the input of the texts which can be stored.
In order to ensure a meaningful function of the memory morse key, the morse code of a text at one data bit output each of the EPROMs must appear serial, if the address of the EPROMs is counted up. In order to achieve this, the morse code of a character is stored as stringers in the DATA lines of the program. The morse code consist of the standardized bit pattern and the following break, " A " corresponds itself to " 10111000 ". The program run divides these stringers into individual 0 and 1-Strings and sets it in the RAM-AREA by PEEK and POKE operations bits for bits. If the storage area is so ploughed, it can be passed to the EPROM. The following characters are intended: the digits, all letter (without german ä, ö, ü) and the special characters, -.?
The character " * " (asterix = 2A Hex) serves inside the program to input empty texts i.e., of which 16 possibilities can do some for later programmings are kept free. In addition an individual 1 is located in program line 230 as the first stringer of DATA instruction, as it does not occur as morse code. The blank (20 Hex) is on an equal footing and produced " + " (2B Hex) between two words a break of five points length. If one wants to vary the tracing length, one or more zeros must be added or deleted in program line 230 with the second stringer after DATA instruction. The character " @ " (40 Hex) produces the character AR (end) program line 120 and line 900 determines the storage area which can be processed refers to it. This area must be burned after the program run on the EPROM.
The program detects the attempt to input a text which would
stress more then 1024 bit. In this case the appropriate area is made
again freely and it takes place the request to input a shorter text.
The too long text, the number of the last character and the last
possible bits are displayed.
Literature
(1) Bisschoppnink, H. DL3MU: Caller 7, cq-DL 54 (1983) Heft 8, Seite 381
(number 8, page 381)
(2)
Perner, M., Y21UO: Elektronische Morsetaste mit Festtextspeicher (Electronic morse key with fixed text
memory), FUNKAMATEUR 40 (1991), Heft 4, Seite 228 (number 4, page 228)
10 REM CW-TEXT
20 REM PROGRAMMERARBEITUNG FUER CALLER BZW.
30 REM SPEICHERMORSETASTE
40 REM COPYRIGHT ANDREAS BILSING, Y23AM
50 REM
100 DIM MC$(43): REM MORSECODE
110 ADR=-32768:REM START ADDRESS 8000HEX
130 FOR I=0 TO 2047:POKE (ADR+I);255 : NEXT I
140 FOR I=0 TO 43:READ MC$(I):NEXT I
230 DATA "1","00000","1110111010101110111000"
235 DATA "10111010111010111000"
240 DATA "1110101011101000","1110111011101110111000"
250 DATA "10111011101110111000"
260 DATA "101011101110111000","1010101110111000",101010101000","11101010101000"
270 DATA "1110111010101000","111011101110101000","11101110111011101000"
280 DATA "101011101110101000","1011101011101000","10111000","111010101000"
290 DATA "11101011101000","1110101000","1000","101011101000","111011101000"
300 DATA "1010101000","101000","1011101110111000","111010111000"
310 DATA "1011110101000","1110111000","11101000","11101110111000"
320 DATA "10111011101000","1110111010111000","1011101000","10101000","111000"
330 DATA "1010111000",101010111000","101110111000","111010101000"
340 DATA "1110101110111000","11101110101000"
400 FOR N=0 TO 15: REM 16 TEXTS
410 IF N<7 THEN 430
420 M=N:GOTO 440
430 M=N-8: ADR=-31744:REM ANF-ADR 2.K
440 PRINT "TEXT";N: T$="": INPUT T$
450 IF T$="" THEN T$="*"
500 Z=0:B=2^M: B=NOT B: L1=LEN T$
510 FOR I=1 TO L1
520 C$=MID$(T$,I,1):C=ASC(c$):IF C=32 THEN C=43
530 IF C>58 THEN C=C-47:GOTO 610
540 C=C-42
610 MZ$=MC$(C): L2=LEN (MZ$)
620 FOR K = 1 TO L2
640 MB$=MID$(MZ$,K,1)
650 IF MB$="1" THEN 680
660 D=PEEK(ADR+Z):D=D AND B
670 POKE (ADR+Z),D
680 Z=Z+1
690 IF Z<1024 THEN 800
700 B= NOT B:REM KILL INPUT
710 FOR L=0 TO 1023: D=PEEK (ADR+L)
720 D=D OR B:POKE(ADR+L),D:NEXT L
730 PRINT:PRINT"INPUT TEXT IS TO LONG MORE THEN 1023 BIT":PRINT
740 PRINT LEFT$(T$,I):PRINT
750 PRINT "NUMBER OF LAST CHARACTER:";I
760 PRINT"LAST BIT:";K
770 PRINT"NEW INPUT TEXT"!":PRINT
780 GOTO 440
800 NEXT K:NEXT I: NEXT N
900 PRINT:PRINT"8000HEX...87FF BURN EPROM"
1000 END