SAS Emulator (эмулятор «ПК-01 Львов»)

...
  • ALEXS1983 wrote:1.Как я уже говорил, - я новичок в программировании для КОС и не знаю как это делать! Yason, ты готов помогать кусками готового кода ? :-)
    Могу попробовать. Но у меня, не часто бывает время на общение, на форуме. Так что, процесс, может очень сильно затянуться.
    ALEXS1983 wrote:2. Считаю, (может быть по себе любимому :-) ), что люди не любят «заморачиваться» на «прибамбацах» эмуляторов, - Файл/отркыть/закрыть и т. д. И вот решил пойти таким путём, который в сочетании с моими «нулевыми» знаниями о том, как создавать меню в форме «файл\открыть\закрыть и т.д», как загружать, сохранять файл и т. д. можно написать эмулятор со встроенной игрой, без всяких «прибамбацов», а генерировать это будет «SASEmulator for Windows.7z».
    Тот способ, который я предложил выше, не требует никаких лишних действий. Выбрал в файловом менеджере игру, нажал 2 раза лкм и играй до опупения (при условии, что эмуль в образе, конечно). Но, пишущему виднее.
    ALEXS1983 wrote:Также планируется тот генератор сделать с настройками быстродействия, «легкой» калибровкой цветов, и калибровкой клавиатуры и т. д.
    Настройки можно разместить в файле .ini. На svn была либа, для обработки .ini.
    ALEXS1983 wrote:3.Ты и впрям думаешь, что для КОС это творение нужно в виде эмулятора ?!...
    Просто, предложил способ. Не люблю искусственно раздутые проги. Но, пишущему виднее.
    ALEXS1983 wrote:рассмотри игрушки в SASEmulator for Windows.7z, задай себе вопрос,- какое количество ты хотел бы, чтобы они были под КОС ?!... думаю, 2 или 3 или 5, да пусть даже и 10.
    Я вообще не игрок (но, иногда люблю поиграть в игры), но imho, чем больше, тем лучше. Кроме меня и тебя, есть другие люди (например, дети), которые обажают играть.
    ALEXS1983 wrote:Ну вот, сгенерировал бы нужные игры под КОС и вуа-ля, «забрасывай» SASEmulator for Windows.7z в архив или «на мусорку», играй только в те, что выбрал, со временем и те поудаляешь при необходимости.
    Так игры-то, наверно готовые? Загрузил в эмулятор и играй, не надо ничего генерировать.
  • Немного переделал файл.
    Update: Новый "memory.inc", лежит тут.
    Last edited by Yason on Fri Mar 25, 2016 12:42 pm, edited 1 time in total.
  • ALEXS1983 wrote:короче говоря, :-) как манипулировать с этим доп. кодами (двойными кодами?! Или как там их правильно?!... если код=224 повторно опрашивать клаву?!... Или пропускать 224 ?!... где он в каких битах или байтах этот признак (224) дополнительной клавиши, фигурирует?!... и т.д.
    Какие доп. коды? Для стрелочек, никакие доп. коды не нужны, imho.
    ALEXS1983 wrote:Ну в дельфи это всё вообще выглядит просто, может быть так понятней будет:
    Нет не понятней, я Ассемблерщик (плохой, но как уж есть). :)
  • Yason wrote:
    ALEXS1983 wrote:1.Как я уже говорил, - я новичок в программировании для КОС и не знаю как это делать! Yason, ты готов помогать кусками готового кода ? :-)
    Могу попробовать. Но у меня, не часто бывает время на общение, на форуме. Так что, процесс, может очень сильно затянуться.
    Если я буду реализовывать это самостоятельно, процесс не то чтобы затянется в десятки раз дольше, а вообще заглохнет(!), так как, мне, рано или поздно, надоест "спотыкаться" об то, чего я не знаю и узнать не смогу, да и другие подсказать не могут или не хотят! Вот такие реалии! :-(
    А если никто не помогает, рано или поздно начинаешь осознавать ненужность этого никому(!) :-( и соответственно и себе оно становится не очень-то нужно! :-(
    В принципе, на данном этапе, всё, что нужно, себе любимому, - я уже доказал(!) и если это действительно больше никому не нужно, могу забросить вовсе!
    Yason wrote:Тот способ, который я предложил выше, не требует никаких лишних действий. Выбрал в файловом менеджере игру, нажал 2 раза лкм и играй до опупения (при условии, что эмуль в образе, конечно). Но, пишущему виднее.
    Тот способ, что ты предложил, требует знаний, которых у меня "ноль"! :-( И я выбрал, тот который могу реализовать. Появятся знания как реализовать, тот способ, который предлагаешь ты, - реализуем! Хотя, как я говорил, в виде эмулятора, мне не очень-то это интересно. В виде эмулятора я уже создал для винды! Да и другие подобные, эмуляторы есть, получше моего (под винду), да и со звуком. Кстати, звук, я не возьмусь реализовывать никогда! Ни под винду, ни под кос, ни на дельфи, ни на фасме, короче, - ни на чём! :-) Уж очень мне тело будоражило :-) от попыток реализации звука в эмуляторе, от потери массы времени на это и последующий к конце-концов обломс, :-( когда я его писал для винды в дельфях!
    Yason wrote:Настройки можно разместить в файле .ini. На svn была либа, для обработки .ini.
    Я вижу ты и вправду не понимаешь какой я ноль без палочки! :-)
    У меня ума хватило только на то, чтобы "перекочивать" из дельфи-компилированного-кода в фасм! Не более! Ну в принципе, изначальная такая цель у меня и ставилась! Поэтому, многое чего я еще не понимаю, хоть уже и кое как эмуль написал! :-)
    Yason wrote: Просто, предложил способ. Не люблю искусственно раздутые проги. Но, пишущему виднее.
    Да я и сам не люблю! Но пока, как могу так и делаю! Опять же, цель была, - доказать себе любимому, что можно из дельфи-компилированного-кода "перекочевать" в фасм, так чтобы оно скомпилировалось и работало под КОС, при этом написать такое, чего еще, нету для КОС!... т.е. эмулятора "ПК-01 Львов" ведь нету ?!... а раз этого еще нету, то размер его, не будет (не должен) так уж "бить по мозгам"... сравнивать то не с чем!... :-) Ну вот откуда ты бы знал, (если бы я не написал, что можно выкинуть из эмуля) какой он должен быть размером ?! :-)
    Yason wrote: Я вообще не игрок (но, иногда люблю поиграть в игры), но imho, чем больше, тем лучше. Кроме меня и тебя, есть другие люди (например, дети), которые обажают играть.
    Ты конечно прав!
    Но тут понимаешь ли, два варианта, - либо синица в руках, либо журавля днём-с-огнем не сыщешь! :-)
    т. е. либо я делаю так как я знаю, и из этого что-то будет получаться, которое в принципе можно использовать. Либо берусь за то, что ты говоришь, эта тема «замирает» на полгода а то и больше, а в последствии может оказаться полный облом и разочароние :-( и в общем «плюну» на это всё! И получится, что на выложенных черновиках оно «всё умерло», причём навсегда.
    Yason wrote: Так игры-то, наверно готовые? Загрузил в эмулятор и играй, не надо ничего генерировать.
    Да далеко мне еще до этого! Очень далеко! И долго! Дай бог, вообще куда-то дойти, :-) точнее говоря «выйти» хотя бы из черновиков! :-) Ты же и сам писал, про масштабирование, про пожирание ресурсов, про клавиши и т.д. что в принципе совпало с моими первоочередными задумками о доработках. :-) Тут еще надо работать и работать! Далековато еще думать о полноценном эмуле! :-) :(
  • Yason, я выложил код который реализующий обработку клавиатуры который у меня сейчас, выложил вот здесь
    viewtopic.php?f=43&t=3253#p64907
    если ты хочешь и можешь мне помочь, (за что я тебе благодарен ), то пожалуйста, как я и просил, впиши в том код реализацию ХОТЯ БЫ ОДНОЙ клавиши из дополнительных! Если существенно, какой именно клавиши, то пусть будет та клавиша «ВВЕРХ»! Всё остальное лишнее, можешь выкинуть из процедур KeyProcess и readmask2. ВСТАВЬ В ТЕ ПРОЦЕДУРЫ ГОТОВЫЙ КОД ОБРАБОТКИ доп клавиши «ВВЕРХ»!
    Ну не пойму я на пальцах! Не пойму! Ну мне один конкретный пример нужен , если нажата дополнительная или отжата дополнительная, вот начало...

    Code: Select all

    KeyProcess:
    mov eax,2
    int 0x40
    ....
    Что дальше ? Вписать можешь ?
    Видишь как я реализовал это для основных клавиш ?!

    Code: Select all

    ;; если 'UP'
       sub eax,128
    
    если клавиша отжата, минусуется 128 и получаем ТАКОЙ ЖЕ КОД как для нажатой, НО....
    в зависимости нажатая и отжатая выбираются ветки
    «;; если 'UP'» либо «;; если 'DOWN'” (см. код)       
    НО КОД ТО КЛАВИШИ который получает readmask_keynum для процедуры readmask2, код то ОДИН И ТОТ ЖЕ ДЛЯ ДАННОЙ НАЖАТОЙ/ОТЖАТОЙ КЛАВИШИ, в данном примере для «вверх» этот код =25.
    далее в процедуре readmask2 можешь выкинуть ВСЁ, напиши только для клавиши «вверх»,
    вот так вот

    Code: Select all

    readmask2:
     mov [readmask_Result],$000072ff
    ;//{ВВЕРХ}
    readmask2_m2:  cmp dword [readmask_keynum],25
                 jnz readmask2_ret
     mov [readmask_Result],$0000ff31
    readmask2_ret:      ret ;
    
    чтобы при её коде который в readmask_keynum равном (в данном случае 25) readmask_Result становилось равным $0000ff31 !
    ВОТ И ВСЁ! НУ НЕУЖЕЛИ Я ТАК БЕСТОЛКОВО ОБЪЯСНЯЮ ЧТО МЕНЯ ПОНЯТЬ НЕВОЗМОЖНО ?!

    КОД ДОПОЛНИТЕЛЬНЫХ КЛАВИШ, ВЕДЬ МОЖНО СВЕТИ К ОДНОМУ ЧИСЛУ (конкретной клавиши) ОТНЯВ КАКОЕ-ТО ЧИСЛО, 128 например ?

    КАК ПОСЛЕ

    Code: Select all

    KeyProcess:
    mov eax,2
    int 0x40
    понять что нажата или отжата ДОПОЛНИТЕЛЬНАЯ КЛАВИША ? и далее свести к одному числу... и далее по разным веткам "нажата" или "отжата"... ВОТ О ЧЁМ ВСЁ Я ТОЛДЫЧУ И ТОЛДЫЧУ!
  • Вот, грубый пример (очень простой) использования клавиш - стрелок. Никаких доп. кодов. Хотя если очень надо, то можно дописать лишнюю проверку: благо это не сложно - всего две лишние строчки.
    Attachments
    MoveRect.png
    MoveRect.png (3.74 KiB)
    Viewed 8337 times
    MoveRect.7z (8.73 KiB)
    Downloaded 174 times
    Last edited by Yason on Thu Mar 24, 2016 10:23 pm, edited 1 time in total.
  • СПАСИБО!
    Yason wrote: Хотя если очень надо, то можно дописать лишнюю проверку: благо это не сложно - всего две лишние строчки.
    В том то и дело что очень надо! В будущем ведь будет задействована вся клавиатура, а не только стрелки, так как это всё таки эмулятор компа, и в нём есть игры и программы не только под использование стрелок. Поэтому надо как-то отличать, коды 72,80, 77 и 75 дополнительной клавиатуры от основной! в основной ведь тоже есть кл. с такими кодами, так ведь ?! (уже не помню, хотя и рассматривал)
    ===================
    Еще один глупый вопрос. Какие установки должны быть для окна чтобы оно было фиксированных размеров ?

    Code: Select all

     mov EAX, 0
     mov EBX, (10*65536+257+10)
     mov ECX, (10*65536+270+10)
     mov EDX, 0x34000000
     mov  edi, titleE
    INT0x40;  
    
    когда-то было установил окно фиксированных размеров, потом убрал это, а теперь, чтобы я не делал (по инструкции) в mov EDX, 0x34000000 не могу добиться, чтобы оно опять стало фиксированных размеров, странно как-то....
    ===================
    Слушай, Yason, я вот не сразу «глубоко въехал» вот в это ниже написанное тобой, мысль, что это сложно сбила меня....
    Yason wrote:Тот способ, который я предложил выше, не требует никаких лишних действий. Выбрал в файловом менеджере игру, нажал 2 раза лкм и играй до опупения (при условии, что эмуль в образе, конечно). Но, пишущему виднее.
    А ведь точно! Хороший мысля ты подкинул! Значит, Хороший ты человек! :-)
    Я как-то это из внимания упустил, неверное сильно зациклился на менюшке "файл\открыть\закрыть" и т.д.
    Это как через командную строку, да ? т. е. как в винде, прописываешь расширение, например .lvt, по которому будет вызываться «Emul.exe” и когда жмёшь на например file.lvt, то в Эмуль передаётся имя файла как в командной строке вот так «Emul.exe file.lvt”, а далее командами подобными дельфийским ParamCount, ParamStr считываешь параметры командной строки переданные в эмуль, при запуске, так ? А в КОС тоже такое есть ? Я просто как-то не особо вникал.
    Если есть такое, то пожалуйста натолкни меня на инфу о функциях которыми это можно реализовать, какой номер функций или как она (они) называются, а также какой функцией можно воспользоваться для чтения/записи файла в масив.
  • Yason wrote:Немного переделал файл.
    Насчёт memory.inc
    Подключил в основной модуль Main.asm вот так «include 'memory.inc'»
    На первую строку, которая «proc memory.init» выдает ошибку:

    flat assembler version 1.71.39 (662161 kilobytes memory)
    memory.inc [1]:
    proc memory.init
    error: illegal instruction.

    Да и вообще, я ничего не понял с теми процедурами. Я думал это как-то проще. А как потом доступатся к той памяти ? Ну к нормальной понятно например mov [ebx+VideoDirtyM],al или mov bl,[VideoDirtyM+eax] А быстродеqствие такое же как и в обычной размеченной, типа VideoDirtyM rb 16384 ?

    ================================
  • Yason, я не пойму, а чего "парится" насчёт размера ?!
    В КОС есть KPACK который очень хорошо компрессирует запускаемые КОС файлы и при этом они запускаются!
    Зацени пример: БашняNoPack размер 377694, БашняPack размер 21063. Лучше не придумаешь! Да 7z и то хуже сжимает в 22324 (21470). Ты про это не знал ? или забыл ? Ведь та память которая в эмуляторе нужна ему постоянно, поэтому нет смысла её выделять и освобождать, кроме как для уменьшения запускаемого файла, для которого нашёлся выход, - KPACK!
    Основное теперь, что нужно сделать, - уменьшить загрузку процессора эмулятором. Но как ?
    Башня.7z (42.79 KiB)
    Downloaded 168 times
    Image
  • Здесь вопрос не в цифрах, а в соотношениях: если размер эмулятора больше размера игры, то склеивать их довольно расточительно.

    По поводу производительности, в простейшем случае, чтобы вызывать цикл 50 раз в секунду, можно добавить в него такой код:

    mov eax, 26
    mov ebx, 9
    int 40
    mov ebx, eax
    shr ebx, 1
    inc ebx
    shl ebx, 1
    sub ebx, eax
    mov eax, 5
    int 40
  • ALEXS1983 wrote:СПАСИБО!
    Yason wrote: Хотя если очень надо, то можно дописать лишнюю проверку: благо это не сложно - всего две лишние строчки.
    В том то и дело что очень надо! В будущем ведь будет задействована вся клавиатура, а не только стрелки, так как это всё таки эмулятор компа, и в нём есть игры и программы не только под использование стрелок. Поэтому надо как-то отличать, коды 72,80, 77 и 75 дополнительной клавиатуры от основной! в основной ведь тоже есть кл. с такими кодами, так ведь ?! (уже не помню, хотя и рассматривал)
    Там в какой-то регистр возвращается доп. скан код (сейчас не помню, надо смотреть), просто стандартной проверкой, должно проверяться
    ALEXS1983 wrote:Еще один глупый вопрос. Какие установки должны быть для окна чтобы оно было фиксированных размеров ?

    Code: Select all

     mov EAX, 0
     mov EBX, (10*65536+257+10)
     mov ECX, (10*65536+270+10)
     mov EDX, 0x34000000
     mov  edi, titleE
    INT0x40;  
    
    когда-то было установил окно фиксированных размеров, потом убрал это, а теперь, чтобы я не делал (по инструкции) в mov EDX, 0x34000000 не могу добиться, чтобы оно опять стало фиксированных размеров, странно как-то....
    Так и есть (mov EDX, 0x34000000), AFAIK.
    ALEXS1983 wrote:Слушай, Yason, я вот не сразу «глубоко въехал» вот в это ниже написанное тобой, мысль, что это сложно сбила меня....
    Yason wrote:Тот способ, который я предложил выше, не требует никаких лишних действий. Выбрал в файловом менеджере игру, нажал 2 раза лкм и играй до опупения (при условии, что эмуль в образе, конечно). Но, пишущему виднее.
    А ведь точно! Хороший мысля ты подкинул! Значит, Хороший ты человек! :-)
    Я как-то это из внимания упустил, неверное сильно зациклился на менюшке "файл\открыть\закрыть" и т.д.
    Это как через командную строку, да ? т. е. как в винде, прописываешь расширение, например .lvt, по которому будет вызываться «Emul.exe” и когда жмёшь на например file.lvt, то в Эмуль передаётся имя файла как в командной строке вот так «Emul.exe file.lvt”, а далее командами подобными дельфийским ParamCount, ParamStr считываешь параметры командной строки переданные в эмуль, при запуске, так ? А в КОС тоже такое есть ? Я просто как-то не особо вникал.
    Если есть такое, то пожалуйста натолкни меня на инфу о функциях которыми это можно реализовать, какой номер функций или как она (они) называются, а также какой функцией можно воспользоваться для чтения/записи файла в масив.
    Так и есть. Путь, передаёт файловый менеджер или консоль. Тебе только надо, распарсить командную строку.
    Last edited by Yason on Thu Mar 24, 2016 10:43 pm, edited 1 time in total.
  • ALEXS1983 wrote:
    Yason wrote:Немного переделал файл.
    Насчёт memory.inc
    Подключил в основной модуль Main.asm вот так «include 'memory.inc'»
    На первую строку, которая «proc memory.init» выдает ошибку:

    flat assembler version 1.71.39 (662161 kilobytes memory)
    memory.inc [1]:
    proc memory.init
    error: illegal instruction.

    Да и вообще, я ничего не понял с теми процедурами. Я думал это как-то проще. А как потом доступатся к той памяти ? Ну к нормальной понятно например mov [ebx+VideoDirtyM],al или mov bl,[VideoDirtyM+eax] А быстродеqствие такое же как и в обычной размеченной, типа VideoDirtyM rb 16384 ?

    ================================
    Потому что, процедуру "proc", формирует макрос "proc32.inc" (из стандартного пакета FASM). Без него, компилироваться не будет.

    Code: Select all

    ; подключать в главный файл.
    include "proc32.inc" ; макросы облегчают жизнь ассемблерщиков!
    Attachments
    proc32.inc (8.56 KiB)
    Downloaded 172 times
    Last edited by Yason on Thu Mar 24, 2016 10:33 pm, edited 1 time in total.
  • ALEXS1983 wrote:Yason, я не пойму, а чего "парится" насчёт размера ?!
    В КОС есть KPACK который очень хорошо компрессирует запускаемые КОС файлы и при этом они запускаются!
    Зацени пример: БашняNoPack размер 377694, БашняPack размер 21063. Лучше не придумаешь! Да 7z и то хуже сжимает в 22324 (21470). Ты про это не знал ? или забыл ? Ведь та память которая в эмуляторе нужна ему постоянно, поэтому нет смысла её выделять и освобождать, кроме как для уменьшения запускаемого файла, для которого нашёлся выход, - KPACK!
    Нет, не забыл. Просто файл, был бы ещё меньше, при сжатии. Но, как я уже говолил...
    ALEXS1983 wrote:Просто, предложил способ. Не люблю искусственно раздутые проги. Но, пишущему виднее.
    ALEXS1983 wrote:Основное теперь, что нужно сделать, - уменьшить загрузку процессора эмулятором. Но как ?
    Отладчик (mtdbg), в помощь.
  • Pathoswithin wrote:Здесь вопрос не в цифрах, а в соотношениях: если размер эмулятора больше размера игры, то склеивать их довольно расточительно.
    Вот я было расписывал размер емуля в предыдущих сообщениях
    запускной файл в целом 377600 байт
    из них:
    ImageData = 262144 байт ( ImageData rd (CanvasWidth * CanvasHeight) ; сюда рисовать перед выводом на экран), в принципе он полностью нулевой, точнее должен быть нулевой, :-) значит пресуется "на ура"!
    сам код исполнительный код («в чистую») приблизительно равен 18935.
    Сама игра со «всеми патрохами» = ну скажем 82532.
    в общем эмуль, 1/4 размера игры, я бы не сказал что это расточительно!
    Еще дело в том, что даже если я для примера уберу все массивы и оставлю чисто код, попробую его запаковать KPACK, - его запакованный размер, от запакованного с со всем массивами, будет меньше, скажем на 2-4 Кбайта(!), к гадалке не ходи! :-)
    Pathoswithin wrote: По поводу производительности, в простейшем случае, чтобы вызывать цикл 50 раз в секунду, можно добавить в него такой код:
    Спасибо, рассмотрю.
  • Who is online

    Users browsing this forum: No registered users and 2 guests