User Tag List

Страница 40 из 40 ПерваяПервая ... 3637383940
Показано с 391 по 397 из 397

Тема: "Русич"

  1. #391

    Регистрация
    03.09.2021
    Адрес
    г. Москва
    Сообщений
    49
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    25 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Приветствую всех!
    Наконец-то мы в музее сделали все подключения, попробовали весь софт и написали статью про КУВТ Русич!
    https://retro-computer.ru/home.aspx#/item/RUSICH

    Собрали всю имеющуюся информацию, а также узнали немного его истории, за что спасибо aviator
    Просьба всем, кому интересно прочесть статью, у кого есть сами компьютеры с 1 ПЗУ и есть желание - также собрать преобразователь и загрузить ПО. Возможно, в будущем кто-то сможет серверную составляющую также добавить в эмулятор Русича (некий эмулятор XT будет совместно с Русичем) и будет возможность опробовать это у более широкого круга людей.
    Если есть какие-то замечания и правки - также пишите.

    На сайте приведена информация, некоторая история и файлы для работы с ПЭВМ - часть образа диска для загрузки с учительской машины, версии прошивок РМУ, что также считывали мы, документация-описание программ. Всё можно скачивать и использовать. Также есть простейшая схема преобразователя ИРПС-RS-232 для подключения Русича с IBM PC (чуть переработанная упрощенная схема из темы соединения ДВК с PC, с минимальным количеством деталей, если кто сделает другую - тоже хорошо, оригинальной сетевой инфраструктуры у нас в музее нет).

    К сожалению, версия ПО для учительского PC для Русича с 3 ПЗУ на данный момент, видимо, считается утраченной.

    За помощь с дизассемблированием утилиты RNET спасибо avivanov76

    Эти 9 пользователя(ей) поблагодарили mig_25 за это полезное сообщение:

    Alex_LG(21.05.2025), aviator(20.05.2025), b2m(19.05.2025), dk_spb(19.05.2025), drune(19.05.2025), ivagor(19.05.2025), Pyk(20.05.2025), TomaTLAB(20.05.2025), Willy(22.05.2025)

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

  3. #392

    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,436
    Спасибо Благодарностей отдано 
    163
    Спасибо Благодарностей получено 
    190
    Поблагодарили
    121 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Очень познавательно! Но схема компьютера не очень чёткая. Желательно добавить разрешения...

  4. #393

    Регистрация
    03.09.2021
    Адрес
    г. Москва
    Сообщений
    49
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    25 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    fifan, все изображения 4000х3000, а чтобы посмотреть фотографии целиком жмите квадратик снизу.



    Схемы компьютера у нас и нет. Если Вы про ссылку на измененную схему специалиста в разделе "предшествующего проекта", то в таком разрешении оно было получено.

  5. #394

    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,436
    Спасибо Благодарностей отдано 
    163
    Спасибо Благодарностей получено 
    190
    Поблагодарили
    121 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я додумался что фото можно увеличить. Я про схему в архиве - там даже номера выводов микросхем не разобрать.

  6. #395

    Регистрация
    19.01.2009
    Адрес
    Белгород
    Сообщений
    385
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fifan Посмотреть сообщение
    Я додумался что фото можно увеличить. Я про схему в архиве - там даже номера выводов микросхем не разобрать.
    То схема "Специалиста". Там их две: оригинальная и модифицированная, с цветом и дополнительным ВВ55. ОЗУ на РУ5 и РУ6. И монтажка модифицированного "Специалиста". Я это тут выкладывал, давно правда. И кассеты тоже.
    Это "телеграм" без спроса ужал. Я отправил нормальные, поправят.

  7. #396

    Регистрация
    03.09.2021
    Адрес
    г. Москва
    Сообщений
    49
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    25 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    fifan, вот, спасибо aviator

    https://retro-computer.ru/Lists/Item..._kuvt_1988.zip
    В тексте тоже обновил

    Этот пользователь поблагодарил mig_25 за это полезное сообщение:

    fifan(26.05.2025)

  8. #397

    Регистрация
    16.11.2015
    Адрес
    г. Москва
    Сообщений
    234
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Выкладываю файл IDA Pro с результатами дизассемблирования программы RNET.

    Заранее предупреждаю, что программа дизассемблирована только частично (меньше, чем наполовину).
    Для диагностики проблем с переходником и для общего понимания устройства сетевого протокола этого было вполне достаточно, а планов восстанавливать исходный текст полностью - не было.
    Если вдруг кто-то захочет продолжить дизассемблирование и разобраться с сетевым протоколом подробно, то можно взять этот файл как отправную точку.

    Чтобы ориентироваться было легче, дальше идет краткое описание программы.


    Программа RNET написана на Borland Turbo C++ 1.0 и представляет собой резидент MS-DOS с двумя оверлейными частями.
    Судя по всему, RNET.OV1 - это парсер конфигурационого файла, а RNET.OV2 - просмотрщик снимков экрана. Эти части не связаны напрямую с работой сети, поэтому не дизассемблировались вообще.

    При запуске выполняется функция, которую я назвал InitServer (возможно, это просто main, но я старался давать имена по смыслу). Она делает массу подготовительных действий, из которых главными являются выделение памяти для сетевого драйвера, проверка возможности установки резидента, разбор конфигурационного файла и инициализация сетевого протокола. Если у этой функции все получилось, то она устанавливает обработчики прерываний Int14_Handler (интерфейс COM-порта BIOS) и Int28_Handler (внутреннее прерывание MS DOS, которое она вызывает, когда не выполняет дисковый обмен и ждет ввода пользователя), после чего выполняет установку резидента (функция InstallResident).

    За инициализацию сетевого протокола отвечает функция InitNetworkProtocol. Она устанавливает обработчики прерываний COM-порта (COM_IntHandler) и таймера (Int8_Handler), программирует UART и таймер, и вызывает функцию AnnounceServer, про которую речь пойдет дальше.

    После того, как резидент установлен, вся работа происходит по прерываниям.

    Активация резидента (показ пользовательского интерфейса), происходит стандартно - из обработчиков Int28_Handler и Int8_Handler. В этом случае дополнительно устанавливаются обработчики Int24_Handler (обработчик критической ошибки) и BIOS_CtrlBreak (обработчики нажатия Ctrl-Break BIOS и DOS).

    Серверная часть вызывается из обработчиков COM_IntHandler и Int8_Handler.

    Найти все места установки обработчиков прерываний было непросто, поскольку разработчики сделали это прямой записью в память, а не штатными вызовами MS-DOS. Добавила сложностей и сама IDA Pro, которая любит путаться в сегментах и не всегда отличает код от данных. Так что и сами обработчики я нашел не сразу


    Работа серверной части начинается с вызова функции AnnounceServer. Эта функция формирует заголовок пакета из трех 16-разрядных слов (6 байтов) - токена клиентской машины, длины блока данных (в данном случае 0) и контрольной суммы. Токен клиентской машины - это единица, сдвинутая влево на число позиций, равных номеру ученической машины. Фактически - это сетевой адрес. После отправки пакета сервер ждет ответ клиента.

    То есть, обмен по сети всегда начинает сервер. Тут, наверное, место для шутки-перевертыша: "В Советской России сервера подключаются к клиентам". Но мне кажется, разработчики не могли здесь сделать иначе.
    Похоже, что в сети преобразователи ИРПС-RS232 были соединены по схеме "Монтажное И". В случае если клиенты начинали бы обмен первыми, то у них не было бы способа понять, что произошла коллизия и какой-то еще клиент ведет передачу одновременно.

    Ответ клиента представляет собой одно 16-разрядное слово, в котором может быть текст "Ок" или "Er". Если сервер получил ответ "Ок", то дальше выполняется собственно передача данных, иначе сервер переходит к следующей ученической машине.
    По сути, сервер поочередно перебирает все рабочие места и спрашивает у каждого: "Есть что передать?". Клиент должен ответить очень быстро, тайм-аут здесь - один тик таймера.

    Все сетевое взаимодействие выполняют 4 функции: SendComplete, RecvError, RecvByte и Timeout. Они вызываются из обработчиков прерываний.
    Функция SendComplete вызывается после завершения отправки пакета.
    Функция RecvByte вызывается после получения очередного байта от ученической машины.
    Функция RecvError вызывается в случае возникновения ошибки приема (например, не сошлась контрольная сумма пакета).
    Функция Timeout вызывается, если ответ от ученической машины за отведенное время не получен.
    Сложность тут в том, что в зависимости от состояния сетевого протокола могут использоваться разные версии этих функций.
    Например, фактически в коде есть 3 версии функции SendComplete (SendComplete_Func1, SendComplete_Func2, SendComplete_Func3), 4 версии функции RecvByte (RecvByte_Func1, RecvByte_Func2, RecvByte_Func3, RecvByte_Func4), 3 версии функции Timeout (Timeout_Func1, Timeout_Func2, Timeout_Func3). У функции RecvError версия всего одна - RecvError_Func.
    В связи с этим, вызовы функций выполняются через указатели SendCompleteFuncPtr, RecvByteFuncPtr, RecvErrorFuncPtr и TimeoutFuncPtr.

    Что еще интересно - тут фактически реализованы два уровня сетевых протоколов. Один условно можно назвать транспортным - здесь используется 6-байтовый заголовок пакета, про который я написал выше. Поверх этого уровня есть другой уровень, назовем его прикладным. То есть, внутри блока данных протокола транспортного уровня должен лежать другой заголовок и какая-то своя структура данных. Как этот уровень устроен - я выяснять не стал, но, судя по всему, на этом уровне прокидываются все запросы CP/M, а также отправка копий экрана.

    Процесс обмена с каждой ученической машиной отслеживается в массиве WorkstationRequestArray. Изменения в этот массив вносятся либо через функцию AddWorkstationRequest, которая вызывается из функций RecvByte_Func3, RecvByte_Func4, либо напрямую. Обработку массива запросов выполняет функция DoWorkstationRequests, которая вызывается из функции ActivateResident.

    Это все, что удалось накопать. Есть еще несколько вспомогательных функций, назначение которых можно понять по их названиям.

    RNET_EXE.zip

    Эти 4 пользователя(ей) поблагодарили avivanov76 за это полезное сообщение:

    aviator(25.05.2025), dk_spb(26.05.2025), mig_25(29.05.2025), xelby(28.05.2025)

Страница 40 из 40 ПерваяПервая ... 3637383940

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

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

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

Похожие темы

  1. Ответов: 67
    Последнее: 21.04.2021, 14:51
  2. Ответов: 95
    Последнее: 22.10.2019, 13:49
  3. Ответов: 21
    Последнее: 23.10.2009, 18:03
  4. Ответов: 18
    Последнее: 27.08.2008, 20:27
  5. Ответов: 6
    Последнее: 20.11.2007, 11:29

Ваши права

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