Важная информация

User Tag List

Страница 1 из 7 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 62

Тема: VZX - исходники.

  1. #1
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию VZX - исходники.

    Здравствуйте!

    Решил выложить здесь исходники своего старого эмулятора ZX Spectrum, потому как плохо себе представляю, где это еще может быть уместно. Прошу не судить строго - местами исходникам до 10 лет, я тогда писал как умел. Собственно, выкладываю исходники не для суждения, а для того, чтобы они принесли кому-нибудь хоть какую-то пользу.
    Написано все на асме, под tasm 5.0. Вообще всего имеется 3 версии эмуля:
    1) для работы в реальном/виртуальном режиме 80x86 (исходники утеряны);
    2) для работы в ручном защищенном режиме (требуется чистый DOS реального режима);
    3) для работы в защищенном режиме через DPMI (нерабочая версия).
    В прилагаемом архиве имеется только две последних версии, причем версия 2 запустится из-под DOS при условии отсутствия EMM/QEMM и подобных менеджеров памяти, переводящих процессор в виртуальный режим. Более того, насколько я помню, работа версии 2 НЕ эмулируется ни DOSBox'ом (последний DOSBox 0.70 я еще не пробовал), ни VMWare, ни Virtual PC. Тем не менее, стоит попробовать запустить под виртуалкой последней версии, вдруг заработает.
    Для того, чтобы откомпилить эмулятор, необходимы исполняемые файлы tasm.exe и tlink.exe. Батник az.bat проделает всю необходимую работу вплоть до получения exe-файла.
    Далее. Для того, чтобы полученный exe-шник не ругался при запуске, необходимо положить в ту же папку файлы 48basic.rom, 128basic.rom и trdos.rom с соответствующим содержанием. Можно добавить туда же пару-тройку образов (по одному на дисковод) trd с названиями disk1.trd, disk2.trd и т.д.. Все это я не стал здесь выкладывать для минимизации размеров архива.
    Теперь немного о самом эмуляторе. Называется Virtual ZX. По старту переключается в защищенный режим, проверяет командную строку (где можно указать загружаемый *.sna или *.z80), считывает файл vzx.cfg, читает и разбирает файл vzx.ini, настраивает аппаратуру (проверяет/определяет наличие SB-совместимого аудио, настраивает видеорежим) и вываливается в нормальную работу. Если был указан снэпшот, то загружает его.
    В файле readme.etm указаны некоторые горячие клавиши, а также некоторые ключи для файла vzx.ini.
    Что еще можно сказать. Версия 3 постепенно дорабатывается (но очень и очень медленно) до рабочего состояния. Если кто хочет помочь мне в этом нелегком деле, милости прошу. Одному осилить сложно - нет уже того задора и нет времени, тем не менее, версия 3 в архиве успела немного устареть. Возможно, буду здесь иногда выкладывать для нее обновления. Но это только тогда, когда заработает .

    Много чего понаписал, постарался предоставить полную информацию, но осталось ощущение чего-то забытого. Извиняйте за сумбур

    P.S. Latest version here
    Вложения Вложения
    • Тип файла: rar vzxpub.rar (93.6 Кб, Просмотров: 649)
    Последний раз редактировалось ARTi; 13.09.2011 в 20:05. Причина: очередное обновление

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

  3. #2
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как и говорил ранее, выкладываю обновление, не прошло и полгода .
    Полностью перешел под DOS-extender (dos32/a либо совместимый), по-быстрому слабал пока единственный работающий видеорежим (VideoModeSecondary = 2), хотя если имеется VGA-совместимая видеокарта, то старые псевдографические режимы тоже должны работать (0 и 1). Синхронизация с вертикальным обратным ходом луча временно отсутствует...
    По ходу сломал мультиколор, точнее, сбил его позицию для Pentagon'а, но это легко исправить...
    Также сначала сломал работу со снэпшотапми, сейчас восстановлено только чтение *.sna (как оказалось, не полностью, некоторые файлы обрабатываются неправильно).
    Аудио (вход/выход) сломано, верну взад попозже, сейчас есть проблемы поважнее .
    Пока работает под виртуалками либо под DOS; в DOS-окне под Win2k/xp/2k3 не работает, почему-то пропадают прерывания при попытке переключения в графический режим, либо при попытке получить информацию о VBE/VESA.
    Забыл сказать - изменился формат *.cfg, старый файл конфигурации можно просто удалить перед запуском vzx.exe-шника.
    Вследствие перехода под DOS-extender компиляция производится теперь посредством tasm/wlink.

    На сегодня все, спасибо за внимание, исходники прилагаются , tasm/wlink можно найти в инете или я могу прислать по запросу.
    Вложения Вложения
    Последний раз редактировалось ARTi; 01.06.2007 в 13:26. Причина: Дополнения и исправления к описанию

  4. #3
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всем привет!

    Снова выкладюываю обновление. Что сделано и нет, по пунктам:

    1) Видеорежимов теперь два: VideoModeSecondary=0 (псевдографический) и VideoModeSecondary=2 (графический, более совместимый). Добавлен ключ ForceVGA=ON или OFF - если понадобится изменять размеры видимой области (а вместе с ними и частоту кадров), а видяха при этом "врет", будто она не совместима с VGA. Размеры изменяются при помощи ключей VideoXVisible и VideoYVisible. Всё отлично прокатывает в эмуляторе DOSBox (текущая версия 0.72), а также на некоторых реальных машинах под DOS/Windows.

    2) С мультиколором дела обстоят получше, но не до конца. Пришлось подобрать ориентировочные значения ключей HorizontalRetrace и VerticalRetrace, чтобы правильно отображались пентагоновские демки. Однако эти ориентировочные значения не соответствуют тем, что должны быть.

    3) Работа со снапшотами не изменилась.

    4) Сделал звук, пока что вывод только на Sound Blaster, 8-bit mono. В эмуляторе DOSBox звук работает, значение ключа SB Buffer Size при этом лучше выставить поменьше - от 400 до 1000, в зависимости от быстродействия машины. Чем меньше буфер, тем более плавная эмуляция и тем более быстродействующей должна быть машина. Под Windows буфер приходится делать от 4000, иначе звук прерывистый - пока не разобрался с этим.

    5) Теперь про работу под Windows. Ранее я писал, что затыкаются прерывания и ничего не работает. Оказалось, что так происходит лишь в случае, когда в системе установлен драйвер GiveIO. Он устанавливается, например, с программой Speedfan. Если же этот драйвер в вашей системе отсутствует, то, скорее всего, VZX будет работать (других противопоказаний пока не обнаружено).
    К еще большему сожалению, данная неприятность распространяется на все приложения DOS, работающие с графикой. Сюда можно отнести древние игрушки Wolf3D, DOOM, Blood и прочие.

    6) Формат vzx.cfg опять изменился, так что старый лучше либо перезаписать новым, либо просто удалить.

    7) Случайно обнаружил, что VZX не видит файлов disk2.trd, disk3.trd и disk4.trd, вследствие чего TR-DOS видела только диск A. Исправлено.

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

    P.S. Только что заметил, что "соптимизировав" свой же собственный блок генерации AY, я его немного сломал. Убрал две строчки - и половина огибающих плюс кое-какие спецэффекты не работали :-D... Исправленные исходники выложу позже, пока же просто опишу, что и где. В файле monitor.asm найти данные строки:
    Код:
                    ; Envelope Generator
                    test    ch, 010h
                    jz      gas2
                    mov     ebx, AYEnvelopePoint
                    movsx   eax, byte ptr [ebx + 1]
                    add     ebx, eax
                    mov     eax, AYEnvelopeConst
                    add     AYEnvelopeCount, eax
    gas1:
                    movzx   eax, byte ptr [ebx]
                    mov     eax, [eax*4 + AYVolumeTable]
                    mov     AYEnvelopePoint, ebx
                    mov     AYEnvelopeVolum, eax
    gas2:
    перед меткой gas1: добавить 2 строки, чтобы получилось так:
    Код:
                    jc      gas1
                    mov     AYEnvelopeCount, eax
    gas1:
    Вложения Вложения
    Последний раз редактировалось ARTi; 17.10.2007 в 17:22.

  5. #4
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Продолжаю выкладывать результаты своих потуг. Вкратце опишу изменения, о каких помню:
    1) Произведен переход на 8ми-килобайтные банки, это на будущее для эмуляции Timex, а также Interface/Multiface.
    2) Добавлена эмуляция MEMPTR, спасибо за труд и информацию здешним форумчанам, приложившим немалые усилия к рассекречиванию этого тайного знания.
    3) Сделана подготовка к эмуляции памяти с waitstate'ами, теперь в этом направлении осталось доделать совсем немного, другая проблема (моя глобальная), что нет желания наворачивать все в кучу, поэтому еще много предстоит сделать для прозрачности и структурирования.
    4) Основной цикл эмуляции выделен в отдельный файл zxcore.asm. Т.к. раньше производилась сборка этого цикла на этапе инициализации, было легко совмещать гибкую настройку и скорость эмуляции. Теперь же все эти штучки а-ля DEP и прочие могут помешать данному процессу, пришлось полностью отказаться от сборки в реальном времени, что ж, будем лепить кучу заранее собранных "ядер"...
    5) Работа со снапшотами расширена, но пока до конца не восстановлена работа с *.z80. А так - поддерживаются *.sna, *.sp, *.ach.
    6) Мультиколор восстановлен, позиция теперь настраивается правильно; но сломан поточечный бордюрный мультиколор, т.е. в пределах 8-ми точек эмулируется нормально, а меньше - нет.
    7) Введен ключ Minimum Tacts as One Instruction. По сути, пока выполнение команд не наберет минимум соотв. количество тактов, не будут отрабатываться другие события - например, прорисовка экрана. Но при этом буферизируются изменения бордюра, а также ближе к наступлению прерывания команды все равно выполняются по одной, и далее, после наступления прерывания, пока длится сигнал, также выполняются по одной. В результате наблюдается ощутимое ускорение работы ядра эмуляции, хотя при этом может страдать мультиколор экранной области.
    8) Ключ Quality Level заменен на более понятный - Synchronization Frequency.
    9) В данной версии имеется проблема синхронизации вывода звука при запуске из-под Windows (в эмуляторе DOSBox все в порядке), так что со включенным Sound Blaster эмулятор скорее всего не запустится из-под Windows. Постараюсь вскоре исправить, а то задалбывает постоянно запускать по схеме "эмулятор в эмуляторе".
    10) Инициализация видео немного дополнена, теперь текстовый режим (который псевдографичевский) работает в большем количестве случаев.
    11) Ключ General Sound в файле инициализации - пока что только ключ и ничего больше. В будущем наверну дополнительное облегченное ядро для эмуляции General Sound, но пока не до этого.
    Вложения Вложения

  6. #5
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С момента, как я первый раз выложил здесь исходники, прошел ровно год. Не буду же упускать такой случай, посему выкладываю обновление.
    На этот раз я очень долго долбался с видео - очень уж хотелось увидеть снова реальные ~50 Гц и насладиться плавной сменой картинок. Как ни странно, но большинство систем с ЭЛТ-мониторами позволяет получить нужный видеорежим - как разрешение, так и частоту кадров. Что же касается LCD-мониторов - тут я пока бессилен, большинство систем с этими мониторами зациклены на 60 Гц, в т.ч. это касается и ноутов.
    С аудио тоже пришлось помучиться, пока не все ладно с синхронизацией, но по крайней мере в системе без GiveIO (и подобных, см. выше) звук должен быть.
    Кстати, на днях я вдруг вспомнил, зачем вообще начал делать этот эмулятор в те давние времена. Я хотел эмулятор с возможностью запуска нескольких виртуальных Spectrum-машин одновременно, переключаться между ними и даже в DOS-shell без прерывания звукового потока . Но видимо тогда мозгов у меня не хватило, и об этой идее я быстро забыл .
    Далее по пунктам.
    1) Чтение *.z80 восстановлено.
    2) Блок AY позволяет теперь эмулировать сколько угодно микросхем AY одновременно, лишь бы хватило быстродействия. Turbo-AY и подобные будут сделаны только после реализации гибкой дешифрации портов.
    3) Эмуляция команд подправлена, теперь результаты в zexall как у реала.
    4) Сделан шаг к синхронизации с обратным ходом видеолуча. После инициализации видеорежима определяется частота вертикальной синхронизации. Если определить ее не удалось, тогда она принимается равной 50 Гц. Если указано Synchronization Frequency = Vertical Retrace, тогда частота синхронизации будет равна определенной ранее частоте вертикальной синхронизации. Если указано Z80 Speed = Auto, тогда скорость Z80/ULA будет подстроена так, чтобы необходимое количество тактов получалось за одну вертикальную синхронизацию экрана PC.
    Но довольно технической белиберды - попробуйте сами, может вам удастся насладиться исконными 50 Гц ))
    Вложения Вложения

  7. #6
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хочу добавить, что в результате этой возни экспериментальным путем я дошел до следующих моментов:

    1) Все системы из опробованных мной исправно позволяют читать значение системного таймера - PIT, канал 0. При этом вначале нужно проинициализировать этот канал каким-нибудь стандартным режимом с периодом 65536 (т.е. в 16-разрядную защелку записать нули).
    2) Чтобы обойти ограничения GiveIO и подобных, лучше по возможности забыть про прерывания. Синхронизироваться придется по значению текущего счетчика системного таймера, а информацию о клавишах - получать по изменению порта данных клавиатуры (прежде в регистре состояния необходимо проверить, что данные не от мыши, и только тогда можно забирать данные).
    3) На показания секунд из CMOS положиться нельзя, гораздо точнее оказалось получать секунды из того же системного таймера (1193181 тиков - 1 секунда). Как же я сильно ошибался по этому поводу! Это заблуждение владело моими мозгами вплоть до дня, когда я уже выложил годовое обновление. Но теперь я знаю, что показания CMOS - фуфло .
    4) Частота системного таймера на разных системах может немного варьироваться, но это сложно оценить даже приблизительно, ибо других легкодоступных таймеров нет, а CMOS секундомер оказался какашкой. Итого приходится брать за правило, что частота системного таймера как по документации ~1193181 Гц.
    5) Многие системы дают также установить нужный видеорежим и получать информацию об обратном ходе луча. Однако определение его частоты, с учетом нестабильности, вносимой многозадачностью, - задача нетривиальная. Тем не менее, системный таймер позволяет приблизительно оценить, происходили ли значительные потери времени или нет, благодаря чему можно более или менее отследить непрерывность выполнения своей задачи.

    Вскоре доделаю синхронизацию с экраном и результат выложу сюда. Уже сегодня после исправления недоразумения с CMOS секундами все выглядит получше, но все же не так, как хочется.
    Вложения Вложения
    Последний раз редактировалось ARTi; 21.06.2008 в 15:48. Причина: Добавлена промежуточная рабочая версия

  8. #7
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всем привет. Давно не было обновлений - сменил работу и свободного времени стало заметно меньше. Работа над эмулятором замедлилась, порой напоминая собой мышиную возню. Сейчас вроде стало легче, хотя выкладываю обновление в первую очередь для того, чтобы не затухать и не тухнуть, а вовсе не потому, что что-то кардинально улучшено или изменено.
    1) Сделан чересстрочный режим - см. ключ Main Video Mode. Однако для всех псевдографических видеорежимов есть одна проблемка: вместо желтого цвета выводится зеленый...
    Синхронизация с обратным ходом луча местами работает "почти хорошо" - особенно если в системе не запущено каких-либо задач вроде оперы с 30-40 открытыми страницами или p2p-клиентов .
    2) В результате небольшой переработки синхронизации стало возможным использовать другие источники отслеживания времени - на данный момент это пока инструкция процессора RDTSC. Но можно и по-старому - через PIT (например, DOSBox пока что не эмулирует RDTSC и генерирует исключение 6 при ее использовании, как и положено при эмуляции древних процессоров). См. ключ Timer Read Method (на машинах, которых я проверял, оптимальный режим 5).
    Синхронизация по RDTSC по идее должна давать более точное отслеживание обратного хода луча. Иногда это заметно.
    3) Эмуляция AY немного подпорчена - почему-то иногда затыкается и молчит канал или даже два. Думаю, ошибка лежит на поверхности - как разгружусь по работе, наверное увижу и исправлю. Если кто заметит раньше (в случае, если вообще кто-то будет смотреть ) - просьба сообщить мне . При этом убраны некоторые лишние телодвижения, в результате чего эмуляция AY немного полегчала. Вообще однажды мне как вожжа под хвост попала - стали рождаться идеи, как ускорить эмуляцию AY таким образом, чтобы вообще забыть про ключ AY Generator Clock Divider без ухудшения качества звука. Маялся фигней я долго, но намного быстрее не получилось...
    4) VZX теперь понимает LFN. Вроде.
    5) FDC выделен в автономный объект, как это было ранее уже проделано с AY. Также выделено в автономный объект само ядро, но оно пока одно и консоли для выбора/порождения новых ядер нет.
    6) Со звуком какая-то байда. Не хватает информации по программированию SBPro и 16-битного режима SB16.
    7) В *.ini файле много мусора в каментах - типа новые ключи и все такое. Да, собираюсь разродиться гибкой настройкой неполной дешифрации портов, а также waitstates'ами.
    8) Перед запуском необходимо удалить старый vzx.cfg. Планирую вскоре "устаканить" формат, чтобы не кантовать каждый раз при смене версии.
    Вложения Вложения
    • Тип файла: 7z vzxpub6.7z (166.6 Кб, Просмотров: 466)
    Последний раз редактировалось ARTi; 23.10.2008 в 15:19. Причина: корректировка и дополнение

  9. #8
    Guru Аватар для rasmer
    Регистрация
    20.01.2005
    Адрес
    Саранск
    Сообщений
    2,195
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    под dosbox так и не запустил
    Мои интры: [Kukarachess][Super boot rmx][tRUSHE MOSAIc][BLAZE]
    Мои игры: [Overload][Removal]

    Список игр для ZX-Spectrum: [2015] [2014]

  10. #9
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Понятно. Ключ Timer Read Method = 5, а DOSBox не дает работать с RDTSC, поэтому попробуйте поставить Timer Read Method = 1
    Последний раз редактировалось ARTi; 24.10.2008 в 15:25.

  11. #10
    Guru
    Регистрация
    13.09.2008
    Адрес
    Украина
    Сообщений
    2,677
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Скажите,а на какую минимальную конфигурацию ПЦ настроен эмуль ваш?
    "...Неправедный пусть еще делает неправду; нечистый пусть еще сквернится; праведный да творит правду еще, и святый да освящается еще. Се, гряду скоро, и возмездие Мое со Мною, чтобы воздать каждому по делам его. " (Откр. 22:11-13)

Страница 1 из 7 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Исходники AY плейера.
    от Yaroslav в разделе Программирование
    Ответов: 2
    Последнее: 20.09.2006, 18:10
  2. Ищу исходники AY музыки
    от Black1980 в разделе Музыка
    Ответов: 26
    Последнее: 16.03.2006, 13:29
  3. Нужны исходники
    от newart в разделе Программирование
    Ответов: 19
    Последнее: 08.02.2006, 15:51
  4. Исходники демы Rage от X-Trade
    от jerri в разделе Программирование
    Ответов: 4
    Последнее: 26.10.2005, 11:14

Метки этой темы

Ваши права

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