User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 44

Тема: Оконный интерфейс для БК0011

  1. #21

    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Я его куплю даже. Но пока я думаю о страничной адресации, как о страшном сне.
    Но все-таки БК0011М, за счет большего объема памяти (той же страничной) на порядок и софт позволила поднять по сравнению с БК0010.

    Цитата Сообщение от vinxru Посмотреть сообщение
    Желательно, что бы поддержка SMK512 была в эмуляторе.
    А в каком именно? Её конечно же нигде нет в эмуляторах.

  2. #22

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Woland Посмотреть сообщение
    А в каком именно?
    Мне без разницы. Сейчас я пользуюсь каким то BK Emulator by Yuriy Kalmykov, потому что он прописался на автозапуск rom-файлов. Но у меня есть подозрение, что программы работают в нем медленнее, чем на реале. В этом эмуляторе время выполнения всех команд одинаково и в общем, процессор выполняет 100.000 команд в секунду. И еще там клавиатура не совсем реально работает и ноутбук жжот колени, когда запущен этот эмулятор.

    Но только что посмотрел на эмулятор b2m. Попробую использовать его, надеюсь, что получится сделать автозапуск rom-ов для него. Я думаю, что когда потребуется использовать дополнительную память, b2m без проблем добавит её в свой эмулятор.

    P.S. А еще его эмулятор падает, если не выбирая машину запустить отладчик.

    ---------- Post added at 11:15 ---------- Previous post was at 11:03 ----------

    Кстати, сделал функции MemAlloc, MemFree. Пока в самом тормозном виде.

    MemAlloc просматривает все блоки памяти от начала до конца. И если находится свободный блок подходящего размера, то этот блок делится пополам. Если находится несколько подряд идущих свободных блоков, то они объединяются.

    В начале каждого блока памяти находится указатель на следующий блок. Односвязный список. А еще идентификатор задачи: 0-свободно, 1-15 система, 16-32767 задача, 32767-65535 DLL-файл. Причем номер является именем DLL-файла. Имена не используются для экономии ОЗУ.

    Функция MemFree просто помечает блок свободным [CLR -4(R0)]

    Попозже перепишу менеджер памяти. Он будет свободные блоки держать в виде двоичного дерева. И всегда находить минимально возможный блок (дефрагментация ОЗУ) за время log(n). Это работает быстрее, но расходует больше ОЗУ.

    Еще будет функция EMemAlloc выделяющая страничную память. Указатель на эту память будет 32-х битным (Смещение + Страница). Она в том числе может выделить память и из основного пространства, если страницы закончились.

    ---------- Post added at 11:28 ---------- Previous post was at 11:15 ----------

    У задач будет признак, разрешающий загружать их в страничную память. ОС будет устанавливать нужную страницу, при обращении к таким задачам.

    Я вот только не знаю, сколько окон будет у страничной-памяти (зависит от используемого контроллера). Если всего одно окно, то такие задачи не смогут нормально использовать страничную-память, так как не смогут переключать страницы.

    А в остальном работа со страницами будет полностью аналогична работе с сегментными регистрами x86 процессора. Только сегменты будут чуть меньше.
    Последний раз редактировалось vinxru; 14.03.2012 в 15:56.

  3. #23

    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Серьезно Вы за дело взялись...
    А насколько реализуемо предусмотреть, чтобы когда на БК0012 будет эта система запускаться, она нормально работала на полной скорости процессора (которая в 150-200 раз будет быстрее реального ВМ1)?

  4. #24

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не вижу проблем. Чем быстрее выполнится код, тем лучше.

    А для всякой анимации, используется процессорный таймер.

  5. #25

    Регистрация
    26.02.2010
    Адрес
    Запорожье
    Сообщений
    2,171
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    vinxru, как думаете переключать задачи, передавать между ними данные (вызов ф-ции DLL в т.ч.), думаете ли организовывать кольца защиты?

    Задаю глупые вопросы ибо с архитектурой БК знаком очень слабо.

    ---------- Post added at 13:10 ---------- Previous post was at 13:08 ----------

    как вообще на PDP организованно обработка ловушек и исключений?
    .

  6. #26

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Atari Посмотреть сообщение
    vinxru, как думаете переключать задачи, передавать между ними данные (вызов ф-ции DLL в т.ч.), думаете ли организовывать кольца защиты?
    Защиты не будет, любая программа может уронить систему. У БК0010 есть пультовый режим (типа режима отладки с подключением альтернативного ПЗУ, с возможностью пошаговой отладки), но он требует железной поддержки (доп платы) и пока я его не планирую использовать. Так же можно сделать полноценный пейджинг (блокирование чтения или записи блоков размером 64 байта) на внешнем контроллере памяти, но это то же паяльник.

    DLL

    DLL выполняется в контексте задачи. То есть все созданные окна и выделенная память будет принадлежать вызвавшему процессу. Завершается процесс, уничтожаются все созданные окна.

    DLL может обладать собственными данными, только если будет модифицировать свой сегмент данных.

    (Но не должна. И если будет использоваться пейджинг, то это вызовет ошибку.)

    Взаимодействие задач

    Задачи должны будут общаться только через функцию SendMessage. Она переключает страницы памяти и изменяет контекст задачи. То есть все созданные ресурсы будут принадлежать новой задаче.

    Если одна задача передает другой задаче блок памяти (например строку), то эта строка должна быть создана функцией GlobalMemAlloc. Что бы строка гарантированно была создана в общей памяти. А принимающая задача должна изменить владельца блока на себя.

    (Если будет использоваться пейджинг, то любое обращение к строке, до изменения владельца, вызовет исключение. В адресном пространстве будет дыра).

    Еще будут файловые трубы (CreatePipe). Одна задача пишет в виртуальный файл, другая читает.

    ---------- Post added at 14:43 ---------- Previous post was at 14:37 ----------

    Цитата Сообщение от Atari Посмотреть сообщение
    как вообще на PDP организованно обработка ловушек и исключений?
    Внешнем или встроенным в процессор MMU (менеджером памяти). Он обеспечивает что то похожее на защищенный режим 286/386 процессоров.
    В БК0010 этого нет.

    ---------- Post added at 15:15 ---------- Previous post was at 14:43 ----------

    Вообще разные бывают MMU, я видел такой:

    Адресное пространство 64Кб делится на 8 блоков по 8 килобайт.

    К каждому блоку можно подключить любую область физической памяти. Например 4 Мб с шагом 64 байта.

    (Аналог сегментных регистров, только тут их 8 и шаг 64 байта.)

    Плюс контроллируется, имеет ли право процесс обращаться к определенной области памяти. Попытался прочитать чужие данные, произошло исключение.

    (Аналог защищенного режима)
    Последний раз редактировалось vinxru; 14.03.2012 в 15:59.

  7. #27

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В БК есть страничная память? Как она организована? Для полноценной многозадачности надо как минимум два переключаемых окна, лучше 4 (несколько страниц ОС и переключаемые страницы кода задачи), ещё лучше 8 (как в UNIX для PDP-11).

  8. #28

    Регистрация
    26.02.2010
    Адрес
    Запорожье
    Сообщений
    2,171
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Задачи должны будут общаться только через функцию SendMessage. Она переключает страницы памяти и изменяет контекст задачи. То есть все созданные ресурсы будут принадлежать новой задаче.

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

    т.е. задача передаёт данные ядру с "номером" получателя ядро делает все необходимые проверки распоряжения, если надо перекладывает данные и переключает контекст.
    .

  9. #29

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В БК0010-01 нет страничной памяти.

    Сначала находится 32 Кб ОЗУ, из которых 16 Кб занимает видеопамять.
    Потом идет ПЗУ 24 Кб (Бейсик).
    Конец памяти свободен для внешних устройств. Там обычно ПЗУ дисковода.

    В БК0011 есть страничная память.

    Адресное пространство поделено на 4 окна по 16 Кб.

    В окне 0 всегда 0 страница ОЗУ.
    В окне 1 можно выбирать любую страницу ОЗУ (их 8)
    В окне 2 можно выбирать любую страницу ОЗУ или ПЗУ
    Окно 3 свободно для внешних устройств. Там обычно ПЗУ дисковода.

    Но к обоим компьютерам можно подключить внешнее ОЗУ с собственной страничной адресацией. У БК0010-01 обычно подключали 16-32 Кб вместо стандартного ПЗУ.

    ---------- Post added at 15:36 ---------- Previous post was at 15:32 ----------

    Цитата Сообщение от Atari Посмотреть сообщение
    т.е. задача передаёт данные ядру с "номером" получателя ядро делает все необходимые проверки распоряжения, если надо перекладывает данные и переключает контекст.
    Почти.

    1) Задача передаёт данные ядру с "номером" получателя.
    2) Ядро делает все необходимые проверки распоряжения, переключает контекст.
    3) Вторая задача дает команду ядру, что на хочет забрать данные. Ядро меняет владельца у блока памяти.

    Иначе, глючная Программа 1 может повесить на задачу 2 кучу ресурсов без её ведома.
    Последний раз редактировалось vinxru; 15.03.2012 в 21:36.

  10. #30

    Регистрация
    26.02.2010
    Адрес
    Запорожье
    Сообщений
    2,171
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Иначе, глючная Программа 1 может повесить на задачу 2 кучу ресурсов без её ведома.
    для этого существует системы симафоров и TTL ответа.
    т.е. DLL после инициализации становится в позу "готов!" и ждет.
    задача осуществляет вызов, ситема передает данные включает счетчик и блокирут в ход в DLL. Следующаа задача вынуждена в очереди ждать освобождения или система будет вынуждена перегрузить DLL по TTL как повисшую.
    такая реентерабильность потребует написания соответсвующего кода и передачу данных через стек.
    .

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ищу схему на интерфейс И12
    от AlecV в разделе ДВК, УКНЦ
    Ответов: 8
    Последнее: 23.07.2022, 07:46
  2. БК0011 разные
    от alexsan в разделе БК-0010/0011
    Ответов: 4
    Последнее: 26.10.2015, 22:40
  3. ST IDE-интерфейс
    от megabyte в разделе Atari
    Ответов: 5
    Последнее: 17.04.2011, 13:02
  4. Интерфейс Спарк
    от Alex III в разделе Внешние накопители
    Ответов: 0
    Последнее: 31.01.2010, 02:13
  5. Ищу БК0010...БК0011
    от GrifonLeo в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 19.05.2009, 07:22

Ваши права

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