1 REM ############################### 2 REM # MORSEBAS # 3 REM # Styrprogram till ASCMOR # 4 REM #-----------------------------# 5 REM # Gerry Eriksson SM5HMN # 6 REM # Version 1.01 # 7 REM # Datum 1983-01-12 # 8 REM ############################### 9 REM 10 REM 11 DIM A%(20%),S%(13%),L$=42%,M$=128%,T$=256%,U$=20% 12 OUT 57%,131% 13 REM 14 REM # A%(x) SEKTORNR. F\R RESP. 15 REM # AVSNITT 16 REM # S%(x) STATUS-VEKTOR F\R 17 REM # RESP. MORSE-KANAL 18 REM # Z% SLASK-VARIABEL 19 REM # M$ TEXTBUFFER TILL MORSE 20 REM # M0%,M1%,M2%.... INHOPP MORSE 21 REM 22 REM 23 REM # S% INDEX F\R AKTIVSTATUS 24 REM # stat 0=fel 25 REM # 1=stopp 26 REM # 2=aktiv 27 REM # 3=paus 28 REM # 4=redo 29 S%=0% 30 REM # L% INDEX F\R PROG. LEKTION 31 L%=1% 32 REM # A1% INDEX F\R F\RSTA AVSNITT 33 A1%=2% 34 REM # A2% INDEX F\R SISTA AVSNITT 35 A2%=3% 36 REM # A0% INDEX F\R N[STA AVSNITT 37 A0%=4% 38 REM # T0% INDEX F\R UTG]NGS-TAKT 39 T0%=5% 40 REM # T1% INDEX F\R AKTUELL TAKT 41 T1%=6% 42 REM # G0% INDEX F\R GRUNDTAKT 43 G0%=7% 44 REM # G1% INDEX F\R NY GRUNDTAKT 45 G1%=8% 46 REM # E% INDEX FOR ELEMENTL[NGD 47 E%=9% 48 REM # E1% INDEX F\R TECKENMELLANRUM 49 E1%=10% 50 REM # N% INDEX F\R N[STA SEKTOR-NR 51 N%=11% 52 REM # R% INDEX F\R RAMSA 53 R%=12% 54 REM # F% INDEX F\R FEL 55 F%=13% 56 REM 57 REM 58 REM # B% STARTADRESS F\R 59 REM # ASSEMBLERRUTIN 60 B%=32768% 61 REM 62 REM 63 REM # KANALSTATUS 64 REM # S%=CALL(M0%) 65 REM # stat 0=s{nder, kan inte ta 66 REM # emot mera 67 REM # 1=s{nder, kan ta emot 68 REM # 128 tecken 69 REM # 2=klar 70 M0%=B%+6% 71 REM 72 REM # UTMATN AV TEXT MORSE 73 REM # Z%=CALL(M2%) 74 REM # OBS OBS OBS OBS OBS OBS OBS 75 REM # T$ M]STE INNEH]LLA TEXTEN 76 M2%=B%+18% 77 REM 78 REM # TIMNING MORSE 79 REM # Z%=CALL(M3%,KORT)+ 80 REM # CALL(M6%,L]NG) 81 M3%=B%+12% : M6%=B%+15% 82 REM 83 REM # MODE MORSE 84 REM # Z%=CALL(M4%,X%) 85 REM # 0=STOPP 86 REM # 1=START 87 REM # 2=PAUS 88 M4%=B%+9% 89 REM 90 REM # P]G]NDE AVSNITT 91 REM # X%=CALL(M5%) 92 M5%=B%+21% 93 REM 94 REM 95 S%(S%)=1% 96 DEFFNV%(A$)=VAL(LEFT$(A$,LEN(A$)-2)) 97 GOSUB 323 98 ; CHR$(12%)TAB(15%)'TELEGRAFI'; 99 ; CUR(2%,0%)CHR$(151%)STRING$(39%,44%)CUR(21%,0%)CHR$(151%)STRING$(39%,44%); 100 ; CUR(4%,1%)'STATUS:'CUR(6%,1%)'LEKTION'CUR(6%,17%)'AVSNITT'; 101 ; CUR(7%,1%)'TAKT :'CUR(7%,17%)'AKTIV AVSN'; 102 ; CUR(9%,1%)'Senast l{st sektor:'; 103 GOSUB 337 104 ; CUR(22%,1%)SPACE$(78%)CUR(22%,1%)'A=Aktivera L=Lektion S=Slut'; 105 ; CUR(23,1%)'[=[ndra avs. +=\ka takt -=minska'; 106 REM 107 REM 108 ; CUR(11%,1%)'KOMMANDO: '; : GET A$ 109 IF A$<>"S" 111 110 CHAIN "START" 111 IF A$='L' GOSUB 279 : GOTO 108 112 C%=INSTR(1,'-+A[',A$) : IF L9% AND C% ON C% GOSUB 219,219,233,253 ELSE 108 113 IF A$<>'A' 108 114 REM 115 REM 116 ; CUR(22%,1%)SPACE$(78%)CUR(22%,1%)'A=Aktivera P=Paus S=Stopp [=[ndra'; 117 ; CUR(23%,1%)'-=Minska takten +=\ka takten 'CUR(11%,1%); 118 ; CUR(11%,1%)SPACE$(79%)CUR(10%,1%); 119 REM 120 REM 121 REM ------------------------------ 122 REM 123 REM 124 REM ##### HUVUDSLINGA ##### 125 REM 126 REM 127 REM 128 REM # TESTA OM PLATS I BUFFERTEN 129 REM # [R KANALEN AKTIV ??? 130 REM 131 IF (CALL(M0%) AND 193%)<>129% THEN 199 132 REM 133 REM # Tecken i textbufferten ? 134 REM 135 IF LEN(M$) T$=M$ : M$='' : GOTO 197 136 REM 137 REM # L{sa n{sta sektor ? 138 REM 139 IF S%(N%) X%=S%(N%) ELSE 199 140 REM 141 REM # L{s fr}n skivan 142 REM 143 ONERRORGOTO 149 144 Z%=CALL(28666%,1%)+CALL(28668%,X%) 145 ; CUR(9%,20%)X%' '; : GOTO 159 146 REM 147 REM # L{sfel 148 REM 149 ; CUR(4%,9%)'FEL "!!!! L[SFEL P] SKIVAN !!!'ERRCODE; 150 ; CUR(9%,20%)X%' '; 151 REM 152 REM # STOPPA KANALEN MED L[SFELET 153 REM # S{tt felindikering 154 REM 155 S%(N%)=0% : S%(F%)=1% : S%(S%)=0% : T$=CHR$(0%) : Z%=CALL(M2%) : GOTO 199 156 REM 157 REM # S|k efter sluttecken 158 REM 159 X%=INSTR(1%,Q0$,'%')-1% : IF X%=-1% X%=250% 160 REM 161 REM # ADDERA AVSNITTSNUMMER 162 REM # Kapa bort skr{pet 163 REM 164 T$=CHR$(S%(A0%))+LEFT$(Q0$,X%) 165 REM 166 REM # Styrtecken f|r forts{ttning 167 REM # F=Forts{ttning n{sta sektor 168 REM # R=Rytm-|vning 169 REM # S=Slinga 170 REM 171 ON INSTR(1%,'FRS',MID$(Q0$,251%,1%))+1% GOTO 183,175,179,192 172 REM 173 REM # Forts{ttningsavsnitt 174 REM 175 S%(N%)=S%(N%)+1% : GOTO 192 176 REM 177 REM # Rytm 178 REM 179 Z%=CALL(M6%,S%(E%)) : S%(R%)=-1% : GOTO 192 180 REM 181 REM # N{sta avsnitt ? 182 REM 183 IF S%(A0%)128% THEN M$=RIGHT$(T$,129%) : T$=LEFT$(T$,128%) 193 REM 194 REM # S{nd texten till tgf-buffert 195 REM # T$ m}ste inneh}lla texten 196 REM 197 Z%=CALL(M2%) 198 REM 199 X%=CALL(M5%) : ; CUR(7%,28%); : IF X% ; X%; ELSE ; ' '; 200 IF CALL(M0%) AND 64% GOSUB 247 : GOTO 104 201 REM 202 REM 203 REM ------------------------------ 204 REM 205 REM 206 REM # TITTA P] TANGENTBORDET 207 REM 208 IF (PEEK(65013%) AND 128%)=0% 131 209 GET A$ : X%=INSTR(1,'-+APS[',A$) : IF X%=0% 131 210 ON X% GOSUB 219,219,233,242,247,253 211 IF A$<>'S' 131 ELSE 104 212 REM 213 REM 214 REM ------------------------------ 215 REM 216 REM 217 REM ##### [NDRA TAKT 218 REM 219 X%=S%(T1%)+(X%-1%)+(X%=1%) : IF X%<10% OR X%>255% 226 220 S%(T1%)=X% : GOSUB 349 221 REM 222 REM # S{nd gtakt och takt 223 REM 224 ; CUR(7%,9%)S%(T1%); : IF S%(G1%) ; 'G '; ELSE ; ' '; 225 FOR Z=1 TO 100 : NEXT Z 226 RETURN 227 REM 228 REM ##### AKTIVERA 229 REM 230 REM 231 REM # Kan kanalen aktiveras ? 232 REM 233 IF S%(S%)<3% 238 234 REM 235 REM # Aktivera, s{tt aktiv status 236 REM 237 Z%=CALL(M0%)+CALL(M4%,1%) : S%(S%)=2% : ; CUR(4%,9%)'AKTIV '; 238 RETURN 239 REM 240 REM ##### PAUS 241 REM 242 IF S%(S%)=2% Z%=CALL(M0%)+CALL(M4%,2%) : S%(S%)=3% : ; CUR(4%,9%)'PAUS '; 243 RETURN 244 REM 245 REM ##### STOPP 246 REM 247 Z%=CALL(M0%)+CALL(M4%,0%) : S%(N%)=0% : S%(R%)=0% : S%(S%)=2% : M$='' : L9%=0% 248 ; CUR(4%,9%)'STOPP 'CUR(7%,28%)' '; 249 RETURN 250 REM 251 REM ##### [NDRA AVSNITT 252 REM 253 ONERRORGOTO 275 : ; CUR(11%,1%)'Vilket avs '; : INPUT X% 254 IF X%<1% OR X%>S%(A2%) 275 255 REM 256 REM # Stoppa kanalen och l{s 257 REM # in n{sta avsnitt. 258 REM 259 IF S%(S%)>1% Z%=CALL(M0%)+CALL(M4%,0%) ELSE 275 260 REM 261 REM # ]terst{ll takten. 262 REM 263 S%(R%)=0% : M$='' : GOSUB 349 264 REM 265 REM # N{sta ? 266 REM 267 S%(A0%)=X% : S%(N%)=A%(S%(A0%)) 268 IF S%(N%)=9999% M$=CHR$(S%(A0%))+' +' : S%(N%)=0% 269 IF S%(N%)=0% M$=M$+CHR$(0%) 270 REM 271 REM # Om kanalen aktiv starta igen 272 REM 273 IF S%(S%)=2% Z%=CALL(M4%,1%) 274 REM 275 ; CUR(11%,1%)SPACE$(20%); : RETURN 276 REM 277 REM ##### PROGRAMMERA 278 REM 279 ONERRORGOTO 315 280 ; CUR(11%,1%)'Lektion : '; : INPUTLINE A$ : IF ASC(A$)=13% 306 ELSE X%=FNV%(A$) 281 REM 282 REM # L{s in lektionsnr. 283 REM 284 IF X%<1% OR X%>90% 315 ELSE S%(L%)=X% : X%=X%-1% 285 Z%=CALL(28666%,1%)+CALL(28668%,550%+X%/6%) : L$=MID$(Q0$,1%+42%*(X%-(X%/6%)*6%),42%) 286 IF ASC(L$)=0% 315 287 REM 288 REM # Avsnitt --> sektorer 289 REM 290 FOR I%=2% TO 21% 291 A%(I%-1%)=ASC(MID$(L$,2%*I%-1%,1%))+SWAP%(ASC(MID$(L$,2%*I%,1%))) 292 NEXT I% 293 FOR I%=0% TO 19% : IF A%(I%+1%) NEXT I% 294 REM 295 REM # H{mta f|rsta resp. sista 296 REM # avsnitt,gtakt och takt 297 REM 298 ; CUR(12%,1%)'F|rsta avs. ( 1 ) ? '; : INPUTLINE A$ : IF ASC(A$)=13% S%(A1%)=1% : ; 1% 299 ; CUR(13%,1%)'Sista avs. ('I%' ) ? '; : INPUTLINE A$ : IF ASC(A$)=13% S%(A2%)=I% : ; I% ELSE S%(A2%)=FNV%(A$) 300 ; CUR(14%,1%)'Takt ('ASC(L$); : IF ASC(MID$(L$,2%,1%)) ; 'G'; 301 ; ' ) ? '; : INPUTLINE A$ : IF ASC(A$)=13% S%(T0%)=ASC(L$) : S%(G0%)=ASC(MID$(L$,2%,1%)) : GOTO 306 302 S%(G0%)=INSTR(1,A$,'G')<>0 : S%(T0%)=VAL(LEFT$(A$,LEN(A$)+S%(G0%)-2)) 303 REM 304 REM # S{tt status-pekare. 305 REM 306 S%(F%)=0% : S%(A0%)=S%(A1%) : S%(N%)=A%(S%(A0%)) : S%(R%)=0% : S%(S%)=4% : M$='' : L9%=-1% 307 REM 308 REM # Takten 309 REM 310 S%(T1%)=S%(T0%) : S%(G1%)=S%(G0%) : GOSUB 349 311 REM 312 REM 313 ; CUR(4%,9%)'REDO '; 314 ; CUR(6%,9%)S%(L%)' 'CUR(6%,28%)S%(A1%)'-'S%(A2%)' 'CUR(7%,9%)S%(T1%); : IF S%(G1%) ; 'G '; ELSE ; ' '; 315 ; CUR(11%,1%)SPACE$(200%)CUR(11%,1%); : RETURN 316 REM 317 REM 318 REM ------------------------------ 319 REM 320 REM 321 REM # TITTA OM ASCTGF FINNS D[R 322 REM 323 IF PEEK(32792)<>65 THEN 329 324 IF PEEK(32793)<>83 THEN 329 325 IF PEEK(32794)<>67 THEN 329 326 X%=CALL(B%+3%) 327 FOR I%=X% TO X%+11% : U$=U$+CHR$(PEEK(I%)) : NEXT I% 328 RETURN 329 CHAIN "ASCTGF" 330 REM 331 REM 332 REM ------------------------------ 333 REM 334 REM 335 REM # \ppna text-filen 336 REM 337 ONERRORGOTO 339 338 OPEN 'DR1:DD1.DAT' ASFILE 1% : RETURN 339 ; CUR(18,0)'S[TT I SKIVAN MED TEXT I DR1:' : ; 'TRYCK RETURN'; : GET A$ : ; CUR(18,0)SPACE$(79); : GOTO 338 340 REM 341 REM 342 REM ------------------------------ 343 REM 344 REM 345 REM #### SUBRUTIN TAKT ##### 346 REM 347 REM # Konvertera takten 348 REM 349 T=S%(T1%) : S%(G1%)=S%(G0%)<>0% AND S%(T1%)<60% 350 REM 351 REM # GU-takt ? 352 REM 353 IF S%(G1%) T1=(5700-38*T)*T/(15000-193*T) : T=100-2*T/3 ELSE T1=T 354 REM 355 REM # Tidsenheter/tecken-element. 356 REM 357 S%(E%)=46875/T : S%(E1%)=1.40625E+5/T1 358 REM 359 REM # Om ramsa {ndra mellanrums- 360 REM # takten. 361 REM 362 Z%=CALL(M3%,S%(E%)) : IF S%(R%)=0% Z%=CALL(M6%,S%(E1%)) ELSE Z%=CALL(M6%,S%(E%)) 363 RETURN