User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 494

Тема: Вектор-06Ц: Операционные системы

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    1,034
    Спасибо Благодарностей отдано 
    467
    Спасибо Благодарностей получено 
    194
    Поблагодарили
    125 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Альтернативный патч mdos31h без мусорения на экране (без rst), на первый взгляд работает.
    Патч работает, в целом, если учитывать то, что нажимать "ввод+блк" если и нужно будет - то совсем не часто - то это 100% работает.
    Эксперимента ради я понажимал "ввод+блк" с пристрастием, и в эмуляторе и на реале, и это дало разные результаты. В эмуляторе мусор на экране я так и не увидел, полосок не было. Изредка мигала "карта памяти" на экране, зеленая на черном фоне, при зеленом цвете шрифта, белая - при белом... примерно раз в двадцать нажатий, но на долю секунды. А вот на реальном векторе "полоски" все же иногда вылезали на экран, так же где то раз в двадцать - тридцать нажатий, так же прокручивались, и исчезали в верху экрана. Причем, на этот раз это были не точки а именно полоски, одна максимум две, в одну строку друг от друга. И так же артифакт "карта памяти" иногда на экране мелькал на доли секунды. Все это крайне не существенно, и в целом не требует внимания, потому как такие действия с системой проводятся достаточно редко, и то в виде однократного нажатия "ввод+блк"...

    Благодарю !!!

    - - - Добавлено - - -

    Цитата Сообщение от Improver Посмотреть сообщение
    Оригинально, но можно ещё немного улучшить, например так:
    Код:
    0000: LXI H, 0B603h
    0003: LXI B, 0C300h
    0006: NOP
    0007: ORA M
    0008: MVI A, 023h
    000A: OUT 010h
    000C: PCHL
    Доброго времени ! Спасибо за патч!

    На сколько я понимаю, это первые строки кода оси ? То есть они должны быть такими 21 03 B6 01 00 C3 00 B6 3E 23 D3 10 E9 ? Я не достаточно еще в коде ориентируюсь, вставил приведенный вами код с адреса 00H и получил в целом не совсем работающюю систему. Загрузка ее из ком. строки системы показывает сразу приглашение системы "A>" и в целом все работает, заголовка в левом верхнем углу "микроДОС 3.1 Р ...." нету, и точки иногда таки выскакивают. А вот записав систему в загрузочную область загрузку не получил... Наверняка я что то не понял, куда нужно этот код встраивать ? Судя по адресам - 000H - 000С... или я ошибаюсь ?

    - - - Добавлено - - -

    У меня есть вопрос такого содержания. Я делал в своей программе выход в МДОС, алгоритм такой, выключаю КД, для освобождения экранной области копирую все с адреса E000H до FFFFH на адресс 5000H - 7FFFH (адресс установил опытно-наблюдательным путем), счетчик стека ставлю на 4FFFH, копирую код из адресов 0001H, 0002H, 0039H, 0040H в переменные и заменяю адресами старта приложения и обработчика прерывания, и потом при выходе все это возвращаю на место, включаю КД и делаю CALL 0005H с 00H в регистре С. Вчера доработал программу, для работы в РДС - она читает адресс системы из 0006Н, 0007H и дальше считает по этим цифрам сколько и куда копировать, и в соответствии с этим же ставит адресс указателя стека. В итоге - в РДС все отлично, огромное количество свободной памяти, а в других системах обратная реакция, для приложения остается совсем не много. В итоге, написал, чтобы если в 0006Н, 0007Н цифра меньше E000H то как предел принимается E000H. Потому что после отключения КД - c адреса, лежащего в 0006H, 0007H - нули и изредка какой то мусор, типа куски символов из консоли, которые уже были на экране, до адреса E000H, и только с этого адреса находится то, что при утере не дает вернуться систему. Пока во всех системах адресс E000H одинаково актуален, кроме РДС, там гораздо меньше, тем не менее очень интересно, есть ли в микродосе и CP/M универсальное место, где можно получить адресс того куска, который нужно скопировать из ОЗУ для того чтобы освободить экранную область, а потом восстановить работоспособность системы ? Ну или, может есть какие то альтернативные алгоритмы выхода в систему для приложений ?
    Последний раз редактировалось electroscat; 27.03.2020 в 12:02.

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

  3. #2

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    На сколько я понимаю, это первые строки кода оси ?
    Это строки, которые должны получится в памяти Вектора после старта МДОС по адресам 0000h и далее. Немного поясню, что это и как работает:
    Код:
    21 03 B6 01 00 C3 00 B6 3E 23 D3 10 E9
    ^^ -- стандартно тут JMP, в первом патче менялось на RST 6, а в этом варианте меняем на LXI
       ^^^^^ -- это адрес перехода на МДОС, используется программами
             ^^ -- тут свободный байт, меняем его на LXI, чтобы отключить JMP в адресе 00005h
                ^^ -- а вот сюда МДОС пишет номер текущего диска, менять этот байт нельзя
                   ^^^^^^^^ -- на самом деле тут JMP 0B600h, который вызывается по CALL 5
    И далее идут команды на включение КД и переход в МДОС.
    Это всего двумя командами отличается от того, что сделал ivagor в своём патче и принципиальных отличий в работе не имеет, но наложить это на файл mdos31h.com просто так не получится, надо править исходники так, чтобы при старте МДОС в память заносились эти значения.

    - - - Добавлено - - -

    Цитата Сообщение от electroscat Посмотреть сообщение
    Я делал в своей программе выход в МДОС ...
    Что-то как-то всё сложно... Для выхода в МДОС достаточно сделать JMP (или RET) на нулевой адрес. Ну и не трогать в программе память от 0000h до 0100h, а также выше адреса, записанного в ячейках 0001-0002, считается, что это нижняя граница МДОС.

  4. #3

    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    1,034
    Спасибо Благодарностей отдано 
    467
    Спасибо Благодарностей получено 
    194
    Поблагодарили
    125 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Что-то как-то всё сложно... Для выхода в МДОС достаточно сделать JMP (или RET) на нулевой адрес. Ну и не трогать в программе память от 0000h до 0100h, а также выше адреса, записанного в ячейках 0001-0002, считается, что это нижняя граница МДОС.
    Программа работает со всеми четырьмя плоскостями, то есть с 8000 до FFFFH все стирается и меняется. Хотелось бы еще добавить, что программе нужен максимально прямой доступ к ОЗУ, чтобы не тормозить, по этому отключается КД чтобы избежать переадресации части озу на КД.
    Так же меняются адреса в 002H, 003H и 039H, 040H чтобы при нажатии "сбр+блк" и наличии прерывания управление передавалось функциям программы. Изначально я пробовал никуда ничего не копирывать (имею в виду с E000H до FFFFH), но система после такого вмешательства не работает.

    - - - Добавлено - - -

    Цитата Сообщение от Improver Посмотреть сообщение
    Это строки, которые должны получится в памяти Вектора после старта МДОС по адресам 0000h и далее. Немного поясню, что это и как работает:
    Код:
    21 03 B6 01 00 C3 00 B6 3E 23 D3 10 E9
    ^^ -- стандартно тут JMP, в первом патче менялось на RST 6, а в этом варианте меняем на LXI
       ^^^^^ -- это адрес перехода на МДОС, используется программами
             ^^ -- тут свободный байт, меняем его на LXI, чтобы отключить JMP в адресе 00005h
                ^^ -- а вот сюда МДОС пишет номер текущего диска, менять этот байт нельзя
                   ^^^^^^^^ -- на самом деле тут JMP 0B600h, который вызывается по CALL 5
    И далее идут команды на включение КД и переход в МДОС.
    Это всего двумя командами отличается от того, что сделал ivagor в своём патче и принципиальных отличий в работе не имеет, но наложить это на файл mdos31h.com просто так не получится, надо править исходники так, чтобы при старте МДОС в память заносились эти значения.
    С этим вообще ничего не понятно пока, простите мне мою глупость, но вы ведь написали код,

    Цитата Сообщение от Improver Посмотреть сообщение
    Код:
    0000: LXI H, 0B603h
    0003: LXI B, 0C300h
    0006: NOP
    0007: ORA M
    0008: MVI A, 023h
    000A: OUT 010h
    000C: PCH
    Вот этот код как раз и есть 21 03 B6 01 00 C3 00 B6 3E 23 D3 10 E9 ...

    Прошу прощения, не могли бы вы пояснить этот момент ?!?
    Последний раз редактировалось electroscat; 27.03.2020 в 12:31.

  5. #4

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    electroscat, Improver написал то, что должно быть в работающем досе, чтобы так получилось надо поменять несколько байт в разных местах инициализатора mdos31hp2

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

    electroscat(27.03.2020)

  6. #5

    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    1,034
    Спасибо Благодарностей отдано 
    467
    Спасибо Благодарностей получено 
    194
    Поблагодарили
    125 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    electroscat, Improver написал то, что должно быть в работающем досе, чтобы так получилось надо поменять несколько байт в разных местах инициализатора mdos31hp2
    А чтобы их найти, нужно дизасемблировать код и понимать, как он работает, что вообще такое инициализатор, и т.д. правильно я понимаю ? Есть куда расти в общем

  7. #6

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет борьбы с иногда мелькающим при рестарте зеленым бордюром. Это явно связано с попаданием момента рестарта на программирование палитры. В патч можно добавить зануление бордюра. В более новых досах большинства этих проблем нет, там и палитру постоянно не долбят, и стек за пределами экранной области и область переходов на подпрограммы доса.
    electroscat, если разрабатывается новая программа, требующая доступа ко всем экранным плоскостям или просто ко всей основной памяти, то возможно есть смысл ориентироваться на РДС, там же есть для этого специальный режим.

  8. #7

    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    1,034
    Спасибо Благодарностей отдано 
    467
    Спасибо Благодарностей получено 
    194
    Поблагодарили
    125 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Насчет борьбы с иногда мелькающим при рестарте зеленым бордюром. Это явно связано с попаданием момента рестарта на программирование палитры. В патч можно добавить зануление бордюра. В более новых досах большинства этих проблем нет, там и палитру постоянно не долбят, и стек за пределами экранной области и область переходов на подпрограммы доса.
    Да это на самом деле не имеет значения, я же писал, не в упрек, так, ради чистоты эксперимента. Даже первый патч - уже очень круто. Все работает, и если учитывать, что важен просто перезапуск системы, то результат 100% удовлетворителен, а полоски и зеленый бордюр - не значительные дополнения.

    Цитата Сообщение от ivagor Посмотреть сообщение
    electroscat, если разрабатывается новая программа, требующая доступа ко всем экранным плоскостям или просто ко всей основной памяти, то возможно есть смысл ориентироваться на РДС, там же есть для этого специальный режим.
    В целом, да, у меня была такая идея, но хотелось бы какой то универсальности, либо систему которая впитает в себя все самое лучшее из всех остальных, либо код, работающий на всех системах одинаково. Пока хорошо получилось второе.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    И вспомнил, вроде в каком-то номере байта был пример освобождения памяти от (более-менее классического, не РДС) доса с последующим восстановлением.
    Поищу, спасибо, может что то дополню еще !

  9. #8

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    Эксперимента ради я понажимал "ввод+блк" с пристрастием, и в эмуляторе и на реале, и это дало разные результаты. В эмуляторе мусор на экране я так и не увидел, полосок не было. Изредка мигала "карта памяти" на экране, зеленая на черном фоне, при зеленом цвете шрифта, белая - при белом... примерно раз в двадцать нажатий, но на долю секунды. А вот на реальном векторе "полоски" все же иногда вылезали на экран, так же где то раз в двадцать - тридцать нажатий, так же прокручивались, и исчезали в верху экрана. Причем, на этот раз это были не точки а именно полоски, одна максимум две, в одну строку друг от друга. И так же артифакт "карта памяти" иногда на экране мелькал на доли секунды.
    И при оригинальном патче (с rst) и при модифицированном видел такую штуку - иногда мигал зеленым бордюр, насчет "карты памяти" не уверен, может это были видеоэффекты залезающие не только на бордюр, но и в активную область. Вероятность таких видеоэффектов вроде была больше при скролле экрана, т.е. при многократном рестарте когда курсор уже внизу и бывает скролл. Детально не разбирался, но предполагаю, что это случается, если рестартовать во время прерывания, поправить это малой кровью вряд ли возможно. Насчет полосок на экране могу тоже предположить, что это связано с прерываниями, но с механизмом возникновения надо разбираться.

    - - - Добавлено - - -

    Ну и отличия реала от эмуляторов в данном вопросе вряд ли есть, тут я сомневаюсь. Скорее чуть различаются условия запуска и использования.

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

    electroscat(27.03.2020)

  10. #9

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от electroscat Посмотреть сообщение
    Программа работает со всеми четырьмя плоскостями, то есть с 8000 до FFFFH все стирается и меняется.
    В таком случае проще будет перезапустить МДОС через БЛК-ВВОД, например с КД, чем всё сохранять и восстанавливать. Или использовать КД с доработкой Баркаря, который позволяет подменять квазидиском все верхние 32кб памяти.

    Цитата Сообщение от electroscat Посмотреть сообщение
    Вот этот код как раз и есть 21 03 B6 01 00 C3 00 B6 3E 23 D3 10 E9 ...

    Прошу прощения, не могли бы вы пояснить этот момент ?!?
    Да, это он и есть. Я написал этот код для ivagor, в его варианте сделано так: 01 03 B6 01 00 C3 00 B6 3E 23 D3 10 2A 00 01 E9.
    Возможно он примет эти исправления и внесёт их в свой патч, но даже если он этого не сделает -- не страшно, на функционал mdos31hp2.com он не влияет.

    - - - Добавлено - - -

    Цитата Сообщение от electroscat Посмотреть сообщение
    А чтобы их найти, нужно дизасемблировать код и понимать, как он работает, что вообще такое инициализатор, и т.д. правильно я понимаю ? Есть куда расти в общем
    Для сведения... МДОС (и РДС тоже) состоит из нескольких модулей, а именно из двух частей БСВВ (базовая система ввода-вывода) и собственно ДОС. И есть инициализатор, который раскидывает эти части в нужные участки памяти и настраивает их. И всё это собрано в один файл, который грузится и запускается с адреса 0100h. И если захотите дизассеблировать ДОС, то инициализатор -- это первое, с чем придётся столкнуться, всё остальное будет в виде массивов данных.

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

    electroscat(27.03.2020)

  11. #10

    Регистрация
    27.08.2019
    Адрес
    г. Ростов-на-Дону
    Сообщений
    1,034
    Спасибо Благодарностей отдано 
    467
    Спасибо Благодарностей получено 
    194
    Поблагодарили
    125 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    В таком случае проще будет перезапустить МДОС через БЛК-ВВОД, например с КД, чем всё сохранять и восстанавливать. Или использовать КД с доработкой Баркаря, который позволяет подменять квазидиском все верхние 32кб памяти.
    У меня это реализовано в CM.COM. В целом, добавляется пара килобайт кода, но зато и все видео озу доступно, и дос на 100% работает, правда после возврата всего на место и включения КД..... У меня есть идея написать просмотрщик картинок. На данный момент я только один нашел адекватный, но он работает только под Т34, Т35 и Е72, а хотелось бы более универсальный... В итоге, принцип такой же, при желании использовать все видео озу (для просмотрщика графики это актуально)
    По другому ничего и не получится наверное. Но не понятно, как одновременно использовать и все экранное озу и возможности mDOS, такие как подгрузка файлов в озу и т.д. В общем, у меня в вязи с этим пока много пробелов. Но интересно..

    Наверное нужно начинать с дизасемблирования адекватного просмотрщика и анализа его в дебагере на ос, на которых он не работает.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 213
    Последнее: 13.06.2022, 14:02
  2. Ответов: 4
    Последнее: 20.08.2007, 16:14
  3. Организация plug-in'нной системы
    от CityAceE в разделе Программирование
    Ответов: 9
    Последнее: 20.09.2005, 12:45
  4. Описание системы команд - давайте централизуем ;)
    от Alex/AT в разделе Программирование
    Ответов: 42
    Последнее: 09.07.2005, 22:34
  5. Инициализация системы
    от breeze в разделе Программирование
    Ответов: 13
    Последнее: 24.03.2005, 10:03

Ваши права

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