Просмотр полной версии : EmuZGL alpha preview
Vladimir Kladov
13.04.2008, 20:25
Итак, кто читает подписи, уже, наверное, обнаружил, что я выложил позавчера альфа-версию своего нового эмулятора. Сегодня обновление (GS+
Covox+меню звука+исправления в Undo). Просьба возмущаться в эту ветку.
This thread is to discuss Alpha-Preview version of my new verion of Spectrum emulator EmuZ GL. It can be downloaded here (http://kolmck.net/zx/EmuZGL_Preview.rar) (an archivator RAR is necessary to unpack it). Please note, that ROM images are not provided in the archive: you can get it from other emulators including EmuZWin (but it may be necessary to edit emuZGL.ini file, section [ROMS] to refer to correct ROM images).
Vladimir Kladov.
Как ни странно, но Al Gift (http://zxaaa.untergrund.net/DEMO2/agdemo.zip) пошел и работает и звук есть !!! Чтобы попасть в часть с GS надо нажать капс + брейк, и вывалившись в васик подождать. Однако GS не работает выдавая то же что и алиенате.
А АLienate (http://zxaaa.untergrund.net/DEMO2/alienate.zip) выдало вот:
http://ipicture.ru/uploads/080413/d234c9j7it.jpg
В Soundtracker 20 (http://zxaaa.untergrund.net/DEMO2/soundtracker20thanniversary.zip) Hooy Programm тоже с GS Hooy...., но табличка не выскакивает и дема не виснит.
Может я че не так делаю ?
В целом интерфейс стал повеселей, прям как на эмуляторе SNES. А еще наконец то зет вин работает если я перескакиваю в другие приложения виндовса. Раньше оно останавливалось.
Как услышать гс в вышеуказанных демульках ?
Вот диск с GS (http://zx.pk.ru/attachment.php?attachmentid=7320&d=1202845122) демками. Как все туташнее заработает, значит работает.
А вот чем ковокс проверять, пока не знаю. Я его на реале то никогда не слышал. Только на профаке под сипиэмом.
molodcov_alex
13.04.2008, 21:49
Кинуть файлик GS104.rom в папку ROMS
Кинуть файлик GS104.rom
где его взять то ? .... не по понятиям, надо было сразу приложить. Сейчас догадался его взять из Унриала все вроде как заработало. Пойду тестить.
Сразу обнаружил глюк. Даже после резета ГС не отрубается. Резет не помогает. И борн вроде как не идет, но там еще же графика....
И борн вроде как не идет, но там еще же графика....угу.
поддержку 16с нада.
это уже намного лучше чем Emuzwin :)
Vladimir Kladov
14.04.2008, 15:17
Я однако извиняюсь, но остановкой и в EmuzWin и GL при переходе в другое окно управляет пункт Control\Autopause. В ini-файле есть настройка. На выходе ini пока не меняется.
SNES не видел. Про ромы написано в текстовике, брать любой. Нехождение отдельных прог может быть вызвано разными причинами. Я сдуру например впихнул скорость для GS = 36MHz. В ini можно вернуть множитель на 1 или 2. Может прошивка не подходит, я качнул, гляну.
Дойдут руки и до графики, зря я что ли отказался от окошек. Их хорошо клепать, но страшно неудобно потом разбираться, что кого чего и на кого как влияет.
Добавлено через 4 часа 0 минут
Нет, всё работает. Я положил новый вариант, он исправляет мультиколор для FastHalt=1. Настройки ini поправил. Добавился отключаемый фильтр сглаживания для GS, а то в плеере слишком много щелчков слышно (может, просто плеер кривоват). RZX пока не трогайте, я его только начал, там непочатый край - ещё дня два, если времени хватит, только на replay (самое тягомотное - это индикатор нарисовать на бордюре).
В принципе, образ ром - любой подойдёт (и не только для GS - у меня TR-DOS'ов одних штук 5 лежит разных, не считая тех, что в прошивках пентагона и скорпиона вделаны), просто у меня под рукой оказался GS104.rom. Подставляете свой, в ini прописываете, и всё. Неудобно только, что я буду свой ini подпихивать и его проще распаковать, ну тогда проще просто переименовать файл, главное, чтобы это ром от GS был.
Это не бэйсик, это "подстава". Надо что-нибудь нажать, чтобы понять, что это шутка.
А есть такие "демы", чтобы AY одновременно с GS играли? (Я к тому, что полагал, что они обычно несовместимы, поэтому смешал звук не арифметикой, а по xor, чтобы громче звучали...)
Эмуляция AY самописная или из Unreal/Ay emul'a?
Эмуляция AY самописная или из Unreal
в унриле не совсем точная
А есть такие "демы", чтобы AY одновременно с GS играли? (Я к тому, что полагал, что они обычно несовместимы, поэтому смешал звук не арифметикой, а по xor, чтобы громче звучали...)
Все демки с GS я выложил в верхнем посте. Их не так много.
Vladimir Kladov
14.04.2008, 21:05
Эмуляция AY самописная или из Unreal/Ay emul'aСамописная. Когда-то делал как в AY эмуле, но ещё в EmuZWin "изобрёл" свой вариант "точной" эмуляции, по сути - ресамплинга. В общем, в унриле тоже используется интегральное усреднение, но мне кажется, мой способ чуть эффективнее: я работаю по "событиям", вместо подсчёта суммы всех тактов AY. Скажем, есть 5 событий: 3 канала, огибающая и шум, у каждого свой счётчик, сколько осталось до пульсации. Интегральная сумма считается с точностью до такта Z80, в итоге. На разницу в частотах AY и Z80 (если она есть) я решил не обращать внимания.
А что, что-то не так звучит?
Добавлено через 9 минут
Кстати, точность унрила у меня особых сомнений не вызывает. Код я видел. Звук слышал. Что там неточно?
Другое дело, что алгоритм, который используется, несколько тяжеловат, и звук может ошибаться, что выражается некоторыми похрюкиваниями. На мощной машине это не особенно заметно. Может, я пропустил какой-нибудь трек?
Rene Sens
15.04.2008, 16:09
Во-первых, благодарю за новую версию эмулятора. Все, что работет, чрезвычайно понравилось! Может, наконец, пересяду с Анриала.
Теперь замечания... ;)
1) Нужна возможность отключения видимости часиков и бегунков справа.
2) При включенном AYx2 крошится дигитальная AY-музыка.
3) Alasm не хочет видеть память больше 48 Кб
4) Не запускается ZX Format 4 (4.5 запускается, но странно)
5) Нет мышки, но это я слишком много хочу от альфы.
Остальное пока вроде работает (демка Influence, которой я тестирую эмули, идет, как надо, до самого конца)
Vladimir Kladov
15.04.2008, 18:59
При включенном AYx2 крошится дигитальная AY-музыка.Например? Вот например, часть "Металлика" из Сатисфакшн - так же звучит. Может, там в порт пишут, который переключает фюгреки? Или имеется в виду дигитальная МИК-музыка? Так она и должна. (Думаю, имеет смысл включать только для прослушивания аю*2. Пока не добрался, rzx с Time Update пытаюсь помирить.
Вообще, для получения большей громкости, я решил сделать так (на левом и правом канале): (аю1 [0..32767] + либо аю2 либо (мик xor covox) [-32768..0])xor GS [-32768..+32767]. А то ручку громкости приходится выворачивать на максимум при прослушивании демок или наушники одевать.
SNES не видел.
http://ipicture.ru/uploads/080415/tuiV88H8Kt.jpg
В приложение эмулятор снеса и игрушка к нему.
Может для чего нить пригодится.
Vladimir Kladov
15.04.2008, 20:32
эмулятор снеса и игрушка к немуя сначала не понял, теперь догадался спросить гугл. Нет, никогда не интересовался приставками.
Положил версию. RZX можно бросать на проигрыш (мышкой пока), и даже откаты работают с ним. Индикатора пока нет. А если отрубить мультиколор некоторые rzx-демки "бегут" на скорости ~3500%, если нажать F1 (max speed) :)
А можно что нибуть придумать, чтобы rzx и tzx демки переводить в Scl или Trd ?
Вопрос конечно может быть глуппым, просто очень надо для коллекционирования. В прошлых Эмуль винах я часто использовал функцию Alt+D для сохранения глючных FDI в трд. Может возможно как нить и тзиксы переделывать или это надо только руками ?
Добавлено через 50 секунд
я сначала не понял, теперь догадался спросить гугл. Нет, никогда не интересовался приставками.
просто интерфейс похожий. Менюшка сверху, мутноватые надписи...
Vladimir Kladov
15.04.2008, 20:56
Сразу обнаружил глюк. Даже после резета ГС не отрубается. Резет не помогает.
Забыл ответить. В реальном спеке, как написано в описании GS (живого GS я увы не видел и не слышал), ресет главного компутера не сбрасывает GS - она продолжает играть. Я режил сделать "как в жизни", и у GS - свой ресет из меню, можно даже его оттуда выключить (On сам по себе отключает только звук, лучше отключить Running - в версии за сегодня добавлено, тогда машина GS вообще убивается и ресурсы не ест). Ещё один момент: там дема хо-ой которая, если её загрузить от самого старта, в ней мультиколор неправильный как я понял только из-за того, что на момент обращения к первому порту для связи с GS ещё даже машина GS не создана - из экономии ресурсов, и что-то сбиваеться с тактами, пока GS оживает. Для таких случаев, если надо именно GS, можно из меню сразу сказать Running - тогда она включится изначально, и уже будет готова. (А так - приходилось дему грузить повторно, чтобы GS уже работал и был готов принимать команды). Надо какой-нибудь индикатор на GS свой сделать, уж больно много ресурсов сжирает, если работает, всё-таки 12/24MHz, хоть и без мультиколора.
Добавлено через 3 минуты
rzx и tzx демки переводить в Scl или Trdможно-то оно всё можно, но вы же понимаете, что tzx - это лента, rzx - это снапшот+action replay recording sequence, а scl и trd - это образы дисков. И если после загрузки ленты каким-то образом (типа кнопки магик) можно сделать образ, загружаемый из снапшота на диске, то с rzx возникает вопрос: а как ввод из портов профэйковать?
Добавлено через 8 минут
Менюшка сверху, мутноватые надписи...покажите мне программу с менюшкой снизу - давно не видел, еще при дос всегда сверху были :)
Мутноватые... если в ини-файле поставить Fonts=0, вот тогда точно будут мутноватые...
(живого GS я увы не видел и не слышал),
Щас сделаю запись живого ГЭЭСА с реала, с моментом подгрузки следующей мелодии. битмаппинг в 192 сделаю, чтоб места поменьше занимало....
Сделал (http://zxpk.untergrund.net/downloads.php?id=123)
Еще кусок музыки GS (http://zxpk.untergrund.net/downloads.php?id=124) с другого плеера. (пауза между мелодиями, это момент загрузки инструментов, чем круче музон, тем дольше грузит).
Я находился в плеере. Пауза между мелодиями это загрузка следующей мелодии, запись я не прерывал. GS не выл при переключении. Он выключался и включался когда надо. Значит вытье ГС, это нечто созданное руками человека. Все равно что не поставить остановку мелодии в AY.
moroz1999
15.04.2008, 22:31
потестил свои GS римейки под эмулятором. В целом всё очень даже неплохо, но в Commando звук был из рук вон плохим, такое ощущение, что где-то какой-то буфер надрывался и хронически не успевал. Не знаю, что за глюк, это не особо зависело от filter и exact.
В Green beret мелодия самопроизвольно проматывалась пару раз. То ли где-то синхронизация сбойнула, то ли переход по паттернам сглюканул.
В After the War2 мелодия перед final cut после старта мода в очень ускоренном темпе промоталась секунд на 5.
В остальном - очень приятно всё. Оформление - дело наживное потом поправить недолго, а вот удобность интерфейса порадовала.
свои GS римейки
дай, хочу, а, то, нечего слушать, на ГС реале !
moroz1999
15.04.2008, 23:20
не, я игрушки имел в виду, они все на vtrdos есть.
можно-то оно всё можно, но вы же понимаете, что tzx - это лента, rzx - это снапшот+action replay recording sequence,
На самом деле AAA имел ввиду TAP -> SCL.
TZX штука редкая, а RZX уверен, он вообще за компанию назвал.
Добавлено через 7 минут
Конвертор сделать кстати не сложно, только вот работать демки после этого будут не часто. :)
Конвертор сделать кстати не сложно, только вот работать демки после этого будут не часто.
ну хотя бы сделать те которые будуть работать.
Добавлено через 37 секунд
не, я игрушки имел в виду, они все на vtrdos есть.
понятно.
В реальном спеке, как написано в описании GS (живого GS я увы не видел и не слышал), ресет главного компутера не сбрасывает GS - она продолжает играть.
а где можно увидеть это описание? сколько лет знаю гс, такого описания не видел... заявляю: на реальном спеке ресет компутера ДОЛЖЕН сбрасывать гс, т.к. гс берет этот ресет с системного разьема. а не сбрасывать гс может тока софтварный ресет.
Добавлено через 9 минут
или специально оторванный контакт;)
[bETA]mEN
16.04.2008, 12:17
а где можно увидеть это описание?
http://trd.speccy.cz/gs.htm
что позволяет, например, загрузить свой любимый модуль,
сбросить Спектрум, загрузить ассемблер и творить под любимую музыку.
это НЕ означает, что сбрасывать можно хардварным ресетом. это софтовый ресет из плеера. тогда да, вышел, загрузил асм и работай. а так, эмуляторщики вводят всех в заблуждение;) по-дефолту должно все ресетиться.
Rene Sens
16.04.2008, 18:02
Например?
Демка Digital Player by Technotime.
Сборник цифровой музыки с Инлайта 96.
Вот например, часть "Металлика" из Сатисфакшн - так же звучит.
Подтверждаю. Ну так на то оно и "Converted, sampled, coded by RST7" :v2_finge: Фирма веников не вяжет :v2_smoke:
Демка Digital Player by Technotime.
Сборник цифровой музыки с Инлайта 96.
Я уже потерял ход мысли. Но только что проверил этот сборник (http://zxaaa.untergrund.net/DEMO/digit.zip) Технотайма на эмуляторе альфа и убедился, что эмулятор выдает полною биллиберду.
Если для тестинга надо записать как на реале звучит мелодия из этого сборника, то я могу это сделать.
Vladimir Kladov
16.04.2008, 21:52
Сделал
Еще кусок музыки GS
Вот бы ещё догадаться, что за плеер, и что за трек звучит. А то я на слух как-то не догадливый. Вообще, если что-то пытается играть в процессе загрузки с диска, то Fast Disk надо отключать. Смесь AY с GS тоже даст не лучший эффект, если не сказать - ужасный. Я ведь рассчитывал именно на то, что вместе они обычно не играют.
а так, эмуляторщики вводят всех в заблуждение по-дефолту должно все ресетиться Это не эмуляторщики, а эмуляторщиков вводят в заблуждение неточными описаниями. Вот спрашивается, зачем мне горы документации по GS с описанием его софтверных команд, тогда как не хватает гораздо более важной и существенной информации? А именно, мне неизвестна длительность его int'а, в каких бы то ни было единицах (миллисекундах, тактах основного компа, или тактах GS). Имеется в виду не расстояние между двумя INTами, равное 320 тактам GS (на частоте 12MHz), а именно длительность этого сигнала. Ну, нету этой информации, и её можно только из пальца сами знаете что сделать.
Или например: нигде специально для нас эмуляторщиков не написано по-простому на пальцах, что уровень сигнала в регистрах Volume у GS - это не беззнаковое число, а знаковое, т.е. 80h - это минимальное возможное значение (а может и написано, но мельком). А то я просто запускаю GS-машину на фоне работающего AY, и сразу всё начинает взвизгивать, аж мороз по коже. Логика говорит: так быть не должно, в каналах GS должен быть 0. А там + 128.
И соответственно, возникают сомнения в интерпретации значений, которые попадают в DAC 0..3. Их как интерпретировать - как 0..255 или -128..+127?
Может, потому и звук не везде правильный, а только в тех треках, где звук оказался весь внутри одной "знаковой октавы". С этим надо ещё разбираться. Пока всё, что слышу, подтверждает правильность только самой первой интерпретации: все числа беззнаковые, иначе уши отваливаются. Хотя я не знаю, может мне попало уже частично то, что было сделано для "неправильного" понимания, в эмуляторе например...
Добавлено через 19 минут
проверил этот сборник ТехнотаймаТам внтури что лежит, DISK59.SCL? Чтобы не качать, а то у меня целй dvd уже.
Выложил версию, из предположения что и DAC и Volume - знаковые. Не нравится мне этот вариант, в наушниках слушать невозможно (а без наушников - нельзя, уже ночь). С этим GS не успел razx record доделать :\
Там внтури что лежит, DISK59.SCL? Чтобы не качать, а то у меня целй dvd уже.
Если диск есть качать не надо. У меня там лежит три сборника от технотайма. На 59 диске то же самое, но один диск. Для проверки это не важно.
Добавлено через 4 минуты
что за плеер, и что за трек звучит
плеер первой мелодии: Chip Player 1.01
мелодии: Cognitio
chipy126
Диск доступен тут: (http://zxaaa.untergrund.net/DISKI/chipplayergs.zip)
плеер во второй мелодии Титаник.
Треки: Intoxica
Atmosphe
Globulus
tgeneti
Стандартный диск с Виртуал ТР дос от Фласш инк.
эмуляторщиков вводят в заблуждение неточными описаниями.
ну, тут согласен.
Вот спрашивается, зачем мне горы документации по GS с описанием его софтверных команд, тогда как не хватает гораздо более важной и существенной информации?
и тут согласен. изначально инфа была закрытой, минимум описали, все это лежит в инете. остальное берется из схемы..
А именно, мне неизвестна длительность его int'а, в каких бы то ни было единицах (миллисекундах, тактах основного компа, или тактах GS).
сейчас мне сложно сказать точно, но я думаю, что длину инта надо сделать минимальную и достаточную. например, 32 такта гс (т.е. гарантированно длиннее самой длинной команды).
уровень сигнала в регистрах Volume у GS - это не беззнаковое число, а знаковое, т.е. 80h - это минимальное возможное значение (а может и написано, но мельком).
так, вроде генераторы звука давно разобраны по полочкам. поясняю: звуковые ЦАПы в гс 8 битные БЕЗзнаковые, т.е. значения 0-255. ЦАПы громкости 6 битные БЕЗзнаковые (0-63). старшие 2 бита вообще ничего не значат.
значение канала считается как ЦАП_звук*ЦАП_громк. т.е. в канале есть постоянная составляющая! соответственно, если в звук.цап отправить "середину" ("типа 0") (==128), то при рулении громкостью будут щелчки. это глюк гс'а.
в последних unreal сделан фикс: значение из звукового ЦАПа приводится к знаковому виду, потом умножается на громкость - щелчков нет! пусть не как в оригинальном гс, но звучит явно лучше (а в новом гс это уже тоже пофиксено).
да! не забываем, что в правом канале звучит 100% правый канал + 50% левый! в гс сделано именно так!
вот. если есть еще вопросы, спрашивайте.
что касается микширования звука. не знаю как там лучше (а xor - это явно лажа;), но я бы предложил сделать громкости всех девайсов в долях.
например: девайсов 3, у каждого стоит максимальная громкость. значит на всех уйдет 33,3% громкости. причем, стоит заметить, никаких перегрузов не будет! просто звук будет тише. чтоб он был громче, надо просто громкости ненужных убрать в 0 (ну или сильно убавить), тогда, например, уже на 2 девайса будет по 50%.
Vladimir Kladov
17.04.2008, 17:50
звуковые ЦАПы в гс 8 битные БЕЗзнаковые, т.е. значения 0-255. ЦАПы громкости 6 битные БЕЗзнаковые (0-63). старшие 2 бита вообще ничего не значат.
значение канала считается как ЦАП_звук*ЦАП_громк. т.е. в канале есть постоянная составляющая! соответственно, если в звук.цап отправить "середину" ("типа 0") (==128), то при рулении громкостью будут щелчки. это глюк гс'а.
Совсем запутали. Так ЦАПы звука всё-таки знаковые или беззнаковые? Я вот сейчас сделал как знаковые (и выложил), а громкость - беззнака и звука получился совсем не плохой, даже я бы сказал - хороший. Но к значению в ЦАПе я добавляю 128 как к байту, в итоге $80 -> 0, 0 -> $80, $40 -> $C0. Тоже сам себя уже запутал, это получается, всё-таки, знаковое. Кажется. Осталось спросить: звук правильный теперь (мне-то он кажется правильным, в сегодняшней версии)?
Заодно пофиксил смешивание с прочими звуками, вместо xor применил через-самплинг, что-то вроде интерлейса. Чуть тише звучит GS, чем раньше, но - не вдвое, а где-то на четверть. И если так пришлось, то (AY+MIC/Covox)/2AY одновременно с GS слышно, если что. Настройки для ресета и запуска GS в ini-файле.
Добавлено через 4 минуты
да! не забываем, что в правом канале звучит 100% правый канал + 50% левый! в гс сделано именно так!
А ещё чуть подробнее! в левом - то же, но наоборот, или нет? Что-то я про такое вообще первый раз узнаю...
Проверил новую версию. Гс перестал глючить. Музоны технотайма в диджитал плеере глючат по страшному.
Vladimir Kladov
17.04.2008, 17:58
громкости всех девайсов в долях.
Я это уже проходил. Нафиг-нафиг. Потом выкручивай ручку громкости на максимум, и всё равно прислушивайся, что там где-то далеко за рекой поёт... Ведь одновременно все звуки не звучат. Я думаю, последний вариант для смешивания вполне сносный, и достаточно громкий (и всё равно намного тише, чем mp3 в медиаплеере, но это уже не поправить: амплитуду можно растягивать, только заранее зная, где минимумы/максимумы).
Я это уже проходил. Нафиг-нафиг. Потом выкручивай ручку громкости на максимум, и всё равно прислушивайся, что там где-то далеко за рекой поёт... Ведь одновременно все звуки не звучат. Я думаю, последний вариант для смешивания вполне сносный, и достаточно громкий (и всё равно намного тише, чем mp3 в медиаплеере, но это уже не поправить: амплитуду можно растягивать, только заранее зная, где минимумы/максимумы).
Странные какие-то проблемы.
Запускаю одновременно 3 плеера, и ничего тише не становится.
Так почему в эмуляторе такие баги?
Совсем запутали.
так. число 0=0В, 128=2.5В, 255=5В. примерно так. при проигрывании модулей, серединой считается число 128. при уменьшении его волна идет вниз до 0, при повышении - вверх до насыщения.
это беззнаковое число. т.е. чтоб получить знаковое число, надо вычесть 128 (ну или прибавить, для байта разницы нет). тогда получим от -128 до +127.
и вообще, если б перепутал что, ни один бы модуль нормально не звучал;)
звук правильный теперь (мне-то он кажется правильным, в сегодняшней версии)?
пока не смотрел.. пока некогда..
А ещё чуть подробнее! в левом - то же, но наоборот, или нет? Что-то я про такое вообще первый раз узнаю...
да, именно так. а вообще, может проще строчку из Unreal'a взять? там все точно.
Потом выкручивай ручку громкости на максимум, и всё равно прислушивайся, что там где-то далеко за рекой поёт...
не, кажется, ты не так меня понял. допустим, имеем 3 источника: AY, GS, Covox. ставлю я для каждого громкости: 100%, 100% и 25% соотв. Получаем, что в сумме они займут все 16 бит, но ковокс будет звучать только на 1/4, т.е. тихо. если кому-то надо только AY, то он все остальное убирает в 0% и получает чистых 16 бит AY.
т.е. суммируем все проценты, далее находим долю каждого из них в общей сумме (получаем 0 целых и сколько-то еще). потом каждый из источников умножаем на долю и складываем. и всех все устраивает.
п.с. я бы с удовольствием потестил эмуль, погонял всякие хитрые моды на нем, но у меня сейчас реально нет свободного времени.. может попозже.. пока только на словах могу.
Добавлено через 3 минуты
Запускаю одновременно 3 плеера, и ничего тише не становится.
Так почему в эмуляторе такие баги?
это все тайны мелкософта;))) они делают какой-то хитрый микшинг, т.е. может у них там выдается не 16 бит, а 24. тогда да, складывай сколько хошь этих 16 битных каналов, тише не будет, тока громче. но в данном случае 16 бит - предел, надо в него вписать.
п.с. со старыми карточками такой фокус не прокатит, с 3мя плеерами;)
Vladimir Kladov
17.04.2008, 21:22
не, кажется, ты не так меня понял. допустим, имеем 3 источника: AY, GS, Covox. ставлю я для каждого громкости: 100%, 100% и 25% соотв. Получаем, что в сумме они займут все 16 бит, но ковокс будет звучать только на 1/4, т.е. тихо. если кому-то надо только AY, то он все остальное убирает в 0% и получает чистых 16 бит AY.Тогда постоянно крутить ручки настройки, что не легче (колёсико громкости и то ближе обычно). Я думаю, сейчас нормально, только AYx2 стоит по умолчанию выключить. Походу, это именно он портит картинку в дигитальной музыке из сборки DIGIT.ZIP (Disk59.SCL). Причём, здесь-то смешивание уже не при чём, там уже обработка выводов в порты меняет картинку.
Смешивание каналов GS и AY я добавлю. Но насчёт взять строчку из анрил, я её там просто не нашёл:
void flush_gs_sound()
{
if (temp.sndblock) return;
sound.mix_l = gs_v[0] + gs_v[1], sound.mix_r = gs_v[2] + gs_v[3];
unsigned endtick = lastint + gscpu.t - zxframe;
endtick = (endtick*mult_gs) >> MULT_C; // (endtick*temp.snd_frame_ticks)/GSCPUFQI;
sound.flush(endtick);
}
Никакого смешивания не наблюдаю, два канала налево, два направо.
плеер первой мелодии: Chip Player 1.01
мелодии: Cognitio
chipy126
Диск доступен тут:
Ну вот, спасибо, теперь я смог более точно настроить это дело. И выложил, второй раз за сегодня. Учёл заодно и смешивание левого-правого каналов GS, и фильтр подогнал, чтобы звучало практически одинаково, что у меня, что в выложенном мп3-шнике. Без фильтра, оказывается, нельзя. Он заменяет конденсаторы (или паразитную ёмкость, или ещё что-то, что сглаживает реальный звук). Заодно добавил параметр смешивания в AY (и включил по умолчанию). Там значение подобрано из других соображений: чтобы все деления-умножения можно было сдвигами замениь, поэтому процент перетекания фиксированный: 1/8. Вспомнил про параметр в ini - общий звук, выключил по умолчанию AYx2 (побаловаться включить всегда можно), и ещё поправил смешивание GS+прочее: интерлейсинг теперь только если детектируется наличие звука GS и одновременно прочих. Т.е. если играет только GS, то только он родимый и слышен, без всякого интерлейса, и аналогично, если GS нету, то и не смешивается. Int выставил в 32 (стояло 24, впрочем, особо не заметил, чтобы что-то опменялось по этой причине). Качество звучания вполне удовлетворительное, на мой взгляд, теперь. Если есть какие-то ещё претензии по звуку, просьба указывать конкретно "плохой" трак, и мп3 можно уже не писать, достаточно, если правильный звук можно услышать в каком-нибудь ещё эмуляторе из анрил, спектакулятор, спин, клив, zemu и (кххм) EmuZWin какой-нибудь версии. Проще всего сравнить конечно со спектакулятором, всётаки виндовый интерфейс да и нет странной привычки продолжать играть GS при включённой паузе.
Тогда постоянно крутить ручки настройки, что не легче (колёсико громкости и то ближе обычно).
ну, дело ваше;) а я бы 1 раз настроил и не парился.
Но насчёт взять строчку из анрил, я её там просто не нашёл:
а я нашел письмо Alone Coder'у с исправлениями. исправления были внесены не так давно.
исправление микширования каналов GS (gsz80.cpp):
inline void flush_gs_sound()
{
unsigned l,r; //!
l=gs_v[0]+gs_v[1]; //!
r=gs_v[2]+gs_v[3]; //!
if (temp.sndblock) return;
sound.update(gscpu.t + (unsigned) (gs_t_states - gscpu_t_at_frame_start), (l+r/2)/2, (r+l/2)/2); //!
for (int ch = 0; ch < 4; ch++) {
gsleds[ch].level = led_gssum[ch] * gsvol[ch] / (led_gscnt[ch]*(0x100*0x40/16)+1);
led_gssum[ch] = led_gscnt[ch] = 0;
gsleds[ch].attrib = 0x0F;
}
}
т.е. половина правого канала слышна в левом и наоборот. по скорости, наверное,
медленно, но можно не создавать переменные l и r, а вставить в формулу.
деление суммы в этой формуле сделано на 2 для быстроты, так-то надо делить на 1.5.
исправление щелчков громкости (опционально! в GS не так!) (gsz80.cpp):
void gs_byte_to_dac(unsigned addr, unsigned char byte)
{
flush_gs_sound();
unsigned chan = (addr>>8) & 3;
gsbyte[chan] = byte;
gs_v[chan] = ((signed char)(gsbyte[chan]-0x80) * (signed)gs_vfx[gsvol[chan]]) /256 +gs_vfx[33]; //!
//gs_v[chan] = (gsbyte[chan] * gs_vfx[gsvol[chan]]) >>8; //!
led_gssum[chan] += byte;
led_gscnt[chan]++;
}
тут байт звука берется знаковый, т.е. 0х80 - это 0, при этом как не меняй
громкость, на выходе будет 0. в конце формулы прибавляется середина громкости,
чтоб в результате число было в тех же самых пределах, что и раньше.
точно такую же замену сделать в void out(unsigned port, unsigned char val).
сравнивать как звучит гс можно с последней версией анрила, там очень похоже.
Добавлено через 36 минут
Int выставил в 32 (стояло 24, впрочем, особо не заметил, чтобы что-то опменялось по этой причине).
дык.. ничего поменяться и не должно было;) а вот если б стояло не 24, а тактов 10, тооо...
Вот есть гифтинг для тестинга:
Gift 4 Vel (http://zxaaa.untergrund.net/DEMO/gift4vel.zip)
Самое интересное во всех эмуляторах ведет себя по разному, не говоря уже про реал. Там типа Ковокс звучать должен в конце...
Вообщем если попробовать во всех эмулях, то можно примерно услышать нечто среднее.
микширование xor'ом или "интерлейсом" это глупость, звук будет очень далек от того что должно быть.
Правильное микширование - это только сложение. Чтобы избежать переполнения от сложения нескольких каналов, результат сложения нужно получать большей разрядности, а затем компадировать (сжать динамический диапазон) (http://www.ccas.ru/DCM/Chichag/4_COMPAN/H4VC.htm) до нужной разрядности.
в принципе можно и наоборот, вначале компадировать, а потом складывать, тогда не нужна обработка с высокой разрядностью, но качество будет похуже.
Одно время витала у меня идея автоматического микшера- контроль уровня вывода по каждому конкретному источнику (точнее контроль наличия изменения сигнала в канале микшера) и в соответствии с такими вот флагами учитывать или нет каждый конкретный канал при итоговом сведении.
Vladimir Kladov
19.04.2008, 06:44
Gift 4 Vel
Самое интересное во всех эмуляторах ведет себя по разному, не говоря уже про реал.В смысле, на разных реалах по-разному?
микширование xor'ом или "интерлейсом" это глупость, звук будет очень далек от того что должно быть.интерлейс достаточно близок. Надо запустить GS, а потом не останавливая его, бросить какой-нибудь снапшот, в котором AY играет. Слышно обе мелодии, и достаточно чисто. Разумеется, если играет только одно из двух, никакой интерлейс не применяется.
результат сложения нужно получать большей разрядности, а затем компадировать (сжать динамический диапазон) до нужной разрядности.В итоге это даёт уменьшение громкости, если заранее неизвестны максимум и минимум на каждом канале (а они неизвестны). И чем больше смешивать звуков, тем тише будет звук в итоге. А я ещё DMA и SB планирую (может и TSFM сделаю), но позже.
Добавлено через 2 минуты
Обнаружил баг с записью sna В формате 128. Пока не выкладываю, попытаюсь дорешать за сегодня RZX - уже почти-почти, но проблемы с дозаписью после паузы (в записи) или undo. И индикаторы хочу нарисовать для GS, диска и там по мелочи.
Black_Cat
19.04.2008, 08:23
А я ещё DMA и SB планируюDMA Sound Blaster:
Распространения и поддержки в программах устройство не получило (ранние версии исходников Wolfenstein 2004 содержали поддержку устройства, но она была убрана из-за недостатка нижней памяти). На сегодняшний момент устройство автором не поддерживается и не рекомендуется к использованию.
дык что можешь не делать, оно умерло
Vladimir Kladov
19.04.2008, 22:12
оно умерло
Как и Спек... Я же делаю музей, чтобы можно было услышать и увидеть то, что на реале увидеть практически невозможно, в том числе. Я бы и FullerBox и mSpeech поддержал, будь оно хоть как-то документировано.
Я выложил обновление. RZX пашет, SNA исправлен, заодно с ними куча мелких багов, и даже успел нарисовать индикатор диска, и начал рисовать GS. Недоделал, правда, но видно, что включено устройство.
В смысле, на разных реалах по-разному?
интерлейс достаточно близок. Надо запустить GS, а потом не останавливая его, бросить какой-нибудь снапшот, в котором AY играет. Слышно обе мелодии, и достаточно чисто. Разумеется, если играет только одно из двух, никакой интерлейс не применяется.
попробуй смешивать так чистые синусоиды с большой разницей в частоте. Если частота дискретизации порядка 44 кГц, то искажения будут настолько высоки что на оригинал будет совершенно не похоже ;)
Если смешивать так сигналы на частоте дискретизации под 200 кГц, то по идее должно получится тоже самое компадирование (за счет физических ограничений акустики), но процессорные затраты при этом будут несоизмеримо высокими. Еще одним минусом такого подхода будет то что звучание будет заметно отличаться в зависимости от используемой акустики, точнее ее АЧХ. На плохонькой акустике микширование будет лучше, но качество никудышнее, а на качественной акустике наоборот, что будет усиливать искажения.
Снижение громкости от увеличения числа каналов никак не обойдешь, природу не обманешь :) Потому что в реале множество источников звука будут создавать очень мощный звук. Проблема тут в ограниченом динамическом диапазоне звуковой карты. Но при корректном компадировании этот эффект в какойто степени решается, за счет акустического обмана :)
Black_Cat
20.04.2008, 00:05
Как и Спек... :) не, к Спеку эт замечание не относится
Я же делаю музей, чтобы можно было услышать и увидеть то, что на реале увидеть практически невозможнотоды может лучше сделать то, что имеет перспективу, чтоб посмотреть как это выглядит, а может даже изваять что под ещё не распространённое устройство? Это было бы интересно
Doronetty
20.04.2008, 00:54
Пусть DMA Ultrasound будет - а то ни на одном эмуле он не был реализован! Я голосую - ЗА!
P.S: А по поводу частот AY - может стоит сделать поддержку 96 кГц (благо сейчас куча плат поддерживает этот режим) - тогда всё очень даже реально звучать будет ;)
Vladimir Kladov
20.04.2008, 08:18
Пусть DMA Ultrasound будет - а то ни на одном эмуле он не был реализован!Странно, но я в коде unreal 0.34b (вроде бы) видел что-то насчёт DMA. Или это другой DMA?
к Спеку эт замечание не относитсяПонятно, что это шутка. Но мне авторское описание DMA показалось очень даже привлекательным. Не хватает памяти? Ведь сейчас на Спек вешать можно без проблем от 2 мегабайт.
сделать то, что имеет перспективуНапример AYx2. Хочу ещё посмотреть на ТСФМ, что это и как его едят. Но это чуть позже. Следующий в моём плане - сюрреальный режим 256 цветов. Для него есть штук 15 игрушек, а это уже сравнимо с числом игр под реальный (и чуть не померший) GS.
Снижение громкости от увеличения числа каналов никак не обойдешь, природу не обманешь
Ну, я же "обошёл" :) Просто они обычно вместе не звучат, и для этого обычно не предназначены. Значит, надо не смешивать, а стараться выделить, что играет, и его и звучать. Из всех сочетаний самое вероятное только смешивание с GS - потому что он можеть петь на фоне, вот там и понадобилось сделать какой-то микс, если звук есть и там, и сям. Просто интерлейс дешевле, чем арифметическое усреднение, но при этом качество - то же (на 44КГц), а звук - всё-таки громче.
Black_Cat
20.04.2008, 08:38
Следующий в моём плане - сюрреальный режим 256 цветов.а где на него доки и т.д. посмотреть?
А с новыми, более-менее реальными видеорежимами у тебя как планируется?
Но мне авторское описание DMA показалось очень даже привлекательным.эт ты про DMA USC?
Или это другой DMA?
Был DMA Ultra Sound Controller в котором дейстительно использовалась 8237 и был ещё от Димы Быстрова "DMA Sound Blaster", в котором никакого контроллера DMA собсно и небыло, но ввиду его конфликта с новым видеорежимом на нём был поставлен крест и впредь он поддерживаться не будет. Есть ещё чесный DMA контроллер на Z80-DMA аж с 5ю переделанными под него игрушками, 5ю демками, одной утилитой и кучей картинок :) - вот его было-бы полезней сделать чем мёртворождённого "DMA Sound Blaster", который никому больше не интересен.
А такая экзотика потипу как SMUC ISA случайно не будет поддерживаться? А то ведь появилась-бы возможность под реальный Adlib или Creative Labs SB под таким эмулем чё наваять, притом последний можно было-бы использовать реальный..
Vladimir Kladov
20.04.2008, 10:26
сюрреальный режим 256 цветов.
а где на него доки и т.д. посмотреть?На оригиральном сайте, ссылки есть с моего сайта, копия должна быть на сайте Арджуна (Индия), краткое есть у меня в дополнениях.
чесный DMA контроллер на Z80-DMA
Я посмотрел пока мельком, там шла речь о каком-то контроллере. Инфа с VTR, так что я думаю там есть всё, что надо.
SMUC ISA Это надо с драйверами разбираться. Если этот код в анрил есть, то почему бы и не содрать, вот только сам я проверить вряд ли смогу. Хотя на старом пне2 стоит Creative SB32 наверное на исашной шине (большая такая, в отличие от PCI). Но на нём опен-ГЛ здорово тормозит (хотя 100% скорости со скрипом даёт, фпс около 20).
Сюрреальный режим 256 никто кроме меня не поддерживает, поэтому придётся всё-таки мне. Там довольно сурьёзно, поэтому на неделю как минимум. А дальше в первую очередь поддержка аппаратуры, чтобы всякие теневики начали работать (scorpion, if1, +2a/+3), ихние дисковые системы (очень хотят +3cp/m, disciple/mgt), видеорежимы, мыши, джои, пистолеты. Эмулятор - это очень большой проект. Хотя мне проще - многое уже по второму разу.
Странно, но я в коде unreal 0.34b (вроде бы) видел что-то насчёт DMA. Или это другой DMA?
Емнип, там все ограничилось заголовочными файлами.
У меня была пробная реализация DMA. В принципе даже работала (из того софта что под рукой был):
http://zx.pk.ru/showthread.php?p=57328#post57328
Vladimir Kladov
21.04.2008, 16:30
Прежде чем, продолжить работу над следующей версией, выкладывается версия 155К, с добавленными индикаторами уровня звука (отдельно на каналах MIC, Covox, AY, GS).
Вот список (http://zxaaa.untergrund.net/demo.php?s=emz&title=Title) демок, которые работали ТОЛЬКО на Emul Z Win 2.7 эмуляторе. Я не знаю с чем это связано, однако сейчас проверил первые 4-ре по списку в новом эмуляторе и они виснут и сбрасываются.
Вот.
А еще хотелось бы, чтоб новый эмулятор мог распоковывыть архивы zip и rar. Спекулянтор зип может ! Это очень удобно учитывая интернет зависимость спектрумиста эмуляторщика.
Vladimir Kladov
21.04.2008, 20:29
они виснут
я погляжу конечно, но наверняка дело в неподдерживаемом оборудовании/портах/моделях (а иногда надо просто правильно загрузиться, у меня сейчас USR0 кривовато сделана, через внешний снапшот, часто не прокатывает). Так что руками: переход в 48, J(load) ""<ENTER>.
архивы zip и rar
это я отложу на самй потом, потому сто добавит к весу проги изрядно, а мне её пока я её не доделаю часто придётся выкладывать. Лучше я сделаю что по дропу с нажатым контролом диск/лента бьудет вставляться, но без запуска загрузки. Т.е. можно открыть рар с плеером, загрузить его, запустить из бута, если он сам не бут, а потом так же "бросать" с контролом диски из архиватора. Экономнее просто.
Так что руками: переход в 48, J(load) ""<ENTER>.
Давно пора это автоматизировать.
Rene Sens
22.04.2008, 18:35
Уже не помню, говорил это кто или нет: хорошо бы (опционально) добавить возможность автоматически выходить из режима паузы после загрузки файла.
А так очень радует прогресс. Для полного счастья мне не хватает мышки и возможности извлекать файло прямо из архивов :)
Vladimir Kladov
22.04.2008, 19:08
мне не хватает мышки
... скориона, хдд со смуком, джойстика, перенаправления клавишей, режимов 16с, 512х, гигаскрина, принтера, дизасма в файл, точек останова по портам, .... Если перечислять, чего ещё надо сделать, экрана по вертикали не хватит. Потому - альфа :)
Black_Cat
23.04.2008, 00:23
гигаскрина,:) нет, гигаскрина+!!!
Rene Sens
23.04.2008, 15:39
... скориона, хдд со смуком, джойстика, перенаправления клавишей, режимов 16с, 512х, гигаскрина, принтера, дизасма в файл, точек останова по портам, .... Если перечислять, чего ещё надо сделать, экрана по вертикали не хватит. Потому - альфа :)
потому жду с нетерпением бету и гамму:v2_thumb:
Vladimir Kladov
23.04.2008, 15:43
гигаскрина+а это чего?
Black_Cat
23.04.2008, 16:20
это гигаскрин без моргания, с арифметическим усреднением цветовых составляющих
Vladimir Kladov
23.04.2008, 19:09
ДЫк я вроде это под гигаскрином и понимал всегда. Понятно, что то, что на телевизоре не мыргает засчёт смены кадров, на компе мыргать будет однозначно. Потому у меня гигаскрин как арифметическое усредение в EmuZWin и делался. Другое дело, что управление портом я не юзал, предполагая наличие тумблера, но тумлер тоже не делал, а вводил анализ смены видеостраниц. Есть пара демок, построенных на этой смене, маде ин ненанаша, они тоже идут как гигаскриновские, хотя ни о каком EFF7 за рубежами речи не шло.
Black_Cat
23.04.2008, 23:48
ДЫк я вроде это под гигаскрином и понимал всегдану насамделе в анрыле гигаскрин моргАет, т.е. цветосмешение как в оригинале - за счёт инерциальности человеческого зрения, а чтоб он не моргал надо на реале выводить 4 байта на строку знакоместа (т.е. столько же как и в 16 color), а реально этого ещё никто не реализовывал.
Потому у меня гигаскрин как арифметическое усредение в EmuZWin и делалсяну эт может только у тебя, хотя такой режим более корректно называть гигаскрин+, т.к. в отличии от оригинального - не моргает, вне зависимости от портов, которыми он включается.
ну насамделе в анрыле гигаскрин моргАет, т.е. цветосмешение как в оригинале - за счёт инерциальности человеческого зрения
NoFlic включи
Vladimir Kladov
28.04.2008, 18:44
А ну, хватит тут засорять кышь, делайте свою ветку. Тем более я уже сказал: не эмулятора общего назначения это работа - эмулировать виртуальный девайс для реального спека.
Лучше бы обсудили удобственный метод быстрого переключения между разными способами редиректа клавы. - это относилось к использованию эмулятора для эмуляции недостающих устройств для реального Спектрума на ПЦ. Ушло в отдельное обсуждение.
Я победил 256, осталось помирить его с мультиколором, с откатом во времени тоже бы неплохо, но иногда и так прокатывает (просто откаты если полностью делать, будет требовать ещё в 8 раз больше памяти на откаты и в 8 раз больше мощностей на пересылку).
Но вот уже столкнулся: в некоторых играть на ноуте играть неудобно (атик аттак), если курсорные стрелки, то надо чтобы без капса, потому как он работает как пауза тогда. Значит нужно чтобы редирект стрелок на разные кнопки можно было настраивать в динамике или хотя бы выбирать из списка готовых настроек. Наверное второй вариант сделаю - попроще в реализации будет.
Black_Cat
28.04.2008, 19:17
А ну, хватит тут засорять
если модеру не лень будет - пусть отрежет и сгенерит тему про эмуль GS AY/TSFM
Лучше бы обсудили удобственный метод быстрого переключения между разными способами редиректа клавы.По этому поводу есть сырые идеи:
NumLok=1, ScrollLock=любой - клава подключена к РС, сканкоды на Спек не идут;
NumLok=0, ScrollLock=0 - клава подключена к Спеку, сканкоды идут на Спек;
NumLok=0, ScrollLock=1 - клава подключена к Спеку в режиме настройки клавиш (монитор однокристалки контроллера клавы), сканкоды на Спек не идут(в реальном Спеке разблокировывается родная клавиатура и кемпстон);
Vladimir Kladov
29.04.2008, 16:46
По этому поводу есть сырые идеи:
NumLok=1, ScrollLock=любой - клава подключена к РС, сканкоды на Спек не идут;
NumLok=0, ScrollLock=0 - клава подключена к Спеку, сканкоды идут на Спек;
NumLok=0, ScrollLock=1 - клава подключена к Спеку в режиме настройки клавиш (монитор однокристалки контроллера клавы), сканкоды на Спек не идут(в реальном Спеке разблокировывается родная клавиатура и кемпстон);
Это вы про эмуляцию PC клавы на спеке? Я пока думаю о его собственных клавишах. Во многих играх раскладка не очень удачная для работы с ПЦ. Вот например QAOPN, всё бы ничего, но из-за длинного пробела на N нажимать неудобно. На ПЙ вообще лучше основным делать стрелки, и при их нажатиях генерировать буквы (или на кемпстон-джойстик, опционально). Я пока придумал, но не реализовал, всё ещё 256 доделываю. Мультиколор прикрутить получилось, но немного неудачно идёт работа с фоновым рисунком, и надо что-то придумать всё-таки с текстом, а то его не видно, и с выделением через bright / flash. Раньше у меня была огромная таблица смешивания, она занимала 256Кбайт, больше я так делать не хочу, и кое-что не стыкуется.
Black_Cat
29.04.2008, 17:53
Во многих играх раскладка не очень удачная для работы с ПЦ.дык и я о том - по ScrollLock=1 эмуль приостанавливается, входишь в монитор настройки клавиш и переназначаешь что нравится, потом возвращаешся обратно и играешь
Vladimir Kladov
29.04.2008, 18:35
Сколллок придержим. Приостанавливать достаточно кнопкой Pause (работает изначально). Меню у меня при этом сразу и выпадает. Я вобще хочу попробовать фишку с запоминанием той раскладки, которая использовалась последний раз для этой игрушки, чтобы на автомате (но опционально) эмулятор сам вспоминал, что лучше назначить на стрелки+табуляцию или там пробел.
Я вобще хочу попробовать фишку с запоминанием той раскладки, которая использовалась последний раз для этой игрушки, чтобы на автомате (но опционально) эмулятор сам вспоминал, что лучше назначить на стрелки+табуляцию или там пробел.
кстати, было бы неплохо и для джойстика (физического) такую фичу изобрести. как вариант: не обязательно делать автоматически. можно просто сохранять в файл.
Black_Cat
29.04.2008, 19:36
Сколллок придержимон уже используется в ZXMC для отключения внешней РС клавы.
Можно по другому сделать - при ScrollLock=0 комбинация Shift+Tab включает монитор настройки клавиатуры (просто клавиша Tab - это Edit Спековский). Получается очень интуитивнное управление:
Tab=Edit
Shift+Tab=KeyboardEdit
Vladimir Kladov
30.04.2008, 22:11
ZXMCэто что?
А не люблю я горячие кнопки. Если уж делать их, то на такую функцию, которая нужна постоянно. Есть меню, в нём всё написано, что к чему.
В общем, я выкладываю новую альфу, уже с 256 цветами и редиректом клавы, джойстика пока нет (не помню даже куда я его засунул, искать надо). И здесь (http://www.kolmck.net/zx/EmuZGLsrc_Alpha187K.rar) я положил все текущие исходники на случай чего, можно заодно поковырять и на предмет изучения улышного мультиколора, и на предмет 256 цветов кому надо. Хотя не все любят Паскаль.
Добавлено через 48 минут
Новую версию исходников каждый раз я выкладывать не собираюсь, по крайней мере до гаммы. Разве что по большим праздникам.
Black_Cat
01.05.2008, 05:22
это что?мультикарта Камиля Каримова
Если уж делать их, то на такую функцию, которая нужна постоянноа что монитор настройки клавы/джойстика не нужен постоянно?
Vladimir Kladov
01.05.2008, 09:56
монитор настройки клавы/джойстика не нужен постоянно?Не будет нужен, если эмулятор при загрузке образа будет автоматически вспоминать прошлые настройки на этой игре. Вы можете после загрузки любой игры в первый раз выбрать такое перенаправление, чтобы независимо от клавиш забитых в программу работали QAOPspace или стрелки+space, и тогда при повторной загрузке вы всегда получите те клавиши, к которым привыкли, и ничего настраивать уже не надо будет.
Добавлено через 4 минуты
ах, да забыл в новом ини-файле включить Model=5, сейчас стоит 128К, переключите, есил надо, себе на пентагон. Прежде чем двигать дальше, потестирую прежде сделанные фичи, а то вдруг что-нибудь сломалось. Не знаю даже, что сделать вперёд, столько всего напрашивается, что аж глаза разбегаются... Мыши, джойстики, интерфейс-1, или 16цветов... Или всё это сразу.
Black_Cat
01.05.2008, 10:04
если эмулятор при загрузке образа будет автоматически вспоминать прошлые настройки на этой игреэт конечно для эмуля годится и нэхай будет, но давай исходить из того, что каждый раз запускается новая программа
Vladimir Kladov
01.05.2008, 10:42
каждый раз запускается новая программа
Ну вы пробовали новую версию? Сейчас как раз такой вариант, "запоминание" я ещё не реализовал.
Добавлено через 9 часов 4 минуты
О, сколько новых глюков обнаружилось после добавления 256 режима: и GS сломался, и мультиколор для Пентагона... Зато теперь исправил (и выложил) ещё и включение мультиколора для Пентагона, оказалось оно ломалось при запуске GS-машины, и загрузку с ленты в режиме USR0.
До меню с клавишами так и не дошло правда. И как-то и не подумал как это можно вообще сделать. Если любая кнопка должна завершать режим паузы и продолжать эмуляцию. Наверное с альтом букву можно приделать всё-таки. А вот как гулять по пунктам, альт со стрелками вроде как заделан под анду.... И альт с квадратными скобками тоже - под листание ленты. Вот задачку себе задал однако же....
Vladimir Kladov
03.05.2008, 18:48
Выложил: 191К - Добавлен Kempston Mouse, PC джойстики, сразу с перенаправлением на клавиши ZX и джойстики ZX и даже функции эмулятора (откат, громкость звука, пауза, максимальная скорость), так что с некоторыми типами джойстиков можно отсесть подальше от экрана и не тянуться к клавиатуре, если клавиш на джойстике достаточно.
Vladimir Kladov
04.05.2008, 22:16
У меня большой просьб: подскажите где взять мультиколорных программ для скорпиона. Пока нашёл только 2: real (там эмблема одоименного футбольного клуба, но гигаскрин мешается рассмотреть, да и маловато, и border - простейший бордюр). Ещё есть в природе?
Владимир, извиняюсь за такое хамство, но позвольте разнести вас в пух и прах за такой интерфейс, разумеется в дружественной манере.
В EmuZwin при всей переодической глючности, что к интерфейсу не относится , был просто потрясающий GUI, в котором поражало и очень радовало, что при наведении (наставлении) курсора на игру, справа показывалась картинка из игры, как я понимаю из рома сразу и демонстрируемая.
В новом эмуляторе, я понимаю вашу приверженность всем этим опенджеельным финтифлюшкам, но юзабилити гуя упало.
Одна из притензий и сразу по этому поводу - предложение: наведения курсора на пункт меню УЖЕ ДОСТАТОЧНО, чтобы оно выехало с кинотеатральным эффектом, а не заставляло человека подобно обезьяне по сто раз еще на это меню и тыкать мышкой.
:smile:
Одна из притензий и сразу по этому поводу - предложение: наведения курсора на пункт меню УЖЕ ДОСТАТОЧНО, чтобы оно выехало с кинотеатральным эффектом, а не заставляло человека подобно обезьяне по сто раз еще на это меню и тыкать мышкой.
:smile:
глупость сморозили.
в обчном эмуляторе точно также приходится по сто раз лезть в меню чтоб добраться до конкректной опции, ведь все эти маленькии выдвигающиеся окошки после убирания с них курсора мыши, исчезали.
гуй эмулятора emuzgl очень даже неплох, хотя помоему всё несколько великовато.
гуй эмулятора emuzgl очень даже неплох, хотя помоему всё несколько великовато. глянь в конфиг, размер шрифта можно менять
я не про шрифт, а про кнопки :)
Vladimir Kladov
06.05.2008, 16:54
я не про шрифт, а про кнопки
Размер кнопок подбирается по размеру меню.
Выезжание я сделаю позже, когда руки дойдут. А вот автоматическое убирание - это плохо. Я ещё в ДОС когда-то понял, что с меню, которое заменяет конфиг, при автоматическом убирании работать просто невозможно. Выбираешь из кучи вложенных менюшек опцию, нажимаешь, и всё меню закрывается. Надо соседний пунктик щелкнуть или опять тот же - начинай всё сначала.
Добавлено через 8 минут
всё несколько великовато.А вот как ра то что по умолчанию BigMenu=1, хорошо для работы и в окошке, когда оно маленькое, и в фулскрине, когда экран далеко стоит.
Vladimir Kladov,
Позвольте пару слов о не-GL версии. Я взял то, что сегодня доступно на
http://kolmck.net/apps/EmuZWin_Eng.htm
(в заголовке страницы написано EmuZWin v2.7 release 2.8). Запустил это на wine, Windows нет сейчас под рукой. Выбрал модель 48K. Попробовал пару тестов: BBG с цветными вертикальными полосами и эффект снега. Скриншот первого приложен. Понятно, что выглядит он не так, как должен. Может быть вы в курсе, это с проблемы с таймингами или это работа в wine так сказывается?
По поводу второго теста. Это простенькая программка на Бейсике, записывающая (с помощью POKE) и запускающая по адресу 40000 следующий код.
DI
LD A, 0x40
LD I, A
EI
RET
Попробовал запустить на EmuZWin, и он вывалился с ошибкой доступа к памяти. Запустил эмулятор еще раз и обнаружил, что галочка Snow Effect сброшена. Попытался ее установить, и тут же вывалился с той же ошибкой снова. Поэтому скриншота нет, прилагаю снапшот.
Cсылка на тест BBG:
http://ppest.org/zx/zxse.php
http://ppest.org/zx/et/BBG.ZIP
А можно ссылку на тест?
Я добавил ссылку в исходное сообщение.
Я добавил ссылку в исходное сообщение.
Извиняюсь, повылазило
Vladimir Kladov
07.05.2008, 16:01
EmuZWin v2.7 release 2.8
очень глючный. Смотрите на GL, он устойчивее (проще потому что). Снег реализован, тайминги тоже. Зависимость от винды тоже меньше. Есть вариант звука bass, наверняка это на Linux лучше будет.
Rene Sens
08.05.2008, 21:23
Может подскажете, с чем может быть связано подрагивание изображения в полноэкранном режиме?
А то еще подрожит, потом успокоится, начнешь мышкой двигать и экран опять дергается.
На другой машине, что на работе, такого эффекта нет.
У меня большой просьб: подскажите где взять мультиколорных программ для скорпиона.
Демка Anamnesis, там в меню можно выбирать pentagon/scropion.
Только вот скорпионы бывают разные, желтые, зеленые...
У желтого там какая то беда с нечетно тактовыми командами, они вроде как дополняются до четных и так-тов получается в худшем случае чуть ли не 65000.
В демке Binary Love тоже можно выбирать pentagon/scorpion, мультиколоров там достаточно
Vladimir Kladov,
Версия GL действительно смотрится гораздо лучше. К сожалению, в тестах на тайминги дает примерно то же. В Aquaplane правый край горизонта дрожит. В Dark Star значек на верхнем бордюре не по середине, сполз вправо. Floatspy показывает странные значения при чтении из нечетных портов в диапазоне 0x4000-0x7fff. Линии на тесте BBG тоже не на месте. В ShockMegademo справа видна дефектная полоса. В Vectron сверху вылезла синяя полоса и последняя красная линия на правом бордюре тоже дрожит.
С эффектом снего интересно получилось. Сам по себе тест прошел нормально, и снег я увидел. Но после загрузки (без сброса) очередного снапшота (.z80) снег продолжает идти как ни в чем не бывало. ;-) Это видно на одном из скриншотов.
На всякий случай. По моим расчетам получается следующее.
Vladimir Kladov
10.05.2008, 10:00
В Aquaplane правый край горизонта дрожитПри ширине 64 пикселя на бордюр будет. На реальном экране не было столько пикселей. К примеру, эмулятор Spectaculator максимум показывает 48. Скорее всего, остальные он не показывает, чтобы не портить картинку, потому что в мультиколорных программах бордюр изменяется с небольшим запасом, на экране-то всё равно не было видно. Я 64 показываю, потому что рассчитываю на другие видеорежимы, в частности 384х304. И для отладки мультиколора тоже интересно глянуть, где бордюр переходит.
Floatspy показывает странные значения при чтении из нечетных портов в диапазоне 0x4000-0x7fff. Линии на тесте BBG тоже не на месте. FloatSpy: читаться должны значения с шины. Т.е. пиксели и атрибуты. Вот я сейчас выбрал 128К, загрузил FloatSpy, нажал T, он мне спустя время выдал Floating bus OK for ULA 128K. Кстати, там у меня изначально показывает IN() BYTE: 0, и во время и после теста тоже. Кстати, для модели 48К картинка совершенно аналогичная, только он там 48К пишет.
BBG я не в курсе, что такое. DarkStar никогда не смотрел (и не знаю, что там мультиколорного, и в чём дефект). Может, был баг, а может модель не та.
В ShockMegademo справа видна дефектная полоса.Про это я уже сказал. А вот то, что посредине ступенька, это или действительно баг (я уже так далеко убежал от последней выложенной версии, что уже не помню). А может, просто неправильно выбрана модель. Хотя если грузить с ленты, то на модель (48, 128 или +3, остальные модели не знаю точно) шок настраивается сам. Тогда был баг. Сейчас этой ступеньки у себя я не вижу. Vectron у меня тоже работает нормально, раньше снег включался для любой модели и не только когда надо, это я у себя несколько дней как поправил, не помню точно уже, но примерно так выглядело, если загрузить в пентагоне.
Я вообще давно не обновлял, потому что очень глубоко забурился в видеовывод: захотел реализовать если не все видеорежимы сразу, то сделать так, чтобы по таблицам они легко могли настраиваться, и добавление нового видеорежима стоило копейки времени и усилий. Даже вроде получилось, осталось только довести до ума гигаскрин для тех режимов, где оно есть. Доделаю не спеша, так и выложу.
Добавлено через 11 часов 36 минут
В демке Binary Love
Явных мультиколоров не обнаружил. Если выбрать не тот фикс, мало что меняется. В одном месте полоски кривые (рисунок из красных кирпичей), в другом полоска на экране дрожит, хотя в правильном фиксе нет её (это где морфинг и около).
Демка Anamnesis, там в меню можно выбирать pentagon/scropion.
Аналогичная ситуация. Полезноа оказалась только, чтобы обнаружить, что в варианте эмулятора флопа с nodelay=0 не грузит эту демку. Пришлось вместе с FastDisk включать NoDelay.
Кстати, если известно хоть что-то реально использующее хардверный гигаскрин по порту EFF7, тоже буду рад получить инфу о таких демах/играх/просмотрах. А то реализовать вроде реализовал (а может и не дореализовал), а проверять не на чем.
Ну вот, собственно, теперь выкладываю версию 206K. Добавлено: Scorpion (с мультиколором), видеорежим 256x192 байт атрибутов на байт пикселей (hardware multicolor), Gigascreen+ (и по порту EFF7 бит 4, и автоопределением програмного гигаскрина). Полупрозрачное меню, индикация текущей модели и объёма памяти в верхнем правом углу. Улучшена загрузка с ленты и с диска, поправлен кое-где мультиколор, исправлено отцепление от захваченной кемпстон-мыши при неактивном окне эмулятора, выделение регистров мышью в отладчике.
При ширине 64 пикселя на бордюр будет. На реальном экране не было столько пикселей.
Это похоже на правду. Я попробовал у себя ширину бордюра в 64 пикселя, и наблюдал то же самое дрожание справа.
FloatSpy: читаться должны значения с шины. Т.е. пиксели и атрибуты. Вот я сейчас выбрал 128К, загрузил FloatSpy, нажал T, он мне спустя время выдал Floating bus OK for ULA 128K. Кстати, там у меня изначально показывает IN() BYTE: 0, и во время и после теста тоже. Кстати, для модели 48К картинка совершенно аналогичная, только он там 48К пишет.
Да, должны читаться значения с шины. Но: по нечетным портам в диапазоне [0x4000;0x8000) они читаются с задержками, и значения дают другие. Посмотрите на скриншот и не нажимайте T (в этом режиме всегда читается порт 0xff). Еще одно замечание: я говорю о модели 48K и выбираю эту модель на вашем эмуляторе на всех тестах.
BBG я не в курсе, что такое.
Смотрите чуть выше в этой же теме, я давал ссылки. Очень полезный тест.
DarkStar никогда не смотрел (и не знаю, что там мультиколорного, и в чём дефект)
Скриншот был приложен в прошлом сообщении. На верхнем бордюре генерируется цветной значок.
Но здесь есть тонкость: когда прерывания ловятся в течение 32-х тактов считая с последнего такта предыдущей инструкции (INT sampling), как это и должно быть, он у меня тоже сползает, если сравнивать с тем, что дает Fuse. Но Fuse сам не безгрешен (и тому у меня набралось уже достаточно примеров), и лучше всего было бы посмотреть на реальной машине, как это должно быть.
Про это я уже сказал. А вот то, что посредине ступенька, это или действительно баг
Здесь ситуация такая. Ступенька по середине экрана -- это проблема самого снапшота. На самом деле ее не видно, но по-другому снять скриншот не получается. А полоса справа -- это тоже из-за ширикого бордюра, и у меня на широком бордюре она тоже видна. Поэтому здесь проблемы нет никакой.
Vectron у меня тоже работает нормально
Тут два пункта: синяя полоса наверху и дрожание бордюра справа внизу. Полоса, очевидно, -- это от размера бордюра (у себя не пробовал). А вот дрожание есть, и его видно на стандартном бордюре (эта линия действительно заканчивается в видимой области), и его быть не должно.
Теперь дополнения.
1) Человечек в SideWize мерцает. Мерцать не должен.
2) Тест на тайминги (см. приложение) показывает, что IR contentions не реализованы вообще.
3) Тест на Z80 (тоже приложен) находит проблемы и на флагах, и на MEMPTR. Хотя на моей реализации, сделанной по вашему же описанию, проходит оба без ошибок.
Vladimir Kladov
11.05.2008, 22:58
по нечетным портам в диапазоне [0x4000;0x8000) они читаются с задержками, и значения дают другие
Задержки по нечётным портам я не учитывал, решил, что для мультиколора это не очень существенно. Если найдётся демка, где существенна, тогда реализую.
IR contentionsПервый раз слышу-вижу. Какие могут быть контенции на IR, это же просто регистры?
Смотрите чуть выше
Теперь увидел. Позднее добавили? У меня новые темы отражаются вверху, без особой надобности вниз не листаю, поэтому не увидел. А тест действительно полезный. После того, как я подправил задержку между бордюром и изображением, сначала вроде BBG пошла, но при этом съехала MDA demo (по фотографии с оригинального реала, пульсы стоят строго симметрично). Тогда я сравнил со спектакулятором, и обнаружил, что Джон утаил секретик, а именно, в описании контенций махонькая ошибка (а он, судя по всему, её нашёл, и у себя поправил). Потом, когда я её поправил, я нашёл ещё одну ошибку, уже на игре Black Lamp мультиколор съехал. Вот поправки (но это не по данным реала, а по данным спектакулятора, получается):
PUSH dd pc:4,sp-1:4,sp-2:3 //BlackLamp old-incorrect:/pc:5,sp-1:3,sp-2:3
OUT (n),A pc:4,pc+1:4,IO:3 //corrected! (BBG)// old-incorrect: pc:4,pc+1:3,IO:4 (like IN A,(n))
И, кстати, после этих поправок на демке EEL (48К) пульсации больше не прыгают ходуном, как в спектакуляторе, а стоят ровненько. Видать, Джон что-то ещё не учёл.
Vectron у меня тоже работает нормально
Тут два пункта: синяя полоса наверху и дрожание бордюра справа внизу. Полоса, очевидно, -- это от размера бордюра (у себя не пробовал). А вот дрожание есть, и его видно на стандартном бордюре (эта линия действительно заканчивается в видимой области), и его быть не должно.Нет, все области дрожания - только из-за широкого бордюра. Достаточно поставить Large (48 пикселей), и все дрожи уходят за край. Кстати, у наших клонов, похоже, видимый бордюр был намного шире ихнего (иначе непонятно как влез режим 384х304, да и на наших мультиколорах демомейкеры область дрожания явно старались сдвигать дальше).
Тест на Z80 (тоже приложен) находит проблемы и на флагах, и на MEMPTR. Хотя на моей реализации, сделанной по вашему же описанию, проходит оба без ошибок.
Вот с этим поподробнее. Я сначала поправил глупую ошибку в ADC16, а потом начал смотреть на LDA I/R, и обнаружил такую штуку. Или этот тест не учитывает баг в Z80 с установкой в флаге P/V значения 1, пока на вход ~INT активен (кроме случая, когда предыдущая команда была EI), независимо от значения IFF2. Либо тест делался на машине с коротким интом (у меня 23, а там могло быть даже 22, и то уже существенно: разница нашлась как раз когда выполнялась загрузка LD A,R, и T было 22). Но это даже не важно. А важно то, что тест несколько некорректен по отношению к командам BIT n,(HL/IX+k/IY+k) - результат зависит от предыдущих тестов. Наверняка автор не знал, как стереть memptr и привести его в начальное состояние перед выполнением тестов. Так вот, если пройти тест LD A,R/I на другом эмуляторе (я использовал EmuZWin 2.7/build 2.8), остановиться и сбросить Z80-снапшот и загрузить в EmuZGL, то дальше все тесты на memptr проходят на ура. LD A R/I я исправлять не буду, т.к. полагаю, что сделал эту команду правильно (есть даже прога какая-то, которая виснет, если баг Z80 не реализован, жаль, не помню, какая именно).
sidewiz я нашёл только в SCL, из чего вывод сделал, что он для Пентагона, мультиколор тут ни при чём тогда. А если это просто кто-то в SCL загнал, то надо оригинальный образ искать (на ВОСе не нашёл).
И вообще, граждане-господа спектрумисты! Надеюсь на вашу помощь (опять с памятью туго). Где-то мне уже разок давали тесты для 384х304 и если не ошибаюсь 512х192, но хоть убей не помню куда задевал. Куда-то сгинули. И ещё нужна какая-нибудь инфа по режиму 16с для пентагона (если такой есть). Есть куча описаний 384х304 атрибут на знакоместо, 512х192 и 256х192 атрибут на байт, и ничего такого 16с. Ну, кроме АТМовского 320х200х16с.
Black_Cat
11.05.2008, 23:10
И ещё нужна какая-нибудь инфа по режиму 16с для пентагона (если такой есть).токо в пенте и есть пока :) , какая-нить инфа есть здесь: http://zx.clan.su/forum/7-28-1 , см. п.п. 4.2 16 color per pixel. К сожалению ничего более подробного нет..
Vladimir Kladov
11.05.2008, 23:12
Хотя кажись уже нашёл описание 16 с или что-то на него похожее. Осталось найти софт для 384х304.
Black_Cat
11.05.2008, 23:15
Осталось найти софт для 384х304. ACEdit, ANSI viewer.
Shadow Maker
12.05.2008, 07:55
Владимир, а Map Maker будет?
Добавлено через 2 минуты
Сайдвайз вот: http://loz.the-pub.org/emu/speccy/s/sidewize.tap.zip
Задержки по нечётным портам я не учитывал, решил, что для мультиколора это не очень существенно. Если найдётся демка, где существенна, тогда реализую.
Вот. Теперь у меня есть что ответить, если спросят зачем понадобился еще один эмулятор Спектрума. ;-)
К слову, а как вы узнаете когда что-нибудь не будет работать именно по этой причине?
Первый раз слышу-вижу. Какие могут быть контенции на IR, это же просто регистры?
Ну, PC, SP и DE -- это тоже просто регистры, вы же по ним задержки считаете. Или не считаете? Да и какое может быть дело ULA до того, из чего составлено значение на адресной шине?
Попробую объяснить. В отличие от короткого цикла чтения в 3 такта, короткий цикл выборки инструкции (opcode fetch) занимает 4 такта. Чтение оп-кода происходит, тем не менее, на 3-м такте, как при обычном чтении. Четвертый такт нужен для обновления памяти: при выборке инструкции увеличивается R0:7 и пара IR кладется на адресную шину.
Теперь вспоминаем, что и циклы чтения, и циклы записи бывают и большего размера плюс есть циклы исполнения, которые не читают не пишут, тоже до пяти тактов длиной, на которых мы, тем не менее, считаем задержки на основании того, что осталось на адресной шине от предыдущего цикла. Так вот выборка -- не исключение, и на каждый дополнительный такт выборки мы получаем задержку со значением IR на адресной шине. PUSH, к слову, -- отличный пример на этот счет.
Позднее добавили?
Да.
После того, как я подправил задержку между бордюром и изображением, сначала вроде BBG пошла, но при этом съехала MDA demo (по фотографии с оригинального реала, пульсы стоят строго симметрично). Тогда я сравнил со спектакулятором, и обнаружил, что Джон утаил секретик, а именно, в описании контенций махонькая ошибка (а он, судя по всему, её нашёл, и у себя поправил). Потом, когда я её поправил, я нашёл ещё одну ошибку, уже на игре Black Lamp мультиколор съехал. Вот поправки (но это не по данным реала, а по данным спектакулятора, получается):
PUSH dd pc:4,sp-1:4,sp-2:3 //BlackLamp old-incorrect:/pc:5,sp-1:3,sp-2:3
OUT (n),A pc:4,pc+1:4,IO:3 //corrected! (BBG)// old-incorrect: pc:4,pc+1:3,IO:4 (like IN A,(n))
И, кстати, после этих поправок на демке EEL (48К) пульсации больше не прыгают ходуном, как в спектакуляторе, а стоят ровненько. Видать, Джон что-то ещё не учёл.
Ничего себе... Давайте по порядку.
MDA demo в нашу память не помещается, мы эмулируем 48K. Поэтому, к сожалению, не могу попробовать.
PUSH. Ну, кроме того, что его пятитактовая выборка -- это общеизвестный (и очень давно) факт, и кроме того, что этот факт прописан в бесчисленном количестве спецификаций, и даже кроме того, что она такая еще в i8080, у таймингов инструкций есть логика.
Логика таймингов PUSH в том, что ему нужно уменьшить SP, и не когда-нибудь, а выложить его уменьшенное значение на адресную шину уже на первом такте следующего цикла (чтения). (Если вы посмотрите на тайминги 16-разрядных арифметических операций Z80 или i8080, вы увидите, что они никогда не проходят без потерь.) А вот четырехтактовое чтение PUSH действительно ни к чему.
У POP судьба счастливее -- он может выложить SP на адресную шину сразу как есть, поэтому такт не теряет.
OUT. У Z80 нет трехтактового вывода в порт. Цикл вывода выглядит следующим образом: T1 T2 Tw T3, где Tw добавляет сам процессор, и никакой ULA укоротить этот цикл не может.
И, кстати, а как вы считаете задержки для такого цикла вывода?
У меня выборка PUSH в пять тактов и трехтактовых циклов вывода в порт нет. При этом Black Lamp, EEL demo и BBG работают как положено. (Спасибо за ссылки на первые две, я их раньше не пробовал. Black Lamp смотрится очень красиво.)
Нет, все области дрожания - только из-за широкого бордюра. Достаточно поставить Large (48 пикселей), и все дрожи уходят за край.
Если у вас при ширине бордюра в 24 такта окончание этой линии уходит за правый край, то это тем более проблема. У меня при таком же бордюре этот кончик видно, на Fuse видно, и на реале видно. Причем видно не у края, а явно в пределах этих 24 тактов. И, разумеется, не дрожит.
Кстати, у наших клонов, похоже, видимый бордюр был намного шире ихнего
Это факт. На тех железных Спектрумах, которые побывали у меня у всех ширина бордюра была 32 такта. Поэтому поначалу стандартные размеры на эмуляторах выглядели для меня странно.
Или этот тест не учитывает баг в Z80 с установкой в флаге P/V значения 1, пока на вход ~INT активен (кроме случая, когда предыдущая команда была EI), независимо от значения IFF2. Либо тест делался на машине с коротким интом (у меня 23, а там могло быть даже 22, и то уже существенно: разница нашлась как раз когда выполнялась загрузка LD A,R, и T было 22). Но это даже не важно. А важно то, что тест несколько некорректен по отношению к командам BIT n,(HL/IX+k/IY+k) - результат зависит от предыдущих тестов. Наверняка автор не знал, как стереть memptr и привести его в начальное состояние перед выполнением тестов. Так вот, если пройти тест LD A,R/I на другом эмуляторе (я использовал EmuZWin 2.7/build 2.8), остановиться и сбросить Z80-снапшот и загрузить в EmuZGL, то дальше все тесты на memptr проходят на ура. LD A R/I я исправлять не буду, т.к. полагаю, что сделал эту команду правильно (есть даже прога какая-то, которая виснет, если баг Z80 не реализован, жаль, не помню, какая именно).
Теперь для меня что-то новое открылось. Какие есть материалы по этому особенному значению P/V при активном ~INT? Я имею в виду, откуда ноги растут от этой информации и на чем можно проверить?
У меня ~INT держится 32 такта. При этом в тесте на флагах LD A, I выполняется минимум на 127-м такте, LD A,R -- на 15-м. На 22-м не исполняется никогда. Во Fuse ровно то же (вообще, мы с ним по тактам совпадаем точно, расхождений еще никогда не видел). Обе команды возвращают в P/V IFF2 и тест проходят. Не знаю, что думать... Может быть действительно этот кристалл от NEC особенный в этой части. Но чтобы аргументировать против такого теста нужны факты или контрпримеры, а их пока нет.
Теперь с MEMPTR. Я не знаю как получаются контрольные числа для тестов на флаги, но в тестах на MEMPTR эти числа -- это значения самого MEMPTR. Значение его получается с помощью BIT b, (HL) и CPD. (Кстати, а какое отношение имеют BIT b, (i+d) к предыдущим значениям MEMPTR?) Как вы понимаете, в тесте проверяются и те инструкции, которые дают в MEMPTR значения, не зависящие от его прежних значений. Как вам кажется, насколько вероятно, что автор не знал как инцилизировать этот регистр?
О BIT b, (HL) в тестах на флаги я могу сказать точно: MEMPTR инциализируется. Инструкция 0xCB46 по адресу 0x8858. Значение MEMPTR во время выполнения всегда 0x8855. Объяснить это значение очень просто. Если вы посмотрите на код с адреса 0x884c, то увидите, что исполняется специальный код, который записывает адрес начала процедуры тестирования инструкции (0x8855) в операнд инструкции CALL (по адресу 0x8928), которая эту процедуру вызывает. Я думаю, вам известно, что эта инструкция присваивает MEMPTR адрес перехода. Таким образом к BIT b, (HL) управление приходит всегда с одним и тем же значением MEMPTR.
Ну и кроме того, есть все та же логика. Если бы MEMPTR не инициализировался и получал бы непредсказуемые значения, тогда прохождение теста менялось от запуска к запуску, зависело бы от порядка прохождения тестов (скажем, сначала на MEMPTR, а потом на флаги), причем даже на реальном кристалле.
В общем, вспоминайте, пожалуйста, что за программка висла на LD A, I/R.
sidewiz я нашёл только в SCL, из чего вывод сделал, что он для Пентагона, мультиколор тут ни при чём тогда.
Прекрасно работает на нашем 48K. Мультиколор, конечно, ни при чем, но речь все еще о таймингах. Эта игрушка известна как очень чувствительная к правильным таймингам. Если во время игры спрайты мелькают, значит есть проблема.
Vladimir Kladov
12.05.2008, 15:22
А, всё, не надо. Нашёл софтинки. На работе в архиве завалялись. Пойду теперь сваи ашипки исправлять. (это я про софт для расширеных режимов)
Добавлено через 2 часа 48 минут
как вы узнаете когда что-нибудь не будет работать именно по этой причинеКогда выясняется, что что-то не работает, изучаются конкретные причины. До сих пор срабатывало. А вот с задержкой по нечётным портам, раз они не влияют на мультиколорные демки, и не используется эффект в играх, то и смысла особого нет, разве что для куражу. Я эмулятор делаю, чтобы можно было поиграть и поработать, потому что эмуляторов, в которых можно поделать и то, и это, и при этом удобно, пока что нет, при том что число эмуляторов спектрума уже наверняка приблизилось к тысяче. Хорошо тем, у кого есть реал (и умение+желание с ним возиться). Но и реальщик оказывается часто в дурацкой ситуации: моделей куча, доработок и периферии ещё большая куча, всё себе навешивать - жизни не хватит. В эмуляторе можно побаловаться с возможностями, которых нет возможности привозможнить к своему реалу. А вообще, я эмулятор EmuZWin начинал делать исключительно по той причине, что все эмуляторы, с которыми я имел дело до этого, не умели нормально клавиши PC перенаправлять на клавиши/джойстики Спектрума. Хотя дело-то плёвое, но неудобно же - в одной игруле ZXQA1, в другой QAOPN, в третьей совершенно неудобный синклер джойстик или InterfaceII.
Попробую объяснить. В отличие от короткого цикла чтения в 3 такта, короткий цикл выборки инструкции (opcode fetch) занимает 4 такта. Чтение оп-кода происходит, тем не менее, на 3-м такте, как при обычном чтении. Четвертый такт нужен для обновления памяти: при выборке инструкции увеличивается R0:7 и пара IR кладется на адресную шину.Я не схемотехник и не радиолюбитель и мне вообще непонятно, почему выборка из памяти занимает 3 такта. А где написано про задержки IR? Я что-то такого нигде не встречал. Если рассуждать так, то во всех инструкциях, точнее, в циклах выборки опкода (я так понял, для инструкций без префикса 1 раз, а с префиксами - 2, в соответствии с числом изменений R), надо тогда pc:4 заменять на pc:3,IR:1. Так? Почему же это не описано, вероятно, только потому, что в случае I=$40..$7F оригинальный Спектрум нормально вообще не функционирует, и смысла в таком сочетании нет вообще, наверное? (И тогда зачем эту ситуации вообще эмулировать, понта ради, что ли). Мне вот, к примеру, не хочется навешивать много кода, выполняющегося на каждой инструкции. Я жутко рад, что в режиме max speed можно быстро пробегать несущественные участки демок или rzx-записей (да и лента быстрее грузится), и каждая такая добавка ударяет по ускорению. А ещё я могу добавить, что я не эмулирую экран с точностью до цикла. В идеальном случае, нужно было бы перед выполнением записи в память (не перед всей командой, а именно перед циклом записи байта в память) выполнять эмуляцию луча экрана, от последней точки, до новой. Я сознательно упрощаю ситуацию, и делаю такую эмуляцию перед всей инструкцией, правда, с упреждением 8 тактов (т.е. луч как бы на 8 тактов бежит вперёд времени). Этого хватает на все известные мне мультиколорные демки, и при этом достигается неплохая скорость эмуляции.
Логика таймингов PUSH в том, что ему нужно уменьшить SP, и не когда-нибудь, а выложить его уменьшенное значение на адресную шину уже на первом такте следующего цикла (чтения). (Если вы посмотрите на тайминги 16-разрядных арифметических операций Z80 или i8080, вы увидите, что они никогда не проходят без потерь.) А вот четырехтактовое чтение PUSH действительно ни к чему.
Для меня здесь критерием правильности является демка, BBG, кстати. Она идёт именно так, как должна идти, причём конкретно обнаруживается инструкция PUSH BC: на такте 14425 она началась (задержка 4), и только при исправлении выше для push прошло ровно столько же тактов, сколько показал отладчик спектакулятора. В итоге вывод: выборка может и 5-тактная, но ULA ловит адрес тогда на втором такте второго цикла, а не на третьем. Результат-то: BBG идёт, а без исправления - нет. Здесь-то явно никаких IR задержек нет, иначе просто был бы снег на экране, все прочие вмешательства вроде погоды на Марсе исключены: одна инструкция PUSH BC, с точно известного такта, точно известна последовательность задержек с этого такта (43210065432100...), точно известно, что в итоге инструкция должна отработать за 16 тактов. Официальное решение, не признанное Джоном, гласит 5+3+4(задержка)+3=15, остаётся только решение 4+3+5(задержка)+4=16.
как вы считаете задержки для такого цикла вывода
3 - это не задержка. Уравнение простое: известно, что инструкция обычно выполняется за 11 тактов. Для неё написано pc:4,pc+1:4,io. Вопрос, чему (обычно) равно io? 11-4=3. Я так полагаю, что если есть задержка, то она добавляется где-то на этих 3х тактах. Предполагаю, что на первом из этих трёх. Вроде бы ничего сломалось, и кое-что (и даже многое) исправилось. Значит, ответ скорее верный, чем не верный. Вот такой у меня ход рассуждений. Скажете, глупо? Да, глупо, но документации-то нет. Где прочитать, чему равен этот Tw, и что такое T3, если это не вывод в порт?
Для проверки 48 я ещё использую KAZ6 и MEGACLR (ну полное угрёбище, даже звука нет, но важен бордюрный эффект), ну и конечно shock, без него оно никак, конечно.
Я имею в виду, откуда ноги растут от этой информации и на чем можно проверить?Да если бы я уже помнил. В голове дыра, старый стал, всё забываю, именя, явки. Но где-то проскакивало. Да даже не источник важен, а то, что какая-то игруля или демка висла, пока я этот баг не реализовал. Если попадётся, сообщу.
Теперь с MEMPTR. Я не знаю как получаются контрольные числа для тестов на флаги, но в тестах на MEMPTR эти числа -- это значения самого MEMPTR. Значение его получается с помощью BIT b, (HL) и CPD. (Кстати, а какое отношение имеют BIT b, (i+d) к предыдущим значениям MEMPTR?) Как вы понимаете, в тесте проверяются и те инструкции, которые дают в MEMPTR значения, не зависящие от его прежних значений. Как вам кажется, насколько вероятно, что автор не знал как инцилизировать этот регистр?
Сначала определимся, о чём я говорил. Тесты 2 на мемптр отдельно я вчера не гонял. Я имею в в иду, что тесты на bitNhl. должны учитывать memptr, т.е. это уже тесты на memptr. Я сегодня сгонял этот тестик ещё пару раз, и подивился дважды. Даже не знаю что и думать. Дохожу в другом эмуляторе (EmuzWin2.7) до теста ld a,r/ld a,i, сбрасываю z80, загружаю в GL - проходит все тесты дальше. Но самое интересное: если снова нажать 1 в GL и прогнать все тесты - опять проходит! И снова проходит (я правда, для чистоты эксперимента вырубил эмуляцию бага, и LD AR, LD AI проходят сами по себе). Загружаю образ с ленты - опять не проходят... Это мистика №1. Ладно, делаю наоборот. Раз баг Z80 отключён, у меня должно быть то же, что и в той версии. Прохожу в GL до этого же примерно места, сбрасываю в Z80, загружаю в старом - и бац! - в нём перестаёт проходить тест, failed на на том же месте в bit n,..., при том, что раньше проходил. И опять, повторный запуск тестов 1 - и они опять не проходят. Ну - мистика, одним словом. Как через снапшот z80 можно передать свойства проходимости или не проходимости теста, я просто не понимаю. В тесте явно где-то ошибка.
Далее, прогнал отдельно тесты 2, обнаружил баги на паре команд, всё проходит. Ну, думаю, раз bit n,... - это частично memptr и в старом эмуле эти тесты проходили, то уж memptr-то он пройдёт. Не тут-то было: ни один тест не пройден (во как!). А как же тогда тесты на bit nHL в тестах 1? Они как тогда пройдены? Надо полагать, этот тест вообще ни на что не годится, с такими-то глюками.
имеют BIT b, (i+d) к предыдущим значениям MEMPTR?
Я понял так, что автор тестов просто не пытался изолировать тесты от предыдущих, вполне возможно, что у него просто все последующие тесты напрямую могут зависеть от предыдущих. В корзину его, однозначно.
Эта игрушка известна как очень чувствительная к правильным таймингам. Если во время игры спрайты мелькают, значит есть проблема.Проблема, и очень большая. На Спектакуляторе мигает, и значит, эта же проблема наблюдается и в нём. И в Spin-е тоже. Других доступных мне эмуляторов с отладчиком, в которых бы он не мигал, не существует. Хвалёный klive вообще сбрасывается (да в нём и отладчика-то нет, если бы и не сбрасывался). Соответственно, проблема останется неразрешимой в пределах моего приближённого решения. А делать приближение менее приближённым ради одной не очень интересной игрушки не очень интересно (особенно, когда нет интересной возможности сравнить с лучшим решением, и непонятно куда приближаться вперёд).
Shadow Maker
12.05.2008, 18:52
11-4=3
Я мож чего не понимаю и вообще далек от мысли... Это вот как? Или 11-4-4?
Vladimir Kladov
12.05.2008, 22:06
11-4-4Именно так. Окошечко махонькое, пока набираешь, оно всё куда-то уплывает, уже не видно, напечатал, не напечатал. Ну, здесь понятно, арифметика простая.
Добавлено через 14 секунд
Выкладываю версию 208К. Главное: добавлено 4 видеорежима, в том числе 384х304 и 256х192х16.
Shadow Maker
12.05.2008, 22:32
Мм, ну там КартоСтроитель в планах есть? А то не было ответа на вопрос.
Проблема, и очень большая. На Спектакуляторе мигает, и значит, эта же проблема наблюдается и в нём. И в Spin-е тоже. Других доступных мне эмуляторов с отладчиком, в которых бы он не мигал, не существует. Хвалёный klive вообще сбрасывается
в Sidewize присутствует подвязка к чтению из порта #FF
Higgins
Теперь для меня что-то новое открылось. Какие есть материалы по этому особенному значению P/V при активном ~INT? Я имею в виду, откуда ноги растут от этой информации и на чем можно проверить?
Вот здесь (http://z80.info/zip/z80cpu_um.pdf) об этом ясно сказано, стр. 98-99, в описании команд LD A,I и LA A,R.
Как видно, с некоторых пор данное явление задокументировано официально (т.е. описано не как баг, а как особенности работы).
Vladimir Kladov
Для меня здесь критерием правильности является демка, BBG, кстати. Она идёт именно так, как должна идти, причём конкретно обнаруживается инструкция PUSH BC: на такте 14425 она началась (задержка 4), и только при исправлении выше для push прошло ровно столько же тактов, сколько показал отладчик спектакулятора. В итоге вывод: выборка может и 5-тактная, но ULA ловит адрес тогда на втором такте второго цикла, а не на третьем. Результат-то: BBG идёт, а без исправления - нет. Здесь-то явно никаких IR задержек нет, иначе просто был бы снег на экране, все прочие вмешательства вроде погоды на Марсе исключены: одна инструкция PUSH BC, с точно известного такта, точно известна последовательность задержек с этого такта (43210065432100...), точно известно, что в итоге инструкция должна отработать за 16 тактов. Официальное решение, не признанное Джоном, гласит 5+3+4(задержка)+3=15, остаётся только решение 4+3+5(задержка)+4=16.
Имхо, такое решение, вкупе с несуществующим 3х-тактовым циклом ввода/вывода, не совсем корректно. Это обыкновенный workaround. Тов. Джон, видимо, долго анализировал большой объем кода различных программ/демок и нашел где можно сделать изменения так, чтобы ничего не испортить, и даже улучшить.
Тем не менее, workaround - он и в Африке... Но самое главное здесь то, что Higgins однозначно утверждает
У меня выборка PUSH в пять тактов и трехтактовых циклов вывода в порт нет. При этом Black Lamp, EEL demo и BBG работают как положено. (Спасибо за ссылки на первые две, я их раньше не пробовал. Black Lamp смотрится очень красиво.)
что у него проблем в вышеуказанных демках и тестах нет, и при этом безо всяких решений-затычек. Почему-то Вы, то ли сознательно, то ли нет, вообще пропустили это замечание. Но кое-где (http://zx.pk.ru/showpost.php?p=132955&postcount=51) Вы сами же сказали мудрую фразу:
Всё получится, если всё сделать аккуратно
Это Вам не в упрек. Это просьба не закрывать глаза на факты, тогда не придется переиначивать другие факты (например, 4х-тактовые циклы ввода/вывода и "лишний" такт в M1 у PUSH). EmuZGL уже гораздо лучше своего предшественника, многим нравится и мне в том числе. Так не идите же на поводу у любителей понаставить затычки "абы все известные проги работали правильно", а просто делайте красиво и хорошо. Увидев EmuZGL я понял, что Вы можете, когда хотите :).
P.S. При желании попробуйте внести коррективы в как минимум одну команду (речь об EX (SP),HL и, возможно еще об OTIR/OTDR) в соответствии с этим (http://zx.pk.ru/attachment.php?attachmentid=7937&d=1209387083) и этим (http://zx.pk.ru/showpost.php?p=133381&postcount=58) (правда я не понял, что там насчет задержек в M1?).
P.P.S.
Higgins
Так вот выборка -- не исключение, и на каждый дополнительный такт выборки мы получаем задержку со значением IR на адресной шине. PUSH, к слову, -- отличный пример на этот счет.А можно с этого места поподробнее? Т.е. Вы хотите сказать, что из-за цикла регенерации более одного такта процессор также задерживается? Хотелось бы прояснить эти тонкости. По WOS видно, что при циклах доступа к памяти Z80 более 3-х тактов - ULA 48k его задерживает и далее, считая каждый лишний такт доступом к той же памяти, вплоть до следующего цикла доступа к памяти; при этом циклы M1 неприкосновенны - присутствует лишь задержка непосредственно перед выборкой инструкции. Получается, и для M1 у ULA 48k есть некий лимит?
А где написано про задержки IR?
http://www.shadowmagic.org.uk/cssfaq/reference/48kreference.htm
Поищите строки, содержащие "ir:" (без кавычек).
Если рассуждать так, то во всех инструкциях, точнее, в циклах выборки опкода (я так понял, для инструкций без префикса 1 раз, а с префиксами - 2, в соответствии с числом изменений R), надо тогда pc:4 заменять на pc:3,IR:1. Так?
Нет, четыре такта -- чтение плюс такт на обновление памяти -- выполняются в любом случае. И даже если значение I лежит в диапазоне [0x40; 0x80), на четвертом такте задержки нет. А вот если цикл выборки длиннее этих четырех тактов, то на каждом дополнительном такте, начиная с пятого и до конца цикла, ULA будет взводить ~CLK, т.е. останавливать процессор. (Может показаться странным это особенное поведение T4 цикла выборки, но на самом деле все логично: этот такт начинается при низком уровне ~MREQ, который в течение такта поднимается, и на следующем такте ULA уже смотрит на адресную шину.)
Почему же это не описано, вероятно, только потому, что в случае I=$40..$7F оригинальный Спектрум нормально вообще не функционирует, и смысла в таком сочетании нет вообще, наверное?
Тот же Vectron использует это как визуальный эффект. Без всяких последствий.
(И тогда зачем эту ситуации вообще эмулировать, понта ради, что ли). Мне вот, к примеру, не хочется навешивать много кода, выполняющегося на каждой инструкции. Я жутко рад, что в режиме max speed можно быстро пробегать несущественные участки демок или rzx-записей (да и лента быстрее грузится), и каждая такая добавка ударяет по ускорению.
Да, интересно было бы сравнить предельные скорости эмуляции. Сейчас сравнивать родную линуксовую сборку с чем-то работающим под Wine было бы неправильно, но на перспективу идея годится.
С другой стороны, в моем случае, насколько я могу умозрительно оценить реализацию, введение задержек на IR не могло ощутимо повлиять на производительность.
Для меня здесь критерием правильности является демка, BBG, кстати. Она идёт именно так, как должна идти, причём конкретно обнаруживается инструкция PUSH BC: на такте 14425 она началась (задержка 4), и только при исправлении выше для push прошло ровно столько же тактов, сколько показал отладчик спектакулятора. В итоге вывод: выборка может и 5-тактная, но ULA ловит адрес тогда на втором такте второго цикла, а не на третьем. Результат-то: BBG идёт, а без исправления - нет.
Даже не знаю как прокомментировать...
В логике (уже который раз к ней обращаюсь) есть такие аксиомы: из истины следует истина, а из лжи может следовать что угодно. Применительно к теме это означает, что даже если реализация эмулятора не верна, то это еще не значит, что тест BBG на ней не будет правильно работать. И обратно: тот факт, что после некоторых правок тест BBG стал правильно работать, еще не значит, что сами эти правки верны.
Я вас отлично понимаю, когда вы говорите, что не стремитесь к абсолютной точности эмуляции, однако это не может делать из таких рассуждений аргумент в обсуждении правильной реализации.
Здесь-то явно никаких IR задержек нет, иначе просто был бы снег на экране, все прочие вмешательства вроде погоды на Марсе исключены: одна инструкция PUSH BC, с точно известного такта, точно известна последовательность задержек с этого такта (43210065432100...), точно известно, что в итоге инструкция должна отработать за 16 тактов. Официальное решение, не признанное Джоном, гласит 5+3+4(задержка)+3=15, остаётся только решение 4+3+5(задержка)+4=16.
Задержек на IR нет.
Я приложил трейсинг пары рабочих фреймов теста BBG. Там же снапшот состояния, с которого трейсинг стартовал. Формат такой: до двоеточия стоит адрес инструкции, после двоеточия следует полный оп-код инструкции, в скобках указан номер такта во фрейме до исполнения инструкции.
Не забудьте пропустить первые фреймы синхронизации.
3 - это не задержка. Уравнение простое: известно, что инструкция обычно выполняется за 11 тактов. Для неё написано pc:4,pc+1:4,io. Вопрос, чему (обычно) равно io? 11-4=3. Я так полагаю, что если есть задержка, то она добавляется где-то на этих 3х тактах.
Я имел в виду, что задержки вывода в порт считаются по паттернам. Все эти паттерны подразумевают, что цикл вывода длиной в 4 такта.
Для проверки 48 я ещё использую KAZ6 и MEGACLR (ну полное угрёбище, даже звука нет, но важен бордюрный эффект), ну и конечно shock, без него оно никак, конечно.
За KAZ6 спасибо.
С MEGACLR странная история. На Higgins и Fuse в режиме 48K после загрузки черный экран без признаков жизни. На Fuse в режиме 128K прокручивает снизу вверх текст из цветных квадратов, без всяких бордюрных эффектов. По описанию ("угребище") -- похоже, но тем не менее.
Если попадётся, сообщу.
Да, пожалуйста.
Надо полагать, этот тест вообще ни на что не годится, с такими-то глюками.
На всякий случай дам ссылку:
http://www.worldofspectrum.org/forums/showthread.php?t=20345
Я понял так, что автор тестов просто не пытался изолировать тесты от предыдущих, вполне возможно, что у него просто все последующие тесты напрямую могут зависеть от предыдущих. В корзину его, однозначно.
Попробовал убрать влажок H из инструкции AND. Тест на флаги это обнаружил, на остальных инструкциях ошибок не дал. Тест на MEMPTR тоже ошибок не дал.
Попробовал изменить вычисление значения MEMPTR для LDIR/LDDR чтобы прибавлял 2 к значению PC. Тест на флаги прошел без ошибок. В тесте на MEMPTR LDIR (BC > 1) и LDDR (BC > 1) дали ошибки, все остальные инструкции прошли без ошибок.
Соответственно, проблема останется неразрешимой в пределах моего приближённого решения. А делать приближение менее приближённым ради одной не очень интересной игрушки не очень интересно (особенно, когда нет интересной возможности сравнить с лучшим решением, и непонятно куда приближаться вперёд).
Ну, вам в помощи здесь никто не отказывает. А игрушка... не хуже других. ;-)
Вот здесь об этом ясно сказано, стр. 98-99, в описании команд LD A,I и LA A,R.
Как видно, с некоторых пор данное явление задокументировано официально (т.е. описано не как баг, а как особенности работы).
Минуточку. В этом документе сказано, что если была прервана одна из этих инструкций, т.е. прерывание было принято перед ее исполнением, то флаг P/V получит уже сброшенное значение IFF2. Более того, сайте WOS подчеркнуто, что это обстоятельство является следствием того факта, что прерывания начинаются со сброса IFF1 и IFF2. То есть это не то что на баг не похоже, это даже не особый случай.
А Владимир пишет совсем по-другому:
Или этот тест не учитывает баг в Z80 с установкой в флаге P/V значения 1, пока на вход ~INT активен (кроме случая, когда предыдущая команда была EI), независимо от значения IFF2.
А можно с этого места поподробнее? Т.е. Вы хотите сказать, что из-за цикла регенерации более одного такта процессор также задерживается? Хотелось бы прояснить эти тонкости. По WOS видно, что при циклах доступа к памяти Z80 более 3-х тактов - ULA 48k его задерживает и далее, считая каждый лишний такт доступом к той же памяти, вплоть до следующего цикла доступа к памяти; при этом циклы M1 неприкосновенны - присутствует лишь задержка непосредственно перед выборкой инструкции. Получается, и для M1 у ULA 48k есть некий лимит?
Обновление памяти -- это всегда только один такт в цикле выборки. Больше оно не длится. Но само значение IR остается на адресной шине. И пока I лежит за пределами области задержек, это не заметно.
На сайте WOS задержки на IR просто не учтены, M1 не является чем-то особенным с точки зрения ULA, если не обращать внимания на уровень ~MREQ в начале T4.
Vladimir Kladov
14.05.2008, 19:35
Мм, ну там КартоСтроитель в планах есть?
Автоматический или полуручной интересует? Автомат почти никак нельзя сделать внешним, в виде отдельного экзешника. А полуручной - запросто.
Может подскажете, с чем может быть связано подрагивание изображения в полноэкранном режиме?
Обновить драйверы OpenGL, то бишь взять драйверы от производителя видеокарты, а не от микросовт. Или посмотреть, нет ли на переднем плане чужого окошка типа часиков, которое постоянно пытается себя показать поверх окна OpenGL.
Вот здесь об этом ясно сказано, стр. 98-99, в описании команд LD A,I и LA A,R.
Нет, там описано только официальное поведение: "During LD A, I and LD A, R instructions, the P/V Flag is set with the value
of the interrupt enable flip-flop (IFF2) for storage or testing." И там ничего не говорится о ситуации, когда в P/V попадает 1 при активном INT. Так что это именно баг, противоречащий официальному описанию.
введение задержек на IR не могло ощутимо повлиять на производительность.Ну как же не могло? Вот например PUSH dd - pc:4,ir:1,sp-1:3,sp-2:3, в случае отсутствия задержек по IR (т.е. когда I <$40 или > $7F), совершенно эквивалентно pc:5,sp-1:3,sp-2:3. А в случае, когла задержка такая нужно, на экране всё равно снег. Да ещё и регенерация нарушена. Т.е. ситуация для Спектрума совершенно недопустимая. Если предположить, что включили ненадолго, чтобы просто получить снег, то никакого мультиколора всё равно не увидим в этот момент, опять же только снег. Нет, для целей эмуляции Спектрума эмулировать задержки по IR не надо.
Вот, я реализовал правильно IO контенции, и всё пошло (кроме sidewize) как и должно, и задержки IR не потребовались. Что касается сидвиз, то я конечно понимаю, что ничего не понимаю в том, какие байты именно и как долго читаются улой на шину, чтобы правильно сэмулировать in по несуществующему порту, но floatspy говорит, что шина в порядке. Значит, этот тест тоже надо выкинуть в корзину.
P.S. Насчёт интры megaclr я извиняюсь, это пентагоновская интра, и мультиколор там пентагоновский.
Вопросы к народу. Я нашёл, что в Скорпионе турбо выключается просто чтением из порта 1FFD. А включается как - так же?
Обнаружил, что неправильно понял раскладку битов по порту EFF7. Бит 0 оказался ответственным за режим 256х192х16с, а как же тогда включать атрибут на байт, тумблером только? Ещё бит 4 получается, отвечает за турбу в пентагоне, причём 0-вкл, 1-выкл. Верно? (хотя мне это не нравится совершенно. Получается, что порт надо инициализировать 1 в бите 4, или при ресете включать турбу). Я пока не меняю, оставил как в прошлый раз.
Я сейчас выкладываю версию 211К. В основном небольшие поправки, но добавлена гамма-коррекция, и автоматическое выезжание меню.
Обновление памяти -- это всегда только один такт в цикле выборки. Больше оно не длится. Но само значение IR остается на адресной шине. И пока I лежит за пределами области задержек, это не заметно.Вот оно как. Раскрыл глаза пошире и увидел на диаграммах то, что раньше не видел :) Очередное Вам спасибо.
http://www.shadowmagic.org.uk/cssfaq...kreference.htmСпасибо за правильную ссылку. Наконец-то и описание EX (SP),HL без ошибок, и учет IR:x. Я все не мог понять, почему (в смысле зачем) ULA 48k отличает M1 от обычного доступа к памяти. А оказывается, не отличает. Теперь многое встало на свои места.
И там ничего не говорится о ситуации, когда в P/V попадает 1 при активном INT. Так что это именно баг, противоречащий официальному описанию.Вы имеете в виду при активном ~INT, но запрещенных прерываниях?
Если прерывания разрешены, то в P/V должна попадать 1, это документированное поведение. Если прервана сама команда получения IFF2, тогда 0. Я не зря указал нужные страницы, там написано
If an interrpt occurs during execution of this instruction, the Parity flag contains a 0
Но похоже мы не понимаем друг друга. Уточните, пожалуйста, подробности "бага", о котором Вы говорите.
Вопросы к народу. Я нашёл, что в Скорпионе турбо выключается просто чтением из порта 1FFD. А включается как - так же?
Включается вроде чтением из #7FFD.
Vladimir Kladov
14.05.2008, 20:39
Вы имеете в виду при активном ~INT, но запрещенных прерываниях?Вообще-то при любых. Просто сигнал инта сам учитывается, только кроме случая, когда предыдущая команда была EI.
Включается вроде чтением из #7FFD.Точно? Или коза в огороде? Я же горы документации перерыл, практически ничего не нашёл. Особенно беполезно читать фирменные описания, там про это вообще ни слова.
Добавлено через 10 минут
в Sidewize присутствует подвязка к чтению из порта #FF
Не нашёл ни одного ввода из нечётных портов. Если бы они были, наверняка долго искать не пришлось бы.
Цитата:
Сообщение от ARTi
Включается вроде чтением из #7FFD.
Точно? Или коза в огороде? Я же горы документации перерыл, практически ничего не нашёл.
Turbo включается чтением из порта #7ffd,
выключается чтением из порта #1ffd
и переключается при нажатии кнопки "Turbo/Normal".
Кнопка опрашивается 50 раз в секунду.
(Это всё видно из схемы ;) )
Точно? Или коза в огороде? Я же горы документации перерыл, практически ничего не нашёл. Особенно беполезно читать фирменные описания, там про это вообще ни слова.
Взято отсюда (http://zx.pk.ru/showpost.php?p=19178&postcount=69) (первоначально), а также отсюда (http://zx.pk.ru/showpost.php?p=11765&postcount=3) и отсюда (http://zxdn.narod.ru/hardware/dv0asc7f.txt). Проверка информации в www.google.com очень эффективна, и никаких коз.
Сообщение от goodboy
в Sidewize присутствует подвязка к чтению из порта #FF
Не нашёл ни одного ввода из нечётных портов. Если бы они были, наверняка долго искать не пришлось бы.
в оригинале по адресу 40180
BC,#40FF
E,#40
A,R
IN A,(C)
CP E
JR NZ ( на адрес где A,R)
Vladimir Kladov
15.05.2008, 05:59
в оригинале по адресу 40180
BC,#40FF
E,#40
A,R
IN A,(C)
CP E
JR NZ ( на адрес где A,R)
А у меня фигня какая-то
LD BC,40FF
E,40h
DEC E
LD A,E
JR NZ,9CF9
NOP
NOP
...
Попробую заменить.
Добавлено через 11 минут
также отсюда и отсюда
ой, что=то совсем интересное... Где бы поподробнее почитать про чтение 7FFD через порты аюгрека... Я схемы не понимаю, они для меня молчат. И что? Кто-то понимает японские иероглифы? Все врубаются в нотую азбуку? Или все умеют программировать? Хотите нормальныъ эмуляторов - пишите нормальные доки. Авторам эмуляторов не надо рассказывать какие ноги у каких микросхем резать и припаивать. Нам надо по-простому: при выводе бита N в порт P впечатывается страница X. При выполнении инструкции по адресу A происходит такое-то явление. А ноги, хвосты, канифоль - мне это неинтересно.
ram_scan
15.05.2008, 07:59
А у меня фигня какая-то
Нам надо по-простому: при выводе бита N в порт P впечатывается страница X. При выполнении инструкции по адресу A происходит такое-то явление. А ноги, хвосты, канифоль - мне это неинтересно.
Вот и напрасно "неинтересно". Правильно работающий эмулятор устройства можно разработать только хорошо представляя как эмулируемое устройство внутри работает.
А по идеологии "вывод бита N в порт P" потом как раз и начинается всякая мистика.
PS: кстати, даже пресловутый memptr который с боями "открыли" не так давно спокон веку был нарисован на блок-схеме i8080. И он название даже официальное имеет, "M" :-) Вот это к вопросу как раз о канифоли. Загляни разработчик эмулятора поглубже в документацию - половину проблем бы отшибло.
Vladimir Kladov
15.05.2008, 12:56
вот оригинал
можете удалить, я скачал на всякий случай. Впрочем, работает теперь как надо (но пришлось одну строчку подправить). И заодно нашёл, что этот tzx какой-то не такой, и у меня почему-то не грузится. Ага, непонятки в описании TZX. Пишут длина 10, не указывают что 16-ричное, т.е. 16, хотя сверху не написано явно, что формат длины десятичный. Оно вроде бы и не надо, длина обычно несколько байтов, но вот в этом случае оказывается надо.
Правильно работающий эмулятор устройства можно разработать только хорошо представляя как эмулируемое устройство внутри работает.Но для этого необязательно читать схемы. Вы машину водите? А двигатель разбирать умеете (а потом собирать, и чтобы гаек лишних не оставалось?) У меня математическое образование. Как думаете, сколько всякой ненужной ерунды удерживает моя голова? Вы, например, помните определение производной функции в точке? А я помню... Я ещё когда-то и преподавал это в вузе... Для того чтобы написать эмулятор, надо иметь толковое описание устройства. Схема не всегда поможет, там есть элементы интегральной логики, из схемы вам никто не расскажет, как работает AY или ULA. То, что там было нарисовано на схеме процессора Z80, можете выкинуть в корзину и забыть. Из этой принципиальной схемы логику memptr узнать невозможно. Только хитростью boo-boo, сумевшего подобрать тесты, расколовшие этот регистр. И, кстати, далеко не всегда поведение memptr укладывается в нормальную человеческую логику.
ой, что=то совсем интересное... Где бы поподробнее почитать про чтение 7FFD через порты аюгрека... Я схемы не понимаю, они для меня молчат. И что? Кто-то понимает японские иероглифы? Все врубаются в нотую азбуку? Или все умеют программировать?
Родной, в той статье со схемой в конце все, что надо, есть. Статья совсем маленькая, не потрудитесь дочитать до конца. Я ее привел не как основной источник, а как подтверждающий, тем более она настолько мала, что мне и в голову не пришло уточнять конкретное в ней место. Так что не надо придираться.
Хотите нормальных эмуляторов - пишите нормальные докиНе понял, давайте-ка поподробнее. Это что, Вы тут делаете нам всем одолжение?
Разговор был о том, что информация верна и что это легко проверить при помощи простых и доступных средств (если у Вас есть Интернет). А не о том, что мои высказывания каким-то образом Вас задевают, и Вам поэтому необходимо прямо тут на страницах форума как-то отреагировать, чтобы поддержать свою репутацию.
P.S. Все-таки такого я от Вас не ожидал. Вроде даже преподавали в вузе - а ведь считается, что именно там люди учатся находить информацию, также предполагается,что преподаватели умеют. Как же Вы тогда перерываете "горы документации", и что это за "горы" такие?
Если я Вас задел - простите. Для меня подобный процесс еще полезен (стимул к работе над собой), а для Вас, видимо, уже нет, я не подумал об этом. Простите, пожалуйста.
кстати, даже пресловутый memptr который с боями "открыли" не так давно спокон веку был нарисован на блок-схеме i8080. И он название даже официальное имеет, "M" :-) Вот это к вопросу как раз о канифоли. Загляни разработчик эмулятора поглубже в документацию - половину проблем бы отшибло.
Все равно пришлось бы проверять, что в Z80 это осталось без изменений, хотя да - времени на проверку ушло бы гораздо меньше, чем на полноценное исследование "черного ящика". Можно, пожалуйста, ссылку?
Black_Cat
15.05.2008, 16:11
Хотите нормальныъ эмуляторов - пишите нормальные доки.
Это что, Вы тут делаете нам всем одолжение?Господа программисты, не заводитесь. С доками на Спектруме действительно хреново. Наиболее качественные доки конечно на WoS'e, но и там многого нет, а про отечественную технику вообще молчу - в ней разбираться можно только со схемами, да и то в них до сих пор ошибки находят (например в той-же схеме Скорпа). Даже о документации АТМ, несмотря на то, что это один из лучших по документированности компьютеров, нельзя сказать что написана она толково, а об описаниях в отечественной электронной прессе я вообще молчу. В отечественной zxвики вы тож ничего конкретного не найдёте, окомя автобиографических опусов.. Вот и получается, что каждый раз приходится спрашивать одно и то-же, т.к. систематизированной достоверной документации (кроме отчасти схем) попросту нет.
ram_scan
15.05.2008, 16:36
Все равно пришлось бы проверять, что в Z80 это осталось без изменений, хотя да - времени на проверку ушло бы гораздо меньше, чем на полноценное исследование "черного ящика". Можно, пожалуйста, ссылку?
"Ссылка" осталась в бумажном виде в институтской методичке более-чем 10-летней давности по микропроцессорной технике. Но взята она была явно "не из головы", из какого-то справочного пособия. Я сейчас с трудом помню как она была зацеплена на АЛУ и как мультиплексировалась эта шина, но по моим воспоминаниям из блок-схемы было можно по крайней мере сделать предположение, что содержимое регистра М попадает в регистр F. Проверять конечно все равно бы пришлось, но уже не в слепую лазить, а вполне предметно. Нисколько не хотел огорчить товарища boo-boo, он большую работу сделал.
Надо копать прежде всего в сторону i8080 и i8085, по ним в свое время документации много написали. Кстати, как мне кажется в даташите на z80 тоже есть эта блок-схема. Характерная, с большой шиной в виде широких стрелок крест-накрест.
Кстати, если с memptr наблюдаются "аномалии" которые не уклаываются в нормальную логику, значит надо именно смотреть на это со стороны разработчика процессора. Там то как раз все должно быть логично, надо просто понимать как он работает "внутри".
Добавлено через 8 минут
Для того чтобы написать эмулятор, надо иметь толковое описание устройства. Схема не всегда поможет, там есть элементы интегральной логики, из схемы вам никто не расскажет, как работает AY или ULA. То, что там было нарисовано на схеме процессора Z80, можете выкинуть в корзину и забыть.
Коллега, я нисколько не хотел вас огорчать. Просто толковое описание устройства - это принципиальная схема. Если бы я начал вам давать определение производной функции в точке обьясняя на пальцах с терминологией из детского сада, я бы ушел с двумя баллами с экзамена.
Так и тут. Есть словесное описание устройства для программистов, которые его программируют. И есть совершенно однозначное и недвусмысленое описание в виде его принципиальной схемы и спецификаций по которым оно изготовлено. Мне кажется что по крайней мере неразумно не обращать внимания на дополнительный источник информации. Сопоставляя схему и спецификацию кроме того можно узнать много интересного. Особенно как в данном случае, есть неполная специйикация, и есть неполная схема. Они взаимно дополняют друг друга.
PS: я реверсил и делал дубликаты устройств на заказных микроконтроллерах не имея спецификации ни на что вообще. Не имея никаких схем и описаний (они были спрятаны вендором потому-что ноу хау и вообще тайна жуткая). Сложно, но можно :-) Знаю о чем говорю.
Vladimir Kladov
15.05.2008, 17:02
никаких коз
вот и первая коза: сам-то сервис-монитор этим способом не пользуется. Причём по нажатию на V меняет fast на normal и наоборот, но у меня-то турба не отключается... :(
Добавлено через 3 минуты
не потрудитесь дочитать до конца
я сначала не потрудился и дочитал. А потом подумал, что это за ноги такие, взял картинку микросхемы (их оказалось две совсем разных), и нашёл, что обозначения соответствуют по номерам ног линиям адреса. Ну допустим, A-это данные, а D-адрес, и я балерина, будем верить, что автор сего писания н перепул ничего, и если так помыслить, то биты идут сверху вниз от младшего бита к старшему. А можно было бы и без всяких ногов написать по-обще-человечески.
вот и первая коза: сам-то сервис-монитор этим способом не пользуется. Причём по нажатию на V меняет fast на normal и наоборот, но у меня-то турба не отключается...
А у Вас какой версии этот сервис-монитор? Просто из той же статьи и подобных других я так понял, что воротили что хотели от версии к версии.
Не отключается турбо - т.е. монитор не пытается делать чтения порта #1FFD?
PS: я реверсил и делал дубликаты устройств на заказных микроконтроллерах не имея спецификации ни на что вообще. Не имея никаких схем и описаний (они были спрятаны вендором потому-что ноу хау и вообще тайна жуткая). Сложно, но можно :-) Знаю о чем говорю.Да уж. Однако муторно это. Я понимаю крики души навроде "пишите нормальную документацию" - все же устаешь порой от постоянного поиска, сопоставления и фильтрации информации. Бывает даже все ясно и коротко написано, с красивыми схемами и понятными фразами, а потом выясняется, что на деле работает вообще не так, как написано. Бедные разработчики подобного криво документированного девайса небось постоянно икают, причем по-черному...
Vladimir Kladov
15.05.2008, 20:20
А у Вас какой версии этот сервис-монитор? Просто из той же статьи и подобных других я так понял, что воротили что хотели от версии к версии.
Не отключается турбо - т.е. монитор не пытается делать чтения порта #1FFD?В той, которой ещё нет. Нет, не пытается, кроме как на старте: 3 раза читает из 1FFD, 2 раза из 7FFD. Прикол-то в том, что при заходе в монитор по NMI, команду V понимает и выполняет, но при этом из этих портов вообще не читает. И даже у себя где-то сохраняет и показывает новое состояние.
Второй непонятный (и неприятный) момент. Попытка выполнить RST 8;DB 88h;RET просто всё вешает. В unreal и spectaculator - сбрасывает. Где написано (начерчено, если на то пошло), что должно происходить по команде RST 8? Я реализовал впечатывание страницы сервисного пзу. Может, этого мало? Кто-нибудь под Скорпион что-нибудь программировал, его сервис-монитором пользовался, ау?
Lethargeek
16.05.2008, 00:58
Sidewize @ SPiN 0.666, 48K & 128K mode
Нифига не мигает.
CityAceE
16.05.2008, 04:05
вот и первая коза: сам-то сервис-монитор этим способом не пользуется. Причём по нажатию на V меняет fast на normal и наоборот, но у меня-то турба не отключается...
Сервис-монитор всегда работает в режиме турбо! Если отключить турбо и выйти из монитора, то отключение турбы произойдёт только по выходу из теневика. А если снова войти в монитор, то турба врубится вновь и снова вырубится при выходе.
Vladimir Kladov
16.05.2008, 09:39
Разобрался я с вызовом сервиса: не надо было впечатывать сервисную страницу ПЗУ, в скорпионе в отличие от западных сервисов предпочли исковеркать прошивки ПЗУ, нежели дешифровать команду rst8. А не работало без этого "воркараунда" потому, что я решил, что коли 7FFD залочен битом 5, то 1FFD тоже. После небольшой переделки кода заработало, и даже сервис-монитор обращается при переключении командой V на чтение к портам 1FFD/7FFD. Он потому и не обращался, что блокировка действовала (у меня почему-то всё время выходило, что я переходил в бэйсик-48, и порт оказывался залочен, в итоге всё не так работало. Теперь и из бэйсик-48 работает).
Осталось невыясненным, каким образом монитор решает, может или не может плата работать в турбе. Если просто учесть ввод из 1FFD и 7FFD, то в турбо режим при старте он не переходит, и даже выключает турбу, если включить её с ресетом извне. И при заходе в сервис-монитор решает, что турба недоступна, cnhока с командой V - белыми буквами. Если же сделать как в KAY, ещё и выводом в бит 2 порта 1FFD управлять турбой, то комп оказывается в турбе с холодным стартом, и опция V доступна, и якобы переключается (и теперь обращается даже к портам 1FFD/7FFD на чстение). Но вот беда: реально комп оказыватся всё время в турбе, т.к. сервис во время рвботы постоянно пишет в 1FFD (10h и 12h), и по правилам KAY, как я их понял, это включает турбу.
В общем, чтобы окончательно добить проблему с турбой в скорпе, мне надо как-то понять, как сервисное ПЗУ детектирует факт наличия турбы на плате. Если точно удастся это определить, то можно и воркараунд с каевским управлением турбы отключить, и всё тогда должно заработать.
Добавлено через 2 минуты
Сервис-монитор всегда работает в режиме турбо! Если отключить турбо и выйти из монитора, то отключение турбы произойдёт только по выходу из теневика.Это я догадался. Вся проблема теперь в недоступности этой функции.
Добавлено через 5 минут
Sidewize @ SPiN 0.666, 48K & 128K mode
Нифига не мигает.Я тогда смотрел версия со сломанным кодом, адаптированную под отечетственные клоны. У меня теперь тоже не мигает. И как у них наблюдается инетресный эффект: иногда человечек становится на вертикальную линию короче.
Сообщение от Higgins
введение задержек на IR не могло ощутимо повлиять на производительность.
Ну как же не могло? Вот например PUSH dd - pc:4,ir:1,sp-1:3,sp-2:3, в случае отсутствия задержек по IR (т.е. когда I <$40 или > $7F), совершенно эквивалентно pc:5,sp-1:3,sp-2:3. А в случае, когла задержка такая нужно, на экране всё равно снег. Да ещё и регенерация нарушена. Т.е. ситуация для Спектрума совершенно недопустимая. Если предположить, что включили ненадолго, чтобы просто получить снег, то никакого мультиколора всё равно не увидим в этот момент, опять же только снег. Нет, для целей эмуляции Спектрума эмулировать задержки по IR не надо.
Давайте сначала отделим котлеты от мух. Прежде всего, речь идет о производительности эмулятора, не самих программ. И действительно, хоть сколько-нибудь грамотное введение задержек на IR мало мальски ощутимого замедления дать не может. Тем более, как вы сами пишете, явление это не частое.
Потом, с чего вы взяли, что обновление памяти во время эффекта снега нарушено? В этом деле значение регистра I никакого значения не имеет.
А что касается выбора того, что нужно и не нужно эмулировать, то это вопрос нетехнический. Я заранее готов принять любой взгляд на это.
Вот, я реализовал правильно IO контенции, и всё пошло
Отлично!
Vladimir Kladov
16.05.2008, 17:56
Кажется, всё решилось. Я менял турбо с началом кадра, а не сразу, так проще (намного). Реализовал для случая без мультиколора, чтобы турба менялась сразу - и всё пошло, без всяких воркэраундов. Значит, сервис при старте просто измеряет время кадра, чтобы определить, есть турба или нет. Теперь осталось сделать, чтобы при мультиколоре можно было турбу включить на ходу, и как-то хотя бы без мультиколора кадр завершить, что ли. Пояснение: мультиколор в турбе у меня как бы частично отрубается, это сразу для простоты сделано. Расчёт тактов по-скорпионовски может ещё при этом идти, а вот с формированием виделуча проблемы некоторые, я их решил устранить отрубанием видеовывода (и тогда кадр просто берётся из видеопамяти по концу кадра). Тут надо будет подумать, как из одной процедуры выпасть, да в другой кадр завершить.
Добавлено через 6 минут
грамотное введение задержек на IR мало мальски ощутимого замедления дать не может. Тем более, как вы сами пишете, явление это не частое.Подумайте, что говорите. Или я просто инкрементировал переменную на 5 вместо 4 (к примеру), или добавил код, который выбрал из таблицы значение по индексу от текущего такта и прибавил его, а потом ещё один инкремент. И независимо от того, какое значение I сейчас (или вы ещё один IF забабахать предложите? Во-первых, не быстрее, во-вторых, в ПЦ приведёт к тормозам из-за условного перехода. Да, я знаю, предсказание переходов... Фигня это предсказание, если речь идёт о нескольких сотнях мелких процедурок, которые выполняются для каждой инструкции, и практически каждый раз разная процедура). Да, на глазок замедление не заметишь, но, скажем, на глазок особенно и разницу от этого эффекта не ощутишь. В том же vectron эффект снега наблюдается секунды - успеет кто-нибудь разглядеть, насколько точно на экране размещаются "снежинки"? Я вот не успеваю. А сколько ещё таких игр/программ, которые задействуют снежок? 0? Ну, вот и всё моё основание.
Добавлено через 4 часа 7 минут
Обновление. Версия 212K. Успешно завершены разборки с вызовом сервис-монитора Скорпиона, с управлением из него турбо-режимом, турбо-режим переключается теперь программно в произвольном месте кадра, не ожидая завершения кадра. Исправлено добавление hobeta-файлов на диск (число файлов в каталоге не увеличивалось). Исправлены задержки по вводу-выводу в оригинальном Спектруме. Добавлены NMI to SERVICE (F8) и NMI to DOS (Magic button, F9). Добавлен монохромный режим отображения (маска цвета задаётся в ini-файле, т.е. это могут быть оттенки одного из 7 основных цветов, например, зелёного).
Да, я знаю, предсказание переходов...Согласен, в таком деле предсказание переходов, простите за выражение, нюхает писю.
Однако учет IR заставляет заметно пересмотреть эмуляцию команд вообще, что хотя вряд ли приведет к ускорению эмуляции, тем не менее, от этого может быть польза. Нам все время тыкали носом вот этим:
ORG 32768
DI
LD B,0
L1: XOR A
LD R,A
DEC HL
LD A,H
OR L
JR NZ,L1
DJNZ L1
EI
RET
А с учетом IR присовокупить данный эффект уже не так сложно.
Только лично у меня вопрос: как в данном примере память теряет содержимое? В какой последовательности (побитно, побайтно), в какой конкретно области памяти и для каких моделей это актуально?
Vladimir Kladov
17.05.2008, 07:55
В какой последовательности (побитно, побайтно), в какой конкретно области памяти и для каких моделей это актуально?Вообще, актуально для всех оригинальных моделей и западных клонов. Но! Лично у меня первый спек тоже использовал данные с шины процессора для регенрации, и у него начинала просаживаться память. Тогда я ничего не знал про регенерацию, думал, что это баг какой-то. Отдельные биты становились единицами. Экран постепенно заполнялся точками. Работать становилось невозможно, прога начинала сбоить и падать. Я так понимаю, подвержена была вся память 48, 64 или 128К, сколько её ни было.
Как можно узнать, на какой строке находит ошибку встроенный ассемблер при трансляции, поскольку никаких сообщений он не выводит.
...
сам разобрался )
Vladimir Kladov
18.05.2008, 13:51
встроенный ассемблер
В EmuZGL пока нет встроенного ассемблера... В EmuZWin, напоминаю - мышкой надо раздвинуть окно для сообшений, оно изначально задвинуто в 0 высоты (чёртовы окошки :) ).
Добавлено через 5 часов 29 минут
Обновил: в версии 213К исправил кое-что из Скорпиона, и добавил эмуляцию Профи.
CityAceE
20.05.2008, 10:20
http://www.emulation9.com/
http://www.emulatronia.com/
Указанные ресурсы дают ссылку на эту страницу в качестве домашней для EmuZGL :) При чём народ довольно активно с этих ресурсов переходит по ссылке сюда!
Vladimir Kladov
20.05.2008, 11:21
При чём народ довольно активно с этих ресурсов переходит по ссылке сюда!
Ну, это они сами придумали... Скорее всего, сами на этом форуме нашли, и решили, что эта ветка и есть то самое оно. Это плохо для форума? Я могу им попробовать написать, чтобы они просто поставили линк на архив. Если надо.
CityAceE
20.05.2008, 14:52
Это плохо для форума?
Да нет, не плохо. Я просто для информации написал, думал вдруг это как-то заинтересует...
девятка это сайт новостей эмуляции, они из всех источников ссылки берут.
я как эмуляторщик со стажем давно туда лазю :)
У меня вопрос к Sayman (раз уж у вас есть живой Профи):
ну...не у меня одного он жив..)))
про бордюр сейчас неподскажу, я просто никогда не занимался бордюрам в расширеном экране((.но бордюр там есть это точно. цвет может менять. в одной теме (кое какая софтина) на этом оруме, я попросил помоч с погой - винда под профи...вот она формирует бордюр жолтого цвета))) на её основе можно там многое изучить...но...чёта нету....на выхах если штраф за ТО оплачу, паеду снова к диаманду, у него наверняка есть эта прога на моих старых дисках...я даже помню как диск выглядил и каробка)))
Если памяти меньше, чем надо, чтобы присутствовали страницы атрибутов для этого видеорежима (например 512К),
ну у меня раньше 512к было у профика...цвета в расширеном экране были все. я тоно не уверен по части в каких страницах, я слышал что в данном случае остаётся только нулевой экран, но утверждать не буду. сделаем вот как, я проверю этот момент в течении ближайших пары дней - мне нужно будет отпаять два ряда РУ7 от кп11й...тогда снова будет 512к..там и проверю наличие экранов и атрибутов...
вобще чёрнобелый режим был на версиях 3.2 и это не связано с количество памяти...у меня как то 320к было...глукнул он чёта..цвета были))) после доработки остаётся глюк по покам экрана примерно в одно знакоместо... палитра это вабще для меня лес))) я пятёрку в живую не видел ещё, а по схемам я несовсем понял как 256цветов делать...пока отложил доработку эту...
Vladimir Kladov
20.05.2008, 20:13
про бордюр сейчас неподскажу
Нет, ну когда после ресета оно стартует в расширенной графике (русский триколор и PP посредине) - там бордюр чёрный всё-таки или белый?
я проверю этот момент в течении ближайших пары дней - мне нужно будет отпаять два ряда РУ7 от кп11й...тогда снова будет 512к..там и проверю наличие экранов и атрибутов...спасибо заранее. Я ещё думаю, может в таком разе вместо страниц 38h и 3Ah (так кажется) просто старший бит никуда не идёт и получаются автоматом страницы 18h и 1Ah.
я несовсем понял как 256цветов делатьЯ из описания команд CP/M понял, что там что-то вроде как в ATM, можно задать цвет для одной из 64 позиций. Судя по тому, что на запуске системы 64 раза подряд выводится в порт 7Eh ряд возрастающих значений, то наверное это и есть инициализация памяти палитры. Наверное, можно было бы и из схемы что-то понять, но я в схемах не силён.
там бордюр чёрный всё-таки или белый?
бордюр чёрный.
может в таком разе вместо страниц 38h и 3Ah
вот сматри, я приложил скриншот карты памяти. на ней виден весь метр. изначально, когда у профи 512к, та память что выделена красным, отсутствует (во всяком случае я по другому не видел ниразу). соответствено оба экрана и оба поля атрибутов будут на своих местах. эмулировать профик с памятью меньше, чем 512к думаю смысла нет, потому и заморачиваться с этим не стоит...512к, 768к и метр...был глюк у меня на 320к...на днях сглючил и получил аж 800к)))) но в обоих случаях всё работало, но битпланы не проверял на 320к и не смагу проверить. только на 512к.
из 64 позиций
этот вопрос я ещё тоже не сматрел. 256цветов в любом случае палитра у профи пятой версии.
жолтым я выделил память которая неотсекается при 512к...
Здравствуйте.
Прежде всего хочу поблагодарить Владимира за его труд. Эмулятор получается приятный, так держать:v2_thumb:
Теперь о проблемах:
1) Не могу посмотреть Unreal demo, на третьем эффекте зависон.
2) Не корректно работает начало REFRESH Demo, тормозит.
Галочку Fast Disk в обоих случаях ес-но снимаю.
3) В Satisfaction сбрасывается на дигитальной метталике.
Сейчас сижу на US0370, там всё это работает.
Чего я делаю не так?
Vladimir Kladov
21.05.2008, 21:10
бордюр чёрный.Где-то значит у меня косяк, и пока не могу отрыть, в чём он. Мог бы я хотя бы скомпилить unreal (после поправки для выдачи нужного лога), я бы сразу отыскал. Но что-то у меня не получается его компилировать. Через эти cmd и bat не работает, компилятор не тот (у меня только .net 2003 и где взять старее я не представляю просто). Оно может и скомпилировалось бы, будь там по-нормальному проект для msvc++ сделан. Но пока никак.
вот сматри, я приложил скриншот карты памяти. на ней виден весь метр. изначально, когда у профи 512к, та память что выделена красным, отсутствует (во всяком случае я по другому не видел ниразу). соответствено оба экрана и оба поля атрибутов будут на своих местах.
Вот этот момент теперь ясен, спасибо. А то бы я ещё долго догадывался. (Жёлтого цвета как то не вижу, правда, кроме как номеров страниц, но ведь это в самом тесте так?).
из 64 позиций
этот вопрос я ещё тоже не сматрел.
Или вообще там цикл из 16. Там может просто часть палитры инициализируется, чтобы было с чего начинать. Можно поразбираться с тем, что выводится в тесте полной палитры. Явно что-то пихается в 7E.
Сейчас сижу на US0370, там всё это работает.
Чего я делаю не так?
unreal и satisfaction вроде работало, но я же постоянно курочу адресацию портов, может и заломалось что. Fast disk без надобности выключать не стоит наверное, часть вещей просто не идёт без него (а часть наоборот только без него). Я просто передрал эту часть из анрил, с небольшими поправками на свою идеологию. Думаю со временем переписывать эмуляцию вгшки, но пока приходится просто как-то так выкручиваться, то включать, то выключать фаст.
unreal и satisfaction вроде работало, но я же постоянно курочу адресацию портов, может и заломалось что. Fast disk без надобности выключать не стоит наверное, часть вещей просто не идёт без него (а часть наоборот только без него). Я просто передрал эту часть из анрил, с небольшими поправками на свою идеологию. Думаю со временем переписывать эмуляцию вгшки, но пока приходится просто как-то так выкручиваться, то включать, то выключать фаст.
В анрил две настройки:
No delays - снимаю,
Trap Tr-dos r/w - ставлю.
Для Unreal достаточно только первую галочку снять, для REFRESH ещё обязательно поставить вторую. Тогда эти демы работают корректно.
Эмитируется кстати звук дисковода. Класс! У себя не планируете эту фичу? :rolleyes:
Вообщем буду ждать новые версии.
Где-то значит у меня косяк, и пока не могу отрыть, в чём он.
временно можно сделать игнорирование бордюра в режиме экрана профи выставив принудительно в чёрный, т.е. если там порт fe, то просто при включонном экране просто игнорировать все значения. потом я посматрю по каким портам и какие значения его управляют и сообщу.
Жёлтого цвета как то не вижу
ну как же..тонкая рамка вокруг )))
Эмитируется кстати звук дисковода. Класс! У себя не планируете эту фичу?
не стоит делать эмитацию звука дисковода. нада отметить что в анрыле эта фича очень сильно раздражает. супруга часто жалуется когда из бипера несёца такой звучок...а щас с рождением сына этот звук будет его постоянно будить...так что ненада его нам))) для особо жаждущих сделать лучше отдельную галучку "эмуляция звука FDD")))
Vladimir Kladov
22.05.2008, 15:44
Разобрался я с satisfaction и ureal demo: надо пока отключить PortBlock в ini-файле.
Добавлено через 2 минуты
ну как же..тонкая рамка вокруг )))она же красная :) Ладно, это неважно. Я понял правильно, что если памяти меньше метра, то недостающие страницы обведённом участке (начиная сверху) можно считать ПЗУ, в котором всегда прописаны 1цы?
для особо жаждущих сделать лучше отдельную галучку "эмуляция звука FDD")))
Согласен, лучше. Я за!
Разобрался я с satisfaction и ureal demo: надо пока отключить PortBlock в ini-файле.
Металлика заиграла, с ureal demo интереснее - проскочила место зависона один раз из десяти запусков :confused:
molodcov_alex
22.05.2008, 22:12
не стоит делать эмитацию звука дисковода. нада отметить что в анрыле эта фича очень сильно раздражает. супруга часто жалуется когда из бипера несёца такой звучок...а щас с рождением сына этот звук будет его постоянно будить...так что ненада его нам))) для особо жаждущих сделать лучше отдельную галучку "эмуляция звука FDD")))
В анриле есть такая настройка, правда только в ini файле.
[BETA128]
Noise=1 ; seek noise
Vladimir Kladov
24.05.2008, 16:13
с ureal demo интереснее - проскочила место зависона один раз из десяти запусков
я как-то не обращал внимания, думал, что она так и должна заканчиваться: бесконечным игранием музыки и без всяких эффектов. Ну мало ли, думал, недописана. Оказалось, что она ещё и сбрасывается при повторных запусках. Попробовал в старом анриле - дошла до 6 эффекта и сбросилась. Попробовал в новом анриле - практичски сразу cpu halted. Настороженность вызывает то, что эта дема всё время лезет в tr-dos во время работы, и обращается к диску. Скорее всего, нестабильность вызвана неточной эмуляцией ВГшки. Дема хитрая, всё время пихает команду чтения сектора, к тому времени, когда надо читать сектор, иногда уже сколько-то байт проехали мимо. А ей только этого и надо, она так и рассчитана, чтобы прочитать не весь сектор в этом месте, а только часть...
К слову, в спектакуляторе и zxmak работает до последнего экрана. И исходники в части трдоса анрила начиная с 0.35b2 очень похожи (на глазок) на исходники zxmak'а. Не знаю, кто у кого брал, но мне похоже надо брать и переписывать из zxmak'а. А я вообще списал с версии анрил 0.34b2, и даже удивительно, что сразу не всегда выпадывает.
Alexandr Medvedev
24.05.2008, 23:14
очень похожи (на глазок) на исходники zxmak'аА где их можно найти?
[bETA]mEN
24.05.2008, 23:39
А где их можно найти?
http://zx.pk.ru/showthread.php?t=7407
Alexandr Medvedev
25.05.2008, 13:43
Что то я там ничего не нашёл, кроме ZXMAK.NET , можно ссылку поточнее?
в демке PSG-WINS первая часть работает почти нормально (если присмотреться - сдвиги видны), а вот после неё надпись PSG (border+paper) явно сдвинута :v2_conf2:
для проверки бордюра выкладываю ЦПМную демку First. в ней на бордюре профинского экрана рирсуется российский флаг.
ещё викладываю ломаную демку Movir_Demo. неуверен что будет работать в самой цпм, но в profi_dos4_0 работает - проверил.
Vladimir Kladov
26.05.2008, 16:06
в демке PSG-WINS первая часть работает почти нормально (если присмотреться - сдвиги видны), а вот после неё надпись PSG (border+paper) явно сдвинутаЗабавно, что оно пошло, как только переписал эмуляцию ВГшки (ureal тоже кстати пошёл). Выкладывать до вечера погожу, что-то у меня профи не совсем идёт как надо.
для проверки бордюра выкладываю ЦПМную демку First.Хорошо, сейчас погляжу. Вот заодно вопрос возник: поставил 256К, вроде пашет, но странно выглядит тест памяти: вместо РУ5 написаны ??? --- --- ???. А для случая 576 и 768К всё выглядит вполне нормально.
Профи-ДОС не грузится что-то. Мне сейчас надо разобраться с загрузкой просто СПэМного диска для начала. TD- вроде прикрутил, но что-то не идёт. Буду разбираться сегодня.
Добавлено через 3 часа 53 минуты
Профи-ДОС не грузится что-то. Мне сейчас надо разобраться с загрузкой просто СПэМного диска для начала.
цпм теперь грузится (забыл про порт BF, как оказалось). А вот профи-дос при загрузке выпадывает в бэйсик-48 и там и крутится, на экране остаётся заставка от профи+тр-доса.
для проверки бордюра выкладываю ЦПМную демку First. в ней на бордюре профинского экрана рирсуется российский флаг.Я не знаю, как из .com и прочих файлов собрать cp/m-диск, может, подскажете
где взять утилиту какую - очень желательно чтобы не под MS-DOS only, нет у меня такой операционной системы, и нежелательно в виде плагина к фару или ещё какому командиру - нет их у меня, не ставлю я их и не пользую (или может, соберёте диск сами? Сгодится любой формат TD0, FDI, UDI - я добавил поддержку для всех трёх, пока на чтение).
Кстати, люди, а не скажете, что такое "композит"? В деме FA_128 такое ощущение, что работает только этот самый фикс, причём независимо от того, какой фикс выбран, и по таймингу вроде бы соответствует оригинальному S128/+2, но без снега, или /+2A. Углядеть можно только ближе к финалу, когда на верхнем бордюре в виде российского триколора горизонтально прыгают уровни каналов AY, других отличий в тайминге на глазок я не рассмотрел, но этот работает именно для +2/+2A (+3 не смотрел, тоже наверное работает).
Добавлено через 4 часа 56 минут
Ладно, полночь, надо спать, потому выкладываю версию 220К как она есть на момент. Демо unreal смотреть с выключенным Fast Disk (хотя после переписывания на новый код он стал совсем мало fast, надо что-нибудь туда для скорости добавить).
А вот профи-дос при загрузке выпадывает в бэйсик-48
как я понял из соцов новой (последней 4.01) версии, бут сектор сидит в 9м секторе. там процедурка 512 байт. делает переключение в режим профи и передаёт всё управление первому файлу. которым должен быть mboot.bin. далее этот файл уже грузит всё остальное. в бета версии, загрузчик работает только из трдоса, хотя новый вроде умеет и из меню профика пускаться. есть какая то новая прошивка. не дособранная. там уже встроеная загрузка с винта есть и с любово диска. где есть в 9м секторе лоадер для цпм или иной системы. пока не всё совсем понятно. для примера конечно можно протрассировать загрузку профидос на анрылспекке...он сейчас вроде стал нормально понимать эту систему, хотя не совсем до конца(((
Я не знаю, как из .com и прочих файлов собрать cp/m-диск, может, подскажете
прикрепляю загрузочный образ системы..ранее был в теме анрыла...
http://zx.pk.ru/attachment.php?attachmentid=8080&d=1211333999
5.30 система. демка first там должна пахать. как её туда зафигачить? кинуть ....а не....стоп...ща разберусь с образом...кину на диск демку на загрузочную...а то щас нету под рукой...
Vladimir Kladov
27.05.2008, 19:00
для примера конечно можно протрассировать загрузку профидос на анрылспекке...он сейчас вроде стал нормально понимать эту систему, хотя не совсем до конца(((а у меня не получилось. Может я чего-то не так делал? При переходе в трдос при вставленном диске уходит в черный экран. Как и у меня собственно.
кину на диск демку на загрузочную...а то щас нету под рукой...
Наверное можно на отдельный диск, но он должен пониматься в цпм как свой, я тогда вставлю его в слот B и попробую запустить (вроде не должно не пахать из-за другой буквы). На загрузочный конечно оно проще.
Добавлено через 12 минут
http://zx.pk.ru/attachment.php?attac...0&d=1211333999
5.30 система.И с этим та же история что и с Profi-DOS, который уже был. Ни из тр-дос (128) ни автоматом - один чёрный экран только, что у меня, что в анриле (проверил и старый и новый).
один чёрный экран только
галочка но делайс убирать нада и грузить нада версию, которую Молодой делал...он её выкладывал где то на последних страницах...
Vladimir Kladov
27.05.2008, 21:19
грузить нада версию, которую Молодой делалЭто не та ли версия анрила, которая у меня вообще отказалась запускаться. USGUI100. Что-то типа "...failed to start because application configuration incorrect. Reinstall ...will fix ...". Может ей чего надо подсунуть? Так не написано, чего надо.
ну фиг знает. проверь чтобы ини файл был на месте. ром файлы тоже. перекинь ромы из прошлой версии анрыла, в этого usgui. у меня тоже была ошибка, я вкинул файлы ром и всё заработало.
Vladimir Kladov
28.05.2008, 15:19
Выкладываю Alpha 28.05.2008 - 225K. Восстановлен режим 256 цветов, исправлен Kempston, добавлена загрузка Pokes (но диалога пока нет), настроена адресация ATM2 - переключения между режимами уже идут. Немного краски в надписях "модель" (русский триколор и Спектрумовский логотип). Диалог About с номером версии.
Добавлено через 10 минут
ну фиг знает. проверь чтобы ини файл был на месте. ром файлы тоже. перекинь ромы из прошлой версии анрыла, в этого usgui. у меня тоже была ошибка, я вкинул файлы ром и всё заработало.
Этоя уже тогда делал. Не пошло.
Пока так и не заработало как надо Refresh Demo.
(Почти в самом начале идёт пролёт в цветном коридоре. Тормозит, а не должен).
Vladimir Kladov
28.05.2008, 21:38
Refresh Demo.
(Почти в самом начале идёт пролёт в цветном коридоре. Тормозит, а не долженТам обращения к диску же параллельно идут. Наверное, какие-то времянки с ВГшкой не идут.
демку psg-wins - буквы также сдвинуты
Положил поправочку. Всё оказалось просто. Улучшил мультиколор, чтобы в мультиколоре использовался вариант без контенции для русских клонов, но такты не в том порядке прибавлялись. В принципе, всё нормально, до такта логи совпали с анрилом на этой деме, но на команды out влияло, как раз на бордюр. Сбило с толку, что rage шёл по случайности как надо.
Добавлено через 2 минуты
В смысле, сейчас положу. Совсем старый стал.
Там обращения к диску же параллельно идут. Наверное, какие-то времянки с ВГшкой не идут.
В анриле работает как надо :cool:
Vladimir Kladov
29.05.2008, 19:55
загрузка по alt-L не вызывается
Это в подсказке к меню так написано? Надо F3 поставить. На Alt+L можно что-нибудь ещё поставить, например, макрос, который печатает LOAD ""<ENTER> в 48 режиме, load ""<ENTER> в 128 или RUN["имя первой васик-проги на диске"<ENTER> в TR-DOS'е.
Вот я хуже заметил: GS сломался. Пытаюсь отремонтировать, пока не очень получается.
Добавлено через 2 часа 55 минут
Обновленьице: 30.05.2008 - снова небольшой ремонт: сломался было General Sound. Так же: поправлена загрузка с ленты (работает бросание нескольких лент и с контролом, улучшена работа автопаузы, исправлен выбор меню в TZX и увеличены цифры в индикаторе ленты). Так же: поправлен gigascreen (пока за счёт снижения производительности при обнаружении или включении его принудительно по Alt+G).
И до рефреш руки дойдут. Пока что он идёт, и хотя не сбрасывается.
Vladimir Kladov
30.05.2008, 22:16
Обновленьице: добил диалог покесов.
Добавлено через 17 часов 5 минут
Обновление: Refresh так как раньше не тормозит.
Vladimir Kladov
05.06.2008, 20:57
Выкладываю новую версию: 230К. Переработана загрузка с ленты. Сейчас грузятся без особых проблем все образы TZX/TAP, которые есть у меня. К сожалению, не нашлось ни одного образа, который бы содержал блок с ID #15 (Direct Recording). Так же, нет образов с блоками в формате C64, его я решил вообще пока не добавлять, проверять не на чем.
не работает TZX версия игры Twister ftp://ftp.worldofspectrum.org/pub/sinclair/games/t/TwisterMotherOfCharlotte.tzx.zip
кстати многие эмули не понимают именно этот tzx
Vladimir Kladov
05.06.2008, 22:08
Скажите лучше, какой эмулятор его вообще понимает. Spectaculator на нём просто упал, сразу при загрузке. Но это проблемы его автора, не мои.
Там близко к началу, сразу за блоком #35 (Custom Info, заголовок в нём странный "Decode into") лежит удивительный блок #19, про который Spin к примеру пишет "unsupported block". У меня такие блоки сразу отбрасываются. Посмотрю варианты завтра. Если это из-за ошибки в длине предыдущего блока #35 позиция не туда встала, то это просто bad tzx и его надо пропачить. Либо это ошибка tzx-креатора, и он имел в виду десятичный 19, то есть #13, что тоже вероятно.
Скажите лучше, какой эмулятор его вообще понимает.
это последняя ревизия формата TZX (1.20), подробней тут http://newton.sunderland.ac.uk/~Mikie/
на сайте есть и другие образцы игр
с помощью программы tapir с этого сайта я перегонял twister.tzx в wav и только тогда загрузил его под эмулем RealSpectrum.
эмулятор SpecEmu 2.7 прекрасно грузит эту игру.
взять можно здесь http://www.emu-france.com/?page=fichiers&idFile=1224
Добавлено через 39 минут
Vladimir Kladov,
добавьте в эмулятор пожалуйста сохранение опций, так не удобно когда после повторного запуска все настройки сбрасываются на дефолт.
Vladimir Kladov
06.06.2008, 20:43
это последняя ревизия формата TZX (1.20), подробней тут http://newton.sunderland.ac.uk/~Mikie/
Ага, спасибо. Я и не знал, что под новый формат уже образы нарезают, думал, что ещё один пример некорректного tzx'а. Сегодня разбирал такой, Athena. Грузится без автостопа в Spin и кстати в SpecEmu (но не грузится в спектакуляторе). Но вот какая штука: в том месте, где начинается группа блипов, спин сделал паузу совсем даже не 7 миллисекунд, как прописано в блоке, а гораздо на большее время. Хотя автостоп выключен. Это просто какой-то воркарэраунд очередной, как и в Monopoly. Ну там ладно, tap-файл, но длину паузы и в тапке прописать правильную можно ведь, чтобы программе хватило времени нарисовать на экране свою анимированную заставку.
Зато, пока изучал проблему, сделал загрузку из wav-файла, совсем мало кода добавилось, и достаточно быстро пашет.
Ещё бы примеров direct recording block где-нибудь раздобыть, а пока попробую блок #19 добавить. Какой-то он сильно загогулистый.
добавьте в эмулятор пожалуйста сохранение опций
Добавлю, это не сложно. Мне бы теперь придумать какой-нибудь способ иметь как минимум 2 файла настроек, причём одновременно, чтобы можно было при загрузке определить, что из какого грузить. Опции ReadOnly в каждом блоке недостаточно, я, скорее всего, уберу её. Приоритетная загрузка опций из файла с постоянными настройками против сохраняемых должна покрыть нужды более тонкой настройки на пользователя (в том числе на меня). Тогда можно уже не разделам, а отдельным опциям делать read-only, и появляется незавсимость от изменяющегося со временем ини-файла в поставке: сделал копию под нужным именем, закомментарил опции, которые можно менять, остальные под себя настроил, и они уже не изменятся, пока сам не поменяешь. Раньше просто в голову не приходило, как-то привыкши, что конфиг обычно одним файлом. Хотя задумывался уже.
Вот, сегодняшнее обновление: TZX1.20 + загрузка из wav-файлов. Да, там я заметил ещё пару новых блоков, но и без них все примеры грузятся в 48 режиме. Остальные потом.
Ещё бы примеров direct recording block где-нибудь раздобыть
попробуйте этот tzx - хотя что это такое я даже сам не знаю, но direct recording присутствует.
Refresh так как раньше не тормозит.
Всё равно дёргается :(
Vladimir Kladov
07.06.2008, 21:21
Всё равно дёргается
А вы ему REFORMAT запустите. Думаю, он без этого и на реальном диске дергается. Иначе не нужен был бы этот реформат.
попробуйте этот tzx - хотя что это такое я даже сам не знаю, но direct recording присутствует.
Вот спасибо. Поправил, теперь работает.
Обновление: 07.06.2008 - 233K. TZX: исправлена загрузка блока #15, добавлена обработка блока #2B Signal Level (v1.20), пара новых сигнатур ускоренной загрузки и улучшена работа автостопа (учёт наименования группы в качестве хинта: теперь Athena грузится сама, без подталкиваний, меньшему количеству образов* приходится отключать автостоп или быструю загрузку). Так же, добавлено сохранение конфигурации при выходе и (внимание!) возможность настройки фиксированных опций, которые берутся из файла emuZGLconst.ini (он создайтся автоматически при первом запуске, если не найден). Первоначально все опции в нём закомментарены, но есть возможность включить их, и тогда в первую очередь опции будут считываться из него, а не из изменяемого emuZGL.ini.
* - собственно, у меня таких образов, которые теперь надо подталкивать, на данный момент нет (разве только модель другую включить или выбрать загрузку из меню 128-го: F11, Alt+\, Enter).
Vladimir Kladov
08.06.2008, 10:12
Я сейчас пересобрал и выложил версию 231К. Забыл отключить опцию отладочного сохранения каталога ленты вчера, и даже не удивился, что стал экзешник на 2К больше. Подустал маненько, наверное.
Добавлено через 2 минуты
Сообщение от Djim
Всё равно дёргается
А вы ему REFORMAT запустите.И, кстати, это зависит от длины дорожки: я попробовал в Unreal версии от Alco поставить 6400: те же подёргивания. Может, 7000 и более правильно, но у меня пока что не идёт с такой длиной дорожки. Почему-то.
А вы ему REFORMAT запустите.
Спасибо, помогло.
В связи с этим вопрос: как переформатированное сохранить? Или пока никак?
(Тут что интересно. Запустил в Unreal, переформатировал, стало работать как надо. Сохранил в четырёх возможных образах: trd, fdi, td0, udi. При загрузке fdi, td0, и udi переформатирование сохраняется, а вот загружаю trd образ и приходиться запускать REFORMAT для корректной работы. Это формат trd такой неполноценный?)
Кстати попытался загрузить эти образы в EmuZ, загрузился только trd. udi он не увидел, а fdi и td0 выдали ошибку нулевой дорожки. Почему так?
ЗЫ При нажатии F3 окошко именуется Save. Надо Load.
ЗЫЫ С новой организацией настроек стало удобнее, спасибо. Только один момент: автоматически не сохраняется убирание эффекта ТВ линий.
Vladimir Kladov
08.06.2008, 15:17
trd и scl не сохраняют ни порядок секторов, ни тем более расстояние между ними, не говоря уже других левых данных - только сами байты. При загрузке диск форматируется заново. Я пока сделал сохранение trd и scl как самое простое. Почему не грузит udi и fd0, гляну и линии тоже. На дисках не сохранённых в unreal, работало. Я вот сильно опасаюсь, что опять из-за длины дорожки.
Добавлено через 4 часа 54 минуты
Собственно, обновление. Теперь я добился, чтобы с длиной дорожки 7000 (и надеюсь, другими) тоже работало, и добавил настройку длины дорожки. С TD0 та же ситуация: длина дорожки в самом файле тоже не хранится, поэтому 18й сектор обгрызается, и диск фактически нерабочий. Для загрузки таких дисков, кроме формата udi, надо менять опцию MaxTrackLen в ini-файле. UDI теперь тоже работает. Плюс - небольшой сюрприз (надеюсь, приятный).
Добавлено через 4 часа 56 минут
Да, переформатирование пока сохранить никак. А то, что переформатировано в анрил, всё равно не катит. Можете считать, что ReFormat - настройка на конкретный дисковод, а дисководы у нас немного разной модели :)
Позже добавлю сохранение в udi, тогда можно будет сохранить. А вообще-то на время переформатирования можно включить макс. скорость (F1), и всё займёт секунд 5-10.
Vladimir Kladov
09.06.2008, 20:54
И ещё одно обновление. Практически ничего не сделал, только одну формулу маленько поправил в эмуляции флопаря. Заметил, что спустя минут 15 работы вдруг диск перестаёт читаться, стал разгребать, нашёл ошибочку с накоплением разрядности времени и переходом на отрицательное значение. Проверочка заняла приличное время, как раз из-за того, что эффект возникал за приличное время. Заодно поправил запоминание в конфиге состояние максимизировано.
[bETA]mEN
09.06.2008, 22:13
а почeму такой странный размер у kay.rom?
Vladimir Kladov,
а можете добавить в эмулятор модель Дельта с 48к ?
также ещё очень интересна одна идея, возможно она покажется комуто бредом но всёже, в некоторых моделях спектрумов, особенно всемозможных клонов спектрума (один из которых и дельта тоже) был вмонтирован динамик в корпус.
звучание мелодий получалось совсем другое.
нельзя ли это както реализовать?
При длине дорожки 7000 стали загружаться сохранения Unreal'a, но переформатирование в Refresh перестало помогать. Вернул 6400. (а вообще нужны ли эти 7000 ? В ветке анрила ругали вроде это дело).
Звук головки дисковода. К сожалению совсем не то чего хотелось бы. (Посмотрите, если не трудно, как это реализовано в том же Unreal, там по моему идеально).
Турбо режим. Ускоряется AY музыка. В анриле нет. Как правильно?
GS. После выключения его в меню обратно не включается (выбран пентагон).
Vladimir Kladov
10.06.2008, 16:24
Посмотрите, если не трудно
То, что я слышу от анрила, вообще ни на что не похоже. Просто бип и всё.
Ускоряется AY музыка.Если всегда, то это, наверноя, я ошибся с вычислениями таблиц. (Наверное, не ускряется, а повышается тональность: если ускоряется, то это как раз правильно, для тех плееров, которые не привязаны к инту). Гляну сегодня, про что написали.
То, что я слышу от анрила, вообще ни на что не похоже. Просто бип и всё.
Ну не знаю. Может у меня бипер такой. Но звук такой же получается как у моего TEAC'овского дисковода на реале.
Vladimir Kladov
10.06.2008, 20:32
можете добавить в эмулятор модель Дельта с 48кОдного ПЗУ мало. ПЗУ вы и так можете подставить, указав в ini-файле вместо ROM того же Пентагона нужное вам ПЗУ. Надо знать распортовку, тайминги. Модель Custom я позже доделаю, чтобы можно было настраивать и выбирать производные модели на базе других. Всё, что могу в этом случае, если нет другой документации.
нужны ли эти 7000
Вообще, номинально должно быть 6250, я поставил 6400, т.к. это не сильно отклоняется от номинала. По хорошему, надо бы переделать так, чтобы при сохранении в udi (когда добавлю) дорожка обрезалась по возможности до 6250, если на хвосте нет ничего. И тр-дос-диски надо форматировать на эту величину. Непонятно только, что делать, если загружается диск с дорожкой большего размера, особенно если данных столько, что они не влезают в 6250 вместе в межсекторными данными.
Со звуком шагового я пока ничего умного придумать не могу. Я примерно помню, как он клацал и жужжал мотор, но нарисовать кривую звуковой дорожки я по памяти не смогу. Я пока изменил, получились немного более резкие и глухие шлепки. Может, подберёте или запишите вавку на одну секунду звучания? Нужен звук только одного шага хотя бы. (Но как я помню, что скрежет движения головки через весь диск был менял тональность звучания, как будто из-за того, что головка двигалась с разной скоростью на краю и в середине).
Вот, на сегодня поправки кончились, выкладываю обновление.
Добавлено через 2 минуты
а у меня бипера нету. У меня бипер динамиками имитируется в ноутбуке. А на работе вообще нет бипера, чтобы не мешало людям работать, откручивается и отвинчивается при установке.
Вообще, номинально должно быть 6250, я поставил 6400, т.к. это не сильно отклоняется от номинала. По хорошему, надо бы переделать так, чтобы при сохранении в udi (когда добавлю) дорожка обрезалась по возможности до 6250, если на хвосте нет ничего. И тр-дос-диски надо форматировать на эту величину. Непонятно только, что делать, если загружается диск с дорожкой большего размера, особенно если данных столько, что они не влезают в 6250 вместе в межсекторными данными.
А вообще реально что дорожка может быть больше 6250 на реальном диске и как такое возможно?
Vladimir Kladov
11.06.2008, 13:57
как такое возможно?
Думаю, что только в случае, если диск будет вращаться медленнее обычного. Тогда плотность записи автоматически вырастет, и получится больше. Но вероятность сбоев на таком диске тоже будет больше. К тому же, возникает вопрос совместимости дисков с такими дисководами, если разница существенна. Если диск с такого дисковода ещё будет читаться, то не факт, что его можно будет использовать для записи без переформатирования (наверное, читаться тоже не будет).
Может, подберёте или запишите вавку на одну секунду звучания?
А как с бипера записать?
а у меня бипера нету.
Может в этом всё и дело ;) Получается на самом деле очень похоже. И, что немаловажно, не зависит от того, включён или нет звук! То есть тикает всегда, и откуда надо (из системного блока). Рука так и тянется дискетку вытащить :)
Может просто сделать как в анриле, исходники вроде у Вас есть.
-В ини файле описание типа AY (mono, acb, abc) не совпадает с реальностью. (acb идёт под номерами 2 и 3, а abc уже 4)
-при таскании окошка с эмулятором, или например при постановке и снятии с паузы у меня потрескивает звук.
Vladimir Kladov
11.06.2008, 17:30
как с бипера записать
Наверное, только на микрофон. По-другому никак не получится. Чтобы отсечь шумы, можно продлить звучание на несколько секунд.
при таскании окошка с эмулятором, или например при постановке и снятии с паузы у меня потрескивает звукТак и должно быть: даже если было тихо, этой тишине мог соответствовать ненулевой уровень. Если на время перестать подавать этот ненулевой уровень, а потом снова подавать, то получится скачок сначала к нулю, потом обратно, это и будет потрескивание.
molodcov_alex
11.06.2008, 19:41
Вот звуки Электроники МС5305:
trk_inc.wav - сдвиг головки в сторону увеличения
trk_dec.wav - сдвиг головки в сторону уменьшения
Могу еще добавить шум вращения диска, включение и выключение мотора.
А можно еще из WinUAE звуки флопповода выдрать.
P.S. Прикрутил к анрилу (заменил Beep на PlaySound) ваще зашибись... :cool:
Vladimir Kladov
11.06.2008, 22:31
звуки Электроники МС5305А это 5,25? Что-то больше похоже на 3,5 (унриловский боп и то больше похожим кажется). Я ещё помню, что когда головка проезжала по всему диску, такой (металлический) скрежет стоял... А тут - как-то очень уж тихохонько получается. Совсем как у меня в последнем выпуске.
От звука включения-выключения мотора не откажусь, а вот шелест диска, пожалуй, не надо. Иначе мне придётся отдельный звуковой поток делать, чтобы наложение этого звука не мешало музыкальным эффектам в демах типа unreal.
(Завтра с утра уеду на дачу мокнуть под дождём, как вернусь в субботу, так вставлю. Но не через PlaySound, так не хочу, слишком напряжно. Попробую наложить на общий звуковой поток).
molodcov_alex
11.06.2008, 22:51
Упс... Че-то меня того... Там типа щелчек - головка опускается, головка поднимается. Выкладывать?
Вот тут, сразу после ресета - загрузка с дискеты, скрежет присутствует.
Vladimir Kladov
14.06.2008, 16:42
Так первое это было что - щелчок головки? (А когда она поднимается - тоже щелкает?)
molodcov_alex
14.06.2008, 17:12
Если это про выложенный выше файл, то да наверное. Щелкает в обе стороны, когда движок запускается и когда движок останавливается (головка соответственно опускается и приподнимается). То что выложено это просто пример еложенья головкой по диску, а есть и щелчки без всего.
Vladimir Kladov
14.06.2008, 18:46
Попробовал начать прикручивать, что-то через PlaySound не очень получается. Или только один звук в один момент, что не пойдёт, если ещё и шелест диска нужен. Попробую замикшировать всё-таки шаговый звук с каналом, прямо из wav-файла (который кстати хотя бы и с ограничениями на формат, можно делать внешним). А звук шелеста тогда можно и через PlaySound.
А ещё мне кажется (помнится), головка могла опускаться и подниматься не только при включении мотора и отключении.
Vladimir Kladov
16.06.2008, 21:42
Обновление 16.06.2008 - Устранены тормоза при длительном удержании клавиш в играх (замечено на не очень мощной
машине), переделан звук дисковода (используются внешние wav-файлы), добавлена возможность включить
WaitVSync (рекомендуется только для мониторов с частотой, кратной 50Гц), задел на будущее: исправлена
перерисовка экрана при откате времени (на будущее, т.к. сам откат времени ещё сбоит).
CityAceE
18.06.2008, 04:04
Владимир, так получается, что эта ветка форума стала нечто вроде домашней странички эмулятора. Зарубежные сайты и форумы дают ссылку имено на неё. Однако самый первый пост малоинформативен. Может быть стОит в него добавить побольше информации, дать ссылку в более явном виде и править информацию в этом посте по мере выхода новых версий?
Vladimir Kladov
18.06.2008, 16:11
OK, я на инглише написал там чуть-чуть, наверное, этого хватит.
Владимир, а что с эмуляцией профика?!
к слову...пятёрка в пути..предположительно в пятницу будет...
там она с палитрой и винтом...посматрю чё как работает....
Vladimir Kladov
18.06.2008, 20:05
что с эмуляцией профика
Дык. Как образ диска сделать, я так пока и не знаю. Тут где-то была речь про плагин trdos->cpm, но это кажись для +3, насколько это совместимо, не знаю, да и опять же это же не тр-дос файл(ы) был(и).
Хм, а нельзя просто на асме написать небольшую прогу, которая без всякого сп.м включит режим 512х240, и нарисует цветные полоски на бордюре (с цветами от 0 до 7 или 15, на одном экране)? Этого теста вполне хватило бы, чтобы понять, как выглядит настоящий бордюр в этом режиме.
приедит пятёрка сделаю...4ка моя щас в дауне...
Добавлено через 22 часа 17 минут
Вадим говорит что бордюр ест точна у профика. порт FE. бордюр тонкий, но он есть... програмируется также как и спековый бордюр..
а что такое затишье, проект ещё жив ?
Vladimir Kladov
07.08.2008, 19:20
Я сейчас в отпуск собираюсь, и впервые за 22 года на море, да ещё и с семьёй, так что мне сейчас вообще не до компов.
Владимиру огромное спасибо за что-то новое в серии эмуляторов, но...
Как пользователю, не понравился интерфейс в виде списков. ЭмуЗВИНовые кнопки были как-то роднее что-ли... Ну и ещё не порадовала куча недоработок со звуком и безпричинные вылеты самой программы. Будем надеяться, что в финальном релизе эмуль получится более стабильным :)
Cсылка на тест BBG:
http://ppest.org/zx/zxse.php
http://ppest.org/zx/et/BBG.ZIP
ссылка не работает, ни у кого случайно не осталось, гугл ничего не находит... :(
[bETA]mEN
09.10.2011, 03:29
ссылка не работает, ни у кого случайно не осталось, гугл ничего не находит... :(
Момент неудачный, что бы искать. Только завтра:
The Wayback Machine is undergoing scheduled maintenance Friday through Sunday, October 7-9. Most services will be offline during that time.
[bETA]mEN
09.10.2011, 03:34
нашлось:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot