Пишем свою ОС.Практика.
(создано по мотивам бесед из удалённой темы 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 ----------
так то была от МОА, а это от К.Фролова - я же упоминал:
хорошенькие "этюды" получаются
думаю не стали бы.Если бы я делал,то бы сделал так:
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 - то дисковые операции пройдут успешно.
не вижу никаких тормозов
---------- 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 ----------
Вот смотри самый тяжелый вариант загружает с адреса пусть #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) - мои теоретические рассуждения полностью подтвердились - работает БЫСТРО! )