Программа для сканирования адресов установленного оборудования
в PDP11, Эл.60, ДВК. Предоставлена и написана тов. Form
IOSCAN -- SCAN I/O PAGE MACRO V05.06 MONDAY 25-MAY-09 23:01 PAGE 1
1 .TITLE IOSCAN -- SCAN I/O PAGE
2 .IDENT /V01.00/
3
4 177564 TPS = 177564
5 000015 CR = 15
6 000012 LF = 12
7
8 000000 .ASECT
9 001000 .=1000
10
11 001000 012706 001000 IOSCAN: MOV #IOSCAN,SP ;УСТАНОВИТЬ СТЕК
12 001004 012737 001246 000100 MOV #RETURN,@#100 ;УСТАНОВИТЬ ОБРАБОТЧИК ПРЕРЫВАНИЯ
;ОТ ТАЙМЕРА
13 001012 000005 RESET ;СБРОСИТЬ ЖЕЛЕЗО
14 001014 012705 177564 MOV #TPS,R5 ;РЕГИСТР СОСТОЯНИЯ ЭКРАНА В R5
15 001020 012737 001240 000004 MOV #TRAP04,@#4 ;УСТАНОВИТЬ ОБРАБОТЧИК ПРЕРЫВАНИЯ
;ПО НЕСУЩЕСТВУЮЩЕМУ/НЕЧЕТНОМУ АДРЕСУ
16 001026 012737 000340 000006 MOV #340,@#6 ;...ПРИОРИТЕТ ПРОЦЕССОРА ПОСЛЕ ПРЕРЫВАНИЯ
17 001034 012704 160000 MOV #160000,R4 ;УСТАНОВИТЬ НАЧАЛО СТРАНИЦЫ ВВОДА-ВЫВОДА
18 001040 005001 CLR R1 ;ОЧИСТИТЬ АДРЕС НАЧАЛА БЛОКА
19 001042 005714 10$: TST @R4 ;ПРОВЕРИТЬ АДРЕС (КОМАНДА TST СБРАСЫВАЕТ
;БИТ C, ЕСЛИ АДРЕСА НЕТ - НАШ ОБРАБОТЧИК
;ПРЕРЫВАНИЯ ЕГО УСТАНОВИТ
20 001044 103415 BCS 40$ ;ЕСЛИ C - НЕТУ АДРЕСА
21 001046 010403 MOV R4,R3 ;АДРЕС ЕСТЬ - УСТАНОВИТЬ КАК КОНЕЧНЫЙ В БЛОКЕ
22 001050 005701 TST R1 ;А НАЧАЛО СОБСТВЕННО ЕСТЬ?
23 001052 001001 BNE 20$ ;ЕСТЬ, УХОДИМ
24 001054 010301 MOV R3,R1 ;НЕТУ - ДЕЛАЕМ РАВНЫМ КОНЦУ
25 001056 062704 000002 20$: ADD #2,R4 ;ПЕРЕХОДИМ НА СЛЕДУЮЩИЙ АДРЕС
26 001062 001367 BNE 10$ ;ЕСЛИ НЕ РАВНО 0 ЕЩЕ ЕСТЬ АДРЕСА
27 001064 005701 TST R1 ;СТРАНИЦА КОНЧИЛАСЬ. ЕСТЬ ЧТО ВЫВОДИТЬ?
28 001066 001402 BEQ 30$ ;НЕТ, УХОДИМ
29 001070 004767 000014 CALL PRANGE ;ЕСТЬ, ПЕЧАТАЕМ
30 001074 000000 30$: HALT ;ОСТАНАВЛИВАЕМСЯ
31 001076 000740 BR IOSCAN ;НА НАЧАЛО ЕСЛИ НАЖАТ P В ПУЛЬТЕ
32 001100 005701 40$: TST R1 ;БЛОК АДРЕСОВ КОНЧИЛСЯ. А ОН БЫЛ?
33 001102 001765 BEQ 20$ ;НЕТ - ИДЕМ ДАЛЬШЕ
34 001104 012746 001056 MOV #20$,-(SP) ;ДА - УСТАНАВЛИВАЕМ АДРЕС НА КОТОРЫЙ
;ПОДПРОГРАММА ВЕРНЕТСЯ ПО RETURN
35
36 001110 112700 000015 PRANGE: MOVB #CR,R0 ;ПЕЧАТАЕМ CR
37 001114 004767 000106 CALL OUTCHR
38 001120 112700 000012 MOVB #LF,R0 ;ПЕЧАТАЕМ LF
39 001124 004767 000076 CALL OUTCHR
40 001130 010146 MOV R1,-(SP) ;СОХРАНЯЕМ АДРЕС НАЧАЛА БЛОКА
41 001132 004767 000024 CALL OUTOCT ;И ПЕЧАТАЕМ ЕГО
42 001136 022603 CMP (SP)+,R3 ;ОН РАВЕН АДРЕСУ КОНЦА БЛОКА?
43 001140 001407 BEQ 10$ ;ДА, ХВАТИТ ПЕЧАТАТЬ
44 001142 112700 000055 MOVB #'-,R0 ;НЕТ, ПЕЧАТАЕМ - И АДРЕС КОНЦА
45 001146 004767 000054 CALL OUTCHR
46 001152 010301 MOV R3,R1
47 001154 004767 000002 CALL OUTOCT
48 001160 000207 10$: RETURN ;ВОЗВРАЩАЕМСЯ
49
50 001162 012702 000006 OUTOCT: MOV #6,R2 ;ЧИСЛО ЦИФР
51 001166 005000 CLR R0 ;ГОТОВИМ МЕСТО ПОД ЦИФРУ
52 001170 000405 BR 20$ ;ПРОПУСКАЕМ ДВА БИТА (ПЕРВАЯ ЦИФРА - ОДИН БИТ)
53 001172 005000 10$: CLR R0 ;ГОТОВИМ МЕСТО ПОД ЦИФРУ
54 001174 006101 ROL R1 ;ЗАДВИГАЕМ ЦИФРУ В R0
55 001176 006100 ROL R0
56 001200 006101 ROL R1
57 001202 006100 ROL R0
IOSCAN -- SCAN I/O PAGE MACRO V05.06 MONDAY 25-MAY-09 23:01 PAGE 1-1
58 001204 006101 20$: ROL R1
59 001206 006100 ROL R0
60 001210 062700 000060 ADD #'0,R0 ;ПЕРЕВОДИМ В ASCII
61 001214 004767 000006 CALL OUTCHR ;ПЕЧАТАЕМ
62 001220 005302 DEC R2 ;УМЕНЬШАЕМ СЧЕТЧИК И ПОВТОРЯЕМ
;ПОКА НЕ БУДЕТ 0
63 001222 001363 BNE 10$ ;...МОЖНО БЫЛО НАПИСАТЬ SOB R2,10$
64 001224 000207 RETURN ;ВОЗВРАЩАЕМСЯ
65
66 001226 105715 OUTCHR: TSTB @R5 ;ПРОВЕРЯЕМ БИТ ГОТОВНОСТИ ЭКРАНА
67 001230 100376 BPL OUTCHR ;ОН СБРОШЕН - ЖДЕМ ГОТОВНОСТИ
68 001232 110065 000002 MOVB R0,2(R5) ;ПЕЧАТАЕМ СИМВОЛ
69 001236 000207 RETURN ;ВОЗВРАЩАЕМСЯ
70
71 001240 052766 000001 000002 TRAP04: BIS #1,2(SP) ;УСТАНАВЛИВАЕМ БИТ С В СОХРАНЕННОМ
;СЛОВЕ СОСТОЯНИЯ ПРОЦЕССОРА
72 001246 000002 RETURN: RTI ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ
73
74 000001 .END
IOSCAN -- SCAN I/O PAGE MACRO V05.06 MONDAY 25-MAY-09 23:01 PAGE 1-2
SYMBOL TABLE
CR = 000015 LF = 000012 OUTOCT 001162 RETURN 001246 TRAP04 001240
IOSCAN 001000 OUTCHR 001226 PRANGE 001110 TPS = 177564
. ABS. 001250 000 (RW,I,GBL,ABS,OVR)
000000 001 (RW,I,LCL,REL,CON)
ERRORS DETECTED: 0
*** ASSEMBLER STATISTICS
WORK FILE READS: 0
WORK FILE WRITES: 0
SIZE OF WORK FILE: 33 WORDS ( 1 PAGES)
SIZE OF CORE POOL: 22016 WORDS ( 86 PAGES)
OPERATING SYSTEM: RT-11
ELAPSED TIME: 00:00:00.12
DK:IOSCAN,LP:IOSCAN=DK:IOSCAN
Текстовая версия: IO-Scan.zip