Applications development, KoOS API questions
Posts 445 Joined: Mon Feb 09, 2009 4:13 am
Serge wrote: Rock_maniak_forever Code: Select all
#ifdef KOLIBRI_PE
#define LFB_BASE 0xDF000000
#else
#define LFB_BASE 0xFE000000
#endif
В КРЕ был другой базовый адрес видеопамяти.
Чавой-то не понял. Там же, два адреса.
Первым по условию идет
0xDF000000 , если условие не верно, то определ.
0xFE000000 . Вот мне и интересно что хранится там
" 0xDF000000" (какие данные), если "0xFE000000" - адрес видео буфера.
Posts 445 Joined: Mon Feb 09, 2009 4:13 am
Ладно. Хрен с ним, с этим адресом (видимо, это секрет).
Пойду медитировать с адресом видео буфера (воспользуюсь методом тыка
). Может что получится.
Если установлен признак KOLIBRI_PE, то адрес видеобуфера начинается с адреса 0xDF000000, т.е. это для ядра KolibriPE.
Для обычного ядра адрес 0xFE000000. Оператор и параметры условия можно было запомнить еще с Бейсика.
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
Почему код не работает?
Code: Select all
void LiveSearch()
{
dword bj, i;
byte IsNativeWord=1;
char native[256];
word bukovka[1];
for (bj=0; bj<fsize; bj++;)
{
bukovka=ESBYTE[buff+bj];
debug(#bukovka);
if (buff+bj==0x0a)
{
bj++;
if (buff+bj!='"') IsNativeWord=1;
}
else
{
for (i=0; i<strlen(#edword); i++) if (edword[i]<>native[i]) goto __NE_RAVNO;
debug(#native);
__NE_RAVNO:
native = 0x00;
IsNativeWord = 0;
}
if (IsNativeWord==1) strcat(#native, #bukovka);
}
}
на дебаг выводит мусор debug(#bukovka);
debug(#native); не выводит ничего
проблема наверно в bukovka=ESBYTE[buff+bj];
Posts 798 Joined: Mon Oct 19, 2009 10:58 am
Leency wrote: проблема наверно в bukovka=ESBYTE[buff+bj];
Сам спросил, сам ответил.
У тебя bukovka -- указатель на bukovka[0], а ESBYTE[buff+bj], надо полагать, char или word. Попробуй bukovka[0]=...
А вообще, зачем делать массив из одного элемента?
Leency wrote: native = 0x00;
Тут что-то не так. Ты теряешь указатель на изначальный массив.
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
как очистить переменную правильно, чтобы она была (native==0) ?
Posts 798 Joined: Mon Oct 19, 2009 10:58 am
Sat Nov 10, 2012 10:09 am
Leency wrote: как очистить переменную правильно, чтобы она была (native==0) ?
Значение native изменять не нужно. Если ты действительно хочешь указатель, который то будет указывать на массив, то нулевым, то заведи какой-нибудь char *p и присваивай ему то native, то NULL.
И я не совсем понимаю, что должен делать код в целом. # -- это взятие адреса? Если да, то попробуй debug(bukovka) и debug(native).
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
О, точно, я уже 100 раз видел, что так делают, а как правильно:
#define NULL 0x00
#define NULL '\0'
?
Posts 798 Joined: Mon Oct 19, 2009 10:58 am
Leency wrote: #define NULL 0x00
#define NULL '\0'
Да просто 0 (как в твоём первом варианте) или (void*)0. Если речь об указателе.
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
Ясно, спасибо
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
Пишу прогу для управления tmpdisk, как когда-то и обещал
CleverMouse . Лучше позно, чем никогда. Вещь нужная.
Я даже сохранил её слова что и как делать, читал tmpdisk.asm, кое-что разобрал, что-то нет. Как для лаймера в таких делах, вроде неплохо. Но не работает
Посмотрите, пожалуйста что не так.
Не совсем разобрался ,что должно быть в output.
Attachments
Downloaded 543 times
Из хаоса в космос
Posts 1625 Joined: Thu Sep 03, 2009 1:52 pm
Leency , структуры объявлены неверно. DiskId должен быть одним байтом, а не dword. В output и out_size нужно писать нули, хотя в данный момент это не играет роли, ибо текущая реализация их игнорирует.
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
Я уже заменил эти ошибки и исправил. Всё равно выдаёт ошибку - слишком большой размер диска.
Spoiler: Code: Select all
#include "..\lib\kolibri.h"
#include "..\lib\strings.h"
#include "..\lib\file_system.h"
inline fastcall dword GetFreeRAM()
{
$mov eax, 18
$mov ebx, 16
$int 0x40
//return eax = размер свободной памяти в килобайтах
}
inline fastcall dword LoadDriver( ECX) //ECX - имя драйвера
{
$mov eax, 68
$mov ebx, 16
$int 0x40
//return 0 - неудача, иначе eax = хэндл драйвера
}
inline fastcall dword RuleDriver( ECX) //указатель на управляющую структуру
{
$mov eax, 68
$mov ebx, 17
$int 0x40
//return eax = определяется драйвером
}
struct ioctl_struct
{
dword handle;
dword io_code;
dword input;
dword inp_size;
dword output;
dword out_size;
};
#define DEV_ADD_DISK 1 //input = structure add_disk_struc
#define DEV_DEL_DISK 2 //input = structure del_disk_struc
struct add_disk_struc
{
dword DiskSize; // disk size in sectors, 1 sector = 512 bytes
// Note: .DiskSize is the full size, including FAT service data.
// Size for useful data is slightly less than this number.
unsigned char DiskId; // from 0 to 9
};
struct del_disk_struc
{
unsigned char DiskId; //from 0 to 9
};
void main()
{
int driver_handle;
driver_handle = LoadDriver("tmpdisk");
if (driver_handle==0)
{
debug("tmpdisk: driver loading failed");
ExitProcess();
return;
}
debug("tmpdisk: driver loaded successfully");
//del disk
del_disk_struc.DiskId = 1;
//add disk
add_disk_struc.DiskId = 1;
add_disk_struc.DiskSize = 200;
ioctl_struct.handle = driver_handle;
ioctl_struct.io_code = DEV_ADD_DISK;
ioctl_struct.input = #add_disk_struc;
ioctl_struct.inp_size = sizeof(#add_disk_struc);
ioctl_struct.output = 0;
ioctl_struct.out_size = 0;
RuleDriver(#ioctl_struct);
switch(EAX)
{
case 0:
debug("tmpdisk: disk added successfully");
break;
case 1:
debug("tmpdisk: unknown IOCTL code, wrong input/output size...");
break;
case 2:
debug("tmpdisk: DiskId must be from 0 to 9");
break;
case 3:
debug("tmpdisk: DiskSize is too large");
break;
case 4:
debug("tmpdisk: DiskSize is too small");
break;
case 5:
debug("tmpdisk: memory allocation failed");
break;
default:
debug("tmpdisk: unknown error O_o");
}
ExitProcess();
}
Posts 5751 Joined: Thu Jan 25, 2007 3:33 pm
Эх, это очень странно, но у меня вышло
Ждите скоро новую версию Эолайта и дистра.
Posts 1625 Joined: Thu Sep 03, 2009 1:52 pm
На 200 секторов драйвер и должен ругаться, только не "слишком большой", а "слишком маленький" размер - туда ни FAT16, ни FAT32 не поместятся в принципе. Должно быть минимум несколько мегабайт.
Users browsing this forum: No registered users and 1 guest