Покритикую маленько...

All about NedoOS

Postby lvd » 18 Nov 2020, 21:47

SfS wrote:У меня в примере вызов кода по указателю. Что не так?

Сорян, по началу кода подумал, что это что-то на сях и не стал скроллить и дальше смотреть. Но вот посмотрел:

1. во-1, тебе нужно было прибавить оффсет к адресу в de и оттуда ИЗВЛЕЧЬ адрес вызова. Ты получил только адрес адреса вызова, так понимаю, что не в этом цель была.

2. во-2 просто за push hl:pop de уже можно убивать (ну потому что ex de,hl или ld d,h:ld e,l) :) :) :)

3. в-3 даже в этом неправильном коде вместо эквилибристики со стеком можно было бы написать ex (sp),hl

В общем исправляй код, а в исправленном не забудь посчитать такты.

После чего остаётся вопрос - а РАДИ ЧЕГО тратить байты и такты? Ну да, загрузка драйверов в рантайме это какбэ красивая концепция, да, так умеют всякие линуксы (которые работают на процессоре, который примерно в сто тыщ раз быстрее Z80), но и что?
Щяс ядра NedoOS для любой конфигурации железа собираются за долю секунды каждый на пц, это точно надо менять? Уберём драйверы из этого кода, сэкономим 10 мс времени сборки, проебём миллионы медленных тактов Z80.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1738
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby Максагор » 18 Nov 2020, 22:02

Ок. Научи делать такие программы при помощи ужасма.
Причём и для случая например такого:


Блин iS-ассемблер, который проще ужасма и гораздо ближе к GENS4 (ессно, не тождественен) это умеет по ключу ассемблирования (там именно так все дрова и резиденты в нем ассемблируются), автоматом подставляя в конце блока кода, получающегося в итоге ассемблирования текста программы табличку констант для релоцирования, а "ужасм" в релоцирование не может, как Польша в космос. )))
А если серьезно - то там что - совсем не вариант асм научить? Если в принципе есть такой шанс, то формат таблицы можно прямо с iS-асма брать. Кстати, видел в сети на ФТПшках варианты дров под iS-DOS, написанные на SJASM, где такие таблички добавлялись "ручками". Т.е. как пример формата для создания чего-то своего можно брать и изучать. Если это вообще тут кому-то интересно - найду и скину для изучения.
Last edited by Максагор on 19 Nov 2020, 18:03, edited 1 time in total.
User avatar
Максагор
 
Posts: 257
Joined: 26 Apr 2010, 21:07
Location: Москва
Group: Registered users

Postby Максагор » 18 Nov 2020, 22:06

Ну да, загрузка драйверов в рантайме это какбэ красивая концепция, да, так умеют всякие линуксы (которые работают на процессоре, который примерно в сто тыщ раз быстрее Z80), но и что?


Опять-таки не обязательно всё "драйвер за драйвером" подгружать в рантайме при загрузке сети. Можно как и сейчас загружать все единым блоком кода (ну или блок драйверов отдельным файлом). Но сделать возможным уже в запущенной системе поменять один драйвер на другой/подгрузить еще один драйвер, а затем сохранить этот измененный блок драйверов заместо старого, и тогда при перезагрузке системы уже подгрузится новая конфигурация драйверов. Или не сохранять этот блок и тогда эта новая конфигурация будет действовать только до перезагрузки системы,а потом подгрузится прежний блок драйверов.
Именно так в iS/TASiS сделано. И это как раз тот случай, когда незазорно перенимать опыт с другой системы.
User avatar
Максагор
 
Posts: 257
Joined: 26 Apr 2010, 21:07
Location: Москва
Group: Registered users

Postby SfS » 19 Nov 2020, 06:05

lvd wrote:Знает ли разработчик GCC, сколько параметров ему надо? 64 килобайта? Мегабайт? Почему?


Знает:) В Linux ЕСТЬ ограничение на максимальную длину командной строки.
Прикинуть максимальное количество и размер аргументов разработчик точно может.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 229
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 19 Nov 2020, 06:16

alone wrote:Идея с JP интересна, но как узнать, сколько нужно программе? Если это компилятор, то может понадобиться в принципе бесконечное число параметров. По идее надо как-то их стримить, но я не придумал как. Может быть, специальный пайп?


Пайпы - это переусложнение.

Я предлагаю программисту самому решать - какой буфер выделить для аргументов. Например, для графического редактора - и 256 байт хватит (путь к файлу задать). А для компилятора какого - скажем 4К или 8К зададут размер буфера. Вот с переменными окружения непонятно как быть, да.

Есть ещё вариант: тупо все аргументы хранить в отдельной страницк 16К и номер этой страницы должен быть известен процессу.
Точно так же и с переменными окружения.

Ну и пара функций, которые возвращают argc и argv для текущего процесса.

Но это +32К на каждый процесс расходовать.

Можно сделать смешанно: если параметры помещаются в 128 байт - хранить их как сейчас, а если нет - то в отдельной странице. Ну а функции уж пусть их извлекают прозрачно для пользователя.

Но пайпы-шмайпы для параметров - куча времени уйдёт на реализацию, а профит близок к нулю.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 229
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 19 Nov 2020, 06:20

lvd wrote:Научи делать такие программы при помощи ужасма.


Я "научил" это делать sdcc при помощи bashа. Правда, адрес загрузки всегда был кратен 256. Но для модулей это ограничение несущественно.

Гдето тут.

https://github.com/salextpuru/sdcc-noin ... _reloc_tbl
https://github.com/salextpuru/sdcc-noin ... libso/so.c
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 229
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 19 Nov 2020, 06:24

lvd wrote:В общем исправляй код, а в исправленном не забудь посчитать такты.
После чего остаётся вопрос - а РАДИ ЧЕГО тратить байты и такты? Ну да, загрузка драйверов в рантайме это какбэ красивая концепция, да, так умеют всякие линуксы (которые работают на процессоре, который примерно в сто тыщ раз быстрее Z80), но и что?
Щяс ядра NedoOS для любой конфигурации железа собираются за долю секунды каждый на пц, это точно надо менять? Уберём драйверы из этого кода, сэкономим 10 мс времени сборки, проебём миллионы медленных тактов Z80.


Вопрос - а ради чего считать такты, если в драйвере всё равно тактов уйдёт на три порядка больше?

Я понимаю, ты бы поднял вопрос переписывания драйвера FAT на асме. Там есть что экономить и по скорости и по памяти.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 229
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 19 Nov 2020, 07:01

Ребятки, вы не поставили самый главный вопрос: ДЛЯ ЧЕГО СПЕКУ ОСЬ?

Just for fun - это оставим за скобками.

Итак, моё мнение.

Для запуска игрушек - ОС точно не нужна. Вообще. Достаточно фаталла какого-нибудь. Такая возможность есть в NedoOS, но это приятный бонус.

ОС нужна для прикладных программ: языка, редакторы, браузеры и проч. И как раз в этих применениях "такты" - вторичны. Архитектура ОС - первична.

Компилировать ОС на каждый чих, конечно, клёвая идея. Но неудобно. Скажем, пишешь ты драйвер. Так почему не дать возможность его динамически выгрузит-загрузит, не прибегая к кнопке RESET? Так что реализация динамически загружаемых драйверов это ещё и удобство разработки.
Да, в конце концов, можно иметь несколько вариантов драйвера и грузить нужный.

Далее, некоторые тут "считают такты"... Хотя реализация аналога select() сэкономит на порядки больше тактов: процесс будет ждать события и система не будет переключаться на этот процесс (то есть щёлкать его контекстом), пока событие не наступит. Например не появятся данные на порту или не выйдет заданный таймаут.



В своё время, в бытность студентом, был у нас один перец, который усираясь от собственного величия, писал на асме 3Д на 286й машинке. Работало, но тормозило не подетски. Другой парниша не стал усираться, а сначала почитал книжки по алгоритмам и спокойно на С написал прогу, которая то же 3Д на той же 286й выводило куда плавнее. Это я к чему. Можно до геморроя на пальцах "считать такты" и "экономить байты", но при этом получить плохой результат изза непродуманности архитектуры программы. А можно продумать архитектуру, реализовать её, а потом уж в узких местах оптимизировать.

Alone и DimkaM сделали офигенную работу: действующий макет ОС. ИМХО, мне кажется пора чуток остановиться, подумать куда двигаться дальше, отложить ассемблер в сторону, взять текстовый редактор и написать план работ. И главное - сразу поставить конечную цель по каждому пункту.
Если сейчас ребята упрутся в портирование игрулек - то ОС помрёт. Ведь и без неё игрульки работают замечательно.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 229
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby Максагор » 19 Nov 2020, 13:46

Компилировать ОС на каждый чих, конечно, клёвая идея. Но неудобно. Скажем, пишешь ты драйвер. Так почему не дать возможность его динамически выгрузит-загрузит, не прибегая к кнопке RESET? Так что реализация динамически загружаемых драйверов это ещё и удобство разработки.
Да, в конце концов, можно иметь несколько вариантов драйвера и грузить нужный.


ИМХО, мне кажется пора чуток остановиться, подумать куда двигаться дальше, отложить ассемблер в сторону, взять текстовый редактор и написать план работ. И главное - сразу поставить конечную цель по каждому пункту.


Поддерживаю обеими руками. А во втором случае (блокнот и проч.) готов подключиться к общему мыслительному процессу.
User avatar
Максагор
 
Posts: 257
Joined: 26 Apr 2010, 21:07
Location: Москва
Group: Registered users

Postby alone » 19 Nov 2020, 20:09

Для замены драйвера надо перекомпилировать только ядро.
Передача параметров через пайпы проще, чем два разных механизма передачи. Но для текущих задач пока хватает 128 байт.
Планы надо строить исходя из имеющихся человеко-часов. А это 20 часов (мои) + 20 минут (DimkaM) в неделю. Возможно, на Speccy есть и другие программисты, которые умеют планировать своё время, но мы таких пока не нашли. Обычно те, кто знает ассемблер, своё свободное время тратят на форумах и говорят о том, что времени на кодинг нет, независимо от того, сколько у них детей, есть ли fulltime job и т.п.
User avatar
alone
 
Posts: 45
Joined: 04 Jun 2007, 21:04
Group: Registered users

PreviousNext

Return to Обсуждение NedoOS

Who is online

Users browsing this forum: No registered users and 1 guest