Page 65 of 77

Re: Помогите новичку

Posted: Wed Jan 28, 2015 1:31 pm
by clisti
Здравствуйте! Помогите, пожалуйста, новичку: какие 5 наиболее важных изменений были сделаны в KoOS после отделения от MeOS?

Re: Помогите новичку

Posted: Wed Jan 28, 2015 8:20 pm
by Artyom
Поддержка железа, достаточно. Да и вообще, с какой целью интерессуетесь?

Re: Помогите новичку

Posted: Wed Jan 28, 2015 10:53 pm
by clisti
: [quote="Artyom"]Поддержка железа, достаточно. Да и вообще, с какой целью интерессуетесь?[/quote]

Хочу написать небольшое (15 000 - 20 000 asm строк) коммерческое приложение на fasm'е. Выбираю между MeOS и KoOS, сравниваю.

Re: Помогите новичку

Posted: Fri Jan 30, 2015 3:47 am
by Artyom
Право выбора есть у всех, не мне за тебя решать!!!

Re: Помогите новичку

Posted: Sat Jan 31, 2015 2:09 pm
by igevorse
Здравствуйте. Попытка открытия файла с диска с помощью библиотеки libio:

Code: Select all

...
FILE* (* __attribute__((stdcall)) fopen_)(const char*, unsigned int);
...
kol_struct_import *libio = kol_cofflib_load("/sys/lib/libio.obj");
if (libio == 0)
    killMainThread();

fopen_ = ( __attribute__((stdcall)) FILE* (*) (const char*, unsigned int))
		kol_cofflib_procload (libio, "file_open");
if (fopen_ == NULL)
    killMainThread();
...

Code: Select all

int main() {
...
    printf("trying to open file 1.txt\n");
    fopen_("1.txt", 0b00000001); // O_READ = 00000001b
    printf("done!");
...
}
Вывод программы:
trying to open file 1.txt
Доска отладки сообщает, что произошёл page fault. MTDBG: "Debugger program called an exception 0E. Suspended."
Image
Файл 1.txt присутствует в каталоге с программой. При прописывании абсолютного пути к файлу наблюдается то же поведение. Что я делаю не так?

Re: Помогите новичку

Posted: Mon Feb 02, 2015 11:34 am
by klb1
Вобщем-то эта "Колибри" хоть и хороша из-за хорошей скорости, но здесь надо быть программистом и самим программировать все, что необходимо иметь для работы. Странно, что так много игровых games. Может разработано для детского садика? Ну не серьезно-же это. Были-бы шахматы и то как-то понятно, а тут все просто тупой азарт.
Невозможно usb-modem установить.

Re: Помогите новичку

Posted: Mon Feb 02, 2015 7:18 pm
by Wildwest
Запустите программу PCIDEV, сделайте скриншот или сохраните в *.txt файл. Посмотрим назначены ли прерывания, что за модем. Хотя шансов мало, если софт-модем.

Re: Помогите новичку

Posted: Tue Feb 03, 2015 7:36 pm
by Artyom
klb1 wrote:Вобщем-то эта "Колибри" хоть и хороша из-за хорошей скорости, но здесь надо быть программистом и самим программировать все, что необходимо иметь для работы. Странно, что так много игровых games. Может разработано для детского садика? Ну не серьезно-же это. Были-бы шахматы и то как-то понятно, а тут все просто тупой азарт.
Невозможно usb-modem установить.
На вкус и цвет - ОС нет и НЕ БУДЕТ!!!

Re: Помогите новичку

Posted: Thu Feb 05, 2015 3:26 pm
by klb1
Вобщем-то у меня обычный модем - флешка "билайн".
Программа от нее не устанавливается под "KolibriOS".
Тут на форуме пожалуй много интересного можно просто узнать и на досуге почитаю
Спасибо.

Re: Помогите новичку

Posted: Thu Feb 05, 2015 5:04 pm
by Wildwest
http://moskva.beeline.ru/customers/help ... nstrukcii/ Ну там есть несколько моделей... Де-факто есть 2 человека, которые могут помочь (или сказать, что надо писать отдельный драйвер для модема) - CleverMouse и hidnplayr.

Re: Помогите новичку

Posted: Fri Feb 06, 2015 8:25 pm
by igevorse
Здравствуйте. Попытка открытия файла с диска с помощью библиотеки libio:
Всё ещё актуально.
Нужно ли мне загружать и запускать lib_init из libio перед использованием file_open? Если да, то какие должны быть аргументы и возвращаемое значение mem.*?

Code: Select all

;;================================================================================================;;
proc libio._.init ;///////////////////////////////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Library entry point (called after library load)                                                ;;
;;------------------------------------------------------------------------------------------------;;
;> eax = memory allocation routine <mem.alloc*>                                                   ;;
;> ebx = memory freeing routine <mem.free*>                                                       ;;
;> ecx = memory reallocation routine <mem.realloc*>                                               ;;
;> edx = library loading routine <dll.load*>                                                      ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = 1 (fail) / 0 (ok) (library initialization result)                                        ;;
;;================================================================================================;;
        mov     [mem.alloc], eax
        mov     [mem.free], ebx
        mov     [mem.realloc], ecx
        mov     [dll.load], edx
        xor     eax, eax
        ret
endp

Re: Помогите новичку

Posted: Fri Feb 06, 2015 10:33 pm
by dunkaist
Lib_init вызывать нужно, mem.* и dll.load -- это указатели на функции работы с памятью и загрузки библиотек. Не обязательно эти, но вести себя они должны так же.

Тут явно кто-то использовал libio из C; может, подскажут, куда смотреть за примером.

Re: Помогите новичку

Posted: Sat Feb 21, 2015 11:38 am
by igevorse
dunkaist, спасибо!
Теперь другая проблема:
При вызове функции time() из menuetlibc получаю время, сдвинутое вперед на 6 с чем-то лет (конкретно: на 191808000 секунд).
При этом, календарь отображает правильную дату.
Что интересно, день недели и время отображаются верно, а день, месяц и год - 5 марта 2021 вместо 21 февраля 2015.

Code: Select all

#include <time.h>

time_t t = time(NULL);
string s = ctime(&t);
Дистрибутив от 21 февраля 2015 года.
Сообщите, пожалуйста, если это ожидаемое поведение, а не баг.

Re: Помогите новичку

Posted: Wed Mar 11, 2015 9:53 am
by gc986
Только начал разбираться с программированием для Kolibri на ассемблере (в основное время пишу на языках высокого уровня), поэтому задаю глупый вопрос. Я изменил простую программу, добавил кнопку, с её помощью я хочу закрывать приложение. Что я делаю не так?

Code: Select all

include "macros.inc"

MEOS_APP_START

CODE
redraw:
	call	draw_window
wait_event:
	mcall	10
	dec	eax
	jz	redraw
	dec	eax
	jz	key
	cmp	eax,3
	jz	button_event
key:
; Нажата клавиша, читать и игнорировать
	mcall	2
	jmp	wait_event
button_event:
	cmp  ah,1
	jne	close_program
	jmp	wait_event

close_program:
	mcall	-1
; Отрисовка окна
draw_window:
	mcall	12, 1
	mcall	0, <10,150>, <40,80>, 0x33FFFFFF, , header
	mcall	4, <30,10>, 0x80000000, string
	mcall	4, <30,20>, 0x80000000, string

	mcall	8, <30,50>, <30,20>, 1, 0xf0f0f0
	mcall	4, <38,37>, 0x80000000, button
	mcall	12,2
	ret
; Константы
DATA
header	db	'HelloWorld test',0
string	db	'Тестовая строка',0
button	db	'Кнопка',0


UDATA

MEOS_APP_END

Re: Помогите новичку

Posted: Wed Mar 11, 2015 10:51 am
by Gluk
если коротко, следует заменить

Code: Select all

cmp   eax,3
на

Code: Select all

dec   eax