Рабочая обстановка для написания кода

Applications development, KoOS API questions
  • А в каком случае текст может выводится в неактивное окно?
  • Pathoswithin
    в любом.
    Колибри - многозадачная ОС, и любой процесс в принципе может осуществлять вывод в свое окно даже если оно неактивно и частично перекрыто другими окнами.
    Ядро следит за GUI-операциями и блокирует putpixel в перекрытые регионы.
  • Pathoswithin wrote:Второй вопрос до сих пор без ответа.
    Ты же сам ответил: функция 4 в API ядра, внутре у ей putpixel.
    Pathoswithin wrote:Как мне добавить к четвёртой функции параметр "размер шрифта"? В есх есть 3 свободных бита, можно передавать множитель, будет до х8. Хотя это не перспективно, лучше передавать размер в пикселях...
    Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.
    Pathoswithin wrote:Я смотрю, вывод осуществляется через вызов putpixel... "Это конечно круто". Есть прямой доступ к видеопамяти или что-то вроде DirectDraw?
    Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.
    Сделаем мир лучше!
  • CleverMouse wrote:Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.
    И мне придётся вручную изменения вносить. 4 функция вполне нормальная, использовать 3 бита в есх проще всего, если можно.
    CleverMouse wrote:Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.
    Но и putpixel использовать не обязательно. Давайте решать, как лучше. Вроде art_zh в своём шрифте вручную сделал проверку углов.
  • Для начала и без проверки ничего ужасного не случится. Я уже начал экспериментировать с новым подходом, но система перезагружается сразу после синего экрана, и похоже я чего-то не знаю. Посмотрите, там всего 60 строк.
    Attachments
    font.inc (2.45 KiB)
    Downloaded 241 times
  • Have you tried running your code in BOCHS or VirtualBox with debugger enabled? :)
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • hidnplayr No... :) Usually I found errors manually. Especially in 60 lines. If I dont see any, probably I dont know something. In that case, art_zh, Serge or CleverMouse should find the problem easily.
  • Pathoswithin Your laziness in fault seeking disapoints me.
    Perhaps this will get you going again:
    dtext
    edx=80035E8B esi=80035E8B edi=00000001
    ebx=000A000A ecx=80FFFFFF
    .userarea
    Also, be sure to read the documentation of the system function again.
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • edi=00000001 :?:
    kernel.asm, syscall_writetext:

    Code: Select all

    	mov	eax, edi
    	test  ecx, 0x08000000  ; redirect the output to the user area
    	jnz	dtext
    	xor	edi, edi
    	jmp	dtext
  • Ага

    Code: Select all

    ; edi 1 force or user area for redirect
    "1 force" это конечно исчерпывающее описание.
  • Code: Select all

    boot_log:
            pushad
    
            mov     ebx, 10*65536
            mov     bx, word [boot_y]
            add     [boot_y], dword 10
            mov     ecx, 0x80ffffff; ASCIIZ string with white color
            xor     edi, edi
            mov     edx, esi
            inc     edi
            call    dtext
    
            mov     [novesachecksum], 1000
            call    checkVga_N13
    
            popad
    
            ret 
    
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • This edi=1 stuff looks like the remains of something old that is probably no longer needed.
    The first problem with your code is that you test if edi is 0, instead of testing the correct bit in another register, as mentioned in syscalls.txt

    edit: Sorry, it seems this binary flag is detected in syscall_writetext and from there on, another interface is used, did not notice...
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Сделал проверку углов, теперь надо с курсором разобраться. Как вообще работает программный курсор?
  • Pathoswithin wrote:
    CleverMouse wrote:Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.
    И мне придётся вручную изменения вносить. 4 функция вполне нормальная, использовать 3 бита в есх проще всего, если можно.
    Так в любом случае придётся.
    Pathoswithin wrote:
    CleverMouse wrote:Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.
    Но и putpixel использовать не обязательно. Давайте решать, как лучше. Вроде art_zh в своём шрифте вручную сделал проверку углов.
    Зачем? Ты собираешься выводить на экран миллионы символов в секунду?

    Проверка углов будет давать видимые артефакты - при перекрытии окна другим части символов, которые должны быть видимы, исчезнут. А если приложение рассчитывает ещё и на заливку фоном, которую ты так тоже отключишь для области рядом с перекрывающим окном, могут получаться совсем странные эффекты.

    Для ускорения проверки перекрытий нужно переходить с буфера win_map на обрамляющие прямоугольники, чтобы не проверять каждый пиксель, а сразу понять, что рисовать можно в таких-то пределах. Но это чрезвычайно трудоёмкая задача, mike.dld в своё время пытался - http://websvn.kolibrios.org/listing.php ... de1b3d298f - но не осилил.
    Сделаем мир лучше!
  • Who is online

    Users browsing this forum: No registered users and 5 guests