Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс сен 24, 2017 9:59 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 102 сообщения ]  На страницу Пред. 1 2 3 4 5 6 7 След.
Автор Сообщение
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 2:00 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Yason писал(а):
Pathoswithin писал(а):
Мне кажется, приходят две клавиши по очереди: сначала 224/225, потом основной код.
Да, нечто подобное происходит.
ALEXS1983: вот пример, с одной стрелкой вверх.

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 3:40 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Yason писал(а):
Pathoswithin писал(а):
Мне кажется, приходят две клавиши по очереди: сначала 224/225, потом основной код.

Ну это как на турбоПоскакале, - если приходит "0", - то это дополнительная клавиша, опрашивай клаву еще раз и будет код допонительной. Но тут "224", да еще и "225" какие-то, да еще и разный код нажата/отжата, хотя действие and 0x7f приводит к одному коду конкретной клавиши.
В общем, всем спасибо за помощь, а также создателям scancode и его исходникам :-)
Вот на "скорую руку" "наклепал" вот такое (см.ниже) под меня "подточенное", хотя и другим может пригодится. Пока еще более тщательно не проверял, но похоже, что там всё правильно.
Спойлер: Показать
Код:
    ; запускасть 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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 4:39 pm 
Не в сети

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

Не знал!


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 5:21 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1177
На ноутбучной клавиатуре бывает клавиша "спящий режим". У неё тоже должен быть такой код.


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 10:02 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin писал(а):
На ноутбучной клавиатуре бывает клавиша "спящий режим". У неё тоже должен быть такой код.

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

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Сб мар 26, 2016 11:20 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Вот оригинал реализации в дельфи одной из команд КР580
Код:
{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, в ФАСМ, а их "спаковал" вот в такое:
Код:
...............
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 и каждая из них с немаленькими вложениями других процедур одна-в-одну, думаю, распаковка должна дать о себе знать?!
Спецы, что скажите ?


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Вс мар 27, 2016 1:04 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1177
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Вс мар 27, 2016 9:26 am 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin писал(а):
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

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

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

Знаешь, ты мне мысль подкинул, причём обратную! :-) Задумавшись, над тем почему не с дополнительными клавишами эмуль в KOS работает нормально, а почему с дополнительными программа ScanCode в КОС работает нормально, в чём разница кода программы ScanCode и моего кода, который я в принципе взял из этой программы (ScanCode), понял следующее: что ScanCode обрабатывает клавиатуру, по факту события(ожидает события) клавиатуры, причём на абсолютно на каждый отдельный код. А у меня код спешит с опросом клавиатуры, т.е. при появлении доп. кода, мой код, сразу же опрашивает клавиатуру еще раз. В эмуляторах KlbrInWin и в QEMU почему-то такие "номера" проходят, а вот в оригинале похоже что нет.
вот код моего опроса который я уже выкладывал :
Спойлер: Показать
Код:
    ; запускасть 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; .... опросить клаву еще раз
..................
Займусь! проверю!


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Вс мар 27, 2016 5:34 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin писал(а):
Тут надо замерять производительность. Трудно сказать, что требует больше тактов: эмулятор или вывод на экран.

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Вс мар 27, 2016 6:26 pm 
Не в сети

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

Изображение

Изображение

Вложение:
Labirint.7z [22.6 КБ]
12 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Пн мар 28, 2016 1:23 pm 
Не в сети

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

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

Изображение

Изображение

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Пн мар 28, 2016 3:58 pm 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Пн мар 28, 2016 4:00 pm 
Не в сети

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

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


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Пн мар 28, 2016 4:05 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
768х512. А вот как вам вот такой граф. режим, а?
Cannon Ball
Вложение:
Cannon Ball.7z [21.06 КБ]
16 скачиваний

Изображение
Изображение


Вернуться к началу
 Заголовок сообщения: Re: SAS Emulator (эмулятор «ПК-01 Львов»)
СообщениеДобавлено: Пн мар 28, 2016 4:18 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 102 сообщения ]  На страницу Пред. 1 2 3 4 5 6 7 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB