давно пора переместить эту тему в "концепции".
так давайте уже писать! Правда я не умею =))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))
давно пора переместить эту тему в "концепции".
так давайте уже писать! Правда я не умею =))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))
Pentagon-128/AY/FDD; Leningrad-48/128; Гамма-48 ред1; Искра- 1080; Искра-1085;
Да, есть предложение сделать под Феникс (а возможно и под Кай и Скорпион) плату расширения возможностей под слот NemoBus. Из системных возможностей как раз планируется:
- управление режимами чтения/записи в окне CPU0;
- режим совместимости со Спектрумом +128;
- виртуальный ROM-диск в ОЗУ;
- любая страница в любое окно;
- работа в режиме виртуальной машины (ВМ), при этом в ОЗУ можно держать несколько виртуальных Спектрумов не имеющих возможности залезать в адресное пространство других ВМ, и почти мгновенно переключаться между ними;
- работа в режиме главной ВМ ядра ОС, имеющей доступ ко всем ресурсам компьютера и ко всем ВМ.
Этого хватит?
осталось дождаться сие чуда современного прогресса!
Pentagon-128/AY/FDD; Leningrad-48/128; Гамма-48 ред1; Искра- 1080; Искра-1085;
Там уже такая есть
Ща буду учить.
Приступаем.
Ещё раз напоминаю - будет для начала делать упрощенно - ведь когда ученики приходят в школу, их же не начинают сразу учить решать квадратные уравнения? Их учат рисовать палочки и кружочки.
Вот и мы будем учиться "рисовать палочки".
Начнем с рассмотрения идеологии и разработки концепции.
Придумаем конкретный пример - "любитель "криминального чтива" - у которого имеется LCD-монитор c композитным видеовходом и и подключенный к нему Спектрум с дисководом. А также дискетка с художественными произведениями указанного жанра в виде текстовых файлов. Нам необходимо разработать ПО для обеспечения возможности читать любителем содержимое текстовых файлов на экране LCD-монитора. При этом мы сразу расширим идеологию, для того чтобы полученное ПО можно было использовать и для других "любителей",(пример - начинающий писатель-студент, которому необходима возможность набирать, просматривать и редактировать текстовые файлы на карточке памяти Compact Flash, подключенные к IDE-контроллеру через переходник CF-IDE (при этом у него на компьютере отсутствует контроллер дисковода и сам дисковод и дискеты).
Теперь концепция.
Рассмотрит три основных составляющих нужного нам ПО:
ядро – состоящее из подмножества компонентов,
программа пользователя, тоже состоящая из подмножества компонентов (далее по тексту - задача),
загрузчик ядра.
Начать надо с главного – определиться с распределением памяти компьютера для ядра и задачи.
Для ядра отведём нижние 32 Кб адресного пространства Z80, а для задачи - верхние 32 Кб.К чему это приведёт?
Ограничение такого распределения очевидны , но оставим так,чтобы всё не усложнять на первом этапе. В память ядра войдёт область пзу, экран и системные переменные BASIC и ядро будет под них подстраиваться, а задача будет свободна от этого.
В следующих версиях можно будет "масштабировать" нашу систему, например предоставить задаче возможность использовать страничную организацию области памяти #C000-#FFFF, а ядру "перепадёт" второй экран,а также некоторые страницы памяти в указанном диапазоне,и в результате ядро получить возможность использовать экранную область первого экрана для "не-экранных" целей и т.д.
Далее, распределение процессорного времени.
Ядро запускает задачу.
Задаче предоставляется 100% процессорного времени для выполнения своих операций. Когда задача запрашивает операции, выполняемые ядром она самостоятельно передаёт управление ядру и ядро использует 100 % процессорного времени до завершения требуемой операции. После этого ядро возвращает управление задаче.
Когда задача выполнила все необходимые операции, она запрашивает операцию ядра "завершить задачу".
Теперь кратко рассмотрим основные компоненты ядра.
1)Диспетчер задач - обеспечивает загрузку задачи в её адресное пространство,выполнение и завершение задачи.
1)Драйвер устройства ввода (в данном случае это клавиатура).
2)Драйвер устройства вывода (в данном случае это экран)
3)Файловая система - производит все операции, необходимые для работы с файлами на различных информационных носителях (в данном случае это дисковод). Подразделяется на 3 части:
а) Диспетчер устройств. Он объединяет в единую виртуальную файловую систему компоненты б),в)
б) Драйвера файловых систем (в данном случае одной файловой системе TR-DOS, которая на дискете,)
в) Драйвера дисковых устройств (в данном случае один драйвер дисковода, подключенный к BETA-DISK-INTERFACE).
Программа пользователя будет хранится на диске в виде одного файла длиной не более 32 Кб.
Ядро тоже будет хранится на диске в виде одного файла длиной не более 8 Кб.
Загрузчик сделаем на Бэйсике.Назовём его boot. Он будет загружать ядро на адрес #6000.
и?
---------- Post added at 16:20 ---------- Previous post was at 16:13 ----------
Программа пользователя будет хранится на диске в виде одного файла длиной не более 32 Кб.
почему именно 32?
Ядро тоже будет хранится на диске в виде одного файла длиной не более 8 Кб.
тоже почему?
Загрузчик сделаем на Бэйсике.Назовём его boot. Он будет загружать ядро на адрес #6000.[/QUOTE]
почему именно с 6000?
Pentagon-128/AY/FDD; Leningrad-48/128; Гамма-48 ред1; Искра- 1080; Искра-1085;
Не надо И (C) Электроник
Сейчас вот подберём подходящие дровишки...
Надо будет их доработать для нашей цели, сделать загрузчики и начать увязывать всё в кучу
почему именно с 6000? [/quote]
Задача согласно нашей концепции не может занимать в памяти более 32 Кб.
Поскольку мы сейчас рассматриваем конкретную программу пользователя - программу чтения текста - то она точно поместиться в 32 Кб
Ядро длиной до 8 Кб потому что загружаться будет на адрес #6000
В ядре у нас будет мало функций в этой версии - поэтому все они поместяться
---------- Post added at 19:18 ---------- Previous post was at 18:49 ----------
Почему адрес именно #6000 - а мне нравится круглое число 24576
Можно сделать адрес #5D80 (ниже уже сиспеременные, и могут быть проблемы при загрузке ядра из бэйсика, из разных коммандеров)
Ну будет ядро на 640 байт длиннее - нам это ничего сейчас не даёт,
тем более ,что после загрузки ядро сможет использовать больше чем 8 Кб
Реализация вышеуказанных компонентов не представляет особой сложности, за исключение аппаратнозависимы драйвером дисковода (порты контроллера закрытые, необходимо переходить в область пзу трдос, плюс нужно знание комманд ВГ93)
Драйвер клавиатуры будет имет только одну функцию - получить код символа
Драйвер экрана - тоже одна функция - вывести строку символов из буфера такой-то длины.
В драйвере файловой системы трдос нужно будет повозиться с произвольным чтением изнутри файла - применим для этого функцию lseek - установить указатель на определённое место в файле
можно получить домашнее задание? где почитать про командыВГ?
Pentagon-128/AY/FDD; Leningrad-48/128; Гамма-48 ред1; Искра- 1080; Искра-1085;
При наличии аппаратной реализации принципа "любая страница в любом окне" нужно планировать под память пользователя (программы/процесса) все 64к адресного пространства. Ядро держать в "теневой" странице и подключать только на время обращения к его функциям. Разница между 32к/64к для процесса критична в том, что в 64к уже достаточно большой простор для длинномерного компилированного С-кода, а в 32к на C разве что только "hello world" запускать.
Последний раз редактировалось Error404; 29.01.2010 в 16:56.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)