Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Dec 07, 2019 12:35 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 104 posts ]  Go to page Previous 1 2 3 4 5 6 7 Next
Author Message
PostPosted: Sat Mar 26, 2016 2:00 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Yason wrote:
Pathoswithin wrote:
Мне кажется, приходят две клавиши по очереди: сначала 224/225, потом основной код.
Да, нечто подобное происходит.
ALEXS1983: вот пример, с одной стрелкой вверх.

Yason, СПАСИБО!
Сейчас рассмотрю!
Я пока рассматриваю и ковыряю программу сканкод. Создал скриншоты кодов клавиш с той программы. Я было когда-то делал скрины, но те скрины где-то затерялись. поэтому выложу сюда, программу scancode с исходниками и НОВОСОЗДНАННЫМИ скринами той программы, с кодами клавиш. Может кому-то прогодится
Attachment:
scancode.7z [37.45 KiB]
Downloaded 89 times


Top
   
PostPosted: Sat Mar 26, 2016 3:40 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Yason wrote:
Pathoswithin wrote:
Мне кажется, приходят две клавиши по очереди: сначала 224/225, потом основной код.

Ну это как на турбоПоскакале, - если приходит "0", - то это дополнительная клавиша, опрашивай клаву еще раз и будет код допонительной. Но тут "224", да еще и "225" какие-то, да еще и разный код нажата/отжата, хотя действие and 0x7f приводит к одному коду конкретной клавиши.
В общем, всем спасибо за помощь, а также создателям scancode и его исходникам :-)
Вот на "скорую руку" "наклепал" вот такое (см.ниже) под меня "подточенное", хотя и другим может пригодится. Пока еще более тщательно не проверял, но похоже, что там всё правильно.
Spoiler: Show
Code:
    ; запускасть ScanCodeKey
    ;Результат обработки в
    ScanCodeKey1 rd 1 ; "Чистый" код
    ScanCodeKey2 rd 1 ; обработаный код (-128 если больше 128)
    ScanCodeKeyUD rd 1 ; если 0 - отжата, если 1 -нажата
    ScanCodeKeyExt rd 1 ; 0- обычный код; 1 - доп ext (224); 2 - доп2 ext2 (225)
  ScanCodeKey_int40_2dop:
     mov  eax,2 
     mcall
     shr  eax,8                   ; scancode
     and  eax,0xff
        ret
       
ScanCodeKey:   ; START ScanCode
  mov [ScanCodeKeyExt],0
ScanCode_m1:
 call ScanCodeKey_int40_2dop
 
    cmp  eax,224 ; если доп код....
    jne  ScanCode_cmp_225;  если не равно нулю
  mov [ScanCodeKeyExt],1
call ScanCodeKey_int40_2dop; .... опросить клаву еще раз
    JMP ScanCode_m2
   
ScanCode_cmp_225:
   cmp  eax,225 ; если доп2 код....
    jne  ScanCode_m2;  если не равно нулю
  mov [ScanCodeKeyExt],2
call ScanCodeKey_int40_2dop; .... опросить клаву еще раз
 
; САМА кодировка     
ScanCode_m2:
mov[ScanCodeKey1], eax ; "Чистый" код     
 ; Клавиша нажата DOWN
mov[ScanCodeKeyUD],1 ; если 0 - отжата, если 1 -нажата   
    cmp  eax,128
    jb   no_up
; Клавиша отжата секция UP
 mov[ScanCodeKeyUD],0 ; если 0 - отжата, если 1 -нажата

no_up:
    mov    ebx,eax
    and    ebx,0x7f
mov [ScanCodeKey2],ebx ; обработаный код (-128 если больше 128)
ret


Top
   
PostPosted: Sat Mar 26, 2016 4:39 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Хе! :-)
А знаете ли вы....
что если запустить программу Scancode и открыть крышку ноута, то....
открытие крышки ноута имеет код: 224/227 (т.е. Ext 227)

Не знал!


Top
   
PostPosted: Sat Mar 26, 2016 5:21 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
На ноутбучной клавиатуре бывает клавиша "спящий режим". У неё тоже должен быть такой код.


Top
   
PostPosted: Sat Mar 26, 2016 10:02 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin wrote:
На ноутбучной клавиатуре бывает клавиша "спящий режим". У неё тоже должен быть такой код.

Открытие крышки, работает в KlbrInWin и в QEMU, а в КОС, увы не работает! И то что ты говоришь, тоже не работает НИГДЕ! :-)
Но у меня другие печали....
Переделал эмуль на доп.клавиши (стрелки) это работает в KlbrInWin и в QEMU, а в КОС,- НЕ РАБОТАЕТ! Как это понимать и что с этим делать ?
Вот попробуй прикреплённый файл запустить, в KlbrInWin, QEMU, и в КОС, должны работать стрелки и "стрельба" любой управляющей например Home, End и т.д.
Это не работает в КОС ни на основной клаве ноута, ни на подключённой клаве к ноуту!
Вот те и дела! :-(
Attachment:
Aerocobra.7z [24.39 KiB]
Downloaded 81 times

Проблемой века :-) это конечно не является, так как будет предусмотрено возможность менять любая на любую, но всё равно, определённый дискомфорт, при том всём, что в эмулях KlbrInWin, QEMU оно то работает нормально.
Попробуйте, плиз, у себя Aerocobra.7z все кто может и всем кому не лень, может это у меня чего-то не так.


Top
   
PostPosted: Sat Mar 26, 2016 11:20 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Вот оригинал реализации в дельфи одной из команд КР580
Code:
{SUI}
.............
  $D6:
  begin
 tmp1:=do_read(r_PC+1);    tmp2:=(r_A-tmp1) and $FF;    r_F:=flags[tmp2]; 
   if (r_A<tmp1) then     begin      r_F:=r_F or f_C;    end;
    if (((tmp2  xor r_A  xor tmp1) and $10)<>0) then     begin      r_F:=r_F or f_A;
    end;    r_A:=tmp2;    clock:=clock+7;    r_PC:=r_PC+2;
  end;
...............
похожих участков команд реализующих процедуру $D6 и другие процедуры-команды-кр580 очень много.

Для более безболезненного переноса процедур-команд-кр580, в ФАСМ, а их "спаковал" вот в такое:
Code:
...............
Procedure mD5m; begin m06m; m33m; end;
Procedure mD6m; begin m47m; m75m; m09m; m76m; m36m_a:=tmp1; m36m;end;
...............
{SUI}
Procedure CD6; begin mD6m; mD5m; end;
.........

т.е. процедура "CD6" вызывает "mD6m" и "mD5m", а те в свою очередь еще процедуры... и те в свою очередь еще... и так долго и нудно, :-) думаю таких вложений доходит до 10, а может и более.

Если оставить их "запакованными", то размер запускного КОС будет маленьким, но и скорость работы тоже будет маленькая (ну или же нагрузка на процессор большая, точно не знаю), если же я распакую их, то код, - длиннее, скорость работы, - быстрее.
Вопрос: стоит ли это делать, (т.е. распаковку)?... оправдаются ли мои ожидании в увеличении быстродействия в КОС? к слову, в винде, это не ощущается (запакованные от не запакованных процедур реализующих команды КР580)... ну или слабо ощущается... ну или не всегда ощущается. Тщательных тестов по этому поводу я не делал.
Мысленно подсчитав, что команд КР-580, точнее процедур реализующих эти команды , в 2/100 сек выполняется 10000-15000 и каждая из них с немаленькими вложениями других процедур одна-в-одну, думаю, распаковка должна дать о себе знать?!
Спецы, что скажите ?


Top
   
PostPosted: Sun Mar 27, 2016 1:04 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

Запустил. Вместо управления какие-то глюки. А ты учитываешь, что за время ожидания, в очереди может быть несколько клавиш?


Top
   
PostPosted: Sun Mar 27, 2016 9:26 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin wrote:
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

Насколько я успел понять, в КОС всё очень чувствительно, по моему когда-то, в начале написания эмуля, я "прокуручивал" только блок команд и только вывод на экран, само-по-себе - и то, и другое само-по-себе заметно для загрузки процессора, но тогда разных видов задержек по моему еще не было. Займусь исследованием.

Pathoswithin wrote:
Запустил. Вместо управления какие-то глюки. А ты учитываешь, что за время ожидания, в очереди может быть несколько клавиш?

Знаешь, ты мне мысль подкинул, причём обратную! :-) Задумавшись, над тем почему не с дополнительными клавишами эмуль в KOS работает нормально, а почему с дополнительными программа ScanCode в КОС работает нормально, в чём разница кода программы ScanCode и моего кода, который я в принципе взял из этой программы (ScanCode), понял следующее: что ScanCode обрабатывает клавиатуру, по факту события(ожидает события) клавиатуры, причём на абсолютно на каждый отдельный код. А у меня код спешит с опросом клавиатуры, т.е. при появлении доп. кода, мой код, сразу же опрашивает клавиатуру еще раз. В эмуляторах KlbrInWin и в QEMU почему-то такие "номера" проходят, а вот в оригинале похоже что нет.
вот код моего опроса который я уже выкладывал :
Spoiler: Show
Code:
    ; запускасть ScanCodeKey
    ;Результат обработки в
    ScanCodeKey1 rd 1 ; "Чистый" код
    ScanCodeKey2 rd 1 ; обработаный код (-128 если больше 128)
    ScanCodeKeyUD rd 1 ; если 0 - отжата, если 1 -нажата
    ScanCodeKeyExt rd 1 ; 0- обычный код; 1 - доп ext (224); 2 - доп2 ext2 (225)

  ScanCodeKey_int40_2dop:
     mov  eax,2 
     mcall
     shr  eax,8                   ; scancode
     and  eax,0xff
        ret
       
ScanCodeKey:   ; START ScanCode
  mov [ScanCodeKeyExt],0
ScanCode_m1:
 call ScanCodeKey_int40_2dop
 
    cmp  eax,224 ; если доп код....
    jne  ScanCode_cmp_225;  если не равно нулю
  mov [ScanCodeKeyExt],1
call ScanCodeKey_int40_2dop; .... опросить клаву еще раз
    JMP ScanCode_m2
   
ScanCode_cmp_225:
   cmp  eax,225 ; если доп2 код....
    jne  ScanCode_m2;  если не равно нулю
  mov [ScanCodeKeyExt],2
call ScanCodeKey_int40_2dop; .... опросить клаву еще раз
 
; САМА кодировка     
ScanCode_m2:
mov[ScanCodeKey1], eax ; "Чистый" код     
 ; Клавиша нажата DOWN
mov[ScanCodeKeyUD],1 ; если 0 - отжата, если 1 -нажата   
    cmp  eax,128
    jb   no_up
; Клавиша отжата секция UP
 mov[ScanCodeKeyUD],0 ; если 0 - отжата, если 1 -нажата

no_up:
    mov    ebx,eax
    and    ebx,0x7f
mov [ScanCodeKey2],ebx ; обработаный код (-128 если больше 128)

; "единый" код
;ScanCodeKeyUnitedCode rd 1 ; "единый" код
ret

В ScanCode после появления события, он "прокручивается" лишь раз, а у меня как видишь
...............
cmp eax,224 ; если доп код....
......................
call ScanCodeKey_int40_2dop; .... опросить клаву еще раз
..................
Займусь! проверю!


Top
   
PostPosted: Sun Mar 27, 2016 5:34 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin wrote:
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

Измерял! Вывод на экран требует всего лишь 5-7%, а всё остальное код! Доходит и до 40% вместе с выводом, и даже до 100% в зависимости от игрушки. Видимо надо распаковывать потихоньку, слава богу, что это безболезненно, так как всё "завязано" на ячейки памяти, а не на регистры процессора.


Top
   
PostPosted: Sun Mar 27, 2016 6:26 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
«Ну шо я могу сказать..... « (с) Л.И. Брежнев :-)
… С дополнительными клавишами надеюсь проблема решена, пример тому вложенный файл. Это игра «Лабиринт», по мотивам ретро-машины «Агат», кстати написал игру на КР-580 для «ПК-01 Львов», - я!
Эмулятор вполне нормально работает под КОС и KlbrInWin, а вот QEMU, - завал полный!
В КОС и KlbrInWin разная скорость работы, хотя я с этим вряд ли что-то поделаю. Была мысль написать процедуру автоопределение и авторегулировка скорости для КОС и KlbrInWin, (в момент запуска эмуля), заключающаяся в подсчёте каких-то действий в единицу времени при запуске, и последующая калибровка скорости, но считаю, что это ничего не даст. Разные игры и программы в зависимости от, того как они написаны для «ПК-01 Львов», будут все равно по разному себя вести, в плане скорости и потребления ресурсов процессора. В общем всё сводится к тому, что при генерации игры, нужно будет указывать скорость, задержку таймера, и тип движка с определённым таймером, для какой-то конкретной среды запуска эмуля КОС, KlbrInWin или QEMU.
В дальнейших планах, - реализовать все клавиши клавиатуры эмулятора.
В данный момент реализованы, стрелки, пробел, «1» , «2», «3», enter. Остальные тоже работают, но их можно использовать, только там, там где «стрелять — любая» :-).
=================================================

Image

Image

Attachment:
Labirint.7z [22.6 KiB]
Downloaded 82 times


Top
   
PostPosted: Mon Mar 28, 2016 1:23 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Сегодня попробовал сделать режим 512х512, получилось не плохо, точнее говоря всё очень даже хорошо, скорость не падает, ресурсы, не «притапливает», эмуль работает не торможенно. :-) Ура!
Перекомпилировал все игры под режим 512х512 и под стрелки. Также добавлена еще одна игра в архив, - "Bomber Man" . Скорость игр не отрегулирована, работают быстрее, чем надо, хотя по виндовым меркам, установлена нормальная скорость. То, что данные примеры работает быстрее чем надо, хорошо тем, что видно, что игры не торможенные и эмуль тоже. :-) Как я уже писал, всё равно каждую игру нужно будет регулировать отдельно, а поскольку на вкус и цвет, карандаши разные, :-) то поэтому, и нужно создавать генератор, для того, чтобы каждый мог, абсолютно любую игру эмулятора, регулировать самостоятельно, по скорости, граф.режиму и т. д. а не мне все игры компилировать. :-) Тем более игр для эмулятора не мало. Выбранных мной, имеющих статут «ничё, поиграть можно», :-) - более 130 штук.
Attachment:
Games.7z [231.37 KiB]
Downloaded 88 times

В архиве Games.7z, находятся каталоги «_NOPack», «_Pack» в которых 9 аналогичных игр, в не запакованном и запакованном виде соответственно. Игры в ахриве: Aerocobra, Arcanoid, Bomber Man, King Valey, Rick1, Алибаба, Башня, Лабиринт, Пьяный лифтёр.
Как всегда, эмуль и игры работают вполне нормально работает под КОС и KlbrInWin, а вот QEMU, - завал полный!
Если есть участники которые запускали, под другими средами, например под Sun xVM VirtualBox, или в чём-то другом, прошу написать отзывы. Я не проверял не знаю, и ничего сказать не могу.

Image

Image

Ну вот пока и всё. Доработка и усовершенствование эмулятора продолжается. :-)


Top
   
PostPosted: Mon Mar 28, 2016 3:58 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
ALEXS1983: Сейчас, значительно лучше. Тестировал на реальном железе. Загрузка [b]ЦПУ[/b снизилась (где-то на 30%). Управление стрелками, работает. :)


Top
   
PostPosted: Mon Mar 28, 2016 4:00 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Yason wrote:
Загрузка [b]ЦПУ[/b снизилась (где-то на 30%). Управление стрелками, работает. :)

Знаю, знаю, что снизился :-) она ведь не просто сама-по-себе снизилась, это всё мои старания :-)
См. следующее сообщение


Top
   
PostPosted: Mon Mar 28, 2016 4:05 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
768х512. А вот как вам вот такой граф. режим, а?
Cannon Ball
Attachment:
Cannon Ball.7z [21.06 KiB]
Downloaded 83 times

Image
Image


Top
   
PostPosted: Mon Mar 28, 2016 4:18 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
ALEXS1983 wrote:
Yason wrote:
Загрузка [b]ЦПУ[/b снизилась (где-то на 30%). Управление стрелками, работает. :)

Знаю, знаю, что снизился :-) она ведь не просто сама-по-себе снизилась, это всё мои старания :-)
Молодец. Image :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 104 posts ]  Go to page Previous 1 2 3 4 5 6 7 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