Начинающий

Applications development, KoOS API questions
  • Ассемблер не сложнее других языков, просто он не для ленивых, так как не содержит вторичного иструментария, всё ручками надо писать... но и такой мощности у других языков нет, если не пользоваться вставками, опять - таки на Асме... кроме того, он заставляет изучать железо компа, принцип его работы, что, позволяет писать эффективнее, и лучше... но немного, дольше... :D
    *****:
    ;дух машины, мой бубен сильнее твоей тупости

    *****:
  • Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходить проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).
    Attachments
    gui.zip (11.99 KiB)
    Хорошо сделано, но в сырцах я ничё не понял. Положить в /sys/gui/
    Downloaded 259 times
    Из хаоса в космос
  • Кирилл, подробности нужны
    Запускать чего-то без понимания, чего следует ожидать, и класть 100К туда, где нет места - не наш метод ведь :)
  • Leency wrote:Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходит проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).
    Нет, нельзя. Только отслеживая события от мыши и при каждом чихе проверяя координаты и клавиши мыши.
    Ушёл к умным, знающим и культурным людям.
  • Я так и думал... а жаль, т.к. код кнопки прокрутки вверх такой (реагирует на MouseDown):

    Code: Select all

    					if (m.x>=Form.width-21) && (m.x<=Form.width-6) && (m.y>40) && (m.y<57)
    					{
    						IF (m.lkm==1) DrawRegion_3D(onLeft(21,0),41,14,14,0xC7C7C7,0xFFFFFF);
    						while (m.lkm==1) && (za_kadrom>0)
    						{
    							Pause(10);
    							za_kadrom--;
    							List_ReDraw();
    							m.get();
    						}
    						DrawRegion_3D(onLeft(21,0),41,14,14,0xFFFFFF,0xC7C7C7);
    					}
    А код кнопки "Close" в окне Эбаута такой (реагирует на MouseUp + проверяет над кнопкой ли это произошло):

    Code: Select all

    		IF (mm.x>90) && (mm.x<90+70) && (mm.y>190) && (mm.y<190+22)
    		IF (mm.lkm) {DrawRegion_3D(91,191,68,20,0xC7C7C7,0xFFFFFF); letitclose=1;}
    		ELSE {IF (letitclose) {DrawRegion_3D(91,191,68,20,0xFFFFFF,0xC7C7C7); Pause(7); ExitProcess();}}
    		ELSE IF (letitclose) {letitclose=0; DrawRegion_3D(91,191,68,20,0xFFFFFF,0xC7C7C7);}
    У меня только одна идея о том, как не писать для каждой кнопки столько кода: при создании FlatButton её координаты записывать в массив и при нажатии лкм в цикле проверять координаты не было ли нажатие над какой-то из кнопок.
    Из хаоса в космос
  • anton_obuhov wrote:Здраствуйте уважаемые кодеры и кодерши, я только начинаю осваивать Ассемблер и начинаю делать программы маленькие типа Hello Word!
    вот собственно код программы

    Code: Select all

    CSEG segment
     org 100h
    
    begin:
    
       mov ah, 9
       mov dx, offset message
    
       int 21h
    
       int 20h
    
      message db 'Hello world!$'
    
    CSEG ends
    
    end Begin
    Перепишите его под колибри чтобы я разу понял в чем отличие между данным кодом и таким же кодом под KolibriOS

    А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам

    ЕСЛИ КОНЕЧНО ВАМ НЕ ТРУДНО!!!
    Если я неправильно изложил идею напишите в ЛС

    Перед изучением ассемблера необходимо ознакомится с структурой и принципом работы процессора.
    Для перехода на написание собственных ОС необходимо изучить программирование (на ассемблере) в защищенном режиме.Любая прога для защищенного режима уже несет начальныен навыки для написания многозадачной ОС.пратически в любой книге по ассемблеру содержится раздел посвященный защищенному режиму.
  • <Lrz> wrote:

    Code: Select all

    align16
    
    Я крут, я нашел МегаБаг! :lol:
    Пробел пробелали.
    Кстати, код отсюда http://diamondz.land.ru/hll/hll.htm (параграф про fasm) fasnw отказался компилить. Грит, Illegal instruction" MEOS_APP_START . Пытался указать абсолютный путь к macros.inc, та же песня.
    Я, конечно, тот еще спец...
  • Flinta
    Только что попробовал.
    fasm пишет вот что:

    Code: Select all

    flat assembler  version 1.67.38  (1247114 kilobytes memory)
    test.asm [29]:
    header  db      'HelloWorld test',0
    c:/fasm/kolibri_sdk/macros.inc [327] header [4]:
      db 'MENUET',a
    error: invalid argument.
    Суть происходящего в том, что в файле macros.inc присутствует определение макроса header. В строке "header db 'HelloWorld test',0" fasm думает, что header - это макрос, а на самом деле это имя.
    Решение: в компилируемом файле все header заменить на любое другое свободное имя, например head, и вуаля!
  • a

    purge header

    нельзя? или макрос реально нужен?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • "...или так."
    Можно конечно. Надо запомнить :)
  • anton_obuhov wrote:А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам

    ЕСЛИ КОНЕЧНО ВАМ НЕ ТРУДНО!!!
    Если я неправильно изложил идею напишите в ЛС
    Короче вызов производится через int 40 h

    Перед вызовом следует указать в eax номер системной функции.
    Многие функции требуют задания параметров. Параметры передаются в других регистрах (ebx,ecx,edx и т.д.) Число и тип параметров указаны в документации на каждую функцию.
    Многие системные функции возвращают результат работы в регистре eax, а некоторые устанавливают и другие регистры. Наличие/отсутствие возвращаемого значения указано в документации на каждую функцию.
    Все регистры, кроме тех, в которых возвращается значение, сохраняются. (Включая регистр флагов eflags).
    http://www.kolibrios.org/?p=Documentati ... mFunctions найди нужную и вставть соответствующие параметры.Эти фунции типа как API для windows.Думаю все понятно.
  • Кто нибудь переводил СИшный код ассемблер? Есть примеры в сырце КОС? Если есть скажите пожалуйста как зовут программу. И ссылочку на СИшный вариант дайте пожалуйста. А то что-то у меня не получается толком переводить. Асобенно с & и * проблемы.

    Вот например:
    Typedef struct MyStruct
    {int x
    int y}

    void MyProc (MyStruct* MyS) //объявляется так
    {....}

    ....
    MyProc (&My1)// вызывается так
    это значит что переменная My1 после выполнения процедуры изменится, так?
  • Yaskhan wrote:переменная My1 после выполнения процедуры изменится, так?
    Изменится. При вызове MyProc (&My1) процедуре передаётся адрес структуры My1, с которым и работает процедура. Если объявить не void MyProc (MyStruct* MyS), а void MyProc (MyStruct MyS), то компилятор создаст локальную область размером sizeof(MyStruct) и при вызове MyProc (My1) скопирует в неё значения из My1. Структура My1 при этом не изменится (если, конечно, My1 не глобальная переменная). Хотя и это является спорным вопросом - многое зависит от компилятора. Передавать глобальные переменные таким образом считается плохим тоном, к тому же если переменная глобальная, то лучше писать ::My1.
  • Значит в ассемблерном варианте эта процедура должна возвращать знаение в какомто регистре? Или както по другому?
    Дайте лучше примерчик перевода в КОС пожалуйста!
  • Who is online

    Users browsing this forum: Ahrefs [Bot] and 10 guests