User Tag List

Страница 58 из 112 ПерваяПервая ... 545556575859606162 ... ПоследняяПоследняя
Показано с 571 по 580 из 1115

Тема: Эмулятор УКНЦ - UKNCBTL

  1. #571

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Для реализации прерываний портов СА и С2 нужно модифицировать не только функцию void CFirstMemoryController::SetPortWord(WORD address, WORD word), но и void CFirstMemoryController::SetPortByte(WORD address, BYTE byte), которая в данный момент выглядит довольно бледно:

    Код:
    void CFirstMemoryController::SetPortByte(WORD address, BYTE byte)
    {
        WORD word = (address&1)?((WORD)byte) << 8:(WORD)byte;
     ....................
    }
    Тут все значительно проще - 1801ВП1-065 сигнал WTBT не обрабатывает, при байтовой записи в 1801ВМ2 неиспользуемый байт устанавливается нулями, потому и есть такая строчка: WORD word = (address&1)?((WORD)byte) << 8:(WORD)byte;, которая делает целое слово, присутствующее на линиях адреса-данных. Достаточно вызвать SetPortWord с этим словом.

  2. #571
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #572

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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);

  4. #573

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Как записываемый в регистр данных С2 байт попадает в переменную m_Port176576 ?
    http://zx-pk.ru/showpost.php?p=571646&postcount=568

    Меня смущает вот это m_Port176564 &= ~128; // Reset bit 7 (Ready)
    я думаю должно быть так m_Port176564 &= ~0200; // Reset bit 7 (Ready)

  5. #574

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У всех прерываний должны быть разные приоритеты IRQ ( для С2 - приемник 7, передатчик 8, для СА - приемник 9, передатчик 10 ), иначе прерывания могут теряться.

    ---------- Post added at 11:42 ---------- Previous post was at 11:40 ----------

    Цитата Сообщение от Vamos Посмотреть сообщение
    Меня смущает вот это
    128 == 0200 (проверил при помощи калькулятора).
    Но лучше, конечно, везде писать 0200 - тогда легче понять о чём речь.

  6. #575

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    128 == 0200 (проверил при помощи калькулятора).
    Я имел ввиду другое, операция & побитовая и при использовании 128 не сбросится ли бит 6 (0100).

  7. #576

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Я имел ввиду другое, операция & побитовая и при использовании 128 не сбросится ли бит 6 (0100).
    Т.к. и 128, и 0200, и 0x80 - это одно и то же число ( 10000000b ), то при одинаковом их использовании и результат будет одинаковым.

  8. #577

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Я имел ввиду другое, операция & побитовая и при использовании 128 не сбросится ли бит 6 (0100).
    Не не сбросит, перед этим делается инверсия операцией ~, поэтому из слова 128 получится слово 65407, оно же 177577, оно же 0xF7.

  9. #578

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    [/COLOR]128 == 0200 (проверил при помощи калькулятора).
    Но лучше, конечно, везде писать 0200 - тогда легче понять о чём речь.
    А чего, Си разве понимает восьмеричные числа?

  10. #579

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А чего, Си разве понимает восьмеричные числа?
    Titus, вы только проснулись? Для справки - язык Си изначально был сделан на PDP-11, поэтому так и похож на ассемблер PDP-11. Ну соответственно, т.к. на PDP-11 использовалась восьмеричная система, то использовалась она и в Си, достаточно число начать с нуля.

  11. #580

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Titus, вы только проснулись? Для справки - язык Си изначально был сделан на PDP-11, поэтому так и похож на ассемблер PDP-11. Ну соответственно, т.к. на PDP-11 использовалась восьмеричная система, то использовалась она и в Си, достаточно число начать с нуля.
    Я не проснулся, я просто не использую восьмеричную систему, и нигде, кроме PDP-систем ее не встречал) Она для меня чуждая) Близкая - десятичная и шестнадцатиричная. Поэтому все нюансы, связанные с ней мне не известны)
    Мало того, видел много исходников на Си, встречаются шестнадцатиричные числа 0x..., но чтобы восьмеричные встретить - никогда такого не было)

Страница 58 из 112 ПерваяПервая ... 545556575859606162 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Ответов: 247
    Последнее: 17.11.2024, 07:55
  3. Эмулятор УКНЦ на JavaScript
    от nzeemin в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 27.04.2021, 14:26
  4. УКНЦ и Gotec Flash Floppy эмулятор
    от Ynicky в разделе ДВК, УКНЦ
    Ответов: 10
    Последнее: 10.09.2019, 04:34
  5. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •