User Tag List

Страница 161 из 224 ПерваяПервая ... 157158159160161162163164165 ... ПоследняяПоследняя
Показано с 1,601 по 1,610 из 2231

Тема: ZXMAK2 - Виртуальная машина ZX Spectrum

  1. #1601

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прикрутил нормальный биндинг клавиатуры PC на клавиатуру спектрума.
    Можно связывать любые комбинации PC кнопок, на любые комбинации спектрум кнопок.
    Можно задавать блокировку каких-то комбинаций, если нажата кнопка, которая в комбинации не задействована.
    Все задается в config файле
    Пока не комиттил, нужно причесать.
    Если есть пожелания по добавлению поддержки сочетаний кнопок по дефолту - пишите, сразу добавлю в дефолтный конфиг
    Последний раз редактировалось ZXMAK; 20.06.2015 в 19:09.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  2. #1602

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделал тестовый билд: https://drive.google.com/file/d/0B3U...ew?usp=sharing

    Что поменялось:

    - мелкие оптимизации рендерера;

    - исправлена обработка ошибок DirectInput, теперь если окно не активно эмулятор не пытается в цикле захватить клавиатуру постоянно обрабатывая ошибки, т.е. теперь исключений не возникает, что снижает нагрузку на процессор;

    - добавлен биндинг клавиш PC на клавиши спектрума, настраивается в Keyboard.config. Старые конфиги мэппингов теперь лежат в ресурсах и из файлов не грузятся (они предназначены только для трансформации кодов клавиш от разных хостов во внутренний формат эмулятора). Поэтому эти файлы теперь можно модифицировать только в исходных кодах и хранятся они как ресурсы внутри DLL файлов;

    - общая спектрум клавиатура переработана, она теперь поддерживает настройку маски/порта и использует биндинги из Keyboard.config. Клавиатуры от АТМ и PENTEVO удалены - вместо них теперь используется общая клавиатура с кастомными настройками порта. Заодно это пофиксило дешифрацию порта клавиатуры для АТМ 7.10

    Как настраивать биндинги клавиатуры


    Корневые теги KeyBinding задают условия для срабатывания спектрум кнопки, которая задается аттрибутом Key.

    Есть несколько вариантов:

    1) Простой биндинг 1-а кнопка PC на 1-ну кнопку Spectrum'а:
    Код:
        <KeyBinding Key="D2" Condition="D2" />
    В данном случае условие простое - нажатие одной кнопки, поэтому его можно задать сразу аттрибутом Condition тега KeyBinding. Аттрибут Condition может принимать названия кнопок PC клавиатуры, определенные enum'ом ZXMAK2.Host.Entities.Key.
    В приведенном выше примере, кнопка "2" спектрума (Key="D2") напрямую привязывается к кнопке "2" PC клавиатуры (Condition="D2").

    2) Чуть более сложный вариант, нажатие любой из нескольких кнопок PC клавиатуры приводят к нажатию кнопки спектрума:
    Код:
        <KeyBinding Key="D5">
            <Condition Key="D5"/>
            <Condition Key="LeftArrow"/>
        </KeyBinding>
    В данном случае, условие содержит несколько вариантов, поэтому задается не аттрибутом, а отдельными тегами внутри тега KeyBinding. Из первой строчки примера видно что мы задаем условие для нажатия кнопки "5" спектрума:
    Код:
    <KeyBinding Key="D5">
    Далее следует перечень условий при любом из которых кнопка спектрума будет нажата - это нажатие кнопок "5" или "LeftArrow" (стрелка влево):
    Код:
            <Condition Key="D5"/>
            <Condition Key="LeftArrow"/>
    все условия Condition в KeyBinding работают по ИЛИ, т.е. если любое из них выполнилось, то сработает биндинг для кнопки спектрума "5".

    В теге Condition также можно задать аттрибут IsPressed, который по умолчанию равен True, т.е. означет что условие срабатывает по нажатию кнопки. Можно прописать это явно:
    Код:
            <Condition Key="LeftArrow" IsPressed="True"/>
    Соответственно, если прописать IsPressed="False", то условие будет срабатывать, если кнопка не нажата. Но для простых условий - это бесполезный флаг.

    3) Сложный биндинг, позволяет задать набор условий, каждое из которых должно выполниться для срабатывания биндинга.
    Сложные условия биндинга задаются тегом MultiCondition.
    Этот тег может содержать внутри себя набор тегов Condition.
    Условие MultiCondition срабатывает только если все под-условия Condition внутри MultiCondition выполняются.

    Пример:
    Код:
        <KeyBinding Key="D7">
            <Condition Key="D7"/>
            <Condition Key="UpArrow"/>
            <MultiCondition>
                <Condition Key="RightShift" IsPressed="False"/>
                <Condition Key="Apostrophe"/>
            </MultiCondition>
        </KeyBinding>
    В данном примере кнопка спектрума "7" будет нажата, в любом из следующих случаев:
    - нажата кнопка "7" PC клавиатуры;
    - нажата кнопка "UpArrow" PC клавиатуры;
    - нажата кнопка "Apostrophe" PC клавиатуры, но при этом кнопка "RightShift" PC клавиатуры не нажата.

    Вот, вобщем-то этого достаточно, чтобы настроить клавиатуру под себя

    PS: На самом деле MultiCondition может кроме Condition содержать также вложенные MultiCondition внутри себя. Но думаю это бесполезно. Стоит еще отметить, что условия проверяются в рантайме, т.е. количество условий и их сложнасть, в какой-то степени влияет на скорость эмуляции. Но для современных машин это не критично. Все проверки для дефолтного конфига занимают примерно 0.00001 сек и выполняются один раз в кадр.

    PPS: для Profi и Quorum и Sprinter биндинги не работают, они по прежнему пока используют свои старые клавиатуры. Это связано с тем что у этих моделей свои дополнительные кнопки. Для них видимо прийдется сделать отдельные конфиги.
    [свернуть]
    Последний раз редактировалось ZXMAK; 21.06.2015 в 01:38.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  3. #1603

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может ктото подскажет по спринтеру (см. детали в спойлере).

    Детали проблемы с CovoxBlaster на спринтере

    Попробовал прикрутить CovoxBlaster,
    в официальной документации указано что порт управления #4F, а запись в буффер через #FB, как в режиме ковокса.
    Однако код не обращается к порту #FB.

    Sayman присылал обрывки информации, из которых следует, что порт управления #4E, а запись в буффер через #4F - это похоже на правду. С этими портами, поведение кода похоже на работу с ковокс бластером.

    Вобщем прикрутил управление битом включения бластера на #4E, а запись в буффер на #4F, однако wavplayer почемуто не хочет запускаться.

    wavplayer выводит в порт #4E значение #FE, затем значение #FF и закрывается.
    Вот фрагмент который выводит #FE:


    Обращу внимание, что код пишет в #4E значение прочитанное из этого-же порта, но с наложением маски #FE:
    Код:
    LD BC,#204E
    IN A,(C)
    LD (#C150),A
    AND #FE
    OUT (C),A
    т.е. код не только пишет в порт #4E, но и зачем-то читает из него.
    Ктото может помочь разобраться, что из него должно читаться?
    [свернуть]


    ---------- Post added at 03:26 ---------- Previous post was at 01:45 ----------

    Сделал тестовый билд с CovoxBlaster для спринтера: https://drive.google.com/file/d/0B3U...ew?usp=sharing

    Пока в режиме ковокс бластера реализован только режим 8-бит моно.
    Биты выбора 8/16 и mono/stereo игнорируются.
    Биты выбора частоты уже работают, согласно таблички, которую прислал Sayman.

    На тестовой программе под пентагоном (см. аттачмент), ковокс-бластер работает.
    Но на спринтере wavplayer не запускается (см. описание проблемы выше).

    Хз, может wavplayer нужно wav файл в командной строке указать? Не знаю чем залить файл на образ винта

    Нужна ваша помощь, чтобы реализовать поддержку звука для спринтера.

    По дефолту конфиг спринтера не содержит устройство CovoxBlaster, его нужно добавить вручную. Находится на закладке с устройствами "Sound".
    Желательно поднять приоритет для CovoxBlaster выше клавиатуры.

    Можно включить логирование вывода в порты #4E и #4F (пишутся значения регистров PC, BC и само значение).
    Логирование включается правкой VMZ файла:
    Код:
        <Device type="ZXMAK2.Hardware.Sprinter.CovoxBlaster, ZXMAK2.Hardware" volume="100" logIo="True" />
    Вложения Вложения
    Последний раз редактировалось ZXMAK; 22.06.2015 в 03:41.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  4. #1604

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK, проверил эту версию эмуля. звука нет.
    https://www.dropbox.com/s/4jvmnizb4r..._test.zip?dl=0
    тут запакованный образ винта с загрузкой. в эмуле зайди в биос и выстави загрузку с винта, ф10 для сохранения. загрузишься с винта, во флексе как и в тота камандере - аль ф1 (альт ф2) для выбора диска. на диске Д там папка wav. там лежит несколько wav файлов и описание файлов в tests.txt. для запуска вафки просто нажми на энтер на этом файле, плеер запустится. этот же плеер играет на реале.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  5. #1605

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Можно включить логирование вывода в порты
    А есть ли/можно ли сделать логирование числа тактов от halt до инта?

  6. #1606

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    ZXMAK, проверил эту версию эмуля. звука нет.
    https://www.dropbox.com/s/4jvmnizb4r..._test.zip?dl=0
    тут запакованный образ винта с загрузкой. в эмуле зайди в биос и выстави загрузку с винта, ф10 для сохранения. загрузишься с винта, во флексе как и в тота камандере - аль ф1 (альт ф2) для выбора диска. на диске Д там папка wav. там лежит несколько wav файлов и описание файлов в tests.txt. для запуска вафки просто нажми на энтер на этом файле, плеер запустится. этот же плеер играет на реале.

    Спасибо, а в чем причина можешь помочь разобраться? Ведь пример для ковокс бластера работает...
    Есть мысли, что плеер в ковокс бластер пишет через акселератор, который не заимплеменчен. Может есть какие-то тесты для спринтера которые звук через порты выводят?

    ---------- Post added at 12:32 ---------- Previous post was at 12:20 ----------

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    А есть ли/можно ли сделать логирование числа тактов от halt до инта?
    Могу прикрутить отображение в Debug Info информацию на каком такте кадра halt сработал. Число тактов от halt до инта можно будет вычислить вычитанием из числа тактов кадра
    Последний раз редактировалось ZXMAK; 22.06.2015 в 12:28.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #1606
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #1607

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, а в чем причина можешь помочь разобраться? Ведь пример для ковокс бластера работает...
    Есть мысли, что плеер в ковокс бластер пишет через акселератор, который не заимплеменчен. Может есть какие-то тесты для спринтера которые звук через порты выводят?
    попробую по-разбираться с этим.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #1608

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    спасибо за образ винчестера, посмотрел - проигрыватель не закрывается, чтото проигрывает, но звук не слышен. Судя по тому что в этот момент в верхнее окно адресного пространства замаплена страница #FD, а в описании упоминается про возможность записи данных в ковокс-бластер через акселератор путем записи в страницу #FD. Очевидно именно через акселератор плеер и пишет данные.

    Вопрос - где можно почитать как работает акселератор записи данных в бластер?
    Есть предположение что буффер бластера мапится на запись в страницу #FD. Т.е. операции записи в эту страницу, происходят производятся не только в память, но и в буффер бластера. Я в правильном направлении думаю? Если да, есть ли какое-то управление этим маппингом или в бластер всегда пишется то что записано в страницу памяти #FD?
    Что будет если записать данные по адресу, старше чем разрядность буффера бластера? Старшие биты адреса будут просто проигнорированы? или запись в этом случае не произойдет?

    Еще вопросик по форматам - как технически происходит увеличение размера буффера ковокса при переключении режимов 8bit/mono, 8bit/stereo, 16bit/mono, 16bit/stereo?

    В описании написано что размер буффера бластера увеличивается со 128 байт для 8bit/mono до 256 байт для 16bit. Но... 16bit/стерео требует 4 байта, а не два, значит ли это, что размер буффера увеличивается до 512 байт, или просто уменьшается число cэмплов на страницу буффера?
    Как это влияет на частоту появления бита D7 в порте #4E? она меняется в зависимости от формата или четко привязана к частоте? Другими словами - влияет ли формат на частоту сэмплов, если для разных форматов выбран и тот-же код частоты?
    Последний раз редактировалось ZXMAK; 22.06.2015 в 18:31.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #1609

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Очевидно именно через акселератор плеер и пишет данные.
    если я всё верно понял, плеер грузит 8кб данных ваф файла в свой буфер. потом Акселем начинает кидать данные в страницу fd (страница cbl). при этом в мануале указывется, что буфер бластера всего 256байт, но разбито на 2 банки по 128 байт. контроль банок через порт fe, 7й бит. если = 0, то всё ещё работает 0я банка, иначе включилась 1я банка и нужно подкинуть данные. при этом плеер зачем то выставляет вектор IM2 на адрес a000 (или a0ff?!). есть демка (тестилка). там по синусу выводится всё в бластер, т.е. должен быть какой то писк по синусойде. параметры там выставлены 8бит, но моно или стерео не обратил внимание. palsw сейчас у себя проверит файлик и скажет что там и как. но в целом, гепотеза о работе бластера у тебя верная.
    Вопрос - где можно почитать как работает акселератор записи данных в бластер?
    ничем особенным оно там не отличается. т.е. те же команды включения и выключения. метод бросания данных - копирование через ld l,l. причём за раз кидает 128байт.
    16bit/стерео требует 4 байта, а не два, значит ли это, что размер буффера увеличивается до 512 байт
    об этом, пока, ничего не нашёл.
    собственно, вот кусок кидания в бластер:
    Код:
    PLAY:
    	DI
    	PUSH AF
    	IN A,(0FEh)
    	RLCA
    	JP NC,NO_SND
    
    	PUSH HL
    	PUSH DE
    	PUSH BC
    
    	LD A,(HDD_CNT)
    	INC A
    	LD (HDD_CNT),A
    
    ;	LD A,7
    ;	OUT (0FEh),A
    
    	IN A,(PAGE3)
    	LD E,A
    	IN A,(PAGE0)
    	LD D,A
    
    	PUSH DE
    
    	LD A,0FDh
    PLAY_PAGE EQU $-1
    	OUT (PAGE3),A
    	OUT (PAGE0),A
    
            CALL VISIO
    
    ;****************
    
    	LD HL,0C000h
    SND_A	EQU $-2
    
    	LD B,0
    	LD D,D
    	LD C,128	; 128 bytes
    	LD B,B
    
    	LD A,(FLAG16)	; 8/16
    ;	AND 18h
    L_DDX:
    	LD L,L		; асс-lines read & write to CBL
    	LD D,(HL)
    	LD (HL),D
    	LD B,B
    	ADD HL,BC	; BC=80h
    
    	SUB 8
    	JR NZ,L_DDX
    
    	LD A,H
    	OR 0C0h
    	LD H,A
    	LD (SND_A),HL
    
    ;****************
    
    	POP DE
    
    	LD A,D
    	OUT (PAGE0),A
    	LD A,E
    	OUT (PAGE3),A
    	POP BC
    	POP DE
    	POP HL
    
    ;	LD A,0
    ;	OUT (0FEh),A
    
    NO_SND:
    	POP AF
    	EI
    	RETI
    да и кстати, прикреплённый исходник не корректный, ниразу не ехе файл получается. а под трдос оно нафиг не надо генерить. заголовок ещё надо прикрутить:
    Код:
    		org 8100h-512
    
    		db "EXE"
    		db 0
    		dw 200h
    		dw 0
    		dw 0
    		dw 0
    		dw 0
    		dw 0
    		dw start
    		dw start
    		dw 0bfffh
    		ds 490
    Последний раз редактировалось Sayman; 22.06.2015 в 20:17.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  11. #1610

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Могу прикрутить отображение в Debug Info информацию на каком такте кадра halt сработал.
    Ну для начала норм. Хотелось бы конечно статистику, и даже по возможности типа "сколько рисуется второй экран", но для этого нужны наверное скрипты для эмуля, чтобы можно было ставить условия на память и порты.
    А эта Debug Info рисуется только поверх экрана? Сбоку можно?

Страница 161 из 224 ПерваяПервая ... 157158159160161162163164165 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 06.04.2012, 21:37
  2. Машина Тьюринга для Z80
    от ZXMAK в разделе Эмуляторы
    Ответов: 4
    Последнее: 15.08.2011, 03:26
  3. Продвинутая Мелко Машина 1
    от Black_Cat в разделе Зарубежные компьютеры
    Ответов: 74
    Последнее: 03.03.2009, 09:05
  4. Что за машина такая??? Commodore 128...
    от ILoveSpeccy в разделе Commodore 16/64/128
    Ответов: 5
    Последнее: 31.10.2007, 10:25
  5. Java-машина
    от Error404 в разделе Программирование
    Ответов: 2
    Последнее: 15.01.2007, 15:11

Ваши права

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