-
Notifications
You must be signed in to change notification settings - Fork 0
/
ms0515-roma.lst
2040 lines (2011 loc) · 74.5 KB
/
ms0515-roma.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
157666: ; ??? SP
157672: ; Сохранённый PS
157674: ; Сохранённый PC; #172000
157676: ; ??? #000340
157702:
157704: ; ???
157706: ; Значение для системого регистра C - 177604
157712: ; Адрес на экране; экран начинается с адреса 040000
157714: ; Слово атрибутов при печати строки
157720: ; Значение для системного регистра A - 177600
157730: ; Адрес блока параметров при чтении с НГМД
157732: ; ???
157752: ; ??? #177777, #0 - пульт
157760: ; ??? флаги
157762: ; ???
157764: ; Место для сохранения PS
157766: ; ??? вкл/выкл звука
157770: ; ???
157776: ; ???
160000: JMP 164054 ; Вывод символа; R0 = символ
160004: JMP 175556 ; Ввод символа
160010: JMP 162652 ; Чтение с НГМД
160014: JMP 162360 ; Загрузка с НМЛ
160020: JMP 167304
160024: JMP 167316
;
; Начало процедуры холодного старта
160030: MOVB #000213, @#177546 ; ИРПР: регистр управления
160036: MOVB #000202, @#177606 ; Управляющее слово программируемого интерфейса
160044: MOVB #000377, @#177540 ; ???
160052: MOVB #000007, @#177604 ; Системный регистр C: звук выкл, среднее разрешение, белый бордюр
160060: MOVB #000026, @#177506 ; Таймер упр.слово
160066: MOVB #000032, @#177500 ; Таймер канал 0
160074: MOVB #000126, @#177506 ; Таймер упр.слово
160102: MOVB #000032, @#177502 ; Таймер канал 1
160110: CLR R0
160112: MOV #000002, R2
160116: MOV #177442, R1 ; Клавиатура состояние порта (R) / регистр инструкций (W)
160122: MOVB R0, (R1)
160124: MOVB R0, (R1)
160126: MOVB R0, (R1)
160130: MOVB #000100, (R1)
160134: MOVB #000316, (R1)
160140: MOVB #000047, (R1)
160144: MOV #177702, R1 ; Стык С2
160150: SOB R2, 160122 ; повторяем второй раз
160152: MOVB #000000, 177600 ; Системный регистр A
160160: JMP 172072 ; Переходим к тестам памяти
; Рестарт процессора
160164: NOP
160166: TST @#177770
160172: MOV (SP)+, @#157674
160176: MOV (SP)+, @#157676
; Точка входа - сюда приходим после холодного старта и тестов памяти
160202: MOV SP, @#157666
160206: MOV #157674, SP
160212: MOV @#157676, -(SP)
160216: MOV @#157674, -(SP)
160222: CMP R5, -(SP)
160224: MOV R5, -(SP)
160226: MOV R4, -(SP)
160230: MOV R3, -(SP)
160232: MOV R2, -(SP)
160234: MOV R1, -(SP)
160236: MOV R0, -(SP)
160240: TST @#157752 ; пульт?
160244: BEQ 160454 ; да => Переход на приглашение пульта
160246: RESET
160250: BIC #000177, @#157760
160256: CLR @#157702
160262: CLR @#157712
160266: MOV #034000, @#157714
160274: BIS #000007, @#157706 ; Цвет бордюра белый
160302: TSTB @#157760
160306: BMI 160320
160310: BIC #000010, @#157706 ; Выкл. высокое разрешение экрана
160316: BR 160326
160320: BIS #000010, @#157706
160326: MOVB @#157706, @#177604 ; Системный регистр C
160334: CLR @#157704
160340: MOV #000037, @#157720
160346: MOVB @#157720, @#177600 ; Системный регистр A
160354: CLRB @#157722
160360: CLR @#157724
160364: CLR @#157726
160370: CLR @#157710
160374: CLR @#157762
160400: CLRB @#157770
160404: MOV #000012, 157732
160412: MTPS #000340
; Очистка экрана и возврат в пульт / на заставку
160416: MOV #177233, R3 ; строка 033 110 033 112 000
160422: CALL 160760 ; Печать строки
160426: CALL 166350 ; клавиатура??
160432: MOV #110021, R3
160436: CALL 177040 ; клавиатура??
160442: TST @#157752 ; пульт?
160446: BEQ 160454 ; да => Переход на приглашение пульта
160450: JMP 172532 ; Переход на заставку
;
160454: MOV #157614, SP
160460: CLR R1
160462: MOV #177230, R3 ; строка 015 012 000
160466: CALL 160760 ; Печать строки
160472: MOV @#157674, R3
160476: CALL 160662 ; Печать 8-ричного числа R3
; Точка входа: приглашение пульта '@' и ожидание ввода команды пульта
160502: MOV #157614, SP
160506: MOV #177224, R3 ; строка 015 012 100 000
160512: CALL 160760 ; Печать строки
160516: BIC #004040, R1
160522: CLR R5
160524: CALL 160616 ; Ожидание ввода символа в режиме пульта
160530: BIT #002000, R1 ; введена цифра 0..7?
160534: BNE 160560 ; не-цифра => команда введена, переходим
160536: BIS #000040, R1 ; ставим флаг - есть аргумент команды
160542: ASL R5 ; предыдущее значение аргумента
160544: ASL R5 ; умножаем на 8.
160546: ASL R5 ;
160550: ADD R0, R5 ; и добавляем введённую цифру 0..7
160552: BR 160524 ; продолжнаем ввод команды
; Команда пульта не найдена
160554: JMP 161046 ; Вывести '?' и ждать следующей команды пульта
; Команда пульта введена - анализируем и выполняем
160560: MOV #177777, R4 ; начальное значение счётчика
160564: MOV #177240, R3 ; Таблица символов вводимых с пульта
160570: INC R4 ; считаем номер команды в таблице
160572: CMPB R0, (R3)+ ; эта команда?
160574: BEQ 160604 ; да => переходим к выполнению команды
160576: TSTB (R3) ; конец таблицы?
160600: BEQ 160554 ; да => команда пульта не найдена
160602: BR 160570 ; продолжаем цикл
160604: ASL R4 ; умножаем на 2
160606: ADD #177264, R4 ; добавляем адрес таблицы
160612: MOV (R4), R4 ; берём адрес программы
160614: JMP (R4) ; Переход к выполнению команды
;
160616: CALL 175546 ; Ожидание символа с клавиатуры
160622: MOVB R0, R3
160624: CALL 160776 ; Печать символа
160630: BIC #177607, R3
160634: CMP #000060, R3 ; цифра '0'..'7'?
160640: BNE 160654 ; нет => переход
160642: BIC #002000, R1 ; признак цифры
160646: BIC #177770, R0 ; оставляем значение 0..7
160652: RETURN
160654: BIS #002000, R1 ; ставим признак не-цифры
160660: RETURN
; Подпрограмма
160662: MOV @#157646, @#157634
160670: MOV R3, @#157646
160674: MOV #000006, R4 ; Счётчик цикла печати 8-ричного числа R3
160700: CLR R0 ; Начало цикла, сначала печатаем 1 бит
160702: ROL R3
160704: ROL R0
160706: ADD #000060, R0 ; +'0'
160712: CALL 160776 ; Печать символа
160716: DEC R4 ; уменьшаем счётчик
160720: BEQ 160736 ; цикл закончен? => выход
160722: CLR R0
160724: ROL R3
160726: ROL R0
160730: ROL R3
160732: ROL R0
160734: BR 160702 ; продолжаем
160736: BIT #004000, R1
160742: BNE 160754
160744: MOV #000040, R0 ; символ ' '
160750: CALL 160776 ; Печать символа
160754: RETURN
;
160756: BR 160502 ; Возврат к приглашению пульта и вводу команды
;
; Подпрограмма: печать строки
160760: TSTB (R3) ; конец строки?
160762: BEQ 160774 ; да => на выход
160764: MOVB (R3)+, R0 ; берём символ
160766: CALL 160776 ; Печать символа
160772: BR 160760 ; продолжаем
160774: RETURN
; Подпрограмма: печать символа
160776: CMPB #000177, R0
161002: BNE 161040
161004: CMPB #000001, @#157702
161012: BEQ 161044
161014: MOV #000010, R0
161020: CALL 164054
161024: MOV #000040, R0
161030: CALL 164054
161034: MOV #000010, R0
161040: CALL 164054 ; Печать символа R0
161044: RETURN
; Команда пульта не найдена - печать '?' и переход к вводу следующей команды
161046: MOVB #000077, R0 ; символ '?'
161052: CALL 164054 ; Печать символа R0
161056: BR 160756 ; Возврат к приглашению пульта и вводу команды
; Команда пульта '/' - открыть ячейку по текущему или заданному адресу
161060: BIS #000020, R1
161064: BIT #000040, R1
161070: BEQ 161100
161072: MOV R5, R2
161074: BIC #000500, R1
161100: MOV (R2), R3
161102: CALL 160662 ; Печать 8-ричного числа R3
161106: JMP 160516
; Команда пульта <015>
161112: MOV #000012, R0 ; символ
161116: CALL 160776 ; Печать символа
161122: BIT #000040, R1
161126: BEQ 161160
161130: BIT #000020, R1
161134: BEQ 161160
161136: BIT #000100, R1
161142: BEQ 161156
161144: BIC #177420, R5
161150: CLR (R2)
161152: BIS R5, (R2)
161154: BR 161160
161156: MOV R5, (R2)
161160: BIC #000020, R1
161164: MOV #177226, R3 ; Строка 100 000
161170: CALL 160760 ; Печать строки
161174: BR 161410
; Команда пульта <012>
161176: BIS #000200, R1
161202: BR 161220
; Команда пульта '^'
161204: BIC #000200, R1
161210: MOV #000012, R0 ; символ
161214: CALL 160776 ; Печать символа
161220: BIT #000020, R1
161224: BEQ 161600 ; => Ошибка в команде пульта
161226: MOV #000015, R0 ; символ перевод строки
161232: CALL 160776 ; Печать символа
161236: BIT #000040, R1
161242: BEQ 161254
161244: BIT #000100, R1
161250: BNE 161144
161252: MOV R5, (R2)
161254: BIT #000100, R1
161260: BNE 161604
161262: BIT #000200, R1
161266: BEQ 161330
161270: ADD #000002, R2
161274: BIT #000400, R1
161300: BEQ 161354
161302: MOV R1, R0
161304: BIT #000200, R1
161310: BEQ 161336
161312: CMP #157672, R2
161316: BNE 161324
161320: MOV #157652, R2
161324: INC R0
161326: BR 161412
161330: SUB #000002, R2
161334: BR 161274
161336: CMP #157650, R2
161342: BNE 161350
161344: MOV #157670, R2
161350: DEC R0
161352: BR 161412
161354: BIS #004000, R1
161360: MOV R2, R3
161362: CALL 160662 ; Печать 8-ричного числа R3
161366: MOV #000057, R0 ; Символ '/'
161372: CALL 160776 ; Печать символа
161376: MOV (R2), R3
161400: BIC #004000, R1
161404: CALL 160662 ; Печать 8-ричного числа R3
161410: BR 161562
161412: BIC #177770, R0
161416: BIC #000007, R1
161422: BIS R0, R1
161424: MOV #000122, R0 ; Символ 'R'
161430: CALL 160776 ; Печать символа
161434: MOV R1, R0
161436: BIC #177770, R0 ; Оставляем 0..7
161442: ADD #000060, R0 ; +'0'
161446: CALL 160776 ; Печать символа
161452: MOV #000057, R0
161456: CALL 160776 ; Печать символа
161462: MOV (R2), R3
161464: CALL 160662 ; Печать 8-ричного числа R3
161470: BR 161562
161472: JMP 160462
; Команда пульта 'R' - открыть регистр
161476: BIS #000400, R1
161502: BIC #000040, R1
161506: CALL 175546
161512: MOV R0, R3
161514: CALL 160776 ; Печать символа
161520: CMPB #000123, R0
161524: BEQ 161566
161526: MOV #157652, R2
161532: BIC #177607, R3
161536: CMP #000060, R3
161542: BNE 161600 ; => Ошибка в команде пульта
161544: BIC #177770, R0
161550: BIC #000107, R1
161554: BIS R0, R1
161556: ASL R0
161560: ADD R0, R2
161562: JMP 160516
161566: BIS #000100, R1
161572: MOV #157672, R2
161576: BR 161410
;
161600: JMP 161046 ; Команда пульта не найдена
;
161604: BIC #000020, R1
161610: JMP 160502 ; Возврат к приглашению пульта и вводу команды
161614: BIT #000020, R1
161620: BEQ 161600 ; => Ошибка в команде пульта
161622: BIC #000400, R1
161626: BIT #000040, R1
161632: BNE 161642
161634: MOV @#157646, R2
161640: BR 161644
161642: MOV R5, R2
161644: BIT #000100, R1
161650: BEQ 161656
161652: MOV @#157634, R2
161656: MOV #177230, R3 ; Строка 015 012 000
161662: CALL 160760 ; Печать строки
161666: BR 161354
; Команда пульта '_' - открыть ячейку с относительным адресом
161670: BIT #000020, R1
161674: BEQ 161600 ; => Ошибка в команде пульта
161676: BIT #000500, R1
161702: BNE 161604
161704: ADD #000002, R2
161710: BIT #000040, R1
161714: BEQ 161722
161716: ADD R5, R2
161720: BR 161644
161722: ADD @#157646, R2
161726: BR 161644
; Команда пульта 'G' - пуск программы с указанного адреса
161730: RESET
161732: MOV R5, @#157674
161736: MOV R5, @#157670
161742: MOV #157652, SP
161746: MOV (SP)+, R0
161750: MOV (SP)+, R1
161752: MOV (SP)+, R2
161754: MOV (SP)+, R3
161756: MOV (SP)+, R4
161760: MOV (SP)+, R5
161762: MOV (SP), SP
161764: MTPS @#157672
161770: MOV @#157674, PC
;
; Команда пульта 'P' - продолжить выполнение программы
161774: MOV #157652, SP
162000: MOV (SP)+, R0
162002: MOV (SP)+, R1
162004: MOV (SP)+, R2
162006: MOV (SP)+, R3
162010: MOV (SP)+, R4
162012: MOV (SP)+, R5
162014: MOV (SP)+, SP
162016: MOV @#157672, @#157676
162024: MOV @#157670, @#157674
162032: CLR @#157644
162036: MTPS @#157672
162042: MOV @#157674, PC
162046: ASR R5
162050: ASR R5
162052: ASR R5
162054: BIC #160000, R5
162060: JMP 160524
;
; Команда пульта 'A' - управление атрибутами рабочей области экрана
162064: BIT #000040, R1
162070: BEQ 161600 ; => Ошибка в команде пульта
162072: TSTB @#157760
162076: BMI 161600 ; => Ошибка в команде пульта
162100: BIS #000200, @#157700
162106: MOV @#157700, @#177400
162114: MOV #001750, R0
162120: MOV #040001, R4
162124: MOVB R5, (R4)+
162126: INC R4
162130: MOVB R5, (R4)+
162132: INC R4
162134: MOVB R5, (R4)+
162136: INC R4
162140: MOVB R5, (R4)+
162142: INC R4
162144: MOVB R5, (R4)+
162146: INC R4
162150: MOVB R5, (R4)+
162152: INC R4
162154: MOVB R5, (R4)+
162156: INC R4
162160: MOVB R5, (R4)+
162162: INC R4
162164: SOB R0, 162124
162166: SWAB R5
162170: MOV R5, @#157714
162174: BIC #000200, @#157700
162202: MOV @#157700, @#177400
162210: JMP 160502 ; Возврат к приглашению пульта и вводу команды
;
; Команда пульта 'B' - управление цветом бордюра
162214: BIT #000040, R1
162220: BEQ 162070
162222: BIC #177770, R5
162226: BIC #000007, @#157706
162234: BIS R5, @#157706
162240: MOVB @#157706, @#177604 ; Системный регистр C
162246: JMP 160502 ; Возврат к приглашению пульта и вводу команды
;
; Команда пульта 'D' - Загрузка с НГМД
162252: MOV #162314, @#157730 ; Адрес блока параметров для чтения первого сектора
162260: BIS #100000, @#157720
162266: CALL 162652 ; Чтение с НГМД
162272: BLO 162300 ; ошибка чтения => переходим
162274: JMP @#000000 ; Запуск кода из загрузочного сектора
162300: MOV #177330, R3 ; Строка "ОШИБКА ЗАГРУЗКИ"
162304: CALL 160760 ; Печать строки
162310: JMP 160502 ; Возврат к приглашению пульта и вводу команды
; Блок параметров для чтения первого сектора
162314: .WORD 000000, 000000
.WORD 000000 ; адрес куда читать
162322: .WORD 000400 ; прочитать 256. слов = 512. байт
;
; Команда 'V' с пульта - включение/выключение звука
162324: COM @#157766 ; переключение звука
162330: JMP 160502 ; Возврат к приглашению пульта и вводу команды
; Загрузка с ленты - команда 'L' с пульта
162334: MOV #124000, @#157714 ; атрибуты при печати строки
162342: MOV #177352, R3 ; строка " LOAD "
162346: CALL 160760 ; Печать строки
162352: MOV #034000, @#157714 ; атрибуты при печати строки
162360: BIC #000004, @#157706 ; Бордюр
162366: BIS #000003, @#157706 ; фиолетовый
162374: MOVB @#157706, @#177604 ; Системный регистр C
162402: MOV #177777, R3
162406: CALL 162504 ; читаем слово с ленты
162412: MOV R0, R4 ; адрес загрузки/запуска
162414: MOV R0, @#157704 ; сохраняем адрес запуска
162420: BIC #000002, @#157706 ; меняем цвет бордюра
162426: MOV #000020, R3
162432: CALL 162504 ; читаем слово с ленты
162436: MOV R0, R5 ; адрес последнего слова
162440: ADD #000002, R5 ; адрес за последним словом
162444: MOV #000020, R3
162450: CALL 162504 ; читаем слово с ленты
162454: MOV R0, (R4)+ ; сохраняем слово
162456: CMP R4, R5 ; считали до конца?
162460: BNE 162444 ; нет => продолжаем цикл чтения
162462: BIS #000002, @#157706 ; меняем цвет бордюра
162470: MOV #177777, R3
162474: CALL 162504 ; читаем слово с ленты
162500: MOV @#157704, PC ; запуск
; Подпрограмма: чтение слова с ленты
162504: CLR R0
162506: CLR R1
162510: TSTB @#177602
162514: BPL 162520 ; Бит 7 (НМЛ) = 0 => переход
162516: INC R1
162520: ASL R0
162522: CLR R2
162524: TSTB @#177602
162530: BPL 162534 ; Бит 7 (НМЛ) = 0 => переход
162532: INC R2
162534: CMP R1, R2
162536: BEQ 162522
162540: BIS R2, R0
162542: MOV #000001, R1
162546: XOR R1, @#157706 ; меняем цвет бордюра
162552: MOVB @#157706, @#177604 ; Системный регистр C
162560: MOV #000406, R1 ; величина задержки
162564: SOB R1, 162564 ; задержка
162566: TSTB @#177602
162572: BPL 162576 ; Бит 7 (НМЛ) = 0 => переход
162574: INC R1
162576: TST R3
162600: BPL 162636
162602: CMPB #000346, R0 ; 230.
162606: BNE 162616
162610: CLR @#157710
162614: BR 162632
162616: CMPB #000031, R0 ; 25.
162622: BNE 162520
162624: MOV #177777, @#157710
162632: MOV #000021, R3
162636: DEC R3
162640: BNE 162520
162642: MOV @#157710, R1
162646: XOR R1, R0
162650: RETURN
;
; Подпрограмма: чтение с НГМД
162652: MFPS @#157764 ; Сохраняем PS
162656: MTPS #000340
162662: MOV R0, -(SP)
162664: MOV R1, -(SP)
162666: MOV R2, -(SP)
162670: MOV R3, -(SP)
162672: MOV R4, -(SP)
162674: MOV R5, -(SP)
162676: MOV #000012, @#157732 ; количество попыток?? = 10.
162704: MOV #000012, @#164052 ; Запись в ROM??
162712: MOV @#157730, R3 ; Берём адрес блока параметров
162716: MOV (R3)+, R5 ; (0-е слово)
162720: MOV #000200, R4
162724: MOVB (R3)+, R1
162726: BIC #000013, @#157720 ; очищаем биты выбора привода НГМД
162734: MOVB (R3), R0 ; Берём байт с номером устройства
162736: COM R0
162740: BIC #177775, R0 ; оставляем бит 1
162744: ASL R0
162746: ASL R0
162750: BIS R0, @#157720
162754: MOVB (R3)+, R0 ; Берём байт с номером устройства
162756: BIC #177776, R0 ; оставляем бит 0
162762: BIS R0, @#157720
162766: MOV (R3)+, R0 ; Берём адрес куда читать (2-е слово)
162770: MOV (R3)+, R2 ; Берём размер в словах (3-е слово)
162772: BPL 163002
162774: BIS #000240, R4
163000: NEG R2
163002: MOV R4, @#157750
163006: ASL R2 ; Переводим размер в байты
163010: MOV #173371, R4
163014: CMP #002400, R5
163020: BHI 163026
163022: ADD #175400, R5
163026: ROL R5
163030: INCB R4
163032: BLE 163014
163034: MOVB R5, R1
163036: ADD R4, R5
163040: MOV R1, R4
163042: ASL R1
163044: SUB #000012, R1
163050: BGT 163044
163052: MOV R1, @#157744
163056: MOV R0, @#157734 ; Адрес куда читать
163062: MOV R5, @#157736
163066: MOV R2, @#157740 ; Сколько байт читать
163072: MOVB @#157720, @#177600 ; Системный регистр A
163100: BIT #000004, @#157720 ; двигатель НГМД включен?
163106: BEQ 163140 ; да => переходим
163110: BIC #000004, @#157720 ; бит 2 - двигатель НГМД
163116: MOV @#157720, @#177600 ; Системный регистр A
163124: MOV #000003, R1 ; задержки
163130: MOV #177777, R3 ; для раскрутки двигателя
163134: SOB R3, 163134 ; задержка
163136: SOB R1, 163130 ; ожидаем
163140: MOV #000012, @#157742
163146: MOV #000300, R0
163152: CALL 163720
163156: BITB #000020, (R4)
163162: BEQ 163226
163164: DEC @#157742
163170: BNE 163176
163172: JMP 163762
163176: MOV #000001, R0
163202: CALL 163720
163206: MOV #020000, R1
163212: SOB R1, 163212 ; задержка
163214: NOP
163216: NOP
163220: NOP
163222: NOP
163224: BR 163146
163226: MOVB @#177644, @#177642 ; Регистр сектора -> регистр дорожки
163234: MOVB @#157737, R2
163240: BGT 163272
163242: SUB #177772, R2
163246: BGT 163256
163250: ADD #000004, R2
163254: SEC
163256: ROL R2
163260: ADD @#157744, R2
163264: BGT 163272
163266: ADD #000012, R2
163272: MOV @#157736, R3
163276: CMPB R3, #000120
163302: BNE 163306
163304: CLR R3
163306: MOV #177640, R4
163312: CMPB R3, 000002(R4)
163316: BEQ 163352
163320: MOVB R3, 000006(R4)
163324: MOV #000035, R0
163330: CALL 163720
163334: MOV #020000, R1
163340: SOB R1, 163340 ; задержка
163342: BITB #000020, (R4)
163346: BEQ 163352
163350: BR 163146
163352: MOV #000100, @#157732
163360: MOV #000001, R3
163364: NOP
163366: NOP
163370: MOV @#157734, R5 ; Берём адрес куда читать
163374: MOV @#157750, R0
163400: MOVB R2, 000004(R4) ; Задаём дорожку
163404: MOV 157740, R2 ; Сколько байт читать
163410: MOV #000002, R1
163414: BITB #000200, (R4)
163420: BNE 163414
163422: MOVB R0, (R4) ; Задаём команду
163424: BITB R3, (R4) ; busy?
163426: BEQ 163424 ; ожидаем busy
163430: SOB R3, 163430 ; задержка
163432: BITB #000040, R0
163436: BNE 163504
; Начало цикла чтения данных сектора; R2 = сколько байт читать
163440: BITB R1, (R4) ; Есть данные для чтения? (DRQ)
163442: BNE 163454 ; да => переходим
163444: BITB #000001, (R4) ; Busy ещё стоит?
163450: BNE 163440 ; да => продолжаем цикл
163452: BR 163560
163454: MOVB 000006(R4), (R5)+ ; Читаем байт данных
163460: SOB R2, 163440 ; повторяем пока не прочитаем всё
163462: BITB R1, (R4)
163464: BNE 163476
163466: BITB #000001, (R4)
163472: BNE 163462
163474: BR 163560
163476: MOVB 000006(R4), R5
163502: BR 163462
163504: BITB R1, (R4)
163506: BNE 163520
163510: BITB #000001, (R4)
163514: BNE 163504
163516: BR 163552
163520: MOVB (R5)+, 000006(R4)
163524: SOB R2, 163504
163526: BITB R1, (R4)
163530: BNE 163542
163532: BITB #000001, (R4)
163536: BNE 163526
163540: BR 163552
163542: MOVB #000000, 000006(R4)
163550: BR 163526
163552: MOV #000575, R1
163556: SOB R1, 163556 ; задержка
163560: TSTB (R4)
163562: BEQ 163634
163564: DEC @#157732 ; уменьшаем число попыток??
163570: BNE 163576
163572: JMP 163762
163576: BITB #000100, (R4)
163602: BEQ 163610
163604: JMP 163762
163610: BITB #000020, (R4)
163614: BEQ 163622
163616: JMP 163164
163622: BITB #000014, (R4)
163626: BNE 163360
163630: JMP 163762
; Завершено чтение сектора
163634: MOV #000100, @#157732
163642: INCB @#157737
163646: BNE 163674
163650: ADD #173001, @#157736
163656: ADD #000002, @#157744
163664: BLE 163674
163666: SUB #000012, @#157744
163674: MOV #001000, R2
163700: ADD R2, @#157734
163704: SUB R2, @#157740
163710: BHI 163714
163712: BR 163752
163714: JMP 163234
; Подпрограмма
163720: MOV #177640, R4 ; читаем состояние НГМД
163724: BITB #000200, (R4)
163730: BNE 163724
163732: MOVB R0, (R4)
163734: BITB #000001, (R4)
163740: BEQ 163734
163742: BITB #000001, (R4)
163746: BNE 163742
163750: RETURN
;
163752: BIC #000001, @#157764 ; убираем флаг C
163760: BR 163770
163762: BIS #000001, @#157764 ; ставим флаг C
163770: MOV (SP)+, R5
163772: MOV (SP)+, R4
163774: MOV (SP)+, R3
163776: MOV (SP)+, R2
164000: MOV (SP)+, R1
164002: MOV (SP)+, R0
164004: TST @#157720
164010: BPL 164022 ; бит 7 = 0 => переход
164012: BIS #040000, @#157720
164020: BR 164044
164022: BIC #040000, @#157720
164030: BIS #000017, @#157720
164036: MOVB @#157720, @#177600 ; Системный регистр A
164044: MTPS @#157764 ; восстанавливаем PS
164050: RETURN
164052: .WORD 000000 ; Сюда пытаемся записать см. 162704
;
; Подпрограмма: печать символа R0
164054: MFPS @#157764 ; Сохраняем PS
164060: MTPS #000340
164064: MOV R0, -(SP)
164066: MOV R1, -(SP)
164070: MOV R2, -(SP)
164072: MOV R3, -(SP)
164074: MOV R4, -(SP)
164076: MOV R5, -(SP)
164100: BIC #177400, R0 ; Оставляем младший байт
164104: CALL 165504
164110: BIS #000200, @#157700 ; вкл. ВОЗУ в осн. память
164116: MOV @#157700, @#177400 ; Дисп. памяти
164124: ADD #000740, R2 ; на 6 строк ниже
164130: TSTB @#157760
164134: BPL 164160
164136: ADD #000120, R2 ; след. строка
164142: BICB #000377, (R2)
164146: ADD #000120, R2 ; след. строка
164152: BICB #000377, (R2)
164156: BR 164174
164160: BIC #100000, (R2)
164164: ADD #000120, R2 ; след. строка
164170: BIC #100000, (R2)
164174: BIC #000200, @#157700 ; выкл. ВОЗУ из осн. памяти
164202: MOV @#157700, @#177400 ; Дисп. памяти
164210: MOV @#157760, R1
164214: BIC #177774, R1
164220: BEQ 164416
164222: CMP #000001, R1
164226: BNE 164250
164230: BICB #000001, @#157760
164236: MOV #164552, R4
164242: MOV #164572, R5
164246: BR 164464
164250: CMP #000002, R1
164254: BNE 164326
164256: SUB #000040, R0
164262: BMI 164316
164264: TST @#157762
164270: BNE 164302
164272: CMPB #000030, R0
164276: BGE 164312
164300: BR 164316
164302: CMPB #000027, R0
164306: BGE 164312
164310: BR 164316
164312: MOVB R0, @#157703
164316: BIS #000001, @#157760
164324: BR 164504
164326: CMP #000003, R1
164332: BNE 164406
164334: SUB #000040, R0
164340: BMI 164400
164342: TSTB @#157760
164346: BMI 164364
164350: CMPB #000047, R0
164354: BGE 164402
164356: MOV #000047, R0
164362: BR 164402
164364: CMPB #000117, R0
164370: BGE 164402
164372: MOV #000117, R0
164376: BR 164402
164400: CLR R0
164402: MOVB R0, @#157702
164406: BIC #000003, @#157760
164414: BR 164504
164416: CMPB R0, #000040
164422: BLO 164430
164424: JMP 164632
164430: TSTB @#157723
164434: BNE 164454
164436: CMPB #000016, R0
164442: BEQ 164452
164444: CMPB #000017, R0
164450: BNE 164454
164452: BR 164504
164454: MOV #164510, R4
164460: MOV #164524, R5
164464: CMPB R0, (R4)+
164466: BEQ 164500
164470: TSTB (R4)
164472: BEQ 164504
164474: TST (R5)+
164476: BR 164464
164500: CALL @000000(R5)
164504: JMP 165142
164510: .BYTE
164524: .BYTE
164632: BIS #000200, @#157700 ; вкл. ВОЗУ в основную память
164640: MOV @#157700, @#177400 ; Дисп. памяти
164646: TSTB @#157723
164652: BNE 164716
164654: CMPB #000377, R0
164660: BEQ 164712
164662: CMPB R0, #000200
164666: BLO 164722
164670: SUB #000300, R0
164674: BLO 164712
164676: ASL R0
164700: ASL R0
164702: ASL R0
164704: ADD #170736, R0 ; знакогенератор??
164710: BR 164770
164712: JMP 165142
164716: BIC #177600, R0
164722: SUB #000040, R0
164726: ASL R0 ;
164730: ASL R0 ;
164732: ASL R0 ; умножить на 8.
164734: BIT #000004, @#157760
164742: BEQ 164764
164744: CMP R0, #000400
164750: BLO 164764
164752: SUB #000400, R0
164756: ADD #170736, R0 ; знакогенератор??
164762: BR 164770
164764: ADD #167336, R0 ; знакогенератор??
164770: MOV @#157712, R4 ; берём адрес на экране
164774: MOV #000010, R2 ; 8. строк
165000: TSTB @#157760
165004: BPL 165020
165006: MOVB (R0)+, (R4) ; выводим байт на экран
165010: ADD #000120, R4 ; след. строка
165014: SOB R2, 165006 ; повторяем
165016: BR 165042
165020: MOVB (R0)+, R1 ; берём байт
165022: BIC #177400, R1 ; оставляем младший байт
165026: BIS @#157714, R1
165032: MOV R1, (R4) ; выводим на экран
165034: ADD #000120, R4 ; след. строка
165040: SOB R2, 165020 ; повторяем
165042: BIC #000200, @#157700 ; выкл. ВОЗУ из основной памяти
165050: MOV @#157700, @#177400 ; Дисп. памяти
165056: CALL 166066
165062: TST @#157702
165066: BNE 165142
165070: MOVB #000030, @#157703
165076: TST @#157762
165102: BEQ 165110
165104: DECB @#157703
165110: CMPB #000030, @#157703
165116: BEQ 165324
165120: TST @#157762
165124: BEQ 165136
165126: CMPB #000027, @#157703
165134: BEQ 165324
165136: CALL 166130
165142: CALL 165504
165146: ADD #000740, R2 ; плюс 6 строк
165152: BIS #000200, @#157700 ; вкл. ВОЗУ в основную память
165160: MOV @#157700, @#177400 ; Дисп. памяти
165166: TSTB @#157760
165172: BPL 165216
165174: ADD #000120, R2 ; след. строка
165200: BISB #000377, (R2)
165204: ADD #000120, R2 ; след. строка
165210: BISB #000377, (R2)
165214: BR 165232
165216: BIS #100000, (R2)
165222: ADD #000120, R2 ; след. строка
165226: BIS #100000, (R2)
165232: BIC #000200, @#157700 ; выкл. ВОЗУ из основной памяти
165240: MOV @#157700, @#177400 ; Дисп. памяти
165246: BITB #000004, @#157760
165254: BNE 165266
165256: BIS #000020, @#157720 ; Светодиод 1
165264: BR 165274
165266: BIC #000020, @#157720 ; Светодиод 1
165274: MOVB @#157720, @#177600 ; Системный регистр A
165302: MOV (SP)+, R5
165304: MOV (SP)+, R4
165306: MOV (SP)+, R3
165310: MOV (SP)+, R2
165312: MOV (SP)+, R1
165314: MOV (SP)+, R0
165316: MTPS @#157764 ; Восстанавливаем PS
165322: RETURN
;
165324: BIS #000200, @#157700
165332: MOV @#157700, @#177400
165340: MOV #040000, R4
165344: MOV #041200, R5
165350: MOV #001700, R3
165354: TST @#157762
165360: BEQ 165366
165362: SUB #000050, R3
165366: MOV (R5)+, (R4)+
165370: MOV (R5)+, (R4)+
165372: MOV (R5)+, (R4)+
165374: MOV (R5)+, (R4)+
165376: MOV (R5)+, (R4)+
165400: MOV (R5)+, (R4)+
165402: MOV (R5)+, (R4)+
165404: MOV (R5)+, (R4)+
165406: SOB R3, 165366
165410: MOV @#157714, R5
165414: MOV #000050, R3
165420: TSTB @#157760
165424: BPL 165442
165426: CLR R5
165430: TST @#157762
165434: BEQ 165442
165436: ADD #000050, R3
165442: MOV R5, (R4)+
165444: MOV R5, (R4)+
165446: MOV R5, (R4)+
165450: MOV R5, (R4)+
165452: MOV R5, (R4)+
165454: MOV R5, (R4)+
165456: MOV R5, (R4)+
165460: MOV R5, (R4)+
165462: SOB R3, 165442
165464: BIC #000200, @#157700
165472: MOV @#157700, @#177400
165500: JMP 165142
; Подпрограмма
165504: MOV @#157702, R2
165510: MOV R2, R3
165512: BIC #000377, R3
165516: ASL R2
165520: ASR R3
165522: TSTB @#157760
165526: BPL 165532
165530: RORB R2
165532: ADD R3, R2
165534: ADD #040000, R2 ; адрес начала экрана
165540: MOV R2, @#157712 ; сохраняем адрес на экране
165544: RETURN
; Подпрограмма
165546: MOV @#157712, R4 ; берём адрес на экране
165552: MOVB @#157702, R3
165556: MOV @#157714, R1
165562: TSTB @#157760
165566: BMI 165654
165570: MOV #000050, R0 ; ширина строки в словах (знакоместах)
165574: SUB R3, R0
165576: MOV R4, -(SP) ; сохраняем адрес на экране
165600: MOV #000010, R2 ; 8. строк
165604: BIS #000200, @#157700 ; вкл. ВОЗУ в основную память
165612: MOV @#157700, @#177400 ; Дисп. памяти
165620: MOV R1, (R4) ; < выводим на экран
165622: ADD #000120, R4 ; | след. строка
165626: SOB R2, 165620 ; повторяем
165630: BIC #000200, @#157700 ; выкл. ВОЗУ из основной памяти
165636: MOV @#157700, 177400 ; Дисп. памяти
165644: MOV (SP)+, R4 ; восстанавливаем адрес на экране
165646: TST (R4)+ ; на позицию вправо
165650: SOB R0, 165576 ; повторяем
165652: RETURN
165654: MOV #000120, R0
165660: SUB R3, R0
165662: MOV R4, -(SP)
165664: MOV #000010, R2 ; 8. строк
165670: BIS #000200, @#157700 ; вкл. ВОЗУ в основную память
165676: MOV @#157700, @#177400 ; Дисп. памяти
165704: MOVB R1, (R4)
165706: ADD #000120, R4
165712: SOB R2, 165704
165714: BIC #000200, @#157700 ; выкл. ВОЗУ из основной памяти
165722: MOV @#157700, @#177400 ; Дисп. памяти
165730: MOV (SP)+, R4
165732: INC R4 ; к следующей позиции
165734: SOB R0, 165662 ; продолжаем цикл
165736: RETURN
;
165740: CALL 165546
165744: MOV @#157714, R5
165750: ADD #001060, R4
165754: MOV R4, R3
165756: MOV #100000, R0
165762: SUB R3, R0
165764: ASR R0
165766: ASR R0
165770: ASR R0
165772: ASR R0
165774: TSTB @#157760
166000: BPL 166004
166002: CLR R5
166004: BIS #000200, @#157700
166012: MOV @#157700, @#177400 ; Дисп. памяти
166020: MOV R5, (R4)+
166022: MOV R5, (R4)+