nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 13 Dec 2017 14:56



Reply to topic  [ 44 posts ]  Go to page Previous  1, 2, 3  Next
Операционная система ShaOS 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Post 
Формат квазидисков операционки ShaOS:

Cтруктура аналогична ордосу - у каждого файла есть 16-байтовый заголовок (есть возможность иметь 32-байтовый - с меткой времени), среди файлов могут попадаться подкаталоги. Формат простого заголовка:
Code:
struct HEADER
{
   char name[8];
   BYTE ext;
   UINT len;
   UINT adr;
   BYTE atr;
   UINT kc;
};

где
name - имя файла или каталога
ext - однобайтовое представление расширения файла (есть стандартная таблица перекодировки), для имени подкаталога оно 00
len - длина файла в параграфах (т.е. кратно 16 байтам), для подкаталога - 0000 (используется при пробегании по файлам для поиска следующего файла)
adr - адрес загрузки файла, для подкаталога - FFFF
atr - атрибуты файла
kc - контрольная сумма для файла, а для подкаталога это является указателем в параграфах (т.е. кратно 16 байтам) внутри образа диска на цепочку файлов-подкаталогов этого подкаталога

также описатель может быть не только файлом или каталогом, но и так называемым "ответвителем", когда цепочка файлов-подкаталогов прерывается и перескакивает в другое место ром-диска...

_________________
:eugeek: https://twitter.com/Shaos1973


14 Aug 2011 13:51
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Post 
В связи с очередным осенним обострением я решил подружить nedoPC-580M и ShaOS. Идея заключается в добавлении в эту операционку многозадачности!
Чётко можно выделить 4 категории железяк, на которых эта операционка потенциально может работать:
1) один процессор i8080/i8085/z80 с фиксированной памятью без прерываний (РК86);
2) один процессор i8080/i8085/z80 с фиксированной памятью и прерываниями по таймеру (оригинальный ZX48);
3) один процессор i8080/i8085/z80 с банками памяти и прерываниями по таймеру ("современные" ZX клоны, например Sprinter);
4) несколько процессоров i8080/i8085/z80 с общей памятью, разделённой на банки, а также прерываниями по таймеру (nedoPC-580M).
Я вчера осознал, что программист может писать одну мультитредную программу, которая может работать на любой из выше-перечисленных категорий железа БЕЗ перекомпиляции! Для этого всего-то лишь надо придумать вменяемый API и написать 4 варианта операционки для каждой категории:
1) поддерживается кооперативная многозадачность, нет возможности непосредственно аллоцировать большие объёмы памяти (но можно реализовать работу с виртуальной памятью, находящейся на внешнем носителе);
2) поддерживается вытесняющая многозадачность и виртуальная память (см.выше);
3) поддерживается вытесняющая многозадачность и возможность непосредственной аллокации больших объёмов памяти (плюс виртуальная память);
4) поддерживается вытесняющая многозадачность и параллельная работа процессов на разных процессорах с общей памятью, а также большие аллокации и возможность использования виртуальной памяти.

_________________
:eugeek: https://twitter.com/Shaos1973


28 Aug 2012 21:11
Profile WWW
Maniac

Joined: 05 Nov 2008 22:47
Posts: 234
Location: 81.28.208.238
Reply with quote
Post 
Quote:
В связи с очередным осенним обострением я решил подружить nedoPC-580M и ShaOS. Идея заключается в добавлении в эту операционку многозадачности!
Чётко можно выделить 4 категории железяк, на которых эта операционка потенциально может работать:
1) один процессор i8080/i8085/z80 с фиксированной памятью без прерываний (РК86);
2) один процессор i8080/i8085/z80 с фиксированной памятью и прерываниями по таймеру (оригинальный ZX48);
3) один процессор i8080/i8085/z80 с банками памяти и прерываниями по таймеру ("современные" ZX клоны, например Sprinter);
4) несколько процессоров i8080/i8085/z80 с общей памятью, разделённой на банки, а также прерываниями по таймеру (nedoPC-580M).
Я вчера осознал, что программист может писать одну мультитредную программу, которая может работать на любой из выше-перечисленных категорий железа БЕЗ перекомпиляции! Для этого всего-то лишь надо придумать вменяемый API и написать 4 варианта операционки для каждой категории:
1) поддерживается кооперативная многозадачность, нет возможности непосредственно аллоцировать большие объёмы памяти (но можно реализовать работу с виртуальной памятью, находящейся на внешнем носителе);
2) поддерживается вытесняющая многозадачность и виртуальная память (см.выше);
3) поддерживается вытесняющая многозадачность и возможность непосредственной аллокации больших объёмов памяти (плюс виртуальная память);
4) поддерживается вытесняющая многозадачность и параллельная работа процессов на разных процессорах с общей памятью, а также большие аллокации и возможность использования виртуальной памяти.

Примерно такакая идеология имела в свое время
системв RT-11 от DEC. Имелись разные мониторы:
SJ - для одной задачи
MJ - многозадачная
XM - расширенная память
BL - вообще без ОС
(кажется примерно такие названия)
Начсет API есть кое-какие идеи/наработки, и кое-что работает...


29 Aug 2012 21:17
Profile
Retired
User avatar

Joined: 25 Jul 2011 03:14
Posts: 1342
Location: WWW
Reply with quote
Post 
Shaos wrote:
P.S. Откопал в своих старых бумагах, что название ShaOS я придумал 25 января 1998 года, а до этого (примерно с апреля 1996) система имела кодовое наименование S004, а ещё раньше (конец 1992) - SH-DOS или ROS (Radio Operating System)...
вот с этого места поподробнее, пожалуйста


29 Aug 2012 21:43
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Post 
MC68k wrote:
Shaos wrote:
P.S. Откопал в своих старых бумагах, что название ShaOS я придумал 25 января 1998 года, а до этого (примерно с апреля 1996) система имела кодовое наименование S004, а ещё раньше (конец 1992) - SH-DOS или ROS (Radio Operating System)...
вот с этого места поподробнее, пожалуйста


Имелось ввиду ОС для Радио-86РК, которую я писал прямо в кодах в тетрадочке :)

_________________
:eugeek: https://twitter.com/Shaos1973


29 Aug 2012 21:57
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Post 
aav8 wrote:
Начсет API есть кое-какие идеи/наработки, и кое-что работает...


Ну рассказывай :)

_________________
:eugeek: https://twitter.com/Shaos1973


29 Aug 2012 21:59
Profile WWW
Maniac

Joined: 05 Nov 2008 22:47
Posts: 234
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Ну рассказывай

Основная мысля была в отношении файловой системы:
Сама ось (и тем более какая-либо программа) ничего
не знает как устроены каталоги и как и где
располагаются файлы. Все это ложится на драйвер устройства.
Т.е. ось просто передает файловые запросы конкретному устройству
запросы типа:
Открыть файл <устройство>:[имя файла]. возвращается
какой-то идентификатор.
Прочитать/записать чего нибудь. Если при открытии файла имя файла
было пустое - при чтении выдается каталог этого устройства.
Конечно закрыть файл.
И какие-то дополнительные функции, о которых знает утилита,
специфичная для этого конкретного устройства.
Сама ось ничего не умеет, кроме как загрузить какой-то файл и передать ему управление.
т.е. что-бы посмотреть каталог я набираю:
LN:DIR.EXE LN:
Сейчас работают устройста:
ТТ: - терминал (как файловое устройство).
LN: - файлы на PC через COM-порт.
RM: - файлы в ПЗУ.
Все это вертится в связке Партнер 01.01 + win98.
На win98 также есть терминал к партнеру (все-таки на PC кнопки
удобнее).
По идее это не совсем OS (как-бы OS / 2 или даже OS / 8) - больше
похоже на что-то вроде ядра, к которому пристегивается
необходимый функционал.
Подробнее - чуть позже - надо все это дело разыскать - давно не занимался...


30 Aug 2012 02:29
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Post 
У меня примерно также - драйвера файловой системы, выстроенные в цепочку и обрабатывающие только свои диски. У меня правда более классические наименования дисков - A:, B:, C:

_________________
:eugeek: https://twitter.com/Shaos1973


30 Aug 2012 02:44
Profile WWW
Maniac

Joined: 05 Nov 2008 22:47
Posts: 234
Location: 81.28.208.238
Reply with quote
Post 
Quote:
У меня примерно также - драйвера файловой системы, выстроенные в цепочку и обрабатывающие только свои диски. У меня правда более классические наименования дисков - A:, B:, C:

Я все делал в таблицах.
В таблице назватие девайса и его адрес.
А там еще таблица кажется на 8 входов с адресами функций.
Две буквы в названии, чтобы можно было различать или не различать
тот-же терминал/принтер/<еще чего нибудь> от склада файлов.
А как в nix* - все из корня - для 8 разрядов тяжеловато.


30 Aug 2012 03:58
Profile
God
User avatar

Joined: 13 Nov 2010 07:06
Posts: 1291
Reply with quote
Post 
aav8 wrote:
А как в nix* - все из корня - для 8 разрядов тяжеловато.

Зато, на мой взгляд, чудовищно удобно.
И вообще, некоторые академические товарищи утверждают, что файловая система must die :).


30 Aug 2012 11:36
Profile
Maniac

Joined: 05 Nov 2008 22:47
Posts: 234
Location: 81.28.208.238
Reply with quote
Post 
Quote:
А как в nix* - все из корня - для 8 разрядов тяжеловато.


Зато, на мой взгляд, чудовищно удобно.
И вообще, некоторые академические товарищи утверждают, что файловая система must die

Такая идеология изначально была в nix*.
Мне не понравилось деление на блоковые/неблоковые устройства.
все из корня - действительно удобно и красиво. но для 8 разрядов тяжеловато (повторяюсь) поэтому весь функционал (конкретно файлы) переложил на PC.
Еше подумывал в командной строке такую конструкцию:
??:>LM.ROM.EDIT
должен будет вызваться этот объект (в данном случае, к примеру, редактор)
Примерно таким-же образом и доступ ко всему остальному
... обработка строк в x80 ...


30 Aug 2012 12:08
Profile
Doomed

Joined: 26 May 2003 09:57
Posts: 599
Reply with quote
Post 
VituZz wrote:
И вообще, некоторые академические товарищи утверждают, что файловая система must die :).

Даже если заменить файловую систему на базу данных и/или сериализуемые на диск объекты, всё равно любую древовидную иерархию объектов можно считать файловой системой. Вряд-ли объекты в такой системе будут безымянными, а древовидная именованная иерархия объектов - это и есть файловая система.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


31 Aug 2012 02:02
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Снова выложил описание операционки SHAOS от 1998 года:

http://nedopc.org/nedopc/shaos/shaos.htm

Думаю при реанимировании упаковать вектор вызовов системных подпрограмм покомпактнее, чтобы было без дырок, тогда в область #CCxx влезет 256/3=85.33 переходов на подпрограммы...

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jun 2016 01:45
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Смотрю в свои старые тетрадки - весной 1994 я выдумал способ писать перемещаемые программы для 8080 под названием SYS-TRANS - суть в том, что переходы и вызовы подпрограмм по конкретным адресам (а также обращение к памяти за данными) происходят не напрямую, а через специальные подпрограммы, которые модифицируют адрес в соответствии с тем, в каком месте памяти загружена такая программа. Вот слегка переработанный вариант такого подхода, который можно вставить в новую ShaOS:

Предположим у нас есть подпрограмма SYS по адресу #CC0F, которая при вызове залезает по адресу возврата и берёт один или более байтов идущих следом за вызовом, чтобы сделать сдедующее:
CD 0F CC 00 - корректировка регистровой пары BC путём прибавления к ней базового адреса загрузки SYS-программы;
CD 0F CC 10 - корректировка регистровой пары DE путём прибавления к ней базового адреса загрузки SYS-программы;
CD 0F CC 20 - корректировка регистровой пары HL путём прибавления к ней базового адреса загрузки SYS-программы;
CD 0F CC 30 - по адресу HL находитя имя SYS-программы (с аргументами), которую надо загрузить (если ещё не загружена) и выполнить;
CD 0F CC xx yy zz - во всех остальных случаях базовый адрес прибавляется к zzyy и оно вместе с xx копируется в специальную область памяти, где находятся 6 байтов:
xx yy' zz' C3 aa bb - где bbaa это адрес следующего за zz байта, т.е. таким образом можно корректировать адреса в трёхбайтовых командах 8080 - таких как условные переходы или условная передача управления. Вот собственно код (пока без логики загрузки):
Code:
SYS-BASE DW 0
SYS-TEMP DW 0
SYS-CODE DB 0,0,0,0,0,0

SYS:
 SHLD SYS-TEMP ; запоминаем HL
 POP HL ; вытаскиваем адрес возврата
 PUSH PSW ; запоминаем на стеке аккумулятор и флаги
 MOV A,M ; читаем байт по адресу возврата
 INX H ; инкрементируем HL
 CPI #00 ; проверяем прочитанный байт на #00
 JNZ SYS1 ; если не равно, то идём на SYS1
 POP PSW ; восстанавливаем аккумулятор и флаги
 PUSH H ; запоминаем на стеке новый адрес возврата
 LHLD SYS-BASE ; загружаем базовый адрес текущей SYS-программы
 DAD B ; корректируем адрес BC
 PUSH H ; кладём HL на стек
 POP B ; снимаем со стека BC
 LHLD SYS-TEMP ; восстанавливаем HL
 RET ; возвращаемся
SYS1:
 CPI #10 ; проверяем прочитанный байт на #10
 JNZ SYS2 ; если не равно, то идём на SYS2
 POP PSW ; восстанавливаем аккумулятор и флаги
 PUSH H ; запоминаем на стеке новый адрес возврата
 LHLD SYS-BASE ; загружаем базовый адрес текущей SYS-программы
 DAD D ; корректируем адрес DE
 PUSH H ; кладём HL на стек
 POP D ; снимаем со стека DE
 LHLD SYS-TEMP ; восстанавливаем HL
 RET ; возвращаемся
SYS2:
 CPI #20 ; проверяем прочитанный байт на #20
 JNZ SYS3 ; если не равно, то идём на SYS3
 POP PSW ; восстанавливаем аккумулятор и флаги
 PUSH H ; запоминаем на стеке новый адрес возврата
 PUSH D ; запоминаем на стеке DE
 LHLD SYS-TEMP ; восстанавливаем HL
 XCHG ; меняем местами DE и HL
 LHLD SYS-BASE ; загружаем базовый адрес текущей SYS-программы
 DAD D ; корректируем адрес сохраняя его в HL
 POP D ; восстанавливаем DE
 RET ; возвращаемся
SYS3:
 CPI #30 ; проверяем прочитанный байт на #30
 JNZ SYS_ ; если не равно, то идём на SYS_
 POP PSW ; восстанавливаем аккумулятор и флаги
 PUSH H ; запоминаем на стеке новый адрес возврата
 ; TODO: загрузка SYS-файла в память
 LHLD SYS-TEMP ; восстанавливаем HL
 RET ; возвращаемся
SYS_:
 STA SYS-CODE ; запоминаем байт после вызова как команду
 PUSH D ; запоминаем DE
 MOV E,M ; читаем следующий байт
 INX H ; инкрементируем HL
 MOV D,M ; читаем следующий байт
 INX H ; инкрементируем HL
 MVI A,#C3 ; запоминаем в аккумуляторе код #C3
 STA SYS-CODE+3 ; запоминаем код #C3
 SHLD SYS-CODE+4 ; запоминаем адрес возврата после команды JMP
 LHLD SYS-BASE ; загружаем базовый адрес текущей SYS-программы
 DAD D ; корректируем адрес сохраняя его в HL
 SHLD SYS-CODE+1 ; запоминаем значение HL в коде
 POP D ; восстанавливаем DE
 POP PSW ; восстанавливаем аккумулятор и флаги
 JMP SYS-CODE ; передаём управление на сформированную последовательность инструкций

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jun 2016 04:33
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15910
Location: Colorado
Reply with quote
Ну и второй способ представления перемещаемых программ это когда к коду приделан bitmap размером 1/8 размера кода, где каждый бит отвечает за байт кода и сигнализирует о том, что этот байт содержит старшую половину адреса и должен быть модифицирован при загрузке в определённую область памяти (с шагом 256 байт) - такими будут EXE и DLL файлы (см. мой LIBMAN, написанный в 2002 году для Спринтера). Получить такой битмап очень просто - компилируем ASM-программку с ORG 0 (и именно этот код используем при создании файла), а потом с ORG 256 и побайтно сравниваем с предыдущим кодом - если байты отличаются, то битик в битмапе ставится в 1.

Плюс такого BITMAP подхода - программа работает максимально быстро, как будто бы оттранслирована для того адреса, куда загрузилась.
Минусы - такие программы могут быть перемещаемы только с шагом в 256 байт и не могут быть перенесены в другое место памяти после загрузки т.к. в момент загрузки произошла привязка к конкретным адресам.

Плюсы SYS-TRANS подхода, описанного в предыдущем посте - такие программы могут быть перемещаемы хоть с шагом в 1 байт, что пригодно для очень маленьких программ, а также возможна перемещаемость в пределах памяти уже после загрузки, т.к. привязки к конкретным адресам нет.
Минусы - все переходы и вызовы подпрограмм внутри SYS-модулей делаются через подпрограмму ShaOS, описанную выше, и это может заметно замедлить работу таких программулек, ну и главное, что такие программульки надо специально писать (хотя теоретически можно предложить алгоритм, детектирующий работу с адресами и подставляющий нужные вызовы по ходу программы перед трансляцией).

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jun 2016 17:30
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 44 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.