Новый эмулятор

Running Kolibri and its programs in other OSes
  • Поддержка функций работы с кучей процесса (выделение/освобождение памяти) 68.11, 68.12, 68.13. Ссылки всё те же:
    http://diamondz.land.ru/KlbrInWin.7z
    http://diamondz.land.ru/KlbrInWin_src.7z
    Ушёл к умным, знающим и культурным людям.
  • Поддержка функции загрузки DLL (в том числе упакованных) 68.19.
  • Поддержка функций работы с курсорами 37.4 и 37.5. Добавлена иконка (автор - goglus) для самого exe-шника и для создаваемых окон.
  • diamond
    Эмулятор не поддерживает F18/11, меня терзают смутные сомнения, что из ядра она когда-нибудь исчезнет...
    Или я не прав?

    offtop:
    В винде я использую расширение kex для запуска приложений через эмулятор, может и в Колибри пора ввести какое нибудь расширение?
  • Mario79 wrote:Эмулятор не поддерживает F18/11, меня терзают смутные сомнения, что из ядра она когда-нибудь исчезнет...
    Эмулятор поддерживает краткую версию таблицы, на 10 байт, потому что это нужно для работы sysxtree. Эмулятор не поддерживает полную версию таблицы, поскольку она нигде не используется.
    А вообще использование полной версии чревато головной болью в будущем, правда, неясно, у кого: то ли у автора программы, использующей эту функцию, то ли у ядерщика, собравшегося добавить очередную файловую систему или улучшить поддержку существующей. Даже если ограничиться первыми двумя полями - начальный/конечный сектор раздела (как между строк рекомендуется в документации), всё равно появятся проблемы, если в ядре появится поддержка 64-битных номеров секторов (aka LBA48).
    В винде я использую расширение kex для запуска приложений через эмулятор
    Во-первых, в винде можно ассоциировать пустое расширение с программой, правда, единственный известный мне способ - лезть ручками в реестр (HKEY_CLASSES_ROOT) и делать по аналогии с каким-нибудь уже существующим расширением. Во-вторых, лично я работаю в Far, используя собственный плагин, и мне вообще пофиг расширение - хоть пустое, хоть .bin, хоть .kex. kfar'у тоже пофиг - если расширение файла не находится в списке известных, он недолго думая передаёт файл функции запуска 70.7. В-третьих, есть доводы за пустое расширение: во-первых, привычка, во-вторых, это экономит 4 байта при записи имени запускаемого приложения в программах (/rd/1/tinypad короче, чем /rd/1/tinypad.kex) - мелочь, конечно, но факт.
    Обнаружил в эмуляторе особенность - можно два раза вызывать mcall 2 (для обработки расширенного набора клавиш), а на реальной машине должен присутвовать mcall 10 между ними, иначе не будет обработки клавиш (например стрелок).
    А зачем бы это там mcall 10? Вроде бы mcall 2 просто считывает клавишу из буфера, а нажатие стрелок помещает в буфер сразу два кода. Разве что обработка сообщения о первом приходе irq1 -> нажатии клавиши происходит так быстро, что клавиатура просто не успевает послать второй байт - но полагаться на это слишком ненадёжно. (В винде на каждое нажатие стрелок приходит только одно сообщение, соответственно эмулятор вынужден помещать сообщения парой).
    Ушёл к умным, знающим и культурным людям.
  • diamond
    Эмулятор поддерживает краткую версию таблицы, на 10 байт, потому что это нужно для работы sysxtree.
    Странно я не смог получить нормальные результаты, может в конфигурации нужно что-то прописать?
    А зачем бы это там mcall 10? Вроде бы mcall 2 просто считывает клавишу из буфера, а нажатие стрелок помещает в буфер сразу два кода. Разве что обработка сообщения о первом приходе irq1 -> нажатии клавиши происходит так быстро, что клавиатура просто не успевает послать второй байт - но полагаться на это слишком ненадёжно. (В винде на каждое нажатие стрелок приходит только одно сообщение, соответственно эмулятор вынужден помещать сообщения парой).
    Я писал о различиях между реальной системой и эмулятором - на реальной системе не работает, а в эмуляторе работает.
  • Mario79
    sysxtree работает? Если да, то функция 18.11 работает нормально.
    Я писал о различиях между реальной системой и эмулятором - на реальной системе не работает, а в эмуляторе работает.
    Так и я про то же. Точнее, в первой части я описывал поведение на реальной системе - если причина именно в этом, то а) иногда работать всё же будет (зависит от загруженности процессора, механизма переключения потоков и т.д.) и б) необязательно делать mcall 10, можно, например, mcall 5,1 или просто выполнить любую долгую операцию (что означает "долгую", очень сильно зависит от компа и текущего состояния).
  • Последняя версия эмулятора (если не запускать kiwntf.exe) как-то слишком подозрительно замедлилась в работе. Есть еще одна странность: если запустить kiwntf.exe, то gmon перестает запускаться в эмуляторе (AllowReadMSR=true и EnablePorts=295 296 у меня прописаны)
  • gmon у меня на XP нормально запускается (и с kiwntf, и без). Впрочем, под 98й gmon отказывался обновлять своё окно, так что один глюк исправлен. Задержка при запуске почему-то сильно зависит от условий запуска: так, из-под Far'а при запуске через плагин и через командную строку в одном случае получалось ~1.5c, в другом ~3с. Удалось выяснить, что при загрузке драйвера задержка идёт от вызова NtFlushKey в глубинах services.exe (WinAPI-эквивалент именуется RegFlushKey), причём этот вызов там не по существу. В результате переписал загрузку драйвера на NtLoadDriver/NtUnloadDriver, в результате задержка при запуске с AllowReadMSR=true и/или непустым EnablePorts вообще исчезла.
    Добавлена поддержка функции удаления курсора 37.6. Ссылки всё те же.
  • Задержка при запуске почему-то сильно зависит от условий запуска: так, из-под Far'а при запуске через плагин и через командную строку в одном случае получалось ~1.5c, в другом ~3с.
    У меня замедлился не запуск, а работа эмулятора в целом без kiwntf.exe. Окна отрисовываются около секунды, trantest рисует что-то около 700 треугольников в секунду (после запуска kiwntf фпс вырастают до 22 тысяч). Проверил новую версию: все в точности так же, как в предыдущем посте.
    Last edited by Heavyiron on Fri Feb 23, 2007 12:20 am, edited 2 times in total.
  • Заметил глюк: функция 70.1 в эмуляторе работает не совсем корректно. Например попытка прочитать виртуальную директорию "/" проходит успешно, "/rd/" - тоже, а вот в "/rd/1/" читаются только папки, а файлы - нет. С "/hd0/1/" тоже самое.
  • А у меня для RD в эмуляторе папки не работают. KFAR выдает ошибку.
  • Примерно то же самое... Корневая папка читается, а любая папка второго уровня нет.
  • Баг с вылетом gmon исправлен. Прочих багов повторить пока не удалось.
  • Who is online

    Users browsing this forum: No registered users and 5 guests