Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Nov 14, 2019 9:40 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 14 posts ] 
Author Message
PostPosted: Tue Mar 24, 2009 4:41 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
Пытаюсь кодить под Колибри, попутно изучаяя fasm
Возникло два вопросика.
Запускаю программу под эмулятором, ругается на вызов функции 70. Это нормально? Если да, то отлаживать
прогу под виндой не выйдет?
Запускаю эту же программу под KolibriOS, рисует вместо букв в тексте черные прямоугольники,
выглядит как сплошная линия длиной в предолагаемый текст. Я пытался прочитать сколько-нибудь байт из файла и вывести в виде текста (проверить, как прочиталось).
Если текст задаю явно, та же ботва. В чем может быть дело? Под Win - нормально.

Исходник прилагаю.
ЗЫ: А почему расширение .asm запрещено Администратором?


Attachments:
reg.rar [1.52 KiB]
Downloaded 196 times
Top
   
PostPosted: Tue Mar 24, 2009 5:28 pm 
Offline

Joined: Fri Oct 12, 2007 1:04 pm
Posts: 141
Ты забыл установить цвет фона, поэтому он получается чёрным (в эмуляторе либо ошибка, либо edi случайно другой). Собственно ошибка здесь:
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Top
   
PostPosted: Tue Mar 24, 2009 10:40 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
Спасибо, с выводом разобрался.
Для тех, кто со мной на одном бронепоезде:
1) Я передавал аргументом структуру вместо указателя на нее
2) база для SATA - bd0,bd1 и тд.
3) В эмуляторе не реализована поддержка функции 70. (Попробовать старую 58 для тренировки?)


Top
   
PostPosted: Wed Mar 25, 2009 1:45 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
Насколько я знаю, работа ф 70 в эмуляторе реализована, насчет 58 не уверен (просто автор 70 функции и автор эмулятора - один и тот же человек). Единственное, что 70 функция требует, чтобы программа запускалась из известной эмулятору папки, которые вбиваются в настройках эмулятора.
У меня, например, в klbrinwin.ini:
RamDisk=D:\install\os\kolibri\img\
hd0n=1
hd0_1=D:\install\os\kolibri\soft\


Top
   
PostPosted: Wed Mar 25, 2009 4:58 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Quote:
Насколько я знаю, работа ф 70 в эмуляторе реализована

У меня была подобная проблема, оказалось что под эмулятором необходимо вводить путь к файлу так же как в ОС Win, а не так как в Колибри.
Т. е. C:/1.txt и /hd0/1/1.txt указывают на один и тот же файл, только 1-й вариант для эмулятора а 2-й для Колибри


Top
   
PostPosted: Thu Mar 26, 2009 3:17 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
сделал так:
Code:
RamDisk=c:\ram\
hd0n=1
hd0_1=c:\hdd\

в папку С:\hdd\ поместил WINDOWS\system32\config\system
Путь в программе пытался писать по разному:
Code:
.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"


Top
   
PostPosted: Thu Mar 26, 2009 3:45 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Flinta
Quote:
'bd0/1/windows/system32/config/system',0

Не уверен, но:
1) как говорится bd0 и hd0 (который прописан в конфиге) - это две большие разницы
2) а где корневой слэш?! т.е.:
/bd0/1/windows/system32/config/system',0


Top
   
PostPosted: Thu Mar 26, 2009 3:46 pm 
Offline

Joined: Fri Oct 12, 2007 1:04 pm
Posts: 141
Во-первых, писать надо /bd0/...
Во-вторых, если задать hd0_1=c:\hdd, то, наверное, надо использовать /hd0/1/...


Top
   
PostPosted: Thu Mar 26, 2009 4:28 pm 
Вот пример работающего у меня файла настроек:
Code:
[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 контроллером.


Top
   
PostPosted: Thu Mar 26, 2009 4:41 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
Спасибо, теперь еще дома поковыряю.
Mario wrote:
Диски BD используются исключительно, когда идет работа с эмуляцией в самой Колибри. Поскольку оно реализовано через прерывание BIOS то обозвано не HD, а BD.
В эмуляторе надо использовать только HD, потому что он эмулирует работу системы со стандартным IDE parallel ATA контроллером

Эмулятор с SATA все же должен работать? (Если использовать hd?)


Top
   
PostPosted: Thu Mar 26, 2009 4:44 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Flinta wrote:
Эмулятор с SATA все же должен работать? (Если использовать hd?)

100% должен. Если винда с ним работает. :)


Top
   
PostPosted: Thu Mar 26, 2009 5:09 pm 
Flinta
Винда предоставляет в своем формате VFS (виртуальная файловая система) все доступные ей дисковые устройства. Эмулятор из этого формата переводит в VFS формат Колибри (в основном имеется ввиду функция 70, функцию 58 мы не рассматриваем в связи с устареванием и низкой функциональностью). Если ты правильно прописал файл настроек эмулятора и если ты запрашиваешь правильный путь в синтаксисе Колибри, то все должно работать. Проверь сначала на KFAR и KFM - если они у тебя работают на требуемом пути, то вопрос останется только к коду твоей программы.


Top
   
PostPosted: Thu Mar 26, 2009 7:52 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
Или в моем генетическом...
Опаньки, хотел поэсксперементировать с влиянием касперского, а оно дома запустилось. Тупо с работы притащил конфиг(сделанный с учетом замечаний. Спасибо). Если честно, до последнего не верилось, что дело в проге. Ошибка, вроде бы, на другое указывала. Разберемся.
Буду дальше штурмовать fasm... Спасибо всем!


Top
   
PostPosted: Fri Mar 27, 2009 9:17 am 
Flinta
Кстати поосторожней с экспериментами. Файлы удаленные в эмуляторе удаляются не в корзину, а сразу стираются. Однажды ткнув на удаление я потерял половину файлов в папке, т.к. они были уже битые, хотя утилиту восстановления запустил сразу же.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 14 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited