2.Всегда,но замечаю,что дело тут в скорости работы видимо,ибо и курсорчик моргает раз в десять интенсивней.
5.У меня стандартная встроенная звуковуха Realteck.
Вид для печати
2.Всегда,но замечаю,что дело тут в скорости работы видимо,ибо и курсорчик моргает раз в десять интенсивней.
5.У меня стандартная встроенная звуковуха Realteck.
2. Ах вот в чем дело... Значит дело в эмулируемой скорости Z80 - она у тебя почему-то на порядок выше, вот и получается... А какую частоту Z80 показывает вначале?
5. Не, я про то, какие подробности пишутся после "SB found"?
Вот, немного "улучшил". Надоело возиться с переименованием файлов, так что ввел ключи: Font File, ROM File, FDC Drive. См. ini-файл.
На этот раз выкладываю полный комплект, вместе с компилятором/линкером и утилитами для dos32a. Вроде ничего не забыл.
Просьба всем, кто будет пробовать, отписываться: что и как определилось при старте, какая система (ОС, проц), как работает/не работает, есть ли звук, похожа ли скорость эмуляции, плавная ли синхронизация с экраном и т.д.. Если менялись настройки в vzx.ini, то какие и как.
Спасибо за терпеж.
P.S. В DOSBox'е звук должен работать со всеми SB, кроме SB1. С этим разберусь позже.
Ух прошу извинить,что не писал,вчера заплёл косичку к pentium 3 slot1 450 mhz,video agp 16 mb,sound ещё не знаю какая,к моему рабочему компу.Запустил ,из хорошего всё работает даже звук,частоты z80 -46 fps,прочие подробности сообщу позже,также сегодня дома потестю вечером и отпишусь подробно о работе и параметрах.
ARTi, создай пожалуйста функцию автозаписи конфига компьютера после старта эмулятора,и интегрируй в пакет будет намного проще выкладывать текстовичёк дебаггер.
Так. Немного подправил звук. В DOSBox должен работать со всеми моделями SB. В Windows NTVDM, там где SB определяется, звук (у меня по крайней мере) все еще не работает. Также добавил, по желанию трудящихся, автосохранение vzx.cfg (при его отсутствии) после получения настроек из vzx.ini (просьба этих самых трудящихся ;) отписаться, правильно ли я их понял). Еще упростил работу с файлами (папками). Убрал один глюк, вернее, старинную мини-"фичу", тянувшуюся с древних времен и ставившую мне палки в колеса :D.
Тут не совсем понял, о чем речь, можно поразвернутее, пожалуйста.
Значит новая версия работает также на моём АМД-глючит безбожно;).
Поподробнее про текстовичёк,ну это так называемый лог файл со всеми параметрами компа и показателями эмулятора,вот можно их считывать и сохранять в папку с эмулем,тогда я легко смогу тебе её скидывать сюда,и ты будеш видеть,что происходит.
А это эмуль только под дос? У меня не пошёл вообще из под винды.
Он и под DOS, и под NTVDM (DOS-эмулятор Windows NT). Если что-то не работает, просьба сообщить, что именно и как. Если с работой из-под DOS все более или менее ясно, то с NTVDM есть нюансы. Это и оконный/полноэкранный режим, и неопределенность со звуком, и исправность самого NTVDM, а также и то, что при аварийном завершении не всегда видно, что же именно произошло. В ближайшее время я попробую предпринять шаги в сторону просьбы Mad Killer/PG, а то ситуация, когда у меня везде работает (на работе, дома и еще кое-где, в целом >7 машин, от субноутов до десктупов), а у других совсем плохо, напрягает :)
В любом случае, если так вышло, что вы потратили время, а эмулятор не заработал, пожалуйста, извините.
Да ну,наоборот разработчику мегареспект,что тратиш своё время! Поэтому...А глюки,куда уж без них, нормальных программ не напишеш.
По эмулятору-желательный мини хелпик-текстовый файлик,где описаны будут в кратце клавиши управления и история улучшений:)
Всем привет! Выкладываю обновление в спешке - убегаю с работы. На сегодня лишь пару слов пояснений, в более удобный момент опишу подробно.
Итак, в этой версии реализована одна из важных задуманных когда-то фич: гибкая дешифрация портов. Это значит, что порты, их адреса, маски, приоритеты (если один адрес разделяется несколькими устройствами) и функции задаются в ini-файле. Живой пример вы можете увидеть в прилагаемом vzx.ini.
Также исправил ошибку, из-за которой эмулятор мог просто не запуститься, т.е. вывалиться с ошибкой на стадии ранней инициализации (что, похоже, и происходило у VNN_KCS, см. потс выше).
Добавил возможность скидывания лога инициализации в файл. Для этого нужно запустить vzxdbg.pif (только для Windows) или vzxdbg.bat, при этом эмулятором можно пользоваться как обычно. Так что если что-то не так работает/вываливается и т.д. - запускаете один из vzxdbg и после того, как все произойдет, выкладываете или высылаете мне vzx.log.
На данный момент есть известные глюки, продолжаю над ними работать, но промежуточную версию все же решил выложить.
на вот такой,смотри лог конфигурации работает,но глючит видео,всё-таки рекомендую считывать в лог файл видеокарту и её параметры.Пробовал в разных режимах - везде есть баги с видеовыводом,надo бы реализовать загрузку TRD.
1. Что именно работает и как?
2. Как глючит видео? Считывание инфы о видео попробую сделать.
3. Что за видяха?
4. Поддержка *.trd есть, что имеется в виду под выражением "реализовать загрузку TRD"?
5. А что это за проц такой с частотой 450 МГц?
1. Что именно работает и как?
Всё запускается нормально,единственно есть проблемы с отображением на экране.
2. Как глючит видео? Считывание инфы о видео попробую сделать.
При первом режиме информация смещенна за видимое поле монитора,как бы нет автопозиционированния,воз ожно это проблема моника моего.При режимах 2,3 на экране отображается накладыванние изображения два раза со смещением вверх на десяток знакомест.В первом режиме отображение нормальное но в главном меню спектрума есть чередующийся ряд вертикальных столбиков с повышенной яркостью шириной в четыре примерно пикселя,на расстоянии друг от друга в два знакоместе,не равномерно распределены,больше их к правому краю экрана.
3. Что за видяха?
Radeon 6000 VIVO 64mb
4. Поддержка *.trd есть, что имеется в виду под выражением "реализовать загрузку TRD"?
какими клавишами загрузить произвольный файл ?
5. А что это за проц такой с частотой 450 МГц?
;) Это слотовый пентиум 3.
Спасибо за ответ, но осмелюсь попросить немного подробнее...
1. Запускается и работает нормально - со скоростью как? Что со звуком - работает ли и как? Какая Windows - XP?
2. По поводу видео. Если можно - фотографии экранов режимов 0, 1 и 2. Хотя я догадываюсь, что происходит: судя по всему, у тебя ЭЛТ-монитор, а это значит, что пропорции экрана 4:3, однако мои настройки были не для такого случая, попробуй Video X Visible = 320 в vzx.ini (для режимов 0 и 1).
И, эта, как там синхронизация с экраном?
3. Radeon - это хорошо :). Хотя и nVidia тоже...
4. Любые загружаемые файлы пока указываются только в vzx.ini. Загрузка произвольных файлов скоро будет.
5. Значит про проц я угадал :).
Странно,вероятно из-за "хака" стёрлось моё сообщение последние,итак тестирую на домашнем двухядерном-не работает нормально вообще,во всех режимах вот лог.
По логу вроде все нормально, хотя это само по себе еще ни о чем не говорит. Попробуй Timer Read Method = 1 в vzx.ini. Поможет или нет? Если нет, тогда просьба проверить все значения от 0 до 7 (кроме уже испробованных 1 и 5).
Спасибо за терпение.
P.S. Данная проблема и ее устранение очень важно: если не будет нормальной синхронизации в эмуляторе, тогда читай как в анекдоте: нет ножек - нет и мультиков!
P.P.S. Да, и что там с аудио/видео?
Timer Read Method = 1 в vzx.ini
Помогло,запускается стабильней,более менее нормально.
Прикручивай ГУИ ТРД лоадера и будем дальше смотреть.
Что-то давно меня тут не было. Приходится нынче на работе работать, а не играть в футбол половыми органами... Не знаю, когда зайду еще раз, так что выкладываю старье как есть...
Из тех изменений, что мне помнятся:
1. Поддержка "тапок".
2. Что-то подправлено в командах.
3. Но все еще без интерфейса.
Вкратце об управлении - что-то вдарило мне в башку, и я его немного изменил:
1. [F1] - переинициализация видеокарты, на случай переключения на другую программу, а потом обратно.
2. [F2] и [F3] вроде бы без изменений - запись/чтение указанного snapshot в настройках Save Snapshot и Startup Snapshot соответственно. С нажатым [Shift] назначение клавиш меняется местами.
3. [F4] - старт/стоп магнитофонной "ленты" (в частности, "тапок"). По достижению конца "ленты" встает на паузу в начало. Для "досрочного" сброса в начало нажимать с клавишей [Shift]. По старту эмулятора "лента", указанная в настройке Load Tape, стоит на паузе в начале.
4. [F9] - сброс в меню 48k. С [Shift] - в 48k TR-DOS.
5. [F10] - сброс в меню 128k. С [Shift] - в 128k TR-DOS.
6. [F12] - генерация NMI.
7. [Ctrl]+[Break] - выход из эмулятора. Сочетание, как выяснилось, не шибко удачное, но и [F12] был не сахар.
8. Что означают другие клавиши и означают ли, надо смотреть в коде, но сейчас лень.
Еще немного о настройках:
1. Timer Read Method: 5 - попытка использовать в кач-ве таймера счетчик тактов процессора; 1 - использование системного таймера 1,193 МГц. По умолчанию стоит 5, но если что-то не так со скоростью (или неправильно определяется частота процессора), можно поставить 1.
2. Main Video Mode - лучше использовать режимы 0 или 1. Опять же, если не работает в одном, можно попробовать другой.
3. Video X Visible и Video Y Visible: для мониторов с классической пропорцией 4:3 подходящие пропорциональные значения, например, 320 и 240 соответственно. Для моников, ноутов и нетбуков с другими пропорциями, используйте значения навроде таких 336x216,352x208 и т.д. Предупреждение - не все мониторы корректно будут отображать Video X Visible больше 320. Тем не менее, варьирование данных параметров на ЭЛТ-мониторе скорее всего позволит добиться частоты кадров близкой к 50 Гц.
4. Z80 Speed. Если стоит Auto, скорость всей системы подстраивается под измеренную реальную частоту кадров. Т.е. если, к примеру, измеренная частота кадров 60 Гц, то вся система будет работать быстрее на ~20% в угоду синхронизации с реальной частотой кадров.
Если же указано число, оно воспринимается как проценты от скорости.
5. Z80 Clock Multiplier - умножение тактовой частоты эмулируемого процессора.
6. Interrupt Length - длина прерывания в тактах процессора.
7. Если кто-то дочитал до этого пункта, значит далее разберется сам, в файле настроек vzx.ini достаточно подробные комментарии (кроме гибкой дешифрации портов).
Вместе с архивом с эмулятором выкладываю мелкую подборку "тапок". Работают не все (в смысле, не всё ПО в этих "тапках" совместимо с эмулируемым клоном компьютера), какие не помню, так что приложил все, что валяются у меня рядом с эмулятором.
Если кто-то подскажет мне,
1) как избавиться от "пуков" при воспроизведении аудио и
2) как в начале каждой передачи DMA гарантированно и быстро устанавливать очередность стерео каналов,
я буду очень благодарен. Также пытался где-то месяц назад затеять разговор с Conan'ом о работе различных реализаций подсистемы памяти, но почти сразу же увяз в своей работе...
До встречи тут, когда-нибудь.
Продолжим наконец...
Следующий шаг. Реализован ZS Scorpion 256k Turbo+, различные Turbo Sound. Также перелопатил команды, кое-какие все еще ведут себя не совсем как на реале (INI/INIR/IND/INDR и OUTI/OTIR/OUTD/OTDR), а остальные вроде норм.
Поддержка Turbo Sound сделана следующим образом: в микшировании звука всегда участвует 4 штуки AY, а при обращении через порты участвует одна AY, выбираемая селекторами NedoPC и/или PoS (необходимо добавить в пространство портов в/в через файл ini). В файле vzx_core_scorpion256k.ini наглядный пример.
Таким образом, релизовываются Turbo Sound по NedoPC и Turbo Sound по Power of Sound. Причем, в функции порта не указывается номер AY (ибо их на одном порту висит аж 4 штуки). Однако, если надо, чтобы всегда была только одна AY на экзотическом порту (для эмуляции Quadro-AY) или даже на родном, надо указывать ее конкретный номер от 0 до 3 в функции порта, т.е., например, не Read AY Register, а Read AY0 Register и т.д. Какая там дешифрация у Quadro-AY я не в курсе, так что в примере ее нет, но можно и добавить как я выше написал.
Кстати, т.к. эмуляция AY у меня тормозная, то 4 штуки заметно замедляют эмулятор. Что ж, может придумаю, что с этим можно сделать.
С ZS Scorpion 256k все просто: турбо можно включить/выключить (если соотв. портовые функции "повешены" на соотв. порты в/в, в прилагаемом ini все есть).
Добавил мелкую фичу, теперь любую портовую функцию можно повесить не только на какой-либо порт ZX, а еще и в порт в/в AY (Port A или Port B).
Еще мне надоело постоянно что-то править в одном-единственном жирном ini-файле. Так что теперь в файле настроек можно написать Include = и далее имя файла доп. файла настроек. В архиве ini-файлов 6: один главный (vzx.ini), который ссылается на остальные 5, настройки между которыми я распределил по смыслу, что видно из их названия.
Со звуком, в целом, пока беда. Однако при тех настройках, что в архиве, у меня вроде не пердит.
Просьба отписываться, чего и как. Спасибо.
Расскажу-ка я про директиву Add Device, чтобы убрать все неясности. Итак, рассмотрим на примере:
port - тут все понятно, указывается "официальный" номер порта портовой функции/устройства. Указан порт 07FFDh, стандартный порт для задания конфигурации памяти 128k;Код:Add Device = port 0x7FFD, mask 0x8003, spaces std+bdi, prio 1, write 128k MMU
mask - и тут все ясно, установленные биты в маске указывают, что при неполной дешифрации именно их надо брать во внимание. В данном случае дешифрация идет по линиям A15,A1,A0;
space - указывает, в каком пространстве в/в порт будет доступен. Всего пространства пока 2 (других не знаю) - Standart и BetaDisk. В предыдущих версиях указывалось числовое значение (1 и 2 соотв.), теперь будет ключевое слово (несколько вариантов написания, см. inifile.asm). В примере выше использована разновидность spaces, описанная ниже;
spaces - то же самое, что и space, но через "+" можно указать одновременно несколько пространств в/в, в которых порт будет виден. Системный порт 07FFDh должен быть виден как в обычном пространстве, так и в бетадисковом, отсюда и пишем Stadart+Betadisk (в примере написано std+bdi, напоминаю, для каждого ключевого слова имеется несколько вариантов написаний);
prio - приоритет. Это черновое решение (другого логичного не придумал) следующего момента. Иногда маски могут быть такими, что определенный номер порта затронет не одну порт.функцию, а несколько - именно так ведь и было задумано в оригинальном ZX Spectrum. Ну и вот, во избежание проблем, я где-то видел фразы, что "выбор такого-то устройства блокирует остальные". Т.е., положим, есть 3 устройства - X, Y и Z. Дешифрацией предусмотрено, что могут быть доступны 3 этих устройства одновременно, однако из-за особенностей схемы или просто по смыслу, к примеру, при записи в X запись в Y и Z блокируется. Таким образом, т.к. в эмуляторе такая запись по-любому эмулируется последовательно, я сделал приоритеты. 0 приоритет максимальный, 255 - минимальный (вряд ли такое значение когда-нибудь пригодится). Т.е. для X надо сделать приоритет равным 0, для других - значением выше. Если нужно, чтобы доступ шел ко всем устройствам, значения приоритетов должны следовать один за другим (0,1,2) или быть равными (0,0,0 или 0,0,1 или 0,1,1). Если же нужно, чтобы устройство блокировало доступ к другим устройствам с более низким приоритетом, цепочку приоритетов необходимо "разорвать" (0,2,3 или 0,2,2). Вернемся к этому ниже на других примерах.
write 128k MMU - указание портовой функции, сначала идет тип доступа (read/write), затем непосредственно функция (несколько вариантов написания). Доступ перепутать не получится - он жестко привязан к функции и введен для удобочитаемости, к тому же есть порты, смысл которых одинаков как для чтения, так и записи (регистры ВГ93, к примеру).
С этим примером вроде разобрались. Хочу остановиться на паре других по поводу приоритетов:
Тут указаны странные маски и приоритеты, значения которых гораздо выше всех остальных устройств в списке (по крайней мере в прилагаемых конфигах в архиве). Смысл следующий: так как маска = 0, порт будет выбираться всегда, по любому номеру, а номер лишь указан для наглядности. Однако цепочка приоритетов с любым другим устройством всегда разорвана - именно поэтому число выбрано заведомо большое. Так что смысл такой записи таков: если есть другие устройства - доступ идет только к ним, а если устройств нет, тогда доступ идет к указанному в строке.Код:Add Device = port 0x00FF, mask 0x0000, space std, prio 9, read bus state
//Add Device = port 0x00FE, mask 0x0000, space std, prio 9, write ULA
Таким образом имитируется понятие "несуществующий порт". На оригинальном Spectrum это порт 0FFh, который на самом деле любой, не принадлежащий другим устройствам, и это чтение состояния шины, о чем написано в первой строке. На моем первом реале при записи в несуществующий порт запись велась в 0FEh, что и означает вторая (закомментированная) строка.
Насколько я помню, с несуществующими портами также можно строить цепочки, т.е. в конкретном примере можно добавить какое-нибудь устройство с приоритетом 10.
В последней версии добавилась возможность вешать портовые функции не только на обычные порты, но и на порты AY (Port A и Port B). Рассмотрим примеры:
Забегая вперед, скажу, что вторая строчка добавлена лишь для демонстрации. Итак, тут в общем-то все ясно:Код:Add Device = AY0 port A, read ZS combo state
Add Device = AY0 port B, write ULA
AY0 port B - указывается, на какой AY (напоминаю, их у меня 4, так что если надо, чтобы правило распространялось на все сразу, надо писать 4 строчки - по одной на каждую) на каком порту (Port A или Port B) "висит" портовая функция. Номер AY указывается от 0 до 3.
write ULA - портовая функция.
Это было по второй строчке. По первой, думаю, уже все ясно.
port, mask, space(s) запрещены к использованию в строках такого типа. Насчет prio не помню, но по смыслу его тоже тут не должно быть.
Последнее, все параметры можно указывать в любом порядке. Теперь вроде все рассказал :)
Да, совсем забыл! VZX.CFG от предыдущей версии крайне желательно удалить!!!