Работа под Win, а также отображение шрифтов в Колибри

Assembler programming questions
  • Ты забыл установить цвет фона, поэтому он получается чёрным (в эмуляторе либо ошибка, либо edi случайно другой). Собственно ошибка здесь:

    Code: Select all

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     mov eax,4
     mov  ebx,35 shl 16+25
     mov  ecx,[sc.work_text]
     or   ecx,0x40000000
     mov edx,hed
     mov esi,3
    ;; Здесь должно быть что-нибудь вроде mov edi, 0xFFFFFF
     int 0x40
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
  • Спасибо, с выводом разобрался.
    Для тех, кто со мной на одном бронепоезде:
    1) Я передавал аргументом структуру вместо указателя на нее
    2) база для SATA - bd0,bd1 и тд.
    3) В эмуляторе не реализована поддержка функции 70. (Попробовать старую 58 для тренировки?)
  • Насколько я знаю, работа ф 70 в эмуляторе реализована, насчет 58 не уверен (просто автор 70 функции и автор эмулятора - один и тот же человек). Единственное, что 70 функция требует, чтобы программа запускалась из известной эмулятору папки, которые вбиваются в настройках эмулятора.
    У меня, например, в klbrinwin.ini:
    RamDisk=D:\install\os\kolibri\img\
    hd0n=1
    hd0_1=D:\install\os\kolibri\soft\
  • Насколько я знаю, работа ф 70 в эмуляторе реализована
    У меня была подобная проблема, оказалось что под эмулятором необходимо вводить путь к файлу так же как в ОС Win, а не так как в Колибри.
    Т. е. C:/1.txt и /hd0/1/1.txt указывают на один и тот же файл, только 1-й вариант для эмулятора а 2-й для Колибри
  • сделал так:

    Code: Select all

    RamDisk=c:\ram\
    hd0n=1
    hd0_1=c:\hdd\
    
    в папку С:\hdd\ поместил WINDOWS\system32\config\system
    Путь в программе пытался писать по разному:

    Code: Select all

    .path db 'C:/windows/system32/config/system',0
    'bd0/1/windows/system32/config/system',0
    Всегда получаю "Unsupported system function", "Emulated process called unknown system function and will be terminated"
  • Flinta
    'bd0/1/windows/system32/config/system',0
    Не уверен, но:
    1) как говорится bd0 и hd0 (который прописан в конфиге) - это две большие разницы
    2) а где корневой слэш?! т.е.:
    /bd0/1/windows/system32/config/system',0
  • Во-первых, писать надо /bd0/...
    Во-вторых, если задать hd0_1=c:\hdd, то, наверное, надо использовать /hd0/1/...
  • Вот пример работающего у меня файла настроек:

    Code: Select all

    [Disk]
    # path to ramdisk, must end with '\'
    RamDisk=C:\My\kolibri\progs\
    
    # hard disks:
    # there may be up to 4 physical harddisks,
    #   each may contain 1 or more partitions (but no more than 255)
    #     (sysfunction 18::11 returns this number as byte)
    #     255 should be enough :-)
    # Syntax:
    #   hd<i>n = number of partitions for /hd<i>, 0 <= i <= 3
    #   hd<i>_<j> = Win32 path for /hd<i>/<j>, 0 <= i <= 3, 1 <= j <= hd<i>n
    #               must end with '\'
    # (j is represented in decimal system)
    # (if harddisk /hd<i> is used, all partitions /hd<i>/<j> must be defined)
    hd0n=2
    hd0_1=c:\
    hd0_2=d:\
    #hd0_3=g:\
    
    # example for /hd2
    # hd2n=2
    # hd2_1=c:\dir1\subdirx\
    # hd2_2=c:\dir1\subdiry\
    
    [Main]
    # skin file name
    Skin=blue.skn
    
    # first font must be 9*0x100 bytes, second 10*0x100 bytes
    Font1=char.mt
    Font2=char2.mt
    
    # DO NOT MODIFY THIS PARAMETER UNLESS YOU KNOW WHAT ARE YOU DOING!!!
    # if this parameter is not empty,
    #     on NT/2k/XP+ administrator rights are required
    # enables i/o ports for function 46
    # all ports from this parameter can be reserved with fn46,
    #     and (after reservation) may be accessed via in/out.
    # DO NOT ADD SYSTEM CRITICAL PORTS!!!
    # USE THIS PARAMETER ONLY AT YOUR OWN RISK!!!
    # note that Menuet/Kolibri reserves ports 0-FF for system use
    # syntax: EnablePorts=port1 port2beg-port2end port3 ...
    # (when range is used, both begin and end are included)
    # example (only for syntax demonstration!!!): EnablePorts=A3 B1 92-9f 70-74 269
    # total length of parameter string is limited to 1024 chars (must be enough :) )
    EnablePorts=
    
    # boolean parameter (true/false)
    # if this parameter is not empty,
    #     on NT/2k/XP+ administrator rights are required
    # enables function 68.3
    AllowReadMSR=true
    
    [Questions]
    # on set background question
    # 0=ask, 1=set permanently, 2=set temporarily, 3=don't set
    SetBgr=0
    
    [sys_setup]
    # kernel global variable sound_flag
    # 0=playnote sound on, 1=off (it is for 55::55 function only)
    sound_flag=0
    
    # kernel global variable syslang (see functions 21::5, 26::5)
    # 1=eng 2=fi 3=ger 4=ru
    syslang=1
    
    # kernel global variable keyboard (see functions 21::2::9, 26::2::9)
    # 1=eng 2=fi 3=ger 4=ru
    # Note that this definition doesn't affect keymap tables,
    # it only sets variable for functions above
    # (in Kolibri application @panel/setup changes keymap tables)
    keyboard=1
    
    Эмулятор работает с синтаксисом путей, которые использует Колибри -один в один. Никаких "C:" в пути для приложений Колибри быть не должно.

    Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
    В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером.
  • Спасибо, теперь еще дома поковыряю.
    Mario wrote: Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
    В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером
    Эмулятор с SATA все же должен работать? (Если использовать hd?)
  • Flinta wrote:Эмулятор с SATA все же должен работать? (Если использовать hd?)
    100% должен. Если винда с ним работает. :)
  • Flinta
    Винда предоставляет в своем формате VFS (виртуальная файловая система) все доступные ей дисковые устройства. Эмулятор из этого формата переводит в VFS формат Колибри (в основном имеется ввиду функция 70, функцию 58 мы не рассматриваем в связи с устареванием и низкой функциональностью). Если ты правильно прописал файл настроек эмулятора и если ты запрашиваешь правильный путь в синтаксисе Колибри, то все должно работать. Проверь сначала на KFAR и KFM - если они у тебя работают на требуемом пути, то вопрос останется только к коду твоей программы.
  • Или в моем генетическом...
    Опаньки, хотел поэсксперементировать с влиянием касперского, а оно дома запустилось. Тупо с работы притащил конфиг(сделанный с учетом замечаний. Спасибо). Если честно, до последнего не верилось, что дело в проге. Ошибка, вроде бы, на другое указывала. Разберемся.
    Буду дальше штурмовать fasm... Спасибо всем!
  • Flinta
    Кстати поосторожней с экспериментами. Файлы удаленные в эмуляторе удаляются не в корзину, а сразу стираются. Однажды ткнув на удаление я потерял половину файлов в папке, т.к. они были уже битые, хотя утилиту восстановления запустил сразу же.
  • Who is online

    Users browsing this forum: No registered users and 3 guests