Новая модель ядра

Kernel architecture questions
  • Mario79
    Ни фига не понимаю в чём дело.
    http://infinity-sound.narod.ru/kernel227.7z здесь новое ядро и драйверы. С ним видимо будет тоже самое, но дальше лучше проверять на нём иначе запутаемся в версиях.
  • Serge
    Хорошо.
  • Если в цикле вот такую штуку реализовать :

    mov [counter_cur],32

    next_cursor:

    mov eax, 37
    mov ebx, 4 ;load cursor
    mov ecx, my_cursor
    mov edx, LOAD_FROM_MEM
    int 0x40

    mov [cur_id],eax
    mov ecx, eax
    mov eax, 37
    mov ebx, 5 ;set cursor
    int 0x40

    mov ecx,[cur_id]
    mov eax,37
    mov ebx,6
    int 0x40

    dec [counter_cur]
    jnz next_cursor

    То вместо курсора мыши в окне появляется ерунда.Причём эта ерунда появляется во всех окнах,работающих со сменными курсорами.
  • Serge
    С файлами http://infinity-sound.narod.ru/kernel227.7z система нормально выключается и перезагружается.
    У меня, где на рамдиске должен располагаться драйвер ATI в корне или в папке драйверов и вообще нужен ли он мне, так как ты говорил, х1300 не поддерживается.
  • Mario79
    У тебя какя-то путаница с дровами была стопудово. #214+ висли на выключении/перезапуске если драйверы были до #214. Больше таких проблем быть не должно. Начиная с #227 версия драйверов проверяется.
    Все драйверы должны быть в папке /drivers. У тебя ATI работать не будет, так что можно удалить.
  • andrew_programmer
    Короче фигня такая: ф.37.6 ещё не написана, 37.5 не проверяла курсор на правильность и ещё была ошибка в коде из-за которой максимальное число курсоров было не 64 а 32. Если учесть ещё один системный курсор, то последний вызов 37.4 был неудачным и система возвращала 0.
    Второй и третий пункты я исправил а с первым есть небольшая проблема потому что аппаратные курсоры размещаются в видеопамяти и надо их удалять через драйвер. Исправленное ядро #230

    Если 37.5 передать неправильное значение то система установит системный курсор - стрелку, так что если нужно вернуть основной курсор проще это сделать так: set_cursor(0);
    Все курсоры кроме системных принадлежат родительскому потоку, поэтому удалять курсоры должен тот же поток что и создавал их. Если удаляется активный курсор то он заменится на системный.
  • Serge
    Значит, тема про курсоры относится только к тем комперам, которые этот драйвер используют? Или это для стандартного Vesa уже есть?
  • Mario79
    Для всех. VESA код в файле video/cursor.inc А драйвер дополнительно для R200-R400 видеочипов.
  • andrew_programmer wrote:Во всём винована программа rdsave.
    При сохранении образа на жёсткий диск могут быть такие результаты:

    1)Образ сохраниться на жёстком диске(как и положено).

    2)Программа сделает вид,что образ сохранился(индикатор загрузки процесора подскакивает),но при этом ничего на жёстком диске не сохраниться.

    3) При нажатии на кнопку сохранить программа ничего не делает(не реагирует).

    4)При нажатии на кнопку сохранить, программа виснет (было несколько раз).

    5)При сохранении образа система намертво виснет( было один раз в какой-то версии ядра )


    Как раз ситуация 2 и привела к тому,что в образе было не ядро 224 ревизии,а старое.

    То что я написал про RDSAVE относиться как минимум к десятку версий ядра.В каком именно ядре у меня повисла система из-за RDSAVE(пункт 5 ) - непомню.Но сейчас такого не повторяется.
    rdsave использует 58-ю функцию (точнее говоря, функцию, к которой сводится 58-й системный вызов для /hd*/*). 58-я функция, как я уже говорил, глючит. Например, какое-то время назад (довольно давно, когда DMA и в помине не было и 70-я функция только внедрялась) я пытался скопировать файл с /fd/1 на /hd2/1/dir/subdir через copy2 (которая тогда работала через 58-ю функцию). Гм... файл читался, но вообще не записывался. Потом я попытался скопировать тот же файл на /hd0/1/ (в корневой каталог). Гм... лучше бы я этого не делал... что сделалось с частью FAT, я описывать не берусь. К счастью, это всего лишь коснулось файлов игрушек (и то не моих).
    P.S. Ошибки с DMA здесь точно ни при чём, поскольку начиная с ревизии 210 запись всегда ведётся в режиме PIO.
    Ушёл к умным, знающим и культурным людям.
  • Я нашел один баг.
    Раньше ,используя диалоговое окно syxtree ,можно было сохранять файлы в любой дериктории.Теперь при выборе дериктории, отличной от корневой, syxtree не сохраняет файлы(не реагирует на нажатие ENTER).В случае корневой дериктории всё нормально.
    Я перебрал все возможные варианты этой причины.Пробовал все версии ANIMAGE.Пробовал разные дискеты и разные образы.Всё сходилось к тому,что ошибка происходит где-то в ядре.
  • Serge

    Я окончательно запутался с курсорами.
    Я думал,что для создания нового курсора необходимо сначала удалить старый(если он был создан) , а потом создать новый.
    Но если это действие произвести 64 раза,то курсор перестанет изменяться.Но ведь при работе в программе пользователь может нажать различные кнопки(у каждой кнопки свой курсор) больше чем 64 раза.
    Как же тогда нужно реализовывать в программах изменяющиеся курсоры ?
  • andrew_programmer
    Всё проще. Загружаешь курсоры (сейчас максимум 63 но после добавления системных 48 ) и сохраняешь их номера. Во время работы устанавливаешь те курсоры, которые нужны. Перед выходом из программы удаляешь все загруженные курсоры. Это должен делать тот же поток что и загружал их. Если их не удалять то они будут оставаться в памяти пока система сама не удалит бесхозные курсоры. Код для загрузки курсоров который я приводил примерно так и работает

    Код для выгрузки

    Code: Select all

    .on_exit:
    
          lea esi, cursor_brush
          mov ebx, 6
    @@:
          mov ecx, [esi]
          test ecx, ecx
          jz .done
    
          mov eax, 37
          int 0x40
    
          add esi, 4
          jmp @B
    .done:
    
    Пока курсоры загружены можно менять их столько раз сколько надо.
  • Протестировав несколько более ранних дистрибутивов, я выяснил, что проблема с syxtree связана с ошибкой в самом syxtree(неправильно работает режим save dialog).В дистрибутиве 580 файлы нормально сохраняются в различных дерикториях,а не только в корневой).В дистрибутивах 600 и 630 содержиться syxtree с ошибками(не работает диалог сохранения).
    У меня нет времени,чтобы копаться в syxtree.Если кто-нибудь исправит ошибку в syxtree, то я выложу новую версию ANIMAGE c исправленным syxtree.
  • andrew_programmer
    Sysxtree был переписан Diamon'ом на 70 функцию, в 0580, скорее всего он еще работал с 58 функцией.
    А вообще это приложение скоро станет не актуальным, так как есть KFAR, а скоро будет еще кое-что.
    Правда оно используется в паре приложений для открытия файлов.
  • Who is online

    Users browsing this forum: No registered users and 8 guests