эээ… если ты про http://zxmak2.codeplex.com то я первым делом его обнюхал, но кроме архивов самого эмулятора там ничего не нашел.
Вид для печати
эээ… если ты про http://zxmak2.codeplex.com то я первым делом его обнюхал, но кроме архивов самого эмулятора там ничего не нашел.
Ну так в настройках эмуля жми визард и вибирай спринтер, визард настроит эмуль
ээээ… вообще-то я просил образ винта:
SprinterHDD.part1.rar
SprinterHDD.part2.rar
Срок хранения на рыгхосте уже истёк… а сам эмулятор у меня давно настроен. Я нашел дискетку с файлами, но вот создать образ харда с нуля так и не получилось, всё время выдаёт, что он не загрузочный.
Спасибо огромное!
ZXMAK, Вечер добрый.
В режиме Sprinter пробую писать в порты 4Eh , 4Fh а в ответ тишина.
И стандартный wavplay молчит - ну он то может как то нестандартно к fdd, hdd обращается, ему простительно, но то что COVOX-Blaster молчит, очень обидно.
А то вот захотелось проигрыватель mod-ов на Sprinter накодить, а не выходит.
Или может я что то делаю не так ?
(SprinterSDK, кстати тоже молчит)
ZXMAK, есть ли надежда на эмуляцию ULAPlus в будущих релизах?
Сейчас сложно выделить время на эмуль, ulaplus я давно хотел добавить, вопрос только в том чтобы понять как оно должно работать из существующих описаний это не очевидно, если ктото поможет разобраться, можно добавить. К сожалению временя найти чтобы подебажить существующий код сейчас сложно
---------- Post added at 05:09 ---------- Previous post was at 05:04 ----------
Насколько помню, девайс саундбластера спринтера сейчас не реализован. Вопрос с реализацией заключался в том что у спринтера ковокс с буфером, а текущий базовый класс звуковых устройств заточен под прямой вывод звука, нужно писать эмуляцию буфера. Вообще по спринтеру нужно у Дмитрия спросить
Случайно реализовал сохранение в TAP-файлы :) Вообще, делал совсем другое, но как побочный продукт вышел такой плагин.
Установка - кинуть TapeRecorder.dll в папку Plugins (возможно, её потребуется создать). Запустить эмулятор, добавить Tape Recorder к виртуальной машине.
Перехватывает идущий на магнитофон сигнал (трапов нет, честно парсится магнитофонный выход), распознаёт блоки и добавляет их к текущему открытому TAP-файлу. Или к пустому, если ничего не открыто. Сохранение образа через File - Save As (выбрать .tap).
Распознанные блоки добавляются в окошко Tools - Tape, но там косяк с обновлением, если окно уже открыто. В этом случае надо его закрыть и снова открыть.
Плагин и исходник (пусть будет BSD license) в аттаче.
ZXMAK, а можешь сделать сборку под XNA 4.0? А то у меня есть воксельный движок и хотелось бы сделать такое:
http://www.youtube.com/watch?v=h9WhGs2_dM0
Я его прикручивал к какому-то эмулятору на C#, но там звука не было и вообще не задалось.
У меня даже были инишники для Cybernoid, в которых прописывался размер вокселя для каждого цвета.Чтобы объём был.
немного отрефакторил код, теперь класс VirtualMachine работает со всеми девайсами через IHost, который предоставляет доступ к Video, Sound, Keyboard, Mouse и Joystick. Т.е. для чтобы перевести на другую платформу нужно просто реализовать UI, реализовав эти интерфейсы.
Связей от движка на UI насколько помню вроде не оставалось, если не считать extensions для плагинов, они не должны мешать - просто AttachGui не будет вызываться. Главное чтобы UI типы не помешали создать сами объекты плагинов. Нужно будет это тоже отрефакторить. Для XNA это не будет проблемой, т.к. XNA работает под виндой и все эти типы будут доступны.
---------- Post added at 19:07 ---------- Previous post was at 18:59 ----------
1. скорее всего да, нормально. На скорпионе можно программно испортить работоспособность сброса. Сейчас в эмуляторе нет холодного сброса. Нужно будет прикрутить. Пока можно просто перезапустить эмулятор или сменить модель памяти и вернуть обратно. Но не исключено что есть какая-то ошибка, если на реальном скорпионе эта дема действительно не портит горячий сброс.
2. Это не косячек. У тебя в настройках включена опция View->Scale->Fixed Pixel Size, поэтому если не хватает размеров окна (чтобы уместить все пикселы фиксированного размера), масштаб изображения уменьшается, чтобы уместить все пикселы фиксированного размера. Увеличь размер окна (View->Size->200%) и все будет ок ;)
я сам бы хотел его добавить, но по той документации что есть на ULAPlus, быстро понять как это работает сложно (не достаточно подробно описаны детали). А времени сидеть ковыряться пока нету
---
Из новостей, то что увидел по коду, Adlers прикрутил к своему отладчику брейкпоинты по доступу к памяти (проверил работает) и встроенный ассемблер (используется unmanaged библиотека Pasmo). Конечно нехорошо, что в чисто managed эмуляторе используется unmanaged ассемблер, хотелось бы все managed, но ладно пусть будет :smile:
Новый релиз пока не делал.
можно на опцию "Maximum Speed" хоткей сделать ? или комбинацию клавиш
я пока рефакторю основное окно, добавил тулбар и статусбар, максимум спид теперь будет и на тулбаре. Основное окно переписано с нуля. Пока еще не чекинил, нужно мелкие фичи добавить (драг-н-дроп, захват мыши и т.п.) и меню тулс прикрутить (текущая реализация в плагинах не совместима с MVP, поэтому прийдется переделать). Для хоткеев нужно менеджер какой-то делать
примерно так это будет выглядеть:
http://savepic.org/5193520.png
Раз уж грядет новая версия, то прошу пофиксить еще следующий момент:
Согласно документации:
Во всех эмуляторах ВГ-шка так и эмулируется, но:Цитата:
Восстановление 0000hvxx - команда восстановления используется для инициализации микросхемы КР1818ВГ93, обеспечивая установку магнитной головки выбранного дисковода в исходное состояние (на нулевую дорожку). Команда имеет следующие параметры:
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода.
Так вот, прошу в эмуляторе учесть этот момент и сделать эмуляцию физического дисковода, т.е. при выполнении команд с h=0 "мотор дисковода" не включать (тормозить), как это и происходило на физическом дисководе. После этого фикса заработают программы, в которых используется, как пример, процедура гашения лампочки дисковода (торможение диска), которые на данный момент работают только с включенной опцией No delays, например мой крек Satisfaction. Первоисточник здесь.Цитата:
Сообщение от Blade
зачекинил новую версию UI :)
Eltaron: проверь пожалуйста, как последний вариант работает под Linux?
zebest: проверь пожалуйста, как последний вариант работает на особенной Win2K, где когда-то наблюдались креши при ресайзе? (вот ссылка на версию эмулятора, которая глючила, для проверки: http://zxmak2.codeplex.com/downloads/get/517848)
тестовый билд последней версии с новым UI см. тут: https://zxmak2.codeplex.com/downloads/get/823996
ZXMAK, А поддержка General Sound в Вашем эмуляторе планируется? И в тулбар можно вывести дисководы для быстрого доступа? А так же еще можно boot меню.
ну 2660 как глючила - так и сейчас висит, за много лет ничего не изменилось, проверил.
Новая вроде с первого раза нормально, но вот второй запуск
http://savepic.org/5246463m.jpg
если окон изменить размер - конечно восстанавливается, но все равно - как то неаккуратненько, доктор (с)
zip-файлы оТвалились(
а перед закрытием не так было? дело в том что эмулятор сохраняет последние размеры окна и при новом запуске их восстанавливает. Т.е. после перезапуска размеры окна должны остаться такими-же как перед последним закрытием приложения.
точно, при драг-н-дроп теперь путь к файлу через URI передается, приставка file:// не поддерживается SharpZipLib'ом, исправлю.
Через File->Open ZIP работает
---------- Post added at 19:28 ---------- Previous post was at 19:25 ----------
планировалась, я даже одно время начал ее делать, в сырцах даже файлик с заготовкой для GS валяется, но все на этом так и остановилось, пока нет времени, а GS сложная штука :)
по поводу тулбара, можно :)
Жаль конечно, что GS нет, довольно приличное количество игр и дем поддерживают GS, а то попалась мне дема и не идет на Вашем эмуле, а там звук - only GS. Даже немного обидно стало за такой отличный эмулятор :-)
Обновил тестовый билд 2761:
- удалена старая иконка паузы
- исправлено открытие локальных ZIP файлов через drag-n-drop
- рефакторинг команд UI
- рефакторинг видео рендерера движка (теперь каждый видеорежим рисуется в отдельной памяти, скорость вроде незначительно подросла, исчезли артефакты при переключении видеорежимов)
- добавлен шорткат для max speed - Alt+Scroll
- добавлена кнопка quick boot в тулбар
Просьба протестить переключение видеорежимов, прошелся посмотрел вроде все работает, но мог чтото зацепить :)
http://savepic.org/5305619.png
Не совсем понял - как отцепить мышь от "спектрума" обратно в эмулятор? Пока приходится переключатся между программами по Alt-Tab, но это не удобно.
И настройку кнопок мышки - непривычно нажимать правую вместо левой.
Обычно во всяких виртуалках в строке статуса внизу пишут статус мыши и способ ее освобождения.
обновил до версии 2.7.6.2:
- подрефакторил код дизассемблера и тайминг тула (DasmTool/TimingTool)
- отрефакторил код IHostSound и фреймовую синхронизацию движка (WaitFrame/PushFrame)
- исправлена ошибка синхронизации потока эмуляции (при быстром нажатии старт/стоп)
- отрефакторил код IHostVideo (WaitFrame/PushFrame)
- добавилась синхронизация по видео (VBlank) (пока-что реализация WaitFrame тупая в лоб - блокирующая, при включении жрет ядро на 100%, но зато скролы плавные :) Пока не нашел способа синхронизироваться по ивентам в Direct3D)
- добавлен выбор источника синхронизации (Video/Sound/None)
- добавлен автоматический подсчет для скипанья фреймов, чтобы выравнивать частоту обновления на 50 Гц в зависимости от частоты дисплея. Лучше всего сейчас работает на 75 Гц.
Ключевое обновление - появилась синхронизация по видеоразвертке, хотя ожидание луча пока не оптимальное.
При этом выяснилась причина биений в скролах при синхронизации по звуку (единственный способ в прошлых версиях). Виной тому буферизация звука в виндовс. С синхронизацией по видео фпс стал стабильнее (50.02 Гц). Скролы стали плавные. Но из-за неэффективной реализации ожидания луча может иногда пропускать кадры.
http://savepic.org/5305727.png
По коду, интерфейсы IHostVideo и IHostSound стали однотипные - добавились методы WaitFrame (по ним идет синхронизация кадров) и PushFrame. Микшер звуковых потоков вынес в IHost, т.е. метод IHostSound.PushFrame принимает сразу массив буферов, которые нужно смикшировать перед выводом. Т.е. можно заюзать аппаратный микшер на нужной платформе. Пока микширование звука реализовано на C#
кроме свойства InVBlank, других способов узнать момент начала развертки в MDX Direct3D не нашел :) И насколько помню в нативном API с этим тоже вроде проблемы были. В unreal тоже тупой цикл из-за этого сделалиКод:// wait VBlank
while (!_isCancel)
{
var state = D3D.RasterStatus.InVBlank;
var change = state != _vblankValue;
_vblankValue = state;
if (change && _vblankValue)
{
break;
}
}
Да, если включить VBlank, то при вызове IHostVideo.WaitFrame работает тупой цикл, пока не прийдет VBlank. Пробовал сделать высокоприоритетный поток из которого кидать ивенты, но он как-то не стабильно работает, если его усыплять на 5-10 мс в момент ивента, то работает более менее, если усыплять на меньшее время, он начинает отбирать время у потоков эмуляции, если на большее, то пропускает кадры. Короче работает менее стабильно чем тупой цикл, а процессор жрет еще больше...
---------- Post added at 01:44 ---------- Previous post was at 01:29 ----------
в демках не нужно узнавать когда бланк пришел, они просто вызывают Present, который при включенной настройке VBlank у девайса блокирует выполнение и крутит такой-же цикл уже внутри системы...
Тут есть загвоздка в том что в эмуляторе Present вызывается из UI потока. А синхронизировать нужно поток эмуляции, т.е. не из UI...
Хм.. Можно попробовать настроить девайс на Present с ожиданием VBlank и кидать после Present'а ивент для потока в котором выполняется WaitFrame...
А этот 'тупой цикл' не отбирает все быстродействие системы?
В своем эмуле я просто засыпаю на 1мс, потом проверяю не пришел ли вбланк, и так по кругу (если очень упрощенно говорить).
Хотя на самом деле я делаю чуть хитрее. Я не жду вбланк, а жду некой линии развертки, примерно линий за 100 до вбланк'а (с отдачей квантов другим задачам по 1мс кусочкам), после чего забираю все быстродействие на себя, таким образом могу очень точно отловить приход вбланка. Кроме того, такой подход позволяет избежать случайного пропуска момента вбланка, если в данное время какое-то приложение забрало на себя кванты времени, и не хочет отдавать.
Экспериментально тестировал в разных условиях, работает весьма стабильно даже если на фоне начался жуткий свап или другое безобразие.
По умолчанию может и 10мс, но я устанавливаю предварительно принудительно 1мс, и действительно оно переключается каждую мс. Проверял тестами на всех машинах.
Можешь запустить у себя EmuStudio, он в консольном окне напишет измеренный минимальный интервал, уверен на 99.9%, что там будет написано Timer Period Min - 1ms.
Итак, *****код процедуры торможения диска в лоадере Satisfaction находится по адресу #6084.
Непосредственно после загрузки первой части мегадемо, до выполнения процедуры торможения диска, имеем следующую ситуацию в эмуляторе:Код:xor a
out (#1f),a
ld a,#d0
out (#1f),a
ret
http://x-bytes.net/pic1.jpg
Далее выполняется код:
Здесь выполняется команда "Восстановление" 0000hvxx - обеспечивает переход МГ на нулевую дорожку ГМД. Команда имеет следующие параметры:Код:xor a - гасим лампочку, bit 3 загрузки головки h выставляем в 0
out (#1f),a
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода. Выход на нулевую дорожку подтверждается состоянием входного сигнала TR00 который поступает с НГМД. Если сигнал TR00 = 0, это означает, что МГ находится в исходном состоянии. Если сигнал TR00 = 1 (наш случай) микроконтроллер генерирует не более 255 шаговых импульсов STEP. Если после генерации 255 импульсов устанавливается низкий уровень сигнала TR00, то в бит состояния "Ошибка поиска" в регистр состояния записывается единица. Другими словами, физический дисковод на реале никуда головку перемещать не будет, но ВГ-93 отработает 255 шаговых имульсов. А в эмуляторе это не учитывается. После этого:
http://x-bytes.net/pic2.jpg
Далее, чтобы прервать эти шаговые импульсы выполняется код:
Здесь выполняется команда "Принудительное прерывание" 1101i3i2i1i0 - задается для завершения какой-либо выполняемой команды. В отличии от других команд она может быть записана в регистр команд в любой момент. Однако, исполнение команды может определяться состоянием младших битов i0 - i3. Если биты i0 - i3 в состоянии "0" (наш случай), то немедленно прекращается выполнение текущей команды и сигнал подтверждения завершения команды INTRQ не вырабатывается. После этого:Код:ld a,%11010000 - принудительно прерываем выполнение команды
out (#1f),a
ret
http://x-bytes.net/pic3.jpg
Затем, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет в цикле при чтении сектора на ошибке "сектор не найден".
Обрати внимание на номер трека и статус на последнем скрине, по идее значения должны быть такими (если я правильно понимаю):
Ну, в общем, как-то так.Код:STATUS: #80
TRK: #03
beta: #00
Спасибо, очень помогло бы расписать что именно не так и как должно быть (например - вот тут делаем то-то, должно получиться то-то, а получается то-то), потому что пока кроме того, что чтото c восстановлением работает неправильно (если я правильно понял), суть проблемы не очень ясна :)
пока без поддержки звука и джойстиков (видео, клавиатура, мышь) :)
http://savepic.org/5246854.png
Вроде в XNA уже встроен механизм синхронизации, когда окно активно, то кушает ядро на 100%, кактолько убераешь фокус - падает до обычных 5-8%. Причем что интересно, почемуто XNA4 сам вызывает обновление с частотой 50 Гц, как Game.Update, так и Game.Draw. Но фреймы скипает криво - похоже на синхронизацию от звука, даже чуть менее точно, плавные скролы подергиваются раз в несколько секунд.
Код полностью реюзает существующий MainPresenter, для XNA версии написана только реализация интерфейсов IHost (IHostVideo, IHostKeyboard, IHostMouse) и подключен референс на ZXMAK2.exe :)
Синхронизация по видео, т.к. IHostSound пока нету
Неприятная штука, в XNA4 убрали поддержку обычного rgba формата для цвета. Есть только bgra, в итоге каждый кадр приходится конвертить перед рендерингом, что дает дополнительную нагрузку на процессор.
Пока не комиттил. Подумываю о полном переходе на .NET 4.0. Но есть опасения что на каких-то системах он не поддерживается.