Важная информация

User Tag List

Страница 1 из 20 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 200

Тема: Пишем свою ОС. Практика

  1. #1
    Member Аватар для Zet9
    Регистрация
    05.10.2006
    Адрес
    Харьковская обл.
    Сообщений
    166
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Пишем свою ОС. Практика

    Пишем свою ОС.Практика.
    (создано по мотивам бесед из удалённой темы Q-DOS).

    Лирическое вступление

    Если начинающий кодер хочет попробовать научиться писать игры, то он может почитать разные книги , например «Как написать игру для ZX-Spectrum на бэйсике» или более продвинутый вариант «Как написать игру для ZX-Spectrum на ассемблере». Книги на тему "Как написать операционную систему для ZX-Spectrum" к сожалению нет(или мне о такой книге неизвестно).Вот если бы во времена нашей юности у нас была подобная книга...
    Так как же быть тем,кто хочет сделать свою операционную систему для нашего любимого Спектрума? Можно конечно обратиться к серьёзной литературе мирового уровня по разработке ОС и потратить несколько лет на изучение книг объёмом в сотни страниц, но к тому времени желание что-либо делать иссякнет,поэтому хочется уже сейчас,прямо сегодня,в крайнем случае в ближайшие выходные приступить к процессу создания «ОС Вашей мечты».Предлагаю не откладывать это дело в долгий ящик, и пока еще чего-то хочется - в этой теме начать учиться. Мы не будем сразу замахиваться на что-то глобальное,ведь все начинали с простых вещей,даже художники,чьи полотна признаны шедеврами,сначала рисовали на маленьких листочках бумаги или в блокноте. Поэтому предлагаю начать на самых простых примерах,и пусть первая версия ос для начала будет очень простая, примитивная, даже можно сказать — игрушечная, но главное не останавливаться на достигнутом, и потом сделать ещё одну версию,уже посложнее, а потом ещё одну и ещё одну и так, продвигаясь небольшими шажками - научиться делать операционные системы и если к тому времени у нас еще останутся силы/желание/свободное время, то мы сможем создать для нашего любимого компьютера свою собственную,и конечно же самую быструю,самую лучшую, НАСТОЯЩУЮ операционную систему, которой будет удобно пользоваться и которой мы все сможем гордиться.

    Предлагаю не относиться к нижеизложенному слишком серьезно и воспринимать это обучение в игровой и приколисто-юморной форме.

    Хочу обьявить эту тему территорией,свободной от флэйма, и каждому, кто придет сюда просто поразмышлять на тему "разработка ОС для Спектрума",мы скажем - "ну шо ты к нам приштал,эт наша пешошница".И предложим перейти в тему "Пишем свою ОС. Теория" в разделе "Концепции" и уже там высказать всё,что их душа пожелает. А сюда приглашаются те,кто действительно заинтересован сделать что-нибудь реально работающее (а если никто не придёт, буду потихоньку куковать в одиночестве).
    Что бы оценить уровень своих познаний, можно поробовать поделиться ими с другими людьми,при этом будут обнаружены неоторые пробелы в тех или иных областях обсуждаемого предмета.
    Предлагаю:
    1)В процесе обучения сделать хотя бы одну настоящую ОС и больше не сомневаться на тему, есть ОС у Спектрума, или нет ОС. (какого уровня сложности она будет и какие у неё будут возможности — это уже другой вопрос).
    2) Излагаемые факты из истории развития ОС,концепции осестроительсва будут максимально упрощены и из них будут выброшены незначащие (на мой взгляд) подробности.
    3)Будем использовать технологии open source - т.е. юзать в наших проектах свободно распространяемые программы и драйвера с исходными текстами,а так же свои собственные уже существующие процедуры и старые наработки.
    4) Продвинутым кодерам, случайно заглянувшим к нам на огонёк, просьба не удивляться,так как мы будем делать по возможности максимально просто,потому что Спектрум - простой в освоении компьютер, и хотелось бы, чтобы всё на нём было простым и удобным.
    /////////////////////////////////////////////////////////////////////
    Вообще хотелось бы начать сначала, но раз уже в теме Q-DOS начали обсуждать
    быстрый драйвер дисковода, то рассмотрим его

    ---------- Post added at 21:47 ---------- Previous post was at 21:45 ----------

    Цитата Сообщение от Sayman Посмотреть сообщение
    стоп. для скорпа была своя версия цпм. кроме того, разъясню в чём косяк совместимости. когда я говорил про работу с флопом из диапазона от 0 до 16383 (т.е. проще говоря из пзу или то что сидит на её месте), я имел ввиду довольно простую ситуацию. видиш ли, стартовый адрес для прог цпм = 100h.
    так то была от МОА, а это от К.Фролова - я же упоминал:
    Цитата Сообщение от Zet9 Посмотреть сообщение
    Есть версия цпм 2.2 от К.Фролова для Пентагона с кеш-памятью от 16К(дополнительно в ней драйвер экрана для режима 512х192), она же работает на KAY-256/Scorpion-256 и в ней драйвер дискеты настроен на форматы цпм от МОА для устройств A и B, для цпм от АТМ на устройстве С и для дискет от Профи-цпм на устройстве D

    Цитата Сообщение от Sayman Посмотреть сообщение
    все эти почти 16к могут быть свободно отведены под прогу юзера, за исключением моментов, когда юзер компилит её на другой адрес используя дерективы phase. но это отдельная песня. так вот. когда прога начинает чтото подгружать своё, какие то свои куски, что она делает? пральна, образщается к функции системы.
    dos equ 5
    open_f equ 15
    ld c,open_f
    ld de,myfcb
    call dos
    т.е. посути обращение идёт снова таки по адресу, который сидит гдето там...в области пзу ну или теневой озу (кэш). т.е. собсвтенно драйвера то там нет, всего лиш начала диспечера посути. окольными путями потом это всё погрузица. зхначит на этих клонах, для того чтобы всё работало нормально, нужно как минимум сохранять стэк пользователя, перекидывать всю юзерскую прогу от 100 до 3fff куда то там на свободное место, перекидывать драйвер дисковода на нужные адреса, отработать, потом всё вернуть на свои места. это как минимум тормоз,
    хорошенькие "этюды" получаются

    Цитата Сообщение от Sayman Посмотреть сообщение
    как максимум, не уверен что авторы тех версий цпм сталибы так извращаться.
    думаю не стали бы.Если бы я делал,то бы сделал так:
    1)Имеем "рулез" в виде Пентагона с кэш-памятью 32Кб - можем подключать 2 страницы по 16Кб с адреса 0

    ---------- Post added at 21:51 ---------- Previous post was at 21:47 ----------

    первая страница кеша подключена когда работает программа
    при вызове через call 5 происходит подключение 2-й страницы кеша - там все дрова и дискетные в том числе - юзаем прямое программирование ВГ93,грузим сразу весь сектор 1Кб сюда же и потом переносим нужные 128 байт в самый верх памяти, где сидит остатки bdos и bios (таблицы перехода там) - далее перепрыгиваем туда, подключаем первую страницу кэш, копируем эти 128 байт на адрес #0080 и возвращаемя в прогу (в случае если адрес DMA переставлен выше #4000 то сразу из 2-й страницы кеша копируем туда)
    а поскоку прога не включаем IM2 - то дисковые операции пройдут успешно.

    Цитата Сообщение от Sayman Посмотреть сообщение
    нет уж...звиняйте. таких тормозов нам ненужно.
    не вижу никаких тормозов

    ---------- Post added at 13:42 ---------- Previous post was at 13:34 ----------

    2)Имеем любой любой спек-128, у которого для доступа к ВГ93 нужно лезть к #3d2f, и при этом есть возможность подключить страницу ОЗУ на адрес 0
    в этой странице начало проги - , а на #c000 - подключаем страница 1(или другая)
    прога делает вызов call 5 - мы переплёвываемся на адрес в конце страницы #ffXX и отключаем страницу 0 - там теперь стандарное пзу
    ну а далее обращаемя к #3d2f - таким образом,как это вделано в тысячах прог с турбо-лоадером и выполняем дисковую операцию, читаем сектор сразу в верхнюю страницу, где ядро (при DMA=#0080 или выше #C000 ) или в ниже если DMA от #4000-#BF80
    потом принеобходимости переностим 128 байт вниз
    И снова никаких тормозов[COLOR="Silver"]

    ---------- Post added at 22:04 ---------- Previous post was at 21:51 ----------

    Цитата Сообщение от Sayman Посмотреть сообщение
    читаем сектор сразу в верхнюю страницу
    нифига. вот тебе пример - если прога весит ну скажем 8 килобайт. дма сидит где то грубо говоря посередине и туда надо чтобы чтото погружалось. ммм?? лишнии проволочки с перемещениями и потом - кто тебе сказал что грузить мы будем немного? какой нить вордстар попросит погрузить килобайт 20 текста, ты что будеш по 128байт бросать туда сюда включая и выключая пзу, перемещая блоки?! вот я тебе и говорю что это тормоз!
    ты просто не представляеш что такое грузить по 128 байт или там по сектору, потом махинации с переключениями и перебросками, созранениями всяякие, потом снова погрузка и т.д. я вот проделывал такие операции. я грузил и по 128байт и по 256 и по 512 а потом когда погрузил сразу по 16кб, вот тут то и увидел разницу. хотя она заметна уже на 128байт и на 512байт. приэтом я делал почти теже махинации..не совсем, но их хватало. в итоге файл весом всего то ничего 30 или 40 кб, грузился секунд наверно 10 - 15...а на финише когда переделал всё под корень, секунды полторы. а представь если файл ещё больше?! ну уж нафиг. хотя канечно, на 128м то куда. у стандартной цпм ТПА как правило не менее 50кб..обычно. на 128м наверно ещё меньше будет с учётом трдоса.
    Вот смотри самый тяжелый вариант загружает с адреса пусть #0100 кусок длиной 62 Кб - т.е. впритык к TPA.
    в случа пентагона с кэшем имеем то что я сказал выше - и после переключения во вторую страничку кеша мы подключаем на #C000 страницу 3 (пустую) и грузим в нее #3F00 байт,
    далее подключам на #C000 страницу 0 (принадлежащюю программе и вней же в конце урезанные BDOS и BIOS) и грузим остаток файла 46,25 Кб с адреса #4000
    далее включаем на адрес#C000 опять страницу 3, включаем 2-ю страницу кеша (на адрес 0)
    и перед возвратом в программу копируем из #C000 на #0100 кусок длиной #3F00 байт (это 15.75 Кб)
    Ну наверно надо уже мне сделать драйвер и оценить быстродейтсвие.
    (Сделал и оценил(01-02.10) - мои теоретические рассуждения полностью подтвердились - работает БЫСТРО! )
    Последний раз редактировалось Zet9; 18.12.2010 в 16:43.

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

  3. #2
    Member Аватар для Zet9
    Регистрация
    05.10.2006
    Адрес
    Харьковская обл.
    Сообщений
    166
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    2) В варианте с нулевой страницой чуть сложнее.
    после вызова дисковой функции переходим на #FF00 (условный адрес BDOS)
    Выполняем всё неоходимые подготовитльные операции по работе с диском.
    сначала копируем с адреса #4000 в буфер BDOS кусок длиной 256 байт, на #4000 копируем турболоадер и переключалку страниц и идём туда на кусок по адресу #4000
    отключаем страницу 0 с адреса 0 и включаем её на адрес #C000
    грузим на адрес #C100 первые 15.75 Кб, далее включаем на #C000 страницу 1(это адресное простанство программы и с адреса #FF00 там BDOS&BIOS) и продолжаем загружать:
    один сектор 256 байт во второй буфер в области BDOS и остальные 46 Кб грузим с адреса #4100

    ---------- Post added at 22:22 ---------- Previous post was at 22:04 ----------

    теперь процедура которая была по адресу #4100 сделала своё дело и больше не нужна
    переходим на процедуру внутри BDOS из которой мы уходили
    далее перекидываем на адрес #4000 кусок длиной 256 байт из второго буфера (а сохранялимы их для случая загрузки выше чем #4000 - тогда бы мы перекидывали на #4000 из первого буфера)
    подключаем страницу 0 на адрес ноль и переходим в неиспользованную область в районе до #0080 (там цпм не трогает нескоько десятков байт)
    оттуда возврат в программу
    итого пересылаем всего 256+256 байт на огромный кусок длиной 62 Кб
    Вроде всё правильно
    По прежнему не вижу тормозов - где же они?
    Последний раз редактировалось Zet9; 14.01.2010 в 22:27.

  4. #3
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Зет, ты сначала напиши, очени, а потом опусы составляй...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  5. #4
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хоть и ваша песочница, но действительно:
    Сорри, но нужна ли вообще ОС?
    Я имею в виду - не лучше ли будет для совместимости просто ХОРОШАЯ надстройка над TR-DOS?
    Ну типа как Win3.11 для MS-DOS...
    На её ошибках можно избежать лишних траблов...
    И никто не запрещает прилепить туда что угодно...
    На уровне доп утилит например.
    И даже (псевдо) многозадачность...
    На мой взгляд - что-то типа MagOs, которая живёт как можно выше.
    А ещё лучше - резидент, который по-быстрому разберётся что к чему и загрузит с диска что надо (предварительно сохранив, то что работало. Снапшоты уже дело привычное, их можно дофига держать и довольно сносно коммутировать)
    Последний раз редактировалось Destr; 15.01.2010 в 20:31.

  6. #5
    Junior Аватар для zksystem
    Регистрация
    19.02.2005
    Адрес
    Казань
    Сообщений
    22
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Почитал, посмеялсо
    на проце без MMU ось делают уже
    //--- zksystem/excess team ---

  7. #6
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    oOOo... а что, такого не бывает что ли?? да и страницы с #c000 чем не мму?

  8. #7
    Junior Аватар для zksystem
    Регистрация
    19.02.2005
    Адрес
    Казань
    Сообщений
    22
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уважаемый psb, Вы что такое MMU знаете? При стиле написния программ на спеке без защиты памяти получится не ось, а гамно!
    Последний раз редактировалось zksystem; 17.01.2010 в 14:34.
    //--- zksystem/excess team ---

  9. #8
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. #9
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    забавно даже
    да просто классический случай junior-а форума. Только что наблюдал такое же в соседней ветке (и добавить к своему тамошнему ответу мне нечего):
    http://zx.pk.ru/showpost.php?p=248997&postcount=17

    "я много знаю, чего сам уже давно не могу применить - пороху нет. И чтобы не выглядеть творческим импотентом обосную всякому, что и другим ничего делать не надо, ибо сложно, некрасиво, невыгодно, неоптимально [продолжите сами]."
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  11. #10
    Member Аватар для Vovoi
    Регистрация
    06.07.2005
    Адрес
    г. Петрозаводск
    Сообщений
    151
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zksystem Посмотреть сообщение
    Уважаемый psb, Вы что такое MMU знаете? При стиле написния программ на спеке без защиты памяти получится не ось, а гамно!
    А на Макинтоше до System-X, ОСь стояла на процах без защиты памяти, верно?
    Spectrum Basic

Страница 1 из 20 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Пишем на ассемблере под эмулятором
    от GM BIT в разделе Для начинающих
    Ответов: 76
    Последнее: 15.07.2016, 20:04
  2. Пишем свою ОС. Теория
    от Zet9 в разделе ZX Концепции
    Ответов: 280
    Последнее: 27.06.2012, 15:27
  3. Я ищу свою дему
    от AAA в разделе Демо
    Ответов: 4
    Последнее: 04.05.2005, 22:59
  4. Ищу свою gfx работу!!!
    от invador в разделе Игры
    Ответов: 7
    Последнее: 02.02.2005, 12:54

Ваши права

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