User Tag List

Страница 28 из 47 ПерваяПервая ... 242526272829303132 ... ПоследняяПоследняя
Показано с 271 по 280 из 466

Тема: Алан Кокс представил Unix-подобную ОС Fuzix, ядро которой потребляет около 40 Кб ОЗУ

  1. #271

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо. А ты на гитхабе есть? может закоммитишь это все туда?

  2. #271
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #272

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На гитхаб я пока не пойду

    ---------- Post added at 21:43 ---------- Previous post was at 21:42 ----------

    Вот интересно, в библиотеке есть putenv.c и setenv.c, обе хранят в статической переменной (каждая в своей) предыдущий выделенный блок памяти. И как это работает?

  4. #273

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    [/COLOR]Можно и не менять syscall_exec.c, только адрес переменных вот так считать:
    Код:
    		ld hl, #4		; environ
    		add hl,sp
    		ld (_environ), hl
    		call _main
    		jp _exit

    у меня этот вариант и есть. хренатотам.. через раз пускается(

    ---------- Post added at 22:57 ---------- Previous post was at 22:55 ----------

    кстати, третьим параметром в main() в твоём варианте envp не передать..

    ---------- Post added at 23:01 ---------- Previous post was at 22:57 ----------

    лучше так:

    ld hl, #6
    add hl, sp
    ld (_environ), hl
    ld hl, #_exit ; return vector
    push hl
    jp _main ; go
    тогда main( int argc, char* argv[], env** env); можно писать.

    ---------- Post added at 23:44 ---------- Previous post was at 23:01 ----------

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

  5. #274

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Загружается шелл через раз. Иногда почемуто пишет "login incorrect".
    или это может драйвер tty?
    У меня всё-превсё глючит. Login incorrect даже чаще, чем correct. Пока не нашел из-за чего. Попробую фикс b2m.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  6. #275

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    лучше так:
    Не взлетит. В environ попадут не те данные.
    И потом, что за хрень с адресом возврата, чем тебе не нравится call _main / jp _exit?

    Никак не могу поймать, кто пишет 01 по случайному адресу. Проблема с login-ом чаще всего из-за этого.

    ---------- Post added at 00:23 ---------- Previous post was at 00:17 ----------

    Я думал, это из-за неправильной environ, но сейчас там правильный адрес, но всё равно глючит.
    Кстати, putenv не дублирует входящую строку, эта процедура лишь накапливает адреса, смысла передавать туда локальный buf нет никакого.

    ---------- Post added at 00:33 ---------- Previous post was at 00:23 ----------

    Ого, поставил бряк на начало программы, и записал в файл, что загрузилось. Сравнил с оригинальным init - 7 байт забиты числом 01! Стоят достаточно далеко друг от друга. Т.е. загрузка файла глючит! Понятно теперь, почему иногда рожица выскакивает в сообщении из issue

    ---------- Post added at 00:39 ---------- Previous post was at 00:33 ----------

    Отключил прерывания - работает идеально. Надо копать прерывания в момент загрузки файла.

    ---------- Post added at 00:41 ---------- Previous post was at 00:39 ----------

    Цитата Сообщение от SfS Посмотреть сообщение
    кстати, третьим параметром в main() в твоём варианте envp не передать..
    Нахрена козе баян. envp сохраняется во вполне доступной статической переменной environ.

  7. #276

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    У меня всё-превсё глючит. Login incorrect даже чаще, чем correct. Пока не нашел из-за чего. Попробую фикс b2m.

    А. ну значит не я один страдалец

    Я уж и так и этак - уж думал, что с железом что не то.

    Ну ладно, надеюсь, что пока я неделю езжу - разберётесь, кто в память срёт.
    Последний раз редактировалось SfS; 01.12.2014 в 06:58.

  8. #277

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Ну ладно, надеюсь, что пока я неделю езжу - разберётесь, кто в память срёт.
    Кто, понятно - обработчик прерывания. Непонятно, каким образом это ему удаётся, что никто не видит

    Я и раньше пробовал отключать прерывания, но всё равно глючило. Но это было из-за неправильного адреса переменных среды. А теперь, если прерывания отключить, то загруженный init в точности совпадает с оригиналом.

  9. #278

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Кто, понятно - обработчик прерывания. Непонятно, каким образом это ему удаётся, что никто не видит

    Я и раньше пробовал отключать прерывания, но всё равно глючило. Но это было из-за неправильного адреса переменных среды. А теперь, если прерывания отключить, то загруженный init в точности совпадает с оригиналом.
    А может всё дело гдето в районе freebuf() bfree() ? ну там места не хватает гдето для буфера - и он косячит?

  10. #279

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Кто, понятно - обработчик прерывания. Непонятно, каким образом это ему удаётся, что никто не видит

    Я и раньше пробовал отключать прерывания, но всё равно глючило. Но это было из-за неправильного адреса переменных среды. А теперь, если прерывания отключить, то загруженный init в точности совпадает с оригиналом.
    Да, спасибо за наводку, разобрался.
    Глючат функции переключения банок - map_*. В паре мест там есть вероятность, что если в процессе работы произойдет прерывание, то предыдущее (временно сохраненное) значение аккумулятора пропадет. А т.к. эти функции дергаются кучу раз в цикле, то вероятность крайне велика.
    Можно добавить DI везде в начале всех map_*. А можно более радикально - я переписал всё обратно на использование стека. Делал на переменных с тем, чтобы однажды перекинуть UDATA в банкуемую область, но ну нафиг, хоть бы сначала то, что есть, отладить
    Сейчас логин всегда проходит и шелл всегда стартует. Но при попытке что-нибудь запустить всё гарантированно виснет. Надо дальше ковырять.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  11. #280

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кажется я понял, как всё глючит.

    Глюк происходит внутри цикла __uput. В теории, прерывания в этот момент должны быть запрещены, но switch_bank подло разрешает их перед возвратом. В итоге, если прерывания возникает между ld (place_for_a),a в map_process_always и запрещением прерывания в switch_bank, то place_for_a портится несколько раз, и в конце концов вызовом map_restore. К этому моменту в регистре А находится флаг _kernel_flag, равный еденице.

    Короче, надо switch_bank фиксить, как там в комментарии сказано.

    ---------- Post added at 15:30 ---------- Previous post was at 15:29 ----------

    Опоздал

Страница 28 из 47 ПерваяПервая ... 242526272829303132 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Куплю БК 0010 или подобную машинку в Украине
    от LeBohdan в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 06.07.2008, 23:29
  2. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16
  3. Ответов: 16
    Последнее: 02.08.2005, 12:20
  4. Ответов: 10
    Последнее: 18.02.2005, 17:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •