-
Notifications
You must be signed in to change notification settings - Fork 0
/
basic.lst
13988 lines (13988 loc) · 771 KB
/
basic.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1 .TITLE INOUT
2 ; .ENABLE LC
3 ;
4 ; ###################
5 ; # #
6 ; # BASIC - VVU #
7 ; # BK - 0010 #
8 ; # #
9 ; ###################
10 ;
11 ; ИСПОЛНИТЕЛЬ: ВЦКП ВГУ
12 ; ВИЛЬНЮС,1985
13 ;
14 ; ======================
15 ; ****БЛОК НАСТРОИКИ****
16 ; ======================
17 ;
18 000000 BK0010=0
19 000001 EL60=1
20 000002 NC80=2
21 000003 SM4=3 ;RAFOS
22 000004 MDS=4 ;MDS RAFOS
23 010000 RAM=10000
24 120000 ROM=120000
25 040000 MVIDEO=40000
26 000000 NORM=0
27 000001 KLAS=1
28 ;
29 000000 MASINA=BK0010
30 120000 MEMTYP=ROM
31 000000 KONTYP=NORM
32 ;
33 ; ===========================
34 ; ****СИСТЕМНЫЕ КОНСТАНТЫ****
35 ; ===========================
36 ;
37 000004 BREAKW==4 ;АДРЕС ВЕКТОРА ПРЕРЫВАНИЙ ПО КЛАВИШЕ "СТОП"
38 000010 ILCODV=10
39 000034 TRAPV=34 ;АДРЕС ВЕКТОРА ПРЕРЫВАНИЙ ПО ИНСТРУКЦИИ TRAP
40 000100 TIMER==100 ;АДРЕС ВЕКТОРА ПРЕРЫВАНИЙ ТАЙМЕРА
41 000176 $DRVX=176 ;КООРДИНАТА X
42 000200 $DRVY=200 ;КООРДИНАТА Y
43 000105 TSTKEY=105 ;АДРЕС ПРИЗНАКА НАЖАТИЯ НА КЛАВИШУ
44 000264 MSTART==264 ;СТАРТОВЫЙ АДРЕС МАССИВА
45 000266 MLEN=266 ;ДЛИНА МАССИВА
46 000320 MAG==320 ;АДРЕС БЛОКА ПАРАМЕТРОВ МАГНИТОФОНА
47 000360 IRPSV=360 ;АДРЕС ВЕКТОРА ПРЕРЫВАНИЙ ИРПС
48 176560 IRPSRG=176560 ;АДРЕС РЕГИСТРА ИРПС
49 160000 AUSROM=160000 ;АДРЕС ПЕРЕХОДА НА ПОЛЬЗОВАТЕЛЬСКОЕ БИС ПЗУ
50 177714 ARPORT=177714 ;АДРЕС РЕГИСТРА ПРОГРАММИРУЕМОГО ПОРТА
51 177716 ASPORT=177716 ;adres registra sistemnogo porta
52 ;
53 ; ============================
54 ; ****СИСТЕМНЫЕ ПЕРЕМЕННЫЕ****
55 ; ============================
56 ;
57 .ASECT
58 002000 .=2000
59 ;
60 STACK::
61 002000 LYGIS:: .BLKW 1 ;РЕЖИМ РАБОТЫ СИСТЕМЫ
62 002002 TXEND:: .BLKW 1 ;МЕТКА КОНЦА ТЕКСТА И НАЧАЛА ОБ'ЕКТНОГО КОДА
63 002004 STRREG::.BLKW 1 ;МЕТКА НАЧАЛА ОБЛАСТИ СТРОК
64 002006 STRSIZ::.BLKW 1 ;УКАЗАТЕЛЬ ДЛИНЫ ОБЛАСТИ СТРОК
65 002010 FREBEG::.BLKW 1 ;МЕТКА СВОБОДНОЙ ЧАСТИ ОБЛАСТИ СТРОК
66 002012 FRELEN::.BLKW 1 ;ТЕКУЩАЯ ДЛИНА СВОБОДНОЙ ЧАСТИ ОБЛАСТИ СТРОК
67 002014 ENDCOD::.BLKW 1 ;МЕТКА НАЧАЛА СВОБОДНОЙ ОБЛАСТИ
68 ;И КОНЦА ОБ'ЕКТНОГО КОДА
69 002016 CIKL:: .BLKW 1 ;metka na~ala steka ciklow
70 002020 LIMIT:: .BLKW 1 ;ukazatelx wer{iny steka podprogramm
71 002022 LENT:: .BLKW 1 ;МЕТКА НАЧАЛА ТАБЛИЦЫ ИМЕН
72 002024 TABTOP::.BLKW 1 ;МЕТКА КОНЦА ТАБЛИЦ СВЯЗИ И ИМЕН
73 002026 FCB:: .BLKW 1 ;МЕТКА НАЧАЛА ОБЛАСТИ ФАЙЛОВ И ТАБЛИЦЫ СВЯЗИ
74 002030 HIMEM:: .BLKW 1 ;УКАЗАТЕЛЬ ВЕРХНЕГО АДРЕСА, ДОСТУПНОГО БЕЙСИКУ
75 002032 ERRS:: .BLKW 1 ;ПРИЗНАК ЗАПРЕТА ВЫПОЛНЕНИЯ ПРОГРАММЫ
76 002034 TYPE:: .BLKW 1 ;ТИП КОМПИЛИРУЕМОГО ВЫРАЖЕНИЯ
77 002036 DATBEG::.BLKW 1 ;ukazatelx na~ala bufera DATA
78 002040 DATPTR::.BLKW 1 ;teku}ij ukazatelx bufera DATA
79 002042 DATINP::.BLKW 1 ;flag READ/INPUT
80 002044 NUMBER::.BLKW 1 ;НОМЕР КОМПИЛИРУЕМОЙ СТРОКИ
81 002046 ADRHLT::.BLKW 1 ;АДРЕС ОСТАНОВА ПРОГРАММЫ
82 002050 TRFLAG::.BLKW 1 ;ФЛАГ РЕЖИМА ТРАССИРОВКИ
83 002052 AUTOON::.BLKW 1 ;ФЛАГ РЕЖИМА AUTO
84 002054 AUINC:: .BLKW 1 ;AUTO ПРИРАЩЕНИЕ
85 002056 CURLIN::.BLKW 1 ;УКАЗАТЕЛЬ ТЕКУЩЕЙ СТРОКИ
86 002060 III:: .BLKW 4 ;РАБОЧИЕ ЯЧЕЙКИ ФУНКЦИИ RND
87 002070 RNDSAV::.BLKW 4 ;ТЕКУЩЕЕ ЗНАЧЕНИЕ RND
88 ;MAXFIL::.BLKW 1 ;maksimalxnoe koli~estwo fajlow dannyh
89 002100 USRTAB::.BLKW 10. ;ТАБЛИЦА АДРЕССОВ USR
90 ;APRL:: .BLKW 15 ;tablica neqwnogo opredeleniq tipow
91 002124 PNTSAV::.BLKW 1 ;rabo~aq q~ejka {aga
92 002126 PFACT:: .BLKW 2 ;ukazatelx bloka parametrow dlq FN
93 002132 TMP:: .BLKW 1 ;ukazatelx wremennyh deskriptorow
94 002134 SAVJMP::.BLKW 1 ;adres koda wypolnqemoj programmy
95 002136 LPTPOS::.BLKB 1 ;s~et~ik golowki printera
96 002137 000 .EVEN
97 ;
98 000000 .IF EQ,MASINA-BK0010
99 002140 FNKSTR::.BLKB 170. ;БУФЕР ТЕКСТОВ ФУНКЦИОНАЛЬНЫХ КЛАВИШ
100 002412 $SCRT: .BLKW 1 ;rabo~aq peremennaq DRAW
101 002414 .BLKB 400 ;БУФЕР ВВОДА
102 177777 .IF EQ,KONTYP-KLAS
103 COPPNT: .BLKW 1 ;ukazatelx ozu |krana dlq COPY
104 EKRHUK: .BLKW 1 ;adres dopoln. podpr.
105 .ENDC
106 ;
107 .IFF
108 TABX:: .BLKB 1 ;НО. ПОЗИЦИИ КУРСОРА
109 TABY:: .BLKB 1 ;НО. СТРОКИ КУРСОРА
110 SIIKP:: .BLKB 1 ;ПРИЗНАК ЗАПИСИ КОДА ИЗ КЛАВИАТУРЫ
111 RLPOZ:: .BLKB 1 ;ПРИЗНАК РУС. ЛАТ.
112 SAUG:: .BLKW 4 ;ХРАНЕНИЕ ВЕКТОРА ПРЕРЫВАНИЯ КЛАВИАТУРЫ
113 ;И КОМАНД ПЕРЕЗАПУСКА СИСТЕМЫ
114 .IFTF
115 003014 WRITE:: .BLKW 1 ;adres drajwera ustrojstwa wne{nej pamqti
116 003016 IODEV:: .BLKW 1 ;НОМЕР ТЕКУЩЕГО ФАЙЛА
117 003020 INK:: .BLKW 1 ;БУФЕР INKEY
118 BUF::
119 003022 BUFOUT::.BLKB 30 ;БУФЕР ВЫВОДА
120 003052 TEXT:: .BLKW 1 ;ОБЛАСТЬ ПРОГРАММЫ ПОЛЗОВАТЕЛЯ
121 ;
122 ; ====================
123 ; ****ПУСК СИСТЕМЫ****
124 ; ====================
125 ;
126 .GLOBL MONIT,TRAP,CLRTXT,BC,CASCII,BLOCKN,FNDBUF,NEXDBL,NEXJMP
127 .GLOBL TOINT,$B93,$B95,ID,SI,DI,$DMUL$,SETST,CAS,JMP,DFNRET
128 .GLOBL LNUM
129 120000 .=MEMTYP
130 START::
131 .IFT
132 000000 .IF EQ,MEMTYP-ROM
133 120000 012701 100000 MOV #100000,R1 ;CHECK SUM
134 120004 012703 000003 MOV #3,R3
135 120010 012702 010000 4$: MOV #10000,R2
136 120014 005000 CLR R0
137 120016 062100 3$: ADD (R1)+,R0
138 120020 005500 ADC R0
139 120022 077203 SOB R2,3$
140 120024 020027 177777 CMP R0,#177777
141 120030 001401 BEQ 2$
142 120032 000207 RETURN
143 120034 077313 2$: SOB R3,4$
144 .ENDC
145 ;
146 .IFTF
147 120036 012706 002000 MOV #STACK,SP
148 .IFF
149 MOV AVPK,SAUG
150 MOV AVPK+2,SAUG+2
151 MOV 0,SAUG+4
152 MOV 2,SAUG+6
153 .IFTF
154 000000 .IF EQ,MEMTYP-ROM
155 120042 012767 040000 002030' MOV #MVIDEO,HIMEM
156 .IFF
157 MOV #MEMTYP,HIMEM
158 .ENDC
159 120050 005067 002050' CLR TRFLAG
160 120054 105067 002136' CLRB LPTPOS
161 120060 012767 000310 002006' MOV #200.,STRSIZ
162 120066 012700 002054 MOV #AUINC,R0
163 120072 012720 000012 MOV #12,(0)+
164 120076 012720 000012 MOV #12,(0)+
165 120102 010001 MOV R0,R1
166 120104 012720 040101 MOV #40101,(0)+
167 120110 012720 044122 MOV #44122,(0)+
168 120114 012720 037502 MOV #37502,(0)+
169 120120 012720 052125 MOV #52125,(0)+
170 .REPT 4
171 MOV (1)+,(0)+
172 .ENDR
1 120124 012120 MOV (1)+,(0)+
1 120126 012120 MOV (1)+,(0)+
1 120130 012120 MOV (1)+,(0)+
1 120132 012120 MOV (1)+,(0)+
173 ; MOV #1,(R0)+ ;MAXFIL <- 1
174 120134 012701 000012 MOV #10.,R1
175 120140 012720 124300 1$: MOV #NOUSR,(0)+ ;НЕОПРЕДЕЛЕННЫЕ ФУНКЦИИ USR
176 120144 077103 SOB R1,1$
177 .IFT
178 120146 012737 000004 002412 MOV #4,@#$SCRT ;SENAS DRAW
179 ; MOV #2000,@#$SCRT
180 ;
181 .IFTF
182 ; MOV #15,R1 ;neqwnyj tip
183 ;5$: MOV #2004,(R0)+
184 ; SOB R1,5$
185 ;
186 ; CLR (R0)+ ;STOPAR
187 120154 005067 002124' CLR PNTSAV
188 120160 004767 120542' CALL MIDM ;ИНИЦИАЛИЗАЦИЯ УСТРОЙСТВ
189 120164 004767 134420' CALL CLRTXT
190 .IFT
191 120170 004767 120606' CALL KINIT ;ИНИЦИАЛИЗАЦИЯ КЛЮЧЕЙ
192 .IFTF
193 120174 000521 BR SETV
194 120176 000000 SUM1:: .WORD 0
195 .IFF
196 INIT: MOV #STACK,SP
197 JSR R2,SEPAP
198 CALL MIDM
199 BR SETV
200 .IFTF
201 ;
202 120200 005767 002000' CTRLC: TST LYGIS
203 120204 100413 BMI BREAK
204 120206 012706 002000 MOV #STACK,SP
205 120212 012700 000012 MOV #12,R0
206 120216 004767 122522' CALL ISV
207 120222 000167 133754' JMP MONIT+4
208 ;
209 ;
210 120226 012 363 364 WSTOP:: .BYTE 12,363,364,357,360,12
120231 357 360 012
211 ;
212 120234 012737 125070 000004 BREAK:: MOV #IRPS2-10,@#BREAKW
213 120242 005037 177660 CLR @#177660
214 120246 005067 003016' CLR IODEV
215 .IFT
216 120252 104034 EMT 34
217 120254 032700 000400 BIT #400,R0
218 120260 001405 BEQ 1$
219 120262 012700 000225 MOV #225,R0
220 120266 104016 EMT 16
221 120270 004767 120760' CALL ISVSS
222 .IFTF
223 120274 012701 120226 1$: MOV #WSTOP,R1
224 120300 012702 000005 MOV #5,R2
225 120304 004767 122560' CALL ISVEIL
226 120310 005767 002000' TST LYGIS
227 120314 002041 BGE 2$
228 120316 005767 002134' TST SAVJMP
229 120322 001404 BEQ 3$
230 120324 016704 002134' MOV SAVJMP,R4
231 120330 005067 002134' CLR SAVJMP
232 120334 020467 002004' 3$: CMP R4,STRREG
233 120340 101027 BHI 2$
234 120342 021627 156616 CMP @SP,#NEXDBL-20
235 120346 001416 BEQ 10$
236 120350 021627 155510 CMP @SP,#NEXJMP+22
237 120354 001413 BEQ 10$
238 120356 021627 155562 CMP @SP,#JMP+2
239 120362 001410 BEQ 10$
240 120364 021627 155736 CMP @SP,#DFNRET-14
241 120370 103406 BLO 11$
242 120372 021627 155750 CMP @SP,#DFNRET-2
243 120376 101003 BHI 11$
244 120400 001401 BEQ 10$
245 120402 005724 TST (4)+
246 120404 005724 10$: TST (4)+
247 120406 004767 155070' 11$: CALL LNUM
248 120412 014467 002046' MOV -(4),ADRHLT
249 120416 000404 BR 4$
250 120420 012700 000012 2$: MOV #12,R0
251 120424 004767 122522' CALL ISV
252 120430 004267 124022' 4$: JSR R2,SEPAP
253 120434 005067 002000' CLR LYGIS
254 120440 005037 000102 SETV: CLR @#TIMER+2 ;УСТАНОВКА ВЕКТОРОВ ПРЕРЫВАНИЙ
255 120444 012737 125070 000100 MOV #IRPS2-10,@#TIMER ;TAIMERIS DARBUI SU PRINTERIU
256 120452 012737 125070 000004 MOV #IRPS2-10,@#BREAKW
257 120460 005037 000006 CLR @#BREAKW+2
258 120464 012767 146404 000034' MOV #TRAP,TRAPV
259 120472 005067 000036' CLR TRAPV+2
260 120476 012737 125070 000010 MOV #IRPS2-10,@#ILCODV
261 120504 005037 000012 CLR @#ILCODV+2
262 .IFF
263 MOV #137,@#0
264 MOV #INIT,@#2
265 ;
266 .IFT
267 177777 .IF EQ KONTYP-KLAS
268 .IFTF
269 120510 005037 176564 CLR @#IRPSRG+4
270 .IFT
271 MOV #IRPS1,@#IRPSW
272 CLR @#IRPSW+2
273 BIS #100,@#IRPSRG
274 CLR EKRHUK
275 .IFF
276 120514 005037 176560 CLR @#IRPSRG
277 .ENDC
278 .IFTF
279 120520 012737 120540 000010 MOV #SYSERR,@#ILCODV
280 120526 012737 120234 000004 SYS1: MOV #BREAK,@#BREAKW
281 120534 000167 133754' JMP STAR ;ПЕРЕХОД НА БЭЙСИК-МОНИТОР
282 120540 104463 SYSERR: TRAP 51.
283 ;
284 ;
285 ; =========================
286 ; ****БЛОК ВВОДА-ВЫВОДА****
287 ; =========================
288 ;
289 ; ------------------------------------
290 ; ####КОНСТАНТЫ БЛОКА ВВОДА-ВЫВОДА####
291 ; ------------------------------------
292 ;
293 .IFF
294 .IF EQ,MASINA-MDS
295 TIMER=177546 ;АДРЕС CSR ТАЙМЕРА
296 .ENDC
297 ARSK=177560 ;АДРЕС РСК
298 ARDK=177562 ;АДРЕС РДК
299 ARSTV=177564 ;АДРЕС РСТВ
300 ARDTV=177566 ;АДРЕС РДТВ
301 AVPK=60 ;АДРЕС ВЕКТОРА ПРЕР. КЛ.
302 ;
303 .IFT
304 177662 ARDK=177662 ;adres rdk bk0010
305 ;
306 ; ---------------------------------------
307 ; ## ИНИЦИАЛИЗАЦИЯ БЛОКА ВВОДА-ВЫВОДА ###
308 ; ---------------------------------------
309 ;
310 MIDM:
311 000000 .IF EQ,MEMTYP-ROM
312 120542 000005 RESET
313 120544 104014 EMT 14
314 .IFF
315 CLR @#260
316 EMT 34
317 ASR R0
318 BCS 1$
319 .ENDC
320 120546 012700 000233 MOV #233,R0
321 120552 104016 EMT 16
322 120554 012700 000236 1$: MOV #236,R0
323 120560 104016 EMT 16
324 120562 012700 003022 MOV #BUF,R0
325 120566 012720 005012 2$: MOV #5012,(0)+
326 120572 020027 003052 CMP R0,#TEXT
327 120576 103773 BLO 2$
328 120600 005067 003016' CLR IODEV
329 120604 000207 RETURN
330 ;
331 120606 012701 002140 KINIT: MOV #FNKSTR,R1
332 120612 012702 120660 MOV #KEYTXT,R2
333 120616 005003 CLR R3
334 120620 005203 2$: INC R3
335 120622 010104 MOV R1,R4
336 120624 010300 MOV R3,R0
337 120626 104012 EMT 12
338 120630 111205 MOVB @R2,R5
339 120632 005205 INC R5
340 120634 112224 1$: MOVB (R2)+,(R4)+
341 120636 077502 SOB R5,1$
342 120640 062701 000021 ADD #17.,R1
343 120644 020327 000012 CMP R3,#10.
344 120650 103763 BLO 2$
345 120652 004767 120760' CALL ISVSS
346 120656 000207 RETURN
347 120660 006 103 117 KEYTXT: .ASCII <6>/COLOR /<5>/AUTO /<5>/GOTO /<5>/LIST /<4>/RUN/<12>
120663 114 117 122
120666 040 005 101
120671 125 124 117
120674 040 005 107
120677 117 124 117
120702 040 005 114
120705 111 123 124
120710 040 004 122
120713 125 116 012
348 120716 012 103 117 .ASCII <12>/COLOR 1,0/<12><6>/CLOAD"/<5>/CONT/<12><2>/./<12>
120721 114 117 122
120724 040 061 054
120727 060 012 006
120732 103 114 117
120735 101 104 042
120740 005 103 117
120743 116 124 012
120746 002 056 012
349 120751 005 014 122 .ASCII <5><14>/RUN/<12>
120754 125 116 012
350 120757 000 .EVEN
351 ;
352 120760 012700 000236 ISVSS:: MOV #236,R0
353 120764 104016 EMT 16
354 120766 012703 002140 MOV #FNKSTR,R3
355 120772 005001 CLR R1
356 120774 010305 4$: MOV R3,R5
357 120776 112502 MOVB (R5)+,R2
358 121000 012700 000040 MOV #' ,R0
359 121004 005302 3$: DEC R2
360 121006 100404 BMI 5$
361 121010 122725 000040 CMPB #' ,(R5)+
362 121014 002373 BGE 3$
363 121016 114500 MOVB -(R5),R0
364 121020 104022 5$: EMT 22
365 121022 062703 000021 ADD #17.,R3
366 121026 005201 INC R1
367 121030 020127 000012 CMP R1,#10.
368 121034 002757 BLT 4$
369 121036 112700 000040 MOVB #' ,R0
370 121042 104022 EMT 22
371 121044 005201 INC R1
372 121046 104022 EMT 22
373 121050 000207 RETURN
374 ;
375 .IFF
376 MIDM:
377 .IF EQ,MASINA-MDS
378 CLR TIMER
379 .ENDC
380 RESET
381 MOV #12,BUF+6
382 MOV #IVS,AVPK
383 BIS #100,ARSK
384 CLR IODEV
385 RTS PC
386 ;
387 .IFTF
388 ;
389 ; -------------------
390 ; ## ЧТЕНИЕ СТРОКИ ##
391 ; -------------------
392 ;
393 .IFT
394 121052 010046 IVEIL:: MOV R0,-(SP) ;СОХРАНЕНИЕ РЕГИСТРОВ
395 121054 010246 MOV R2,-(SP)
396 121056 010346 MOV R3,-(SP)
397 121060 010546 MOV R5,-(SP)
398 121062 104026 SBRALL: EMT 26
399 121064 010146 MOV R1,-(SP)
400 121066 012701 003022 SBROS: MOV #BUF,R1 ;АДРЕС СТРОКИ
401 121072 010103 MOV R1,R3
402 121074 012702 000400 MOV #400,R2 ;ДЛИНА СТРОКИ
403 121100 010246 MOV R2,-(SP)
404 121102 104006 PIJ:: EMT 6 ;ЧТЕНИЕ ОЧЕРЕДНОГО СИМВОЛА
405 121104 110005 MOVB R0,R5
406 121106 002062 BGE 5$
407 121110 120027 000211 CMPB R0,#211
408 121114 001436 BEQ 55$
409 110000 .IF EQ,MEMTYP-RAM
410 CMPB R0,#214
411 BEQ PIJ
412 .ENDC
413 121116 120027 000240 CMPB R0,#240
414 121122 002042 BGE 14$
415 121124 120027 000233 CMPB R0,#233
416 121130 002030 BGE 55$
417 121132 120027 000231 CMPB R0,#231
418 121136 001002 BNE 153$
419 121140 000167 121620' JMP 26$
420 121144 120027 000225 153$: CMPB R0,#225
421 121150 003354 BGT PIJ
422 121152 001012 BNE 12$
423 121154 104016 13$: EMT 16
424 121156 104006 EMT 6
425 121160 120027 000225 CMPB R0,#225
426 121164 001373 BNE 13$
427 121166 104016 EMT 16
428 121170 022626 CMP (SP)+,(SP)+
429 121172 004767 120760' CALL ISVSS
430 121176 000731 BR SBRALL
431 121200 120027 000220 12$: CMPB R0,#220
432 121204 001002 BNE 55$
433 121206 004767 123132' CALL STEP
434 121212 104016 55$: EMT 16
435 121214 120527 000236 CMPB R5,#236
436 121220 001330 BNE PIJ
437 121222 004767 120760' CALL ISVSS
438 121226 000725 BR PIJ
439 121230 020103 14$: CMP R1,R3 ;ЗАПИСЬ ОЧЕРЕДНОГО СИМВОЛА
440 121232 001402 BEQ 17$
441 121234 005202 INC R2
442 121236 005303 DEC R3
443 121240 110021 17$: MOVB R0,(R1)+
444 121242 005203 16$: INC R3
445 15$: ;wywod na |kran
446 177777 .IF EQ,KONTYP-KLAS
447 CALL ISV
448 .IFF
449 121244 104016 EMT 16
450 .ENDC
451 121246 005302 DEC R2
452 121250 001314 BNE PIJ
453 121252 104431 47$: TRAP 25. ;СЛИШКОМ ДЛИННАЯ СТРОКА
454 121254 120027 000177 5$: CMPB R0,#177
455 121260 001003 BNE 155$
456 121262 112700 000026 MOVB #26,R0
457 121266 000554 BR 26$
458 121270 120027 000003 155$: CMPB R0,#3
459 121274 001002 BNE 20$
460 121276 000167 120200' JMP CTRLC
461 121302 120027 000040 20$: CMPB R0,#40
462 121306 002350 BGE 14$
463 121310 120027 000007 CMPB R0,#7
464 121314 001736 BEQ 55$
465 121316 120027 000010 CMPB R0,#10
466 121322 001453 BEQ 2$
467 121324 120027 000012 CMPB R0,#12
468 121330 001536 BEQ 3$
469 121332 120027 000014 CMPB R0,#14
470 121336 001422 BEQ 4$
471 121340 162705 000023 SUB #23,R5
472 121344 002656 BLT PIJ
473 121346 006305 ASL R5
474 121350 060507 ADD R5,PC
475 121352 000502 BR 21$
476 121354 000453 BR 51$
477 121356 000651 BR PIJ
478 121360 000517 BR 26$
479 121362 000544 BR 27$
480 121364 000412 BR 6$
481 121366 000436 BR 7$
482 121370 000553 BR 132$
483 121372 000555 BR 133$
484 121374 000557 BR 134$
485 121376 000562 BR 135$
486 121400 000565 BR 136$
487 121402 000570 BR 137$
488 121404 104016 4$: EMT 16 ;ОЧИСТКА
489 121406 005726 TST (SP)+
490 121410 000626 BR SBROS
491 121412 020216 6$: CMP R2,@SP ;АНУЛИРОВАНИЕ СИМВОЛА
492 121414 001413 BEQ 152$
493 121416 020103 CMP R1,R3
494 121420 001004 BNE 1$
495 121422 005301 DEC R1
496 121424 005303 DEC R3
497 121426 005202 INC R2
498 121430 000404 BR 151$
499 121432 022701 003022 1$: CMP #BUF,R1
500 121436 001402 BEQ 152$
501 121440 105741 TSTB -(R1)
502 121442 104016 151$: EMT 16
503 121444 112700 000026 152$: MOVB #26,R0
504 121450 000463 BR 26$
505 121452 022701 003022 2$: CMP #BUF,R1 ; <---
506 121456 001611 BEQ PIJ
507 121460 005301 DEC R1
508 121462 000653 BR 55$
509 121464 020103 7$: CMP R1,R3 ; --->
510 121466 001403 BEQ 11$
511 121470 005201 INC R1
512 121472 005202 INC R2
513 121474 000663 BR 15$
514 121476 112721 000040 11$: MOVB #40,(R1)+
515 121502 000657 BR 16$
516 121504 112700 000031 51$: MOVB #31,R0 ;gorizontalxnaq tabulqciq
517 121510 020103 CMP R1,R3
518 121512 103405 BLO 52$
519 121514 112700 000040 MOVB #40,R0
520 121520 005203 INC R3
521 121522 005302 DEC R2
522 121524 003652 BLE 47$
523 121526 005201 52$: INC R1
524 121530 104016 EMT 16
525 121532 010146 MOV R1,-(SP)
526 121534 010246 MOV R2,-(SP)
527 121536 104026 EMT 26
528 121540 010105 MOV R1,R5
529 121542 012602 MOV (SP)+,R2
530 121544 012601 MOV (SP)+,R1
531 121546 032705 000007 BIT #7,R5
532 121552 001354 BNE 51$
533 121554 000167 121102' JMP PIJ
534 121560 020327 003022 21$: CMP R3,#BUF
535 121564 001005 BNE 49$
536 121566 005767 002000' TST LYGIS
537 121572 100402 BMI 49$
538 121574 000167 140170' JMP BC
539 121600 112700 000010 49$: MOVB #10,R0 ;wozwrat stroki
540 121604 022701 003022 41$: CMP #BUF,R1
541 121610 001567 BEQ 48$
542 121612 104016 EMT 16
543 121614 005301 DEC R1
544 121616 000772 BR 41$
545 121620 020103 26$: CMP R1,R3 ;СМЫКАНИЕ СТРОКИ
546 121622 001562 BEQ 48$
547 121624 000563 BR 42$
548 121626 020301 3$: CMP R3,R1 ;konec ~teniq stroki
549 121630 001410 BEQ 53$
550 121632 024646 CMP -(SP),-(SP)
551 121634 004767 122360' CALL PELING
552 40$:
553 177777 .IF EQ,KONTYP-KLAS
554 CALL ISV
555 .IFF
556 121640 104016 EMT 16
557 .IFTF
558 121642 005305 DEC R5
559 121644 002375 BGE 40$
560 121646 022626 CMP (SP)+,(SP)+
561 121650 000401 BR 54$
562 53$:
563 .IFT
564 CALL ISV
565 .IFF
566 121652 104016 EMT 16
567 .ENDC
568 121654 110023 54$: MOVB R0,(R3)+
569 121656 010301 MOV R3,R1
570 121660 022626 CMP (SP)+,(SP)+
571 121662 012605 MOV (SP)+,R5
572 121664 012603 MOV (SP)+,R3
573 121666 012602 MOV (SP)+,R2
574 121670 012600 MOV (SP)+,R0
575 121672 000207 RTS PC
576 121674 020103 27$: CMP R1,R3 ;РАЗМЫКАНИЕ СТРОКИ
577 121676 001534 BEQ 48$
578 121700 010305 MOV R3,R5
579 121702 114565 000001 31$: MOVB -(R5),1(R5)
580 121706 020501 CMP R5,R1
581 121710 101374 BHI 31$
582 121712 112711 000040 MOVB #40,@R1
583 121716 000526 BR 42$
584 121720 004567 122472' 132$: JSR R5,RSSE
585 121724 000436 BR 142$
586 121726 004567 122472' 133$: JSR R5,RSSE
587 121732 000440 BR 143$
588 121734 004567 122472' 134$: JSR R5,RSSE
589 121740 005301 DEC R1
590 121742 000427 BR 142$
591 121744 004567 122472' 135$: JSR R5,RSSE
592 121750 005201 INC R1
593 121752 000423 BR 142$
594 121754 004567 122472' 136$: JSR R5,RSSE
595 121760 005201 INC R1
596 121762 000424 BR 143$
597 121764 004567 122472' 137$: JSR R5,RSSE
598 121770 005301 DEC R1
599 121772 000420 BR 143$
600 121774 104016 43$: EMT 16
601 121776 005305 DEC R5
602 122000 002406 BLT 44$
603 122002 112700 000012 MOVB #12,R0
604 122006 104016 EMT 16
605 122010 112700 000231 MOVB #231,R0
606 122014 000767 BR 43$
607 122016 010103 44$: MOV R1,R3
608 122020 000450 BR 33$
609 122022 160001 142$: SUB R0,R1
610 122024 020127 003022 CMP R1,#BUF
611 122030 103404 BLO 140$
612 122032 000406 BR 141$
613 122034 060001 143$: ADD R0,R1
614 122036 020103 CMP R1,R3
615 122040 101403 BLOS 141$
616 122042 012601 140$: MOV (SP)+,R1
617 122044 012600 MOV (SP)+,R0
618 122046 000450 BR 48$
619 122050 005726 141$: TST (SP)+
620 122052 012600 MOV (SP)+,R0
621 122054 104016 EMT 16
622 122056 000444 BR 48$
623 122060 104016 34$: EMT 16 ;smykanie stroki
624 122062 005305 DEC R5
625 122064 002416 BLT 45$
626 122066 112700 000012 MOVB #12,R0
627 122072 104016 EMT 16
628 122074 112700 000010 MOVB #10,R0
629 122100 104016 EMT 16
630 122102 066616 000002 ADD 2(SP),@SP
631 122106 117600 000000 MOVB @(SP),R0
632 122112 104016 EMT 16
633 122114 112700 000026 MOVB #26,R0
634 122120 000757 BR 34$
635 122122 010105 45$: MOV R1,R5
636 122124 005205 INC R5
637 122126 112565 177776 30$: MOVB (R5)+,-2(R5)
638 122132 020503 CMP R5,R3
639 122134 103774 BLO 30$
640 122136 005202 INC R2
641 122140 005303 DEC R3
642 122142 010146 33$: MOV R1,-(SP)
643 122144 010246 MOV R2,-(SP)
644 122146 116601 000010 MOVB 10(SP),R1
645 122152 116602 000011 MOVB 11(SP),R2
646 122156 104024 EMT 24
647 122160 012602 MOV (SP)+,R2
648 122162 012601 MOV (SP)+,R1
649 122164 062706 000006 ADD #6,SP
650 122170 000167 121102' 48$: JMP PIJ
651 122174 005046 42$: CLR -(SP)
652 122176 005046 CLR -(SP)
653 122200 004767 122360' CALL PELING
654 122204 012746 003022 MOV #BUF,-(SP)
655 122210 166616 000010 SUB 10(SP),@SP
656 122214 005366 000004 32$: DEC 4(SP)
657 122220 002403 BLT 37$
658 122222 066616 000002 ADD 2(SP),@SP
659 122226 000772 BR 32$
660 122230 010146 37$: MOV R1,-(SP)
661 122232 010246 MOV R2,-(SP)
662 122234 104026 EMT 26
663 122236 110166 000010 MOVB R1,10(SP)
664 122242 110266 000011 MOVB R2,11(SP)
665 122246 012602 MOV (SP)+,R2
666 122250 012601 MOV (SP)+,R1
667 122252 032700 000001 BIT #1,R0
668 122256 001700 BEQ 34$
669 122260 105700 TSTB R0
670 122262 100644 BMI 43$
671 122264 104016 EMT 16
672 122266 005305 36$: DEC R5
673 122270 002427 BLT 35$
674 122272 001012 BNE 128$
675 122274 010146 MOV R1,-(SP)
676 122276 010246 MOV R2,-(SP)
677 122300 104026 EMT 26
678 122302 020227 000027 CMP R2,#27
679 122306 001002 BNE 129$
680 122310 105366 000011 DECB 11(SP)
681 122314 012602 129$: MOV (SP)+,R2
682 122316 012601 MOV (SP)+,R1
683 122320 066616 000002 128$: ADD 2(SP),@SP
684 122324 112700 000012 MOVB #12,R0
685 122330 104016 EMT 16
686 122332 112700 000027 MOVB #27,R0
687 122336 104016 EMT 16
688 122340 117600 000000 MOVB @(SP),R0
689 122344 104016 EMT 16
690 122346 000747 BR 36$
691 122350 005203 35$: INC R3
692 122352 005302 DEC R2
693 122354 003272 BGT 33$
694 122356 104431 TRAP 31
695 ;
696 122360 010046 PELING: MOV R0,-(SP)
697 122362 010146 MOV R1,-(SP)
698 122364 010346 MOV R3,-(SP)
699 122366 162701 003022 SUB #BUF,R1
700 122372 162703 003022 SUB #BUF,R3
701 122376 066601 000016 ADD 16(SP),R1
702 122402 066603 000016 ADD 16(SP),R3
703 122406 005201 INC R1
704 122410 004767 122500' CALL SSE
705 122414 005005 CLR R5
706 122416 160003 9$: SUB R0,R3
707 122420 002410 BLT 4$
708 122422 001402 BEQ 6$
709 122424 005205 INC R5
710 122426 000773 BR 9$
711 122430 122766 000027 000004 6$: CMPB #27,4(SP)
712 122436 001001 BNE 4$
713 122440 005205 INC R5
714 122442 160001 4$: SUB R0,R1
715 122444 003404 BLE 5$
716 122446 005266 000012 INC 12(SP)
717 122452 005305 DEC R5
718 122454 000772 BR 4$
719 122456 010066 000010 5$: MOV R0,10(SP)
720 122462 012603 MOV (SP)+,R3
721 122464 012601 MOV (SP)+,R1
722 122466 012600 MOV (SP)+,R0
723 122470 000207 RTS PC
724 ;
725 122472 010016 RSSE: MOV R0,(SP)
726 122474 010146 MOV R1,-(SP)
727 122476 010546 MOV R5,-(SP)
728 122500 104034 SSE: EMT 34
729 122502 006000 ROR R0
730 122504 103403 BCS 1$
731 122506 012700 000100 MOV #100,R0
732 122512 000207 RTS PC
733 122514 012700 000040 1$: MOV #40,R0
734 122520 000207 RTS PC
735 ;
736 .IFF
737 ;
738 ; ----------------------
739 ; ----------------------
740 ; ВЫХОД : КОД В R0 (МЛ. БАИТ)
741 ;
742 IVS:: CLR ARSK
743 MOVB ARDK,R0
744 INCB SIIKP
745 CALL ALRIC
746 RTI
747 ;
748 ; --------------------
749 ; ### ВЫВОД СИМВОЛА ##
750 ; --------------------
751 ; ВХОД : КОД В R0 (МЛ. БАИТ)
752 ;
753 .IFT
754 122522 104016 ISV:: EMT 16
755 177777 .IF EQ,KONTYP-KLAS
756 TST EKRHUK
757 BEQ 1$
758 CALL @EKRHUK
759 1$:
760 .ENDC
761 122524 000207 RETURN
762 .IFTF
763 122526 005767 003016' ISVTO:: TST IODEV
764 122532 001773 BEQ ISV
765 122534 012701 003022 MOV #BUFOUT,R1
766 122540 012702 000001 MOV #1,R2
767 122544 110011 MOVB R0,@R1
768 .IFF
769 JMP ISVEIL
770 ;
771 CRLF: MOV #15,R0
772 CMPB TABY,#27
773 BEQ ISV
774 INCB TABY
775 ;
776 ISV:: TSTB ARSTV
777 BPL ISV
778 MOVB R0,ARDTV
779 CMPB R0,#12
780 BEQ CRLF
781 CMPB TABX,#117
782 BNE 30$
783 CMPB TABY,#27
784 BEQ 31$
785 INCB TABY
786 BR 31$
787 30$: INCB TABX
788 CMPB R0,#15
789 BNE 33$
790 31$: CLRB TABX
791 33$: RTS PC
792 ;
793 ; ---------------------
794 ; ### ЧТЕНИЕ СТРОКИ ###
795 ; ---------------------
796 ;
797 IVEIL:: MOV R0,-(SP) ;СОХРАНЕНИЕ РЕГИСТРОВ
798 MOV R2,-(SP)
799 MOV R3,-(SP)
800 MOV R5,-(SP)
801 MOVB TABX,-(SP)
802 SBROS: MOV #BUF,R1 ;АДРЕС СТРОКИ
803 MOV R1,R3
804 MOV #377,R2 ;ДЛИНА СТРОКИ
805 MOV R2,-(SP)
806 PIJ:: CLRB SIIKP ;РЕЗРЕШЕНИЕ ПРЕРЫВАНИЯ С КЛАВИАТУРЫ
807 BIS #100,ARSK
808 14$: TSTB SIIKP ;ЧТЕНИЕ ОЧЕРЕДНОГО СИМВОЛА
809 BEQ 14$
810 CMPB R0,#40
811 BGE 6$
812 CMPB R0,#11
813 BNE 22$
814 JMP 33$
815 22$: CMPB R0,#13
816 BNE 21$
817 JMP 15$
818 21$: CMPB R0,#3
819 BNE 44$
820 JMP CTRLC
821 44$: CMPB R0,#14
822 BEQ 1$
823 CMPB R0,#15
824 BEQ 2$
825 CMPB R0,#16
826 BEQ 3$
827 CMPB R0,#17
828 BEQ 3$
829 CMPB R0,#23
830 BEQ 27$
831 CMPB R0,#24
832 BEQ 30$
833 CMPB R0,#25
834 BEQ 8$
835 CMPB R0,#31
836 BEQ 4$
837 CMPB R0,#32
838 BEQ 5$
839 CMPB R0,#33
840 BNE PIJ
841 BIS #100,ARSK
842 CALL STEP
843 BR PIJ
844 6$: CMPB R0,#177
845 BEQ 53$
846 JMP 16$
847 53$: CMP R2,@SP ;АНУЛИРОВАНИЕ СИМВОЛА
848 BEQ PIJ
849 CMP R1,R3
850 BNE 7$
851 DEC R1
852 DEC R3
853 TST (R2)+
854 BR 11$
855 7$: CMP #BUF,R1
856 BEQ PIJ
857 MOVB #40,-(R1)
858 INC R2
859 11$: MOVB #32,R0
860 DECB TABX
861 DECB TABX
862 CALL ISV
863 MOVB #40,R0
864 CALL ISV
865 MOVB #32,R0
866 BR 12$
867 1$: CALL ISV ;ОЧИСТКА
868 CLRB TABX
869 CLRB TABY
870 TST (SP)+
871 BR SBROS
872 2$: MOVB #12,R0 ;КОНЕЦ ЧТЕНИЯ СТРОКИ
873 MOV R3,R1
874 DEC R2
875 BEQ 24$
876 MOVB R0,(R1)+
877 CALL ISV ;ПО СИМВОЛУ ЗАВЕРШИТЕЛЮ
878 BR KCTSTR
879 3$: DECB TABX
880 CALL ISV ;РУС. ЛАТ.
881 BR PIJ
882 27$: CMP R1,R3 ;РАЗМЫКАНИЕ СТРОКИ
883 BEQ PIJ
884 MOV R3,R5
885 31$: MOVB -(R5),1(R5)
886 CMP R5,R1
887 BHI 31$
888 MOVB #40,@R1
889 DECB TABX
890 BR 17$
891 30$: CMP R1,R3 ;СМЫКАНИЕ СТРОКИ
892 BEQ 18$
893 MOV R1,R5
894 INC R5
895 32$: MOVB (R5)+,-2(R5)
896 CMP R5,R3
897 BLO 32$
898 TST (R2)+
899 DEC R3
900 DECB TABX
901 CALL KISV
902 BR 23$
903 4$: CMP R1,R3 ; --->
904 BEQ 13$
905 INC R1
906 INC R2
907 CALL KISV
908 BR 23$
909 13$: MOVB #40,R0
910 MOVB R0,(R1)+
911 BR 17$
912 5$: CMP R2,@SP ; <---
913 BEQ 18$
914 CMP #BUF,R1
915 BEQ 18$
916 DEC R1
917 INC R2
918 12$: DECB TABX
919 DECB TABX
920 CALL KISV
921 BR 23$
922 8$: CMP R3,#BUF ;wozwrat stroki
923 BNE 180$
924 JMP BC
925 180$: MOVB #32,R0
926 9$: CMP R1,#BUF
927 BEQ 23$
928 DEC TABX
929 DEC TABX
930 CALL KISV
931 DEC R1
932 INC R2
933 BR 9$
934 15$: DEC TABX ;sbros konca stroki
935 CALL KISV
936 MOV R1,R3
937 26$: JMP PIJ
938 33$: MOVB #31,R0 ;gorizontalxnaq tabulqciq
939 CMP R1,R3
940 BLO 34$
941 MOVB #40,R0
942 INC R3
943 DEC R2
944 BLE 24$
945 34$: INC R1
946 CALL KISV
947 BITB #111,TABX
948 BNE 33$
949 JMP PIJ
950 16$: CMP R1,R3 ;ЗАПИСЬ ОЧЕРЕДНОГО СИМВОЛА
951 BEQ 25$
952 INC R2
953 DEC R3
954 25$: MOVB R0,(R1)+
955 17$: INC R3
956 CALL KISV
957 23$: DEC R2
958 BEQ 24$
959 18$: JMP PIJ
960 24$: CLRB SIIKP
961 BIS #100,ARSK
962 TRAP 31 ;СЛИШКОМ ДЛИННАЯ СТРОКА
963 KCTSTR: CMP (SP)+,(SP)+
964 MOV (SP)+,R5
965 MOV (SP)+,R3
966 MOV (SP)+,R2
967 MOV (SP)+,R0
968 CLRB SIIKP
969 BIS #100,ARSK
970 RTS PC
971 KISV: CALL ISV ;ОТОБРАЖЕНИЕ ОЧЕРЕДНОГО СИМВОЛА
972 TSTB TABX
973 BGE 21$
974 DECB TABY
975 BLT 22$
976 MOVB #117,TABX
977 21$: RTS PC