
Сообщение от
Alex_K
неиспользуемый байт устанавливается нулями
Тогда нужно просто добавить туда обработку прерываний.
...
Исправленный исходник требует дальнейших улучшений:
1. При установке разрешения прерывания в готовом регистре приёмника - прерывание возникает так же, как в передатчике, а регистры приёмников почему-то остались неисправленными:
Код:
void CFirstMemoryController::SetPortWord(WORD address, WORD word)
{
switch (address) {
case 0176560: //network
case 0176561: // СА: Регистр состояния приемника // Bits 2,6 only
m_Port176560 = (m_Port176560 & ~0104) | (word & 0104);
break;
case 0176570: // Стык С2: Регистр состояния приемника
case 0176571: // Bit 6 only
m_Port176570 = (m_Port176570 & ~0100) | (word & 0100);
break;
}
}
2. Приоритеты IRQ портов СА и С2 в файле Board.cpp остались неправильными:
Код:
m_pCPU->InterruptVIRQ(3, 0370);
m_pCPU->InterruptVIRQ(3, 0374);
m_pCPU->InterruptVIRQ(3, 0360);
m_pCPU->InterruptVIRQ(3, 0364);
---------- Post added at 11:31 ---------- Previous post was at 11:22 ----------
Запись байта в регистр данных передатчиков СА и С2 обрабатывается так:
Код:
void CFirstMemoryController::SetPortByte(WORD address, BYTE byte)
{
WORD word = (address&1)?((WORD)byte) << 8:(WORD)byte;
switch (address) {
case 0176566: // СА: Регистр данных источника
case 0176567: // нижние 8 бит доступны по записи
m_Port176566 = word & 0xff;
m_Port176564 &= ~128; // Reset bit 7 (Ready)
break;
case 0176576: // Стык С2: Регистр данных источника
case 0176577:
return ;
}
}
Почему такая разница ?
Как записываемый в регистр данных С2 байт попадает в переменную m_Port176576 ?
Правильно ли, что при записи байта в регистр данных передатчика С2 - бит готовности в слове состояния не сбрасывается ?
---------- Post added at 11:38 ---------- Previous post was at 11:31 ----------
Ещё ошибка:
Код:
m_pProcessor->InterruptVIRQ(8, 0364);
Должно быть:
Код:
m_pProcessor->InterruptVIRQ(10, 0364);