Спасибо, что откликнулись.
alone wrote:1. В NedoOS используются не рестарты, а макросы. Как они реализованы - внутреннее дело системы. Во всяком случае, переключение страниц работает быстро, при этом программа не зависит от конкретной модели компа.
Так я про реализацию макросов и пишу. Суть ОС в том, что есть некий интерфейс, дёргая который, программа вызывает нужные ей функции, не зная как они реализованы внутри. Макросы же требуют полной пересборки ПО при изменении реализации макроса. То есть бинари уже просто так не позапускаешь.
alone wrote:2. Это сложно, а практической пользы не видно.
А в чем сложность? Проверка на какой точке монтирования лежит файл разве что. Впрочем, не вопрос: буквы так буквы.
Хотя, не понимаю, чем намного сложнее это.
alone wrote:3. Мы думаем над другой передачей параметров, но ничего пока не придумали. Есть конкретное ТЗ?
Ну, например, так:
программа запускается всегда с адреса 0x100 как я понимаю. Ок. Считаем, что первые три байта - переход на код программы. (jpxx) следующие два байта - размер буфера параметров. И далее - сам буфер. То есть программа выглядит в памяти так:
- Code: Select all
;// Загрузка программы
org 0x100
entry:
jp start
dw bufsize; размер буфера параметров
par: ; 0x105
asciiz 'par0',
asciiz 'par1',
asciiz 'par2',
.....
db 00,00 ;// два нуля подряд - метка того, что параметров больше нет
.....
; 0x105 + bufsize
dw envsize; размер ,буфера переменных окружения
env: ; 0x105 + bufsize +0x0002
asciiz 'var0','var0_mean;
asciiz 'var1','var1_mean;
asciiz 'var2','var2_mean;
.....
db 00,00 ;// два нуля подряд - метка того, что переменных больше нет
.....
start: ; 0x105 + bufsize +0x0002 + envsize
;// Код программы
.............
То есть программа сама задаёт предельные значения буферов для параметров и переменных окружения. ОС должна разбить параметры по пробелам и поместить их в буфер в виде ASCIIZ строк.
Достоинства:
- формат исполняемого файла не меняется (совместим с текущим).
- размеры буферов известны, значит ОС может детектировать ошибку "слишком много параметров".
- есть понятие "переменная окружения" (должны наследоваться от процесса, который запускает другой процесс). Этого, кстати, тоже нет. А очень полезная штука иногда.
- программист сам решает, какого буфера достаточно для его программы. В пределе - нулевые буфера, если параметров не может быть вообще.
alone wrote:4. Драйвер сетевой карты подключается в ядро условной компиляцией по примеру w5300.asm. Конкретные ключи условной компиляции прописываются в батнике для конкретной модели компа.
Проблема отсутствия HAL уровня как раз в том, что под каждое устройство приходится изобретать свой API. Да ещё и невозможно две сетевухи воткнуть. Оно, конечно, не очень и надо, но мало ли.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)