*0110 D00110, 7743 /Sets duration P00111, 7400 /Sets frequency D00112, 7777 P00113, S00660 P00114, S00251 P00115, S00230 P00116, S00244 P00117, L00671 P00120, S00524 P00121, S00542 PMESG, MESG /Print a (sixbit) message P00123, S01202 P00124, S01000 P00125, L00400 D00126, 2200 P00127, S00511 D00130, 0215 P00131, D00212 D00132, 7563 D00133, 0003 D00134, 7615 D00135, 0000 D00136, 0000 D00137, 7403 P00140, 375 S00141, 0000 CLA TAD D00146 JMS I P00124 JMP I S00141 D00146, 0322 S00147, .-. CLA TAD D00154 JMS I P00124 JMP I S00147 D00154, 0313 D00155, 7773 P00156, .-. D00157, 0000 P00160, .-. D00161, 4650 D00162, 5235 D00163, 3514 D00164, 0001 *0200 TLS JMS I PMESG /Print P01400 /Instructions JMS I PMESG /Print P01702 /"LIST OF CHARACTERS" JMS S00266 JMS I PMESG /Print P01715 /"WORDS PER MINUTE" JMS I P00121 JMS I PMESG /Print D00212, P01730 /"BAUDS BETWEEN CHARACTERS = " JMS I P00120 JMS I PMESG /Print P01747 /"SEND RANDOM GROUPS" L00216, JMS S00230 L00217, KSF SKP JMP I P00125 JMS S00251 JMS I P00127 JMS I P00124 ISZ D00135 JMP L00217 JMP L00216 S00230, 0000 CLA TAD D00155 DCA D00135 TAD D00130 JMS I P00127 CLA TAD P00131 JMS I P00127 CLA JMS I P00124 JMP I S00230 S00244, .-. TSF JMP .-1 TLS JMP I S00244 S00251, .-. JMS S00257 TAD D00126 DCA P00156 TAD I P00156 JMP I S00251 S00257, .-. JMS S00322 TAD D00163 TAD D00162 JMS I P00073 D00264, .-. JMP I S00257 S00266, .-. JMS S00147 DCA D00264 TAD D00126 DCA P00160 L00273, KSF JMP L00273 KRB JMS S00244 DCA D00157 TAD D00157 TAD D00132 SNA JMP L00273 TAD D00133 SNA JMP L00273 TAD D00134 SNA CLA JMP L00320 CLA TAD D00157 DCA I P00160 2264 ISZ P00160 JMP L00273 L00320, JMS S00141 JMP I S00266 S00322, .-. CLA CLL TAD D00161 AND D00164 RTR TAD D00161 RAL CLA TAD D00163 RAL DCA D00163 TAD D00162 RAL DCA D00162 TAD D00161 RAL DCA D00161 JMP I S00322 L00344, KSF JMP L00344 KRB 3157 TAD D00157 TAD D00132 SNA JMP L00366 TAD D00133 SNA JMP L00344 TAD D00134 SNA CLA JMP I P00125 TAD D00157 JMS I P00127 L00364, JMS I P00124 JMP L00344 L00366, JMS I P00113 JMP L00364 *0400 L00400, KRB DCA D00430 TAD D00433 DCA P00432 L00404, TAD I P00432 2232 SNA JMP L00417 TAD D00430 SNA CLA JMP L00415 ISZ P00432 JMP L00404 L00415, JMS S00141 JMP I P00432 L00417, JMS I P00113 TAD D00427 JMS I P00116 JMS I P00124 JMS I P00113 L00424, KSF JMP L00424 JMP L00400 D00427, 0277 D00430, 0000 0000 P00432, .-. D00433, 0434 SZA SNL OSR JMP L00455 7451 JMP L00463 SNA SZL OSR HLT JMP L00467 7475 JMP I P00117 7455 JMP L00473 SZA SNL JMP L00501 7465 JMP L00566 SZA SNL HLT JMP L00514 0000 L00455, JMS I P00113 JMS I PMESG /Print P01702 /"LIST OF CHARACTERS" JMS I P00523 JMS I P00113 JMP L00424 L00463, JMS I PMESG /Print P01715 /"WORDS PER MINUTE" JMS I P00121 JMP L00424 L00467, JMS I PMESG /Print P01730 /"BAUDS BETWEEN CHARACTERS" JMS I P00120 JMP L00424 L00473, JMS I PMESG /Print P01747 /"SEND RANDOM GROUPS" JMS I P00113 JMS I P00115 JMP I .+1 L00217 L00501, JMS I P00113 JMS I PMESG /Print P01762 /"PRINT CHARACTERS" TAD D00510 DCA D00512 JMS I P00113 JMP L00424 D00510, 4516 S00511, 0000 D00512, 4516 D00513, 5711 L00514, JMS I P00113 JMS I PMESG /Print P01774 TAD D00513 DCA D00512 JMS I P00113 JMP L00424 P00523, S00266 S00524, 0000 JMS S00147 JMS I P00123 .-. .-. SPA CIA AND D00541 CMA DCA D00112 JMS S00141 JMS I P00113 JMP I S00524 D00541, 0077 S00542, 0000 JMS S00147 4523 .-. .-. SPA CIA AND D00541 DCA D00555 TAD D00565 JMS I P00073 D00555, 0000 CLA JMS I P00103 CIA DCA D00110 4141 JMS I P00113 JMP I S00542 D00565, 0740 L00566, JMS I PMESG /Print P02003 /"KEYBOARD INPUT"... JMS S00147 JMP I P00572 P00572, L00344 *0600 MESG, .-. TAD I MESG /Get message address ISZ MESG /Set up for return DCA P00612 /Save message pointer L00604, TAD I P00612 /Get message word ISZ P00612 /Point to the next SNA /End of message? JMP I MESG /Yes, return JMS S00613 /No, output the word JMP L00604 /And look again P00612, .-. S00613, .-. /Output a sixbit word DCA D00625 /Save the word TAD D00625 /Get the word RTR /Shift for left half RTR RTR JMS S00626 /Print it TAD D00625 /Get right half JMS S00626 /Print it JMP I S00613 /Return D00625, .-. /Saves word being printed S00626, .-. /Print a sixbit character AND D00645 /Force to six bits SNA /NUL? JMP I S00626 /Yes, don't really print it TAD D00646 /Subtract '^' SZA /Is it '^'? JMP L00637 /No, go deal JMS S00660 /Yes, just CRLF JMP I S00626 /and return L00637, TAD D00647 /Check for alpha or not SMA /Alphabetic? TAD D00650 /No, fudge result TAD D00651 /Convert to ASCII JMS TTYOUT /Print the character JMP I S00626 /and return D00645, 0077 /Mask for sixbit D00646, -36 /^ is special D00647, 7776 /'^' - ' ' D00650, -100 D00651, 340 /' ' + '@' TTYOUT, .-. /Print a character on TTY TSF JMP .-1 TLS CLA JMP I TTYOUT S00660, .-. /Print CR-LF CLA TAD D00667 /Get CR JMS TTYOUT /Print it TAD D00670 /Get LF JMS TTYOUT /Print it JMP I S00660 /Return D00667, 215 /CR D00670, 212 /LF L00671, JMS I PMESG /Print P02034 /"COPY FROM KEYBOARD"... L00673, JMS I P00115 L00674, JMS I P00114 DCA D00136 L00676, TAD D00136 JMS I P00124 L00700, KSF JMP L00700 KRB TAD D00137 SNA JMP I P00125 TAD P00140 CIA TAD D00136 SZA CLA JMP L00676 TAD D00136 JMS I P00116 CLA TAD D00723 JMS I P00124 ISZ D00135 JMP L00674 JMP L00673 D00723, 0240 *1000 S01000, .-. AND D01064 /Mask with 077 TAD D01065 /Add table base DCA P01062 /Save pointer TAD I P01062 /Get table entry DCA D01063 /Save bit pattern TAD D00112 DCA D01061 L01010, CLA CLL TAD D01063 /Get bit pattern RAL /Beep value to link SNA /Last bit? JMP L01027 /Yes, go wrap up DCA D01063 /No, save output pattern SNL /Need long beep? JMP L01022 /No, go do short version JMS S01034 /Beep JMS S01034 /Beep more L01022, CLL CML /Switch beep/quiet switch JMS S01034 /One bit time CLL /Now quiet JMS S01034 /One bit time JMP L01010 /Go check for more pattern L01027, CLL /Do a rest L01030, JMS S01034 /Beep or not, depending on link ISZ D01061 /Again? JMP L01030 /Yes, go do it JMP I S01000 /No, return to caller S01034, .-. /Poke the AF04A TAD D00110 /Get duration DCA D01050 /Set duration counter L01037, 6571 /Output value (0000 initially) P01040, JMS S01051 /Delay a bit CMA /Complement the value SZL /Beeping? 6571 /Yes, Output new value JMS S01051 /Delay a bit ISZ D01050 /Done all iterations? JMP L01037 /No, go again JMP I S01034 /Yes, return D01050, .-. /Iteration counter S01051, .-. /Fixed delay CLA TAD P00111 /Get frequency DCA D01060 /Set frequency counter ISZ D01060 /Done holding? JMP .-1 /No, wait some more JMP I S01051 /Yes, return D01060, .-. /Pulse sustain counter D01061, .-. /Pulse ?? counter P01062, .-. D01063, 0000 D01064, 0077 D01065, .+1 /Morse code table base /(Indexed with a sixbit character) 0000 /@ Invalid 3000 /A .- ok 4200 /B -... ok 5200 /C -.-. ok 4400 /D -.. ok 2000 /E . ok 1200 /F ..-. ok 6400 /G --. ok 0200 /H .... ok 1000 /I .. ok 3600 /J .--- ok 5400 /K -.- ok 2200 /L .-.. ok 7000 /M -- ok 5000 /N -. ok 7400 /O --- ok 3200 /P .--. ok 6600 /Q --.- ok 2400 /R .-. ok 0400 /S ... ok 6000 /T - ok 1400 /U ..- ok 0600 /V ...- ok 3400 /W .-- ok 4600 /X -..- ok 5600 /Y -.-- ok 6200 /Z --.. ok 0000 /[ Invalid 0000 /\ Invalid 0000 /] Invalid 7710 /^ ------.. BUGBUG 0010 /_ ........ "error" 0000 /space ok 0000 /! Invalid 2240 /" .-..-. ok 0000 /# Invalid 0000 /$ Invalid 0000 /% Invalid 0000 /& Invalid 3640 /' .----. ok 0000 /( Invalid 0000 /) Invalid 0540 /* ...-.- "end of work" 0000 /+ Invalid 6340 /, --..-- ok 4140 /- -....- ok 2540 /. .-.-.- ok 4500 // -..-. ok 7700 /0 ----- ok 3700 /1 .---- ok 1700 /2 ..--- ok 0700 /3 ...-- ok 0300 /4 ....- ok 0100 /5 ..... ok 4100 /6 -.... ok 6100 /7 --... ok 7100 /8 ---.. ok 7500 /9 ----. ok 7040 /: ---... ok 5240 /; -.-.-. ok 0000 /< Invalid 4300 /= -...- ok 0000 /> Invalid 1440 /? ..--.. ok *1200 P01200, .-. JMP L01253 S01202, 0000 L01203, NOP DCA D01376 DCA D01377 L01206, CMA L01207, DCA S01343 L01210, KSF JMP L01210 KRB JMS S01371 DCA I S01202 TAD I S01202 TAD D01340 SNA JMP L01312 TAD D01337 SNA JMP L01207 TAD D01336 SNA JMP L01206 TAD D01335 DCA D01240 CLL CML CMA TAD D01342 TAD D01240 SZL CLA JMP L01243 JMS S01315 JMS S01355 D01240, 0000 0 JMP L01210 L01243, ISZ S01343 JMS S01343 ISZ S01202 TAD D01376 DCA I S01202 ISZ S01202 TAD D01377 JMP I S01202 L01253, DCA D01377 TAD I P01200 DCA D01376 ISZ P01200 1341 DCA S01202 TAD D01376 SMA CLA JMP L01266 JMS S01343 TAD D01334 L01266, TAD D01333 JMP L01305 L01270, DCA S01343 L01271, JMS S01355 6700 7413 ISZ S01343 SZL JMP L01271 JMS S01355 TAD P00100 AND D01364 JMS S01315 TAD S01343 TAD D01332 L01305, JMS S01371 CLA CLL ISZ S01202 JMP L01270 JMP I P01200 L01312, TAD D01332 JMS S01371 JMP L01203 S01315, 0000 TAD D01342 DCA S01371 TAD D01376 DCA D01326 TAD D01377 DCA D01325 L01324, JMS S01355 D01325, 0000 D01326, 0000 ISZ S01371 JMP L01324 JMP I S01315 D01332, 0257 D01333, 0240 D01334, 0015 D01335, 7773 D01336, 0002 D01337, 0122 D01340, 7401 7770 D01342, 7767 S01343, 0000 TAD D01377 CLL CIA DCA D01377 TAD D01376 CMA SZL IAC DCA D01376 JMP I S01343 S01355, 0000 CLL TAD I S01355 ISZ S01355 TAD D01377 DCA D01377 RAL D01364, 1755 ISZ S01355 TAD D01376 DCA D01376 JMP I S01355 S01371, .-. TSF JMP .-1 TLS JMP I S01371 D01376, 0000 D01377, 0000 *1400 /This must be assembled without 0 padding at the end of strings. /Otherwise it won't match the original properly. P01400, TEXT /MORSE CODE RANDOM 5 LETTER GROUPS....^/ TEXT /^ENTER LIST OF CHARACTERS, TERMINATING LIST WITH "ALT MODE" KEY.^/ TEXT /THEN GIVE SPEED IN WPM AND EXTRA SPACES DESIRED BETWEEN LETTERS./ TEXT /^^TO CHANGE LIST, TYPE \_A/ TEXT / CHANGE SPEED, TYPE W/ TEXT /^TO CHANGE SPACING, TYPE B^/ TEXT /TO START SENDING, TYPE S^/ TEXT /TO PRINT LETTERS, TYPE P^/ TEXT /TO STOP PRINTING, TYPE N^/ TEXT /TO SEND FROM KEYBOARD, TYPE K ^/ TEXT /TO COPY ON KEYBOARD, TYPE C^^/ 0 0 P01702, TEXT /LIST OF CHARACTERS^/ 0 P01715, TEXT /^WORDS PER MINUTE = / 0 P01730, TEXT /^BAUDS BETWEEN CHARACTERS = / 0 P01747, TEXT /SEND RANDOM GROUPS/ 0 0 P01762, TEXT /PRINT CHARACTERS/ 0 0 P01774, TEXT /NO PRINTING/ 0 P02003, TEXT /^KEYBOARD INPUT, TERMINATE WITH "ALT MODE" KEY^/ 0 P02034, TEXT /^COPY FROM KEYBOARD, TERMINATE WITH "ALT MODE" KEY^/ 0 *0067 D00067, 0000 D00070, 0000 P07000 CLL RAL IAC P00073, D07014 CLL CIA RTL IAC 6700 7022 P00100, S07051 BSW CIA 6747 P00103, S06756 P07003 *6700 P06700, .-. DCA P06747 DCA D00070 TAD P06747 SZA JMP L06712 TAD D00067 SNA CLA JMP I P06700 L06711, TAD P06747 L06712, RAL SZL JMP L06730 SPA JMP L06732 CLA L06720, TAD D00067 L06721, CLL RAL DCA D00067 TAD P06747 RAL DCA P06747 ISZ D00070 JMP L06711 L06730, SPA JMP L06734 L06732, RAR JMP I P06700 L06734, RAR TAD D06746 SZA CLA JMP L06720 TAD D00067 SZA JMP L06721 CML TAD P06747 JMP I P06700 D06746, 2000 P06747, .-. DCA S06756 TAD S06756 CMA AND D00070 TAD S06756 JMP I P06747 S06756, 0000 DCA P06747 TAD P06747 CMA AND D00067 TAD P06747 JMP I S06756 *7000 P07000, .-. DCA D00067 JMP I P07000 P07003, .-. 7200 DCA D00067 JMP I P07003 D07007, .-. DCA D00067 TAD D07007 DCA P07141 JMP L07142 D07014, .-. DCA D00067 TAD D07014 DCA P07105 JMP L07106 D07021, 37 P07022, .-. DCA P07003 TAD I P07022 ISZ P07022 AND D07021 CMA DCA D00070 L07031, TAD D00067 CLL RAL DCA D00067 TAD P07003 RAL DCA P07003 ISZ D00070 JMP L07031 TAD P07003 JMP I P07022 D07043, .-. DCA P07003 TAD D07043 DCA S07051 CLL JMP L07056 S07051, .-. CLL SPA CML DCA P07003 L07056, TAD I S07051 ISZ S07051 AND D07021 CMA DCA D00070 TAD P07003 JMP L07070 L07065, TAD P07003 SPA CML L07070, RAR DCA P07003 TAD D00067 RAR DCA D00067 CLL ISZ D00070 JMP L07065 TAD P07003 SPA CML JMP I S07051 D07104, 7763 P07105, .-. L07106, DCA P07003 TAD I P07105 ISZ P07105 CLL CIA DCA D07007 TAD P07003 TAD D07007 SZL CLA JMP I P07105 TAD D07104 DCA D07043 JMP L07132 L07122, TAD P07003 RAL DCA P07003 TAD P07003 TAD D07007 SZL DCA P07003 CLA L07132, TAD D00067 RAL DCA D00067 ISZ D07043 JMP L07122 TAD P07003 JMP I P07105 P07141, .-. L07142, DCA D07014 TAD D07104 DCA D07043 TAD I P07141 DCA P07000 ISZ P07141 JMP L07161 TAD D07014 L07152, SNL JMP L07157 CLL TAD P07000 RAR L07157, DCA D07014 TAD D00067 L07161, RAR DCA D00067 ISZ D07043 JMP L07152 TAD D07014 JMP I P07141 $