Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Feb 19, 2020 8:36 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 139 40 41 42 4376 Next
Author Message
PostPosted: Tue Sep 25, 2012 7:15 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Serge wrote:
Rock_maniak_forever
Code:
#ifdef KOLIBRI_PE
  #define  LFB_BASE   0xDF000000
#else
  #define  LFB_BASE   0xFE000000
#endif
В КРЕ был другой базовый адрес видеопамяти.
Чавой-то не понял. Там же, два адреса.
Первым по условию идет 0xDF000000, если условие не верно, то определ. 0xFE000000. Вот мне и интересно что хранится там :arrow: " 0xDF000000" (какие данные), если "0xFE000000" - адрес видео буфера.

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Tue Sep 25, 2012 7:48 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Ладно. Хрен с ним, с этим адресом (видимо, это секрет). :? Пойду медитировать с адресом видео буфера (воспользуюсь методом тыка :idea: ). Может что получится.

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Tue Sep 25, 2012 7:59 pm 
Если установлен признак KOLIBRI_PE, то адрес видеобуфера начинается с адреса 0xDF000000, т.е. это для ядра KolibriPE.
Для обычного ядра адрес 0xFE000000. Оператор и параметры условия можно было запомнить еще с Бейсика.


Top
   
PostPosted: Sat Nov 10, 2012 1:08 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Почему код не работает?

Code:
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];

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Nov 10, 2012 1:44 am 
Online
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 458
Leency wrote:
проблема наверно в bukovka=ESBYTE[buff+bj];
Сам спросил, сам ответил.

У тебя bukovka -- указатель на bukovka[0], а ESBYTE[buff+bj], надо полагать, char или word. Попробуй bukovka[0]=...

А вообще, зачем делать массив из одного элемента?

Leency wrote:
native = 0x00;
Тут что-то не так. Ты теряешь указатель на изначальный массив.


Top
   
PostPosted: Sat Nov 10, 2012 2:11 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
как очистить переменную правильно, чтобы она была (native==0) ?

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Nov 10, 2012 10:09 am 
Online
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 458
Leency wrote:
как очистить переменную правильно, чтобы она была (native==0) ?
Значение native изменять не нужно. Если ты действительно хочешь указатель, который то будет указывать на массив, то нулевым, то заведи какой-нибудь char *p и присваивай ему то native, то NULL.

И я не совсем понимаю, что должен делать код в целом. # -- это взятие адреса? Если да, то попробуй debug(bukovka) и debug(native).


Top
   
PostPosted: Sat Nov 10, 2012 3:29 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
О, точно, я уже 100 раз видел, что так делают, а как правильно:
#define NULL 0x00
#define NULL '\0'

?

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Nov 10, 2012 5:08 pm 
Online
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 458
Leency wrote:
#define NULL 0x00
#define NULL '\0'
Да просто 0 (как в твоём первом варианте) или (void*)0. Если речь об указателе.


Top
   
PostPosted: Sat Nov 10, 2012 5:54 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Ясно, спасибо :)

_________________
Через тернии к звездам


Top
   
PostPosted: Sat Nov 10, 2012 7:56 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Пишу прогу для управления tmpdisk, как когда-то и обещал CleverMouse. Лучше позно, чем никогда. Вещь нужная.

Я даже сохранил её слова что и как делать, читал tmpdisk.asm, кое-что разобрал, что-то нет. Как для лаймера в таких делах, вроде неплохо. Но не работает :)

Посмотрите, пожалуйста что не так.

Не совсем разобрался ,что должно быть в output.


Attachments:
tmpdisk.zip [263.97 KiB]
Downloaded 446 times

_________________
Через тернии к звездам
Top
   
PostPosted: Mon Nov 12, 2012 1:53 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Leency, структуры объявлены неверно. DiskId должен быть одним байтом, а не dword. В output и out_size нужно писать нули, хотя в данный момент это не играет роли, ибо текущая реализация их игнорирует.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Mon Nov 12, 2012 2:38 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Я уже заменил эти ошибки и исправил. Всё равно выдаёт ошибку - слишком большой размер диска.

Spoiler: Show
Code:
#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();
}

_________________
Через тернии к звездам


Top
   
PostPosted: Mon Nov 12, 2012 3:02 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Эх, это очень странно, но у меня вышло :) Ждите скоро новую версию Эолайта и дистра.

_________________
Через тернии к звездам


Top
   
PostPosted: Mon Nov 12, 2012 3:17 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
На 200 секторов драйвер и должен ругаться, только не "слишком большой", а "слишком маленький" размер - туда ни FAT16, ни FAT32 не поместятся в принципе. Должно быть минимум несколько мегабайт.

_________________
Сделаем мир лучше!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 139 40 41 42 4376 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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