Важная информация

User Tag List

Страница 66 из 112 ПерваяПервая ... 626364656667686970 ... ПоследняяПоследняя
Показано с 651 по 660 из 1114

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

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Вот код, эмулирующий работу по кабелю с квитированием и полностью исключающий переполнения
    Дело в том что сеть УКНЦ работает без квитирования и у меня задача чуть больше чем соединить два эмулятора. И проблема на самом деле как я и писал ранее в том что код эмулятора в определенные моменты не успевает за отведенное системным фреймом время сбросить бит готовности, кое что из вашего кода я сейчас попробую, спасибо, есть подозрение что обработка прерываний тормозит.

  2. #652
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В любом случае - принятый байт может попасть в регистр данных только если бит готовности сброшен.

    Исходник, который я редактировал - содержал ошибку:

    Код:
    BOOL CFirstMemoryController::NetworkInput(BYTE inputByte)
    {
        m_Port176562 = (WORD)inputByte;
        if (m_Port176560 & 0200)  // Ready?
            m_Port176560 |= 010000;  // Set Overflow flag
        else
        {
            m_Port176560 |= 0200;  // Set Ready flag
            if (m_Port176560 & 0100)  // Interrupt?
                return TRUE;
        }
        return FALSE;
    }
    Должно быть так:

    Код:
    BOOL CFirstMemoryController::NetworkInput(BYTE inputByte)
    {
        if (m_Port176560 & 0200)  // Ready?
            m_Port176560 |= 010000;  // Set Overflow flag
        else
        {
            m_Port176562 = (WORD)inputByte;
            m_Port176560 |= 0200;  // Set Ready flag
            if (m_Port176560 & 0100)  // Interrupt?
                return TRUE;
        }
        return FALSE;
    }

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    В любом случае - принятый байт может попасть в регистр данных только если бит готовности сброшен.
    Так я уже пробовал, только другим способом в результате загрузка останавливалась почти сразу, причем не важно по прерываниям или с проверкой бита готовности работала программа. В случае с СА там происходит переполнение не случайным образом а стабильно в одном и том же месте т.е. вторичный загрузчик из сети уже работает по прерываниям, а вот когда загрузилась RT-11 похоже в момент смены адресов вектора прерывания этот лишний байт и пролезает



    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	20130204232107406.jpg 
Просмотров:	405 
Размер:	18.4 Кб 
ID:	39656   Нажмите на изображение для увеличения. 

Название:	20130204232138812.jpg 
Просмотров:	400 
Размер:	18.5 Кб 
ID:	39657  

  4. #654
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На скорости 57600 при 12 битах на посылку порт СА получает 4800 байтов в секунду, а значит новый байт приходит через каждые 208'000 наносекунд.

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

    По умолчанию

    Код:
    Каждый фрейм равен 1/25 секунды = 40 мс = 20000 тиков, 1 тик = 2 мкс.
    
    * 20000 тиков системного таймера - на каждый 1-й тик
    * 2 сигнала EVNT, в 0-й и 10000-й тик фрейма
    * 320000 тиков ЦП - 16 раз за один тик
    * 250000 тиков ПП - 12.5 раз за один тик
    * Отрисовка 288 видимых строк, по 32 тика на строку (только в первой половине фрейма)
    ** Первая невидимая строка (#0) начинает рисоваться на 96-ой тик
    ** Первая видимая строка (#18) начинает рисоваться на 672-й тик
    * 625 тиков FDD - каждый 32-й тик
    * 52 тиков обмена с COM-портом - каждый 416 тик
    * 8 тиков обмена с NET-портом - каждый 64 тик ???
    Если я все правильно понимаю, то в эмуляторе каждое телодвижение синхронизировано с системным фреймом, и какое бы кол-во байт в сек. не приходило оно будет считываться из буфера строго в определенный момент времени и на выполнение команд процессором отведено времени кратно этому считыванию и если за отведенный промежуток времени на считывание процессор не успевает прочесть приемник то возникает преполнение. Как то так.

  6. #656
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если 1 мс это 500 тиков, то в порт С2 поступает по одному байту каждые 573 тика ( а не каждые 416 тиков), а в порт СА по одному байту каждые 104 тика ( на не каждые 64 тика ).

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

    По умолчанию

    Patron, Вы абсолютно правы, просто расчеты не мои и делилось не на 12 бит а на 8, но это сути дела не меняет. Попробую еще раз объяснить, ситуация аналогична как с НХ сервером при работе со сжатием, только в данном случае на мой взгляд почему-то кодом эмулятора процессора долго обрабатывается прерывание или что-то еще. Т.е. на 104 тика отведенные для чтения из регистра процессору дается 104*16 тиков, а вот успеет ли выполнится тот или иной набор команд вопрос, видимо не всегда успевает.

  8. #658
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    процессору дается 104*16 тиков
    А тайминги конкретных команд процессора как учитываются ?
    Сколько команд обработчика прерывания порта СА успевает выполниться между байтами ?

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    А тайминги конкретных команд процессора как учитываются ?
    Ну насколько мне известно про тайминги то они условны насколько условны я не знаю.
    На второй вопрос у меня пока тоже нет ответа

  10. #660
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,996
    Спасибо Благодарностей отдано 
    1,061
    Спасибо Благодарностей получено 
    1,224
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    А тайминги конкретных команд процессора как учитываются ?
    Сколько команд обработчика прерывания порта СА успевает выполниться между байтами ?
    Точных таймингов команд до сих пор нет. Кроме того, время выполнения команд конечно зависит от времени отклика устройств на шине.
    Имеющиеся тайминги команд основаны на таймингах команд БК и несколько изменены, с тем чтобы время выполнения команд по тестам примерно совпадало с реалом.
    Конкретику можно посмотреть в emubase/Processor.cpp.
    Например, простейшие операции регистр-регистр занимают 11 тактов.

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

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

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

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

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1191
    Последнее: 15.02.2024, 13:32
  2. Ответов: 231
    Последнее: 21.03.2022, 07:54
  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

Ваши права

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