-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathk6init
More file actions
executable file
·102 lines (89 loc) · 2.97 KB
/
k6init
File metadata and controls
executable file
·102 lines (89 loc) · 2.97 KB
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
//
// Простой драйвер 3-го канала мультиплексора К6 (без прерываний)
//
// Распределение регистров счетчика-таймера 8253
BIN = 0 /16-разрядный двоичный счетчик
BCD = 1 /4-декадный BCD счетчик
MEANDR = 06 /Режим генератора
LSB = 020 /Загрузить только младший байт
MSB = 040 /Загрузить только старший байт
ML2 = 060 /Загрузка сначала младшего, потом старшего байта
CNTSEL = 0100 /Выборка счетчика = N*CNTSEL
CNTBASE = 176060
OURCNT = 2 /Счетчик #2 -> 3-й канал
// Биты регисторв контроллера INTEL-8251 (К580ВВ51)
/ КОМАНДА
SYNENB=200 /разрешение поиска SYNC-ов
INTRST=100 /внутренний сброс
REQTRX=040 /запрос передачи в модем (цепь 105)
ERRRST=020 /сброс сигналов ошибки
SNDBRK=010 /послать "разрыв линии"
ENBRCX=004 /разрешение приема контроллером
REQRCX=002 /запрос поиска в модем (цепь 108)
ENBTRX=001 /разрешение передачи контроллером
/ ПРОГРАММА
STOP1=100; STOP2=200 / 1/2 СТОПОВЫХ БИТА
EVEN=040; ODD=000 / режим контроля по четности
YESPAR=020; NOPAR=000 / разрешение контроля по четности
BITS7=010; BITS8=014 / 7/8 БИТ В СИМВОЛЕ
CLCK16=002; CLCK64=003 / деление тактовой частоты на 16/64
/ СТАТУС
MDMRDY=200 /модем готов (ЦЕПЬ 107)
SYNDET=100 /есть SYNC!
NOSTOP=040 /не найден стоповый бит
OVFRCX=020 /переполнение приемного буфера
EPAR =010 /ошибка четности
TRBUSY=004 /идет передача
YESRCX=002 /принят символ
TRXRDY=001 /передатчик готов
ARTBASE = 176010
.text
.globl k6init
k6init:
mov r0,-(sp)
mov r5,-(sp)
/ На всякий случай затыкаем маски прерываний
mov $377,*$176044
mov $377,*$176054
/ Программируем счетчик
mov $CNTBASE,r5
/режим: меандр, 2-х байтная загрузка
mov $CNTSEL*OURCNT+ML2+MEANDR+BIN,6(r5)
add $OURCNT*2,r5
mov $12,*r5 /младший байт
mov $0,*r5 /старший байт
/ Программируем USART
mov $ARTBASE+2,r5
clr *r5 /пустая команда или грязь в программе
clr *r5 /теперь-то уж точно пустая команда
mov $INTRST,*r5 /Внутренний сброс
mov $2000,r0 /задержка для установления сброса
1:
nop ; nop
dec r0 ; bpl 1b
mov $BITS8+STOP1+CLCK16,*r5 /8n1, 1:16
/разрешаем прием и передачу, ставим DTR и RTS
mov $REQTRX+ENBTRX+REQRCX+ENBRCX,*r5
mov (sp)+,r5
mov (sp)+,r0
rts pc
/ r0 = 0: не готов, r0 <> 0: готов к передаче
.globl k6otst
k6otst:
mov *$ARTBASE+2,r0
bic $177777-TRXRDY,r0
rts pc
.globl k6itst
k6itst:
bit $YESRCX,*$ARTBASE+2
bne i_1
mov $400,r0
rts pc
i_1:
mov *$ARTBASE,r0
bic $177400,r0
rts pc
.globl k6out
k6out:
mov r0,*$ARTBASE
rts pc