-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlbp800states.txt
165 lines (100 loc) · 12.8 KB
/
lbp800states.txt
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
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
hlcapt:InitPrinter 20 (0) ctrl 00 0 PortStatus 000F
pport:Parport_MonitorStatus 30 PortStatus 000F 0
pport:Parport_MonitorStatus 30 PortStatus 005F 29
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
hlcapt:InitPrinter 670 ctrl 0x04 PortStatus 003F
pport:Parport_MonitorStatus 20
pport:Parport_MonitorStatus 30 PortStatus 003F 0
pport:Parport_MonitorStatus 30 PortStatus 009F 36
pport:Parport_MonitorStatus 30 PortStatus 00DF 38
-----------------------------------------------------------------------------------------------
hlcapt:InitPrinter 20 ctrl 06 0 PortStatus 005F
pport:Parport_MonitorStatus 30 PortStatus 005F 0
pport:Parport_MonitorStatus 30 PortStatus 003F 49
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
hlcapt:InitPrinter 20 ctrl 08 0 PortStatus 003F
pport:Parport_MonitorStatus 30 PortStatus 003F 0
pport:Parport_MonitorStatus 30 PortStatus 005F 5
hlcapt:InitPrinter 20 (24) ctrl 08 0 PortStatus 003F
pport:Parport_MonitorStatus 30 PortStatus 003F 0
pport:Parport_MonitorStatus 30 PortStatus 007F 27
pport:Parport_MonitorStatus 30 PortStatus 005F 28
-----------------------------------------------------------------------------------------------
hlcapt:InitPrinter 10 PortControl 000C
pport:Parport_MonitorStatus 20
pport:Parport_MonitorStatus 30 PortStatus 003F 0
pport:Parport_MonitorStatus 30 PortStatus 005F 30
-----------------------------------------------------------------------------------------------
Status Register (SR) - регистр состояния; представляет собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7), адрес==8ЛЗЕ+7. Бит SR. 7 инвертируется - низкому уровню сигнала соответствует единичное значение бита в регистре, и наоборот.
Назначение бит регистра состояния (в скобках даны номера контактов разъема):
SR. 7 - Busy - инверсные отображения состояния линии Busy (11): при низком уровне на линии устанавливается единичное значения бита - разрешение на вывод очередного байта.
SR.6 - Ack (Acknowledge) - отображения состояния линии Ack# (10).
SR.5 - РЕ (Paper End) - отображения состояния линии Paper End (12). Единичное значение соответствует высокому уровню линии - сигналу о конце бумаги в принтере.
SR.4 - Select - отображения состояния линии Select (13). Единичное значение соответствует высокому уровню линии - сигналу о включении принтера.
SR.3 - Error - отображения состояния линии Error (15). Нулевое значение соответствует низкому уровню линии - сигналу о любой ошибке принтера.
SR.2 - PIRQ - флаг прерывания по сигналу Ackft (только для порта PS/2). Бит обнуляется, если сигнал Ack# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.
SR[1:O] - зарезервированы.
Control Register (CR) - регистр управления, wpec^BASE+2. Как и регистр данных, этот 4-битный порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип "открытый коллектор". Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты О, 1, 3 инвертируются.
Назначение бит регистра управления:
CR[7:6] - зарезервированы.
CR.5 - Direction - бит управления направлением передачи (только для портов PS/2). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.
CR.4 - AcklntEn (Ack Interrupt Enable) - единичное значение разрешает прерывание по спаду сигнала на линии Ack# - сигнал запроса следующего байта.
CR.3 - Select In - единичное значение бита соответствует низкому уровню на выходе Select ln# (17) - сигналу, разрешающему работу принтера по интерфейсу Centronics.
CR.2 - Init - нулевое значение бита соответствует низкому уровню на выходе - сигналу аппаратного сброса принтера.
CR. 1 - Auto LF - единичное значение бита соответствует низкому уровню на выходе Auto LF# (14) - сигналу на автоматический перевод строки (LF - Line Feed) по при ему байта возврата каретки (CR). Иногда сигнал и бит называют AutoFD или AutoFDXT.
CR.O - Strobe - единичное значение бита соответствует низкому уровню на выходе Strobeft (1) - сигналу стробирования выходных данных.
Запрос аппаратного прерывания (обьлно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#) при установке CR.4=i. Воизбежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.
Процедура вывода байта по интерфейсу Centronics включает следующие шаги (в скобках приведено требуемое количество шинных операций процессора):
- Вывод байта в регистр данных (1 цикл IOWR#).
- Ввод из регистра состояния и проверка готовности устройства (бит SR. 7 - сигнал Busy). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#).
По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2 цикла IOWR#). Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что добавляет еще один цикл IORD#. Видно, что для вывода одного байта требуется 4-5 операций ввода/вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт - невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100-150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерном принтере. Другой недостаток - функциональный - сложность использования в качестве порта ввода.
---------------------------------------------------------------------
hlcapt:InitPrinter 26 PortStatus 00FF // work 0
hlcapt:InitPrinter 26 PortStatus 005F
hlcapt:InitPrinter 26 PortStatus 005F // work
hlcapt:InitPrinter 26 PortStatus 000F // done
hlcapt:InitPrinter 26 PortStatus 000F
---------------------------------------------------------------------
RETBUF = [a0, a0, 16, 00, 12, 0c, 00, 00, 80, 00, 40, 00, 01, 00, 00, 00, 00, 00, 00, 00] printer error. Paper Jumm?
RETBUF = [a1, a0, 16, 00, 00, 10, c0, 00, 00, 00, b0, 00, b3, 00, 7d, 00, fd, 00, 00, 00] before printing paper OK!
RETBUF = [a0, a0, 16, 00, 78, 0e, 00, 00, 80, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] before printing paper OK!
RETBUF = [a0, a0, 16, 00, 7a, 0e, 00, 00, 00, 00, 00, 02, 00, 00, 00, 00, 00, 00, 00, 00] no paper
RETBUF = [a0, a0, 16, 00, 12, 0e, 00, 00, 00, 00, 00, 02, 01, 00, 00, 00, 00, 00, 01, 00] no paper
RETBUF = [a0, a0, 16, 00, 10, 0e, 00, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 01, 00] paper OK!
RETBUF = [a0, a0, 16, 00, 00, 0e, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 01, 00] start printing
RETBUF = [a0, a0, 16, 00, 00, 0e, 04, 00, 80, 00, 00, 00, 01, 00, 01, 00, 00, 00, 01, 00] printing
RETBUF = [a0, a0, 16, 00, 00, 0e, 04, 00, 00, 00, 00, 00, 01, 00, 01, 00, 00, 00, 01, 00] printed
RETBUF = [a1, a0, 16, 00, 00, 10, 80, 00, 00, 00, b0, 00, b3, 00, 7d, 00, 00, 00, 00, 00] before printing No paper
RETBUF = [a1, a0, 16, 00, 00, 10, e0, 00, 00, 02, b0, 09, b3, 0d, 7d, 00, fd, 00, 00, 00] prev page is out. paper ok!
while printing
RETBUF = [a0, e0, 06, 00, 00, 0c, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] get paper
RETBUF = [a0, e0, 06, 00, 00, 0d, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] printing in progress
RETBUF = [a0, e0, 06, 00, 00, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] page printed. Wait for paper info
RETBUF = [a0, e0, 06, 00, 12, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] page printed. No paper
RETBUF = [a0, e0, 06, 00, 10, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] page printed. Paper Ok!
RETBUF = [a1, a0, 16, 00, 00, 10, e0, 00, 00, 02, b0, 09, b3, 0d, 7d, 00, fd, 00, 00, 00]
RETBUF = [a1, a0, 16, 00, 00, 10, e0, 00, 00, 02, b0, 09, b3, 0d, 7d, 00, fd, 00, 00, 00]
RETBUF = [a1, a0, 16, 00, 00, 10, 80, 00, 00, 00, b0, 00, b3, 00, 7d, 00, 00, 00, 00, 00]
RETBUF = [a0, a0, 16, 00, 00, 0c, 00, 00, 80, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00] start printing
RETBUF = [a0, a0, 16, 00, 00, 0c, 04, 00, 80, 00, 00, 00, 01, 00, 01, 00, 00, 00, 00, 00] printing
RETBUF = [a0, a0, 16, 00, 00, 0e, 84, 00, 00, 00, 00, 00, 01, 00, 01, 00, 01, 00, 00, 00] printed
RETBUF = [a0, a0, 16, 00, 00, 0e, 04, 00, 00, 00, 00, 00, 01, 00, 01, 00, 01, 00, 01, 00] paper out
RETBUF = [a0, e0, 06, 00, 00, 0c, 04, 00, 80, 00, 00, 00, 01, 00, 00] print starting
--
RETBUF = [a0, e0, 06, 00, 00, 0d, 04, 00, 80, 00, 00, 00, 01, 00, 00] printing page
--
RETBUF = [a0, e0, 06, 00, 00, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00] page printed
--
RETBUF = [a0, e0, 06, 00, 12, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00] no paper
--
RETBUF = [a1, a0, 16, 00, 00, 10, 80, 00, 00, 00, b0, 00, b3, 00, 7d] no paper before printing
--
RETBUF = [a1, a0, 16, 00, 00, 10, c0, 00, 00, 00, b0, 00, b3, 00, 7d] paper ok before printing
--
RETBUF = [a0, e0, 06, 00, 10, 0f, 04, 00, 80, 00, 00, 00, 01, 00, 00] paper Ok!
--
----------------------------------------------------------------------------