ZXNet эхоконференция «zxnet.soft»
тема: Контроллер прерываний
от: Valerij Kozhevnikoff
кому: Denis Dmitriev
дата: 15 Dec 1998
Здравствуй, Denis !
26 Nov 98 at 00:29:30, Denis Dmitriev => Valerij Kozhevnikoff:
VK>> Смук мной изучен досконально. Остались лишь мелкие
VK>> неясности.
VK>> Так что спрашивай.
DD> Помнится, там появился контроллер прерываний. Каким образом можно заставить
DD> его работать, если вообще можно?
Два порта в трдосе, #7EBE и #7FBE.
В доке на 8259 у мя их никак не называют, так что пусть будут "чётный" и
"нечётный".
===================== import file 8259regs.t ==================
3.3.Программирование ПКП
Hиже описывается управление ПКП в ПЭВМ на базе
микропроцессоров Intel 8086/8088/80286. Возможности, позволяющие
включить ПКП в ПЭВМ, использующие другие процессоры, опущены.
Для вывода информации в ПКП используются 2 порта
ввода-вывода. Порт с четным адресом (обычно это порт 20h) и порт
с нечетным адресом (обычно 21h). Через эти порты могут быть
переданы 4 слова инициализации (Initialization Control Word,
ICW1 - ICW4), задающие режим работы ПКП, и 3 операционных
управляющих слова (слова рабочих приказов, Operation Control
Words, OCW1 - OCW3). В порт с четным адресом выводятся ICW1,
OCW2 и OCW3. OCW2 отличается от OCW3 тем, что бит 3 в ocw2 равен
0, а в OCW3 равен 1. В то же время бит 4 в OCW2 и OCW3 равен 0,
а в ICW1 равен 1. Таким образом по значению, выводимому в порт с
четным адресом, однозначно определяется, в какой регистр (ICW1,
OCW2 или OCW3) заносятся данные.
Порт с нечетным адресом используется для вывода ICW2, ICW3,
ICW4 и OCW1. Hеоднозначности интерпретации данных в этом случае
так же не возникает, т. к. слова инициализации ICW2 - ICW4
должны непосредственно следовать за ICW1, выведенным в порт с
четным адресом и выводить в промежутке между ними OCW1 не
следует, онo не будет опознанo контроллером.
Выводом в порт с четным адресом управляющего слова
инициализации ICW1 начинается инициализация ПКП. В процессе
инициализации контроллер последовательно принимает управляющие
слова ICW1 - ICW4. При наличии в системе одного контроллера ICW3
не выводится. Hаличие ICW4 определяется содержанием ICW1. При
наличии каскада из нескольких ПКП каждый из них инициализируется
отдельно.
============================ import end =======================
Сигнал INT на процессор обычно заперт.
Чтобы отпереть - надо включить в #FFBA bit 3.
Это примерно как запирание NMI по А11 в кондратьевской схеме.
В нормальном состоянии #FFBA должен содержать #77.
Hа IRQ0 подан проинвертированный сигнал прерывания от часов, на IRQ1 - некая
нога от альтеры.
Ужель альтера генерит прерывания? И зачем?
Все остальные IRQ2-IRQ7 берутся с исашного слота.
Кста, инт подан к смаковской альтере через диод.
тикалка
Z80 ┌─── 50 Hz SMUC
────┐ │ ┌───
│ │ │
/INT ├────┴─────────|>|────────┤
│ │
Получается: возможен момент, когда тикалке и смаку одновре-
менно захочется прерывания. Значит кто-то из них будет послан
в садъ? А пока прога разбирается кого посылать, время-то идет?
Нехорошо.
Было бы правильнее затыкать родную тикалку, и заставлять ча-
сы тикать с частотой 50Hz. А контроллеру управляющее слово
сказать надо, чтоб знал кто сейчас главнее - часы или момед.
А вот тут, похоже процедура, которой теневик ищет сабж.
=== Cut ===
;============================================================;
LD BC,#FFBA ;interrupt controller detect
LD A,(LDFF0)
AND #F7
OUT (C),A
LD (LDFF0),A
LD BC,#7EBE
LD A,#F3
OUT (C),A
NOP
LD B,#7F
LD A,#C5
OUT (C),A
NOP
LD A,#1
OUT (C),A
NOP
NOP
IN A,(C)
OR A
JR Z,L15A1
CP #1
JR Z,L15A5
L159D LD A,#24
SCF
RET
L15A1 SET 4,(IY+#1B)
L15A5 LD B,#7E
LD A,#F2
OUT (C),A
NOP
LD B,#7F
LD A,#C5
OUT (C),A
NOP
LD A,#FF
OUT (C),A
NOP
NOP
IN A,(C)
CP #FF
JR NZ,L159D
SET 4,(IY+#1A)
XOR A
LD A,#25
RET
LDFF0 DEFB #77
=== Cut ===
============================ import end =======================
WBR, Jason.
|