User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 28

Тема: Назад в будущее?

  1. #11

    Регистрация
    27.04.2005
    Адрес
    Москва
    Сообщений
    886
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Paul_ls
    IMHO с вариантом 128 упорно спорят 256,512,1024 и т.д.
    А никто и не говорит что их надо игнорировать.
    Прошивка в ПЗУ надежнее, но кто ее будет делать?
    Ну, допустим, я ее готов сделать, если вопрос стоит именно так. При условии некоторой оправданности затраченного времени (допустим, ПЗУ с прошивкой продается по 100 руб/экземпляр)
    Посмотрите опрос по ПЗУ! ДОС должна иметь возможность грузиться с HDD, виртуальную память, многозадачность, эмуляцию устроуств и т.д. Если делать для среднестатстической ZX128, то получится IS-DOS.
    Так, так, так, СТОП!!!
    Это уже все реализовано и не раз, насколько я понял. Развития не получает по простой причине - отъедает всю память.
    Итак, раз уж мы снова говорим о новой ОС, то вот ИМХО первые критерии, которым она должна удовлетворять (и именно от этого надо плясать, а ни от чего другого, иначе мы попросту остаемся без софта):
    1. Поддержка ПЗУшного BASIC-48. Простыми средствами, наподобие TR-DOSного RANDOMIZE USR 15619:REM:... Без отбирания верхней памяти под резиденты.
    2. Предоставление в пользование программ НЕ МЕНЬШЕ памяти, чем это делает TR-DOS.
    3. Работоспособность при области нижней памяти в 48 кб, полностью занятой программой пользователя.
    Все полностью ОЗУ-резидентные системы не проходят по этим показателям.
    Из этого можно нарисовать например следующую модель распределения памяти (адреса не помню за давностью лет):
    1. ПЗУ - 16 кб. В нулевой странице (вместо бейсика-128) - базовая часть ОС (эквивалент KickStart на Амиге). Обеспечивает загрузку с носителя (FDD или HDD) и машинно-зависимый менеджмент страниц.
    2. экран - 6912 байтов;
    3. буфер принтера - 256 байтов - требуется для функционирования бейсика. ZX-LPRINT 3 им пользуется для своих целей, при его отсутствии первая команда работы с принтером его засрет, посему там разместить ничего не получится.
    4. системные переменные Бейсика - требуются для функционирования бейсика как такового
    5. на месте системных переменных TR-DOS располагаем BASIC HELPER - резидент, вызываемый вместо 15619, отрабатывающий обращения из бейсика. Ну или альтернативно - патч RST 8, отрабатывающий расширения бейсика (совместимые с Microdrive или свои собственные - отдельный вопрос), хотя это сложнее и наверное требует больше памяти.
    6. ВСЕ. Дальше - программа пользователя.
    Загружаемая часть ОС хранится в верхней памяти. Задача BASIC HELPER'а при обращении к нему - зная номер страницы и стартовый адрес модуля поддержки BASIC, вызвать модуль, по возврату включить обратно 0 страницу, вернуться. ВСЕ.
    Средствами ПЗУ все страницы виртуализируются (жестко спроецированные с #4000 и #8000 выбрасываются), каждой странице присваиваем виртуальный номер от 0 до 255 (достаточно?). Страницы имеют динамический менеджмент памяти. Инсталляция модуля (например загружаемого драйвера) происходит следующим образом: размер мы знаем, ищем самую верхнюю страницу с достаточным местом, грузим модуль, линкуем адреса (модуль релоцируемый), получаем номер страницы и стартовый адрес модуля. Информация о занятых/свободных областях хранится внутри самой страницы. Ограничение - размер модуля не больше 16 КБ, имхо не сильная проблема.
    ОС не имеет жестко заданной области системных переменных, параметры передаются через структуры (как в IS-DOS, AmigaOS, и т. д.). Все данные для работы модулей хранятся там же, где и сами модули - в страницах. Какой механизм использовать для обеспечения возможности их модификации из программы пользователя - дело автора модуля.
    Загружаемая часть ядра ОС - тоже модуль, загружается первым и хранится в самой верхней странице ОЗУ, ПЗУ вызывает его, зная этот номер страницы, переходом на адрес #FFFD (этим он отличается от остальных модулей). Этот модуль содержит все, что не уместилось в ПЗУ (в том числе и механизм взаимодействия с остальными модулями, таблицу их размещения, основные рабочие переменные ОС, и т. д.)
    Описанная карта нижней памяти действительна только при загруженной поддержке бейсика. Изначально при загрузке бейсика в карте памяти нет. Буфера принтера, системных переменных BASIC и BASIC HELPER'а нет. Ограничений на использование HL' и IY тоже нет. Программа пользователя вызывается с включенной 0 страницей ПЗУ и вызвает точки входа ОС прямо оттуда. Переключаться в ПЗУ 48 кб можно, но осторожно (а зачем? ;-)) Единственное, что необходим знать ПЗУшным подпрограммам - номер самой верхней страницы памяти; его можно сделать обязательным аргументом для вызовов ПЗУ и сообщать программе пользователя при старте. Загружаемые модули можно в принципе вызывать и напрямую, зная номер страницы и стартовый адрес модуля, для этого в ПЗУ должны быть функции типа FindModule (этакий аналог OpenLibrary() на Амиге) и SetPage() - включение страницы с заданным номером.
    О многозадачности. Увы, это факт, но полноценную вытесняющую многозадачность на ZX реализовать можно только при условии, что мы ограничим пространство программ пользователя в 16 кб. Тогда получаем одну страницу на задачу. Тут были ссылки на UZIX - он сделан именно так. Только на MSX можно переключать страницы в любом окне, а не только в верхних 16 кб. Конкретно в UZIX используются верхние 32 кб. Так что возможна реализация ограниченной многозадачности поверх описанной ОС, но при этом использование уже существующих программ невозможно принципиально, а это есть большущий минус, из-за которого имеющиеся проекты ОС потерпели крах.
    Единственная проблема - конфигурация со 128 кб. Придется ухищряться с игрушками, занимающими всю память без остатка и желающими при этом работать с дисками. Увы, совсем без системных переменных, на голом ПЗУ, никакая DOS работать не может. Посему минимальное требование для вызова ОС - нетронутое содержимое как минимум одной страницы (при желании модуль SYSTEM можно легко переместить из самой верхней страницы в любую другую, при этом работоспособность менеджера подгружаемых модулей скорее всего потеряется, но файл прочитать/записать на нативной файловой системе можно - требуемая поддержка есть в ПЗУ). Если игрушка подгрузки/записи не требует - вуаля, делаем что хотим, выходим по кнопке Reset.
    Для совсем уж тяжелых случаев - TR-DOS у нас никуда не девается, но ИМХО этих случаев мало. С загрузкой с флопа под музыку придется проститься, однако, хотя через это пожалуй все платформы проходили, никто не умер.
    Вот концепция. И никакая другая ИМХО работать не будет.

  2. #12

    Регистрация
    23.01.2005
    Сообщений
    1,113
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sonic
    O многозадачности. Увы, это факт, но полноценную вытесняющую многозадачность на ZX реализовать можно только при условии, что мы ограничим пространство программ пользователя в 16 кб.
    Хм - это с какого же перепоя такое? Какое дело многозадачности до того, где программы сидят? Ты бы лучше о контроллере прерываний бы подумал...

  3. #13

    Регистрация
    31.03.2005
    Адрес
    г. Рыльск
    Сообщений
    54
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sonic
    Ну, допустим, я ее готов сделать, если вопрос стоит именно так. При условии некоторой оправданности затраченного времени (допустим, ПЗУ с прошивкой продается по 100 руб/экземпляр)
    И посылать неграм в африку, которые тоже хотят новую ОС на свой ZX? Ведь кроме Москвы есть еще необъятная Родина и загнивающий капиталлизм. А при разработке ОС новые версии будут выходить 2 раза за 1 час, и что ПЗУ перешивать, и опять на почту? В таком случае, ОС будет жить только на эмулях и всё.

    Нужна не новая ПЗУ, а минимальные изменения в существующих, которые дадут спокойно работать всем остальным реализациям ОС. А на SCORPIONе и переделывать ничего не надо, там и так всё перехватывать можно, вплоть до RESET

    А память выше 128 для того и нужна, чтобы ее не для ALASMA использовать и рамдисков всяких да копировщиков. Ведь посчитайте коэффициент использования памяти выше указанного? Стремиться к 0. Так зачем она вообще? Давайте возьмем напильники и дружно отпилим. Ведь если ориентировать ОС на стандарт 128, то это опять получится либо рамдиск, либо буфер для копировщика и всё. А HDD просто расширение возможности (тоже отпилим).

    Естественно, при работе новой ОС снизится быстродействие системы в целом из-за диспетчеризации ресурсов, но кто вам мешает писать демки под чистый TRDOS (как в Windows single mode MSDOS)?

  4. #14

    Регистрация
    27.04.2005
    Адрес
    Москва
    Сообщений
    886
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Paul_ls
    И посылать неграм в африку, которые тоже хотят новую ОС на свой ZX? Ведь кроме Москвы есть еще необъятная Родина и загнивающий капиталлизм. А при разработке ОС новые версии будут выходить 2 раза за 1 час, и что ПЗУ перешивать, и опять на почту? В таком случае, ОС будет жить только на эмулях и всё.
    Да, посылать. Желающим/способным - файл. Нежелающим/неспособным - ПЗУ. Впрочем, копировальщики и так найдутся.

    Нужна не новая ПЗУ, а минимальные изменения в существующих, которые дадут спокойно работать всем остальным реализациям ОС. А на SCORPIONе и переделывать ничего не надо, там и так всё перехватывать можно, вплоть до RESET

    А память выше 128 для того и нужна, чтобы ее не для ALASMA использовать и рамдисков всяких да копировщиков. Ведь посчитайте коэффициент использования памяти выше указанного? Стремиться к 0. Так зачем она вообще? Давайте возьмем напильники и дружно отпилим. Ведь если ориентировать ОС на стандарт 128, то это опять получится либо рамдиск, либо буфер для копировщика и всё. А HDD просто расширение возможности (тоже отпилим).
    Тогда - читай вторую часть того письма, на которое ты ответил. Там все есть - и доп. память и винт и диспетчеризация ресурсов.
    Память выше 128 кб есть не у всех. Тем более - опять же, читай, ограничения там будут, так что стимул ставить больше памяти есть.
    При такой реализации новая ПЗУ не будет выходить так часто. Тем более что никто не заставляет продавать нестабилные development-версии.

  5. #15

    Регистрация
    01.03.2005
    Адрес
    Russia, Krasnodar
    Сообщений
    433
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sonic
    Нормально. Просто я побоялся за стоимость - около 1000 рублей за самую дешевую карточку.
    Если угодно могу продать самый дешевый в районе 15 уе или того меньне, причем не в еденичном экземпляре, т.е. это реальная оптовая цена. Свою на 256 метров я купил менее чем за 20 $. Что не намного больше 300 р. изобретаем велик, господа .
    http://amigasc.nm.ru

    Free coder and hardwareman
    Amiga addicted

  6. #16

    Регистрация
    04.04.2005
    Адрес
    Невинномысск
    Сообщений
    49
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Sonic
    минимальные требования для работы эмулятора - наличие возможности чтения из порта #7ffd или возможность использования дополнительной страницы озу не затрагивая вышеуказанный порт.

    а вообще читаю и диву даюсь - большинство идей уже воплощено в коде

    вот к примеру совсем немного из мануала к vtr-dos 2.5xt:

    set_vtrd_map
    замена/востановление стандартной разводки памяти под рамдиск,

    по умолчанию соотвествующей используемой в honey commander 4.0.
    карта памяти берётся по адресу = (#80 or подкоманда)*256.
    в этой версии карта памяти должна состоять из номеров страниц #00..#7F,
    все иные значения заменяются идентификаторами недействительной страницы,
    а так же иметь длину 256 байт. т.к. карта памяти в длину обычно
    меньше 256 байт, то последние байты должны устанавливаться значениями
    недействительной страницы равным #FF
    номера страниц выше #40 являются страницами пзу и нумеруются в обратном порядке, т.е. #40 на самом деле является #3f страницой пзу

    set_page_hook
    установка/удаление обработчика обращений к недействительным страницам

    общий размер обработчиков не может быть больше #1FFF байт
    <для компиляции> стартовый адрес РАБОТЫ кодового блока обработчиков = #4200
    блок обработчиков загружается в страницу #38 и выполняется из неё в окне #4000
    прерывания запрещены.

    set_nmi_hook
    установка/удаление обработчика нажатия клавиши magic

    производится копирование кодового блока в страницу #38 откуда он
    и будет работать, стартовый адрес #6200
    подкоманды не используются

    set_reset_hook
    установка перехватчика нажатия клавиши reset и инициализации vTR-DOS

    в данной версии всегда копируется все 16кб данных,
    из которых 1-й байт и 3 последних изменяются соответствующим образом
    для работы резидента (см. соответствующую литературу)

    подкоманды не используются

    set_io_hook
    установка/удаление перехватчика доступа к расширенным портам

    кодовый блок копируется в страницу #38, стартовый адрес обработчика #7200
    подкоманды не используются

    DMS_CALL
    вызов драйвера

    производит вызов драйвера или операционной библиотеки по их идентификатору. регистры передаются драйверу/операционной библиотеке.

    DMS_LOAD
    установка драйвера

    драйвер представляет собой кодовый блок вызываемый прикладными программами для отработки машинно-спецефичных задач. выполняется из невыгружаемой страницы с открытыми портами. условно драйвера делятся на группы. каждой группе по-порядку присвоены следующие идентификаторы :

    00 драйвера верхней памяти (только один может быть загружен)
    01 драйвера логических накопителей (только один может быть загружен)
    02 драйвера файловых систем
    03 драйвера физических накопителей
    04 драйвера графических подсистем
    05 драйвера ввода-вывода
    06 операционная библиотека
    07 резидент реального времени

    следует заметить что работа группы 1 не имеет смысла без установки драйверов группы 2, а той в свою очередь - группы 3.

    формат кодового блока драйвера следующий :

    #C000 DMS_CALL: JP _CALL ;рабочий вызов драйвера
    #C003 DMS_LOAD: JP _INIT ;первоначальный вызов драйвера (при инициализации)
    #C006 DMS_KILL: JP _KILL ;финальный вызов драйвера (при удалении)
    #C009 DMS_FIND: JP _VERSION ;идентификация драйвера по группе и версии
    #C00C DMS_MESS: JP _HARD_INIT_MESSAGE ;сообщение BIOS об аппаратных событиях
    #C00F _TX_VERS: DB 'СТРОКА КОНТРОЛЛЕРА' ;понятное текстовое имя драйвера
    #C100 _CODE: ... ;тело драйвера ...

    или к примеру вот

    машиннозависимые подкоманды защищённого режима :

    - подкоманда 80. vendor_protect_hide
    = тихий режим защиты. подключение запрещённых страниц игнорируется. попытки использования системного порта игнорируются. программы использующие верхнюю память могут работать неправильно. не рекомендуется.

    - подкоманда 81. vendor_protect_break
    = обычный режим защиты. при обращении в запрещённую страницу памяти или к системному порту выполнение программы прекращается и демонстрируется сообщение.

    там много, всё писать сюда смысла нет. если есть желание - пишите на мыло.

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

  8. #17

    Регистрация
    27.04.2005
    Адрес
    Москва
    Сообщений
    886
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    2 UKMZ: Насколько я понял, это все - ATM-specific (судя по требованию наличия окна с #4000)? Тогда жаль что без аппаратных изменений оно непортабельное никуда, кроме Profi.

  9. #18

    Регистрация
    04.04.2005
    Адрес
    Невинномысск
    Сообщений
    49
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sonic
    2 UKMZ: Насколько я понял, это все - ATM-specific (судя по требованию наличия окна с #4000)? Тогда жаль что без аппаратных изменений оно непортабельное никуда, кроме Profi.
    окно с 4000 предоставлено для машиннозависимых модулей. а это для каждой машины по-своему компилить, так или иначе - согласись ?
    драйвера и всё остальное работает из С000

  10. #19

    Регистрация
    27.04.2005
    Адрес
    Москва
    Сообщений
    886
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ukms[z
    ]окно с 4000 предоставлено для машиннозависимых модулей. а это для каждой машины по-своему компилить, так или иначе - согласись ?
    драйвера и всё остальное работает из С000
    А отработчик NMI почему с #4100? Его ведь тоже можно реализовать для всех машин. И Reset-хендлер тоже...
    Кстати говоря, можно реализовать их двумя альтернативными способами:
    1. Где-то есть переменная, где оно явно прописано.
    2. Если область переменных разрушена (пользователю отдано 100% памяти), то производим сканирование ВСЕЙ имеющейся оперативки на предмет наличия следующего (например) тега:
    ResTag DC.B "NMIH" ; сигнатура NMI-хендлера (для Reset'а - "RSTH")
    DC.W <длина области> ; Длина проверяемой области начиная с ResEntry
    DC.W <CRC> ; CRC проверяемой области
    ResEntry ; Здесь собственно вызываемый код
    Подпрограмма отработки прерывания определяет текущую страницу (машиннозависимо: с помощью чтения портов либо методом интеллектуальной проверки с помощью CRC - образец см. в TR-DOS Magic). Далее производится поиск по всей доступной памяти сигнатуры. При ее обнаружении происходит сравнение CRC указанной области (контроль целостности кода). Если CRC совпала, резидент считается валидным и запускается на выполнение с запрещенными прерываниями. Что делать дальше - абсолютно его дело. На стеке пользователя при вызове прерывания сохраняется только минимум регистров, необходимый для работы функций определения текущей активной страницы и поиска резидента, все остальное - задача резидента (рекомендуется поиметь собственный стек).
    Невалидный резидент пропускается с продолжением поиска.
    Плюсы: возможна работа совместно с любым программным обеспечением, даже если оно уничтожает системные области.
    Минусы: возможный метод защиты - установка в памяти еще одного собственного резидента, блокирующего работу отладчика.

  11. #20

    Регистрация
    04.04.2005
    Адрес
    Невинномысск
    Сообщений
    49
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sonic
    А отработчик NMI почему с #4100? Его ведь тоже можно реализовать для всех машин.
    у разных машин разная архитектура и соответственно может быть разная реализация обработчика. ему надо ворочать страницами, экраном, возможно - видеорежимом. кроме того никто не мешает обработчиком установить небольшой корешок который будет инициализировать уже загруженные модули. кроме того не следует забывать про механизм сообщений - никто не заставляет устанавливать полноценный хардварный перехватчик, можно воспользоваться мониторингом специального сообщения от биоса. сообщения широковещательные, и отсылаеются всем модулям.

    И Reset-хендлер тоже...
    а это выполняется из С000

    Кстати говоря, можно реализовать их двумя альтернативными способами:
    1. Где-то есть переменная, где оно явно прописано.
    2. Если область переменных разрушена (пользователю отдано 100% памяти)
    области переменных теневые. обычная программа их не видит.

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

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

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

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

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

Ваши права

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