Пытаюсь кодить под Колибри, попутно изучаяя fasm
Возникло два вопросика.
Запускаю программу под эмулятором, ругается на вызов функции 70. Это нормально? Если да, то отлаживать
прогу под виндой не выйдет?
Запускаю эту же программу под KolibriOS, рисует вместо букв в тексте черные прямоугольники,
выглядит как сплошная линия длиной в предолагаемый текст. Я пытался прочитать сколько-нибудь байт из файла и вывести в виде текста (проверить, как прочиталось).
Если текст задаю явно, та же ботва. В чем может быть дело? Под Win - нормально.
Исходник прилагаю.
ЗЫ: А почему расширение .asm запрещено Администратором?
Работа под Win, а также отображение шрифтов в Колибри
-
- Attachments
-
-
reg.rar (1.52 KiB)Downloaded 389 times
-
Ты забыл установить цвет фона, поэтому он получается чёрным (в эмуляторе либо ошибка, либо 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 для тренировки?)
Для тех, кто со мной на одном бронепоезде:
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\
У меня, например, в klbrinwin.ini:
RamDisk=D:\install\os\kolibri\img\
hd0n=1
hd0_1=D:\install\os\kolibri\soft\
У меня была подобная проблема, оказалось что под эмулятором необходимо вводить путь к файлу так же как в ОС Win, а не так как в Колибри.Насколько я знаю, работа ф 70 в эмуляторе реализована
Т. е. C:/1.txt и /hd0/1/1.txt указывают на один и тот же файл, только 1-й вариант для эмулятора а 2-й для Колибри
сделал так:
в папку С:\hdd\ поместил WINDOWS\system32\config\system
Путь в программе пытался писать по разному:
Всегда получаю "Unsupported system function", "Emulated process called unknown system function and will be terminated"
Code: Select all
RamDisk=c:\ram\
hd0n=1
hd0_1=c:\hdd\
Путь в программе пытался писать по разному:
Code: Select all
.path db 'C:/windows/system32/config/system',0
'bd0/1/windows/system32/config/system',0
Flinta
1) как говорится bd0 и hd0 (который прописан в конфиге) - это две большие разницы
2) а где корневой слэш?! т.е.:
/bd0/1/windows/system32/config/system',0
Не уверен, но:'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/...
Во-вторых, если задать hd0_1=c:\hdd, то, наверное, надо использовать /hd0/1/...
Вот пример работающего у меня файла настроек:
Эмулятор работает с синтаксисом путей, которые использует Колибри -один в один. Никаких "C:" в пути для приложений Колибри быть не должно.
Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером.
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
Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером.
Спасибо, теперь еще дома поковыряю.
Эмулятор с SATA все же должен работать? (Если использовать hd?)Mario wrote: Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером
100% должен. Если винда с ним работает.Flinta wrote:Эмулятор с SATA все же должен работать? (Если использовать hd?)
Flinta
Винда предоставляет в своем формате VFS (виртуальная файловая система) все доступные ей дисковые устройства. Эмулятор из этого формата переводит в VFS формат Колибри (в основном имеется ввиду функция 70, функцию 58 мы не рассматриваем в связи с устареванием и низкой функциональностью). Если ты правильно прописал файл настроек эмулятора и если ты запрашиваешь правильный путь в синтаксисе Колибри, то все должно работать. Проверь сначала на KFAR и KFM - если они у тебя работают на требуемом пути, то вопрос останется только к коду твоей программы.
Винда предоставляет в своем формате VFS (виртуальная файловая система) все доступные ей дисковые устройства. Эмулятор из этого формата переводит в VFS формат Колибри (в основном имеется ввиду функция 70, функцию 58 мы не рассматриваем в связи с устареванием и низкой функциональностью). Если ты правильно прописал файл настроек эмулятора и если ты запрашиваешь правильный путь в синтаксисе Колибри, то все должно работать. Проверь сначала на KFAR и KFM - если они у тебя работают на требуемом пути, то вопрос останется только к коду твоей программы.
Или в моем генетическом...
Опаньки, хотел поэсксперементировать с влиянием касперского, а оно дома запустилось. Тупо с работы притащил конфиг(сделанный с учетом замечаний. Спасибо). Если честно, до последнего не верилось, что дело в проге. Ошибка, вроде бы, на другое указывала. Разберемся.
Буду дальше штурмовать fasm... Спасибо всем!
Опаньки, хотел поэсксперементировать с влиянием касперского, а оно дома запустилось. Тупо с работы притащил конфиг(сделанный с учетом замечаний. Спасибо). Если честно, до последнего не верилось, что дело в проге. Ошибка, вроде бы, на другое указывала. Разберемся.
Буду дальше штурмовать fasm... Спасибо всем!
Flinta
Кстати поосторожней с экспериментами. Файлы удаленные в эмуляторе удаляются не в корзину, а сразу стираются. Однажды ткнув на удаление я потерял половину файлов в папке, т.к. они были уже битые, хотя утилиту восстановления запустил сразу же.
Кстати поосторожней с экспериментами. Файлы удаленные в эмуляторе удаляются не в корзину, а сразу стираются. Однажды ткнув на удаление я потерял половину файлов в папке, т.к. они были уже битые, хотя утилиту восстановления запустил сразу же.
Who is online
Users browsing this forum: No registered users and 5 guests