User Tag List

Показано с 1 по 8 из 8

Тема: Изредка посещаю этот форум для разрядки...

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

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

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

    По умолчанию

    Ну тогда господа Z180... Там с Flat memory model проблем нету. Внутренние порты релоцируются, эту функцию может выполнять BootROM.
    А по софту, касаемо компилятора...
    Хорошая мысль однако. Думаю если ее развивать, то надо начать с некой стандартизации карты памяти. Придумывать новый формат исполняемых файлов и вводить понятие сегментов.
    Рассмотрим стандартный ZX. Мы имеем:
    16 K ROM
    16 K экран (условно)
    16 K - назовем это resident area
    16 K - назовем это page area
    Наш бинарный файл должен иметь возможность:
    1. Иметь произвольную длину.
    2. Иметь произвольное количество сегментов с длиной не более 16 кб.
    3. Иметь понятие атрибута сегмента. Один из сегментов может иметь атрибут Resident - именно он попадает в 0x8000. Остальные сегменты могут грузиться в произвольные страницы с 0xC000.
    Остается два сегмента: ROM и Screen.
    Тут я отступлюсь от энтузиазма и предложу нессчастный ROM оставить наконец в покое. Попытки его заменить генерируют массу проблем. Не все в состоянии это сделать. ROMABLE-система хороша как опция, но не более.
    Screen - куда интереснее. Нам известно, что экран ZX - это 6 кб. Остается еще 10 кб. Идеальное место для размещения того, что в рабочем варианте назовем ZX Runtime kernel. Ее основная функция - связывать между собой сегменты программы. Эдакое наноядро. Программиста не должно волновать реальное расположение сегментов в страницах. Страницы ведь абсолютно идентичны между собой. ZRK машиннозависима ибо ей придется знать о том, какие страницы есть у машины и как их переключать. Еще тут придется содержать в себе некоторые legacy-системные переменные SOS, которые изменяют свое значение по прерываниям (вероятно что-то можно релоцировать, изменив IY) и стек (по крайней мере начальный).
    Тут нужно еще ввести понятие BFI - Binary file interpreter (для знакомых с UNIX - функциональный аналог ELF Interpreter). Его задача - загрузить бинарник, совместно с ZRK раскидать его по сегментам и создать таблицу связей - какой логический сегмент программы какой физической странице соответствует. Кстати нет разницы, собирать программу из одного или кучи файлов, так можно в нагрузку и load-time библиотеки реализовать, наподобие .dll в Windows и .so в Linux - нагрузочная стоимость будет нулевой. Далее BFI может спокойно запускать загруженный код и прекращать свое существование.
    Из программы ZRK может быть вызван явным и неявным образом:
    1. Неявно - при осуществлении межсегментного перехода (far call) из одного paged-сегмента в другой или же обращении из одного Paged-сегмента к данным, находящимся в другом Paged-сегменте (не рекомендуемая практика ибо тормоз хотя в некоторых случаях это можно принести в жертву простоте).
    2. Явно - при необходимости обеспечить непосредственный доступ к данным в каком-либо из paged-сегментов. При этом просто происходит переключение страницы и все. Разумеется наиболее часто такие вызовы будут осуществляться из Resident Area.

    На языке C это могло бы в принципе выглядеть так:

    [code]
    #pragma resident // Объявляем Resident segment

    void main(void)
    {
    SetPage(__selectmode); // Устанавливаем сегмент, содержащий данные
    memcpy(0x4000, initscreen, 6192); // Данные были картинкой
    SelectGameMode(); // Это простой вызов - сегмент уже включен, компилятор следит за этим
    }

    #pragma paged("selectmode") // Именованный paged segment, символ __selectmode генерируется линкером из имени сегмента

    char initscreen[] = {...}; // ну вы поняли - это данные картинки

    void SelectGameMode(void)
    {
    char m;

    m = getch();
    switch (m) {
    case 's':
    StartGame();
    break;
    case 'j':
    SetupJoystick(); // А вот это - пример FAR CALL. Компилятор сам должен позаботиться об установке нужной страницы и то же самое по возврату.
    break;
    case 'k':
    SetupKeyboard();
    break;
    }
    }

    #pragma paged("setups") // Еще один paged-сегмент, в него мы вынесли все настройки

    void SetupJoystick(void)
    {
    // Тут мы выбираем тип джойстика
    }

    void SetupKeyboard(void)
    {
    // Тут мы производим назначение клавиш
    }

    #pragma physicalpage(#07,"screen2") // А тут мы просто определили __screen2, который понадобится нам для того, чтобы использовать теневой экран.

    Я думаю что если бы было желание, то можно было бы переработать IS-DOS под такое распределение памяти. IS-DOS - отличная система, но в ней заложена серьезная концептуальная ошибка - она попросту не рассчитана на использование страничной памяти приложениями. ОС должна занимать нижнюю память, а не верхнюю. При этом она должна быть модульной (в IS-DOS это есть, но модуль нельзя динамически выбросить из системы и запихать на его место то что мне нужно). А предлагаемая мной концепция вкупе с реализацией сборки программы из нескольких файлов на этапе загрузки (load-time-linking) позволит решить тонну проблем. Каждая программа при загрузке будет фактически собирать собственную ОС под себя (для этого головному модулю достаточно указать, что для работы ему например необходим драйвер для работы с диском, драйвер мышки и драйвер принтера. Если это графический редактор - можно запросить еще и GUI-оконную систему. Если эмулятор терминала - драйвер модема и текстовую консоль. Супер-мега-киллер-демо вообще обойдется без всего этого и сможет работать само по себе используя лишь переключалку страниц из ZRK.
    К сожалению сюда не вписываются некоторые расширения диспетчера памяти (например возможность Profi менять окно проецирования с 0xC000 на 0x4000, но это придется принести в жертву стандартизации. Если оно и подлежит использованию, то только машиннозависимыми модулями для внутренних нужд.
    А вот диспетчерам памяти II поколения (к коим я могу отнести только АТМ-Турбо с его возможностью переключать вообще всю память) можно как раз найти применение, связанное с многозадачностью. Внутри такой структуры можно выделять виртуальные машины, в которых будут работать различные программы. Единственным остается вопрос разделения экрана - это надо как-то проработать.
    Такая схема может позволить обеспечить совместимость и с классическими SOS, TR-DOS и IS-DOS-приложениями.
    С IS-DOS все просто, необходимо перетащить ZRK как можно выше по памяти (но не залезая за 0xC000 - там электронные диски всякие и прочая лабудень), написать эмулятор API RST#10 - и готово. То, что было ядром IS-DOS-48кб - в верхние страницы, обращение через ZRK (сорри любители RAM-дисков, на дворе XXI век, обзаводитесь винтами).
    У TR-DOS еще хуже - как правило из ее приложений нет выхода. Собственно, в качестве простейшего варианта решения можно вспомнить Windows 95 с ее опцией "Запускать в режиме MS-DOS". При попытке запуска такой программы сначала вылезает предупреждение о том, что любую среду придется покинуть. При утвердительном ответе Windows просто выгружается, оставляя программу работать в чистом MS-DOS. Плюс еще - TR-DOS-программы с дозагрузками можно запускать только с TR-DOS-дискет.
    Вот так, начал с концепции ПО следующего поколения, а закончил описанием прототипа концепции очередной ОС. Хотя судя по всему одно от другого не отделимо. Кстати а что если взять IS-DOS и переработать под этот принцип? Насколько я понимаю ее исходники доступны? Хотя конечно можно написать и прототип работающий поверх TR-DOS...

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

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

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

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

Похожие темы

  1. Нет все-таки я покину этот форум...
    от Addison в разделе Форум
    Ответов: 5
    Последнее: 01.04.2006, 16:59
  2. Пожалуйста опознайте этот ZX!
    от Orionsoft в разделе Несортированное железо
    Ответов: 11
    Последнее: 25.06.2005, 15:53

Ваши права

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