сделал TAP версию для проверки на всяческих реалах.
в `+` версии изменил надпись spectrum1982 на scorpion.
сделал TAP версию теста показывающего кол-во тактов.
Вид для печати
сделал TAP версию для проверки на всяческих реалах.
в `+` версии изменил надпись spectrum1982 на scorpion.
сделал TAP версию теста показывающего кол-во тактов.
Только он почему-то считает скорпион оригинальным спектрумом. А оригинальный - не считает.
Дело не в загрузке - у него просто оригинал опознается как клон - насколько я понял - а скорп - почемуто оно считает оригинальным компом.
сам автор пишет в help`e - полное совпадение будет при `прозрачном` ОЗУ т.е. отсутствии wait`ов на процессоре.
Что-то странное, бордюр в спектакуляторе на оригинальном 48 совсем не попадает куда нужно и шире становится.
сфоткал бы кто хотябы эти тесты на ленинграде-1 :v2_rolley
goodboy, а для прошивки в одну из областей ПЗУ можно сделать?
---------- Post added at 12:28 ---------- Previous post was at 12:27 ----------
желательно оба теста
Фигня это. Вайт как раз особо не причем, там погрешность будет вполне допустимая(проверял на Ленинграде с вайтом и без, но с правильным положением инта).
На том же ленинграде-1 с исправленным интом он показывает нормально.
Автор видать когда его делал ориентировался на количество тактов, но не учел торможение проца за счет самих тактов во время рисования экрана. Из за этого на фирменном 48, на дельтах с раздельными полями памяти и на профиках он работает не правильно.
Не совсем , на всех остальных наших клонах он показывает правильно, но только количество тактов от начала инта.
Хотя в любом случае этот тест только примерно показывает положение инта.
Чтоб настроить инт с точностью до такта, лучше правильно распаять порт ФФ и настроить инт по программам ulatest3 и floatspy.
TestInt показывает правильные значения только для без-WAIT'овых машин.
UlaTest3 и FloatSpy наоборот показывают правильные значения только для машин с WAIT'ами, причем только для тех у которых WAIT'ы и памяти и портов в точности соответствуют фирменному Spectrum 48
Применять TestInt для машин с WAIT'ами некорректно, также как UlaTest3 и FloatSpy некорректно применять для машин с WAIT'ами отличными от фирменного Spectrum.
из-за отличий в WAIT'ах разница будет составлять до 50 строк - это допустимая погрешность? :v2_wink2:
Для сравнения:
Фирменный Spectrum 48:
http://img80.imageshack_.us/img80/3563/zxmak2spec48.png
Фирменный Spectrum 128:
http://img441.imageshack_.us/img441/...ak2spec128.png
Ленинград-1/2
http://img600.imageshack_.us/img600/...2leningrad.png
Скорпион:
http://img685.imageshack_.us/img685/...xmak2scorp.png
Пентагон:
http://img52.imageshack_.us/img52/49...k2pentagon.png
А вот и нет.
Проверял все три проги на разных клонах, и с вайтами и без и с торможением тактовки проца и с раздельными полями памяти.
UlaTest3 и FloatSpy - им вообще пофиг и на вайт и на торможение тактовки, они считают такты(именно количество тактов) от начала инта и считывают состояние порта атрибутов.
При правильном положение инта они показывают одно и тоже на ленинграде и с вайтом и без и на фирменном 48-м и на наших клонах с раздельной памятью.
TestInt - эта да, вайт для нее имеет значение, но совсем мизерное. Проверял на ленине и с вайтом и без,
а вот торможение тактовки(не путать с вайтом) во время рисования экрана играет для нее большое значение.
Еще раз повторяю, не надо путать wait с торможением тактовых импульсов проца во время прорисовки экрана.
специально сделал вариант ленинграда с отключенными WAIT'ами:
http://img198.imageshack_.us/img198/...gradnowait.png
разница не такая значительная как у фирменного спектрума потому что у Ленинграда WAIT'ов совсем немного, поэтому и влияние их заметно меньше.
---------- Post added at 22:09 ---------- Previous post was at 22:08 ----------
в рассматриваемом контексте торможение полностью идентично WAIT'у.
Гхм а какое отношение имеет эмулятор и то что на реалах отличаются показания?
Здесь ошибочка в вашем эмуляторе, у ленинграда-2 полосы совпадают нормально.
А эмулировать инт у ленинграда-1 и дельт - это безперспективное занятие,
т.к. там и там инт делался от фонаря и на двух одинаковых машинах он отличается.
Что и подтверждает мои слова.
Для справки: в фирменном спектруме 48 нет вайта, там только есть торможение тактовки при прорисовке экрана.
Вот как раз с точностью до наоборот.
При торможении тактовки, количество тактов не меняется, а при вайте как раз меняется.
Я за эти пару недель с этими вайтами и торможениями тактовки замучал и zst и Ewgeny7 и кучу реальных клонов, но зато сейчас практически полностью разобрался в этом.
Я в курсе.
Это заблуждение. В принципе можно было и догадаться что такого просто не может быть. Ведь что это за торможение, которое занимает 0 тактов? :D
Для примера рассмотрим ситуацию когда ULA останавливает процессор на 6 тактов в момент такта 14362 (исчисляемого от начала кадра):
Вариант торможения WAIT'ом - после выполнения инструкции NOP, следующая инструкция начнет выполнятся на такте 14372.
Вариант торможения CLK - после выполнения инструкции NOP, cледующая инструкция начнет выполнятся на такте 14372.
Найдите отличия :smile:
С точки зрения схемотехники разница есть и серьзезная. С точки зрения растактовки кадра - разницы нет, если не считать то что WAIT не на любом такте сможет приостановить процессор.
---------- Post added at 22:33 ---------- Previous post was at 22:24 ----------
Вообще-то это ULA Ленинград-1, а у ленинград-2 инт разве отличается? Просто мне тут выкладывали фотки мультиколора на Л1 и Л2. И судя по ним я сделал вывод что инт у них одинаковый...
Alexander Makeev, Вы вообще представляете что такое торможение тактовки ?
Объясняю на пальцах:
скажем нам надо задержать проц по времени на 2 такта.
1. удлинняем вайт на 2 такта и все, при этом проц выполнит 2 такта(проц выполнит дополнительно ноп).
2. грубо говоря подаем на проц вместо 3.5 мгц - 1.75 мгц, при этом проц выполнит 1 такт и никаких нопов выполнятся не будет, но по времени это будет совпадать с первым вариантом.
Абсолютно разная реализация инта в ленинграде-1 и ленинграде-2.
представляю, на пальцах можно не объяснять, первая моя специальность- цифровая схемотехника :biggrin:
Ваше заблуждение основано на том что развертка видеолуча задается тактами процессора, поэтому вы считаете что если остановить такты процессора, то остановится и вся ULA (читай развертка). Т.е. луч на экране телевизора застынет и будет ожидать пока на процессор опять подадут тактовую частоту :biggrin:
---------- Post added at 22:55 ---------- Previous post was at 22:52 ----------
а фотографиями экрана на живом ленинграде-2 можете помочь? :v2_rolley
Для первого тоже нужны, проверка лишней не будет :)
Кстати информацию про такты Ленинграда-1 я черпал из этой схемы, может она неправильная?
Вот как раз и нет.
Это заблуждение было у тех, кто делал наши клоны, за исключением создателей старой москвы и срисованных с нее дельт с раздельными полями памяти и создателей профиков. :)
Это Вы противоречите своим словам, наглядный тому пример ленинград-1 с вайтами и без.
Я знаю что говорю - задержки в оригинальном спектруме останавливают только процессор. ULA продолжает считать такты и на основе их формировать ТВ сигнал :v2_wink2:
Иначе и быть не может, ТВ-сигнал - это не процессор, его не остановишь. Именно поэтому ULA и останавливает процессор, а не развертку ТВ сигнала.
Не вижу никакого заблуждения разработчиков наших клонов. Их решение было вполне объяснимо - чем меньше WAIT'ов, тем больше производительность. То что это может повлиять на мультиколор в играх скорей всего просто либо сознательно не учитывали, упрощая схемотехнику. Либо просто не догадывались.
---------- Post added at 23:07 ---------- Previous post was at 23:03 ----------
в чем вы усмотрели противоречие?
Ленинград - это плохой пример воздействия WAIT'ов на мультиколор. Плохой , потому что WAIT'ы в Ленинграде возникают только во время цикла M1 и только если он приходится на нечетный такт. Это означает что WAIT'ов у Ленинграда немного, соответственно и влияние их небольшое, но более чем заметное.
Теперь смотрите:
Запускаем улатест3 на фирменном спектруме 48 и получаем:
http://zx.pk.ru/attachment.php?attac...9&d=1318254760
Теперь берем ленинград-1 с вайтом, но отрезаем нафиг инт и делаем инт на тм2 как и положено от кадрового синхроимпульса. Запускаем улатест и получаем то же самое.
Что делает улатест3: рисует в первой строке атрибуты от 64 (40 в hex) до 95(5F в hex). Далее по приходу инта начинает считать такты проца(не важно заторможенные они или нет) и считывать данные с шины.
И что получаем в итоге: что на фирменном 48, что на ленинграде, экран выводится через одно и тоже количество тактов после прихода инта. Именно тактов проца(самая левая колонка).
Теперь запускаем тестинт.
На фирменном получаем:
http://zx.pk.ru/attachment.php?attac...8&d=1318254536
А на ленинграде получаем более менее совпадающие желтую и белую полосы.
а смысл в этой операции?
Суть UlaTest3 заключается в том чтобы изучать задержки оригинального спектрума. Изучать путем поиска номера такта на котором ULA делает выборку нужного байта из видеопамяти.
А что сделали вы - подогнали растактовку таким образом чтобы значения этой программы совпадали с тем что получается на фирменном спектруме. Вы подогнали растактовку и какой смысл тогда смотреть на данные которые вы подгоняли?
То что картинка в этой программе совпадает, вовсе не означает что тайминги такие-же как в фирменном спектруме. Это значит только что вам удалось обмануть конкретную программу - UlaTest3, не более. Этим и объясняется то что в другой программе разница с фирменным спектрумом есть.
А вообще у меня есть сомнения в том что одним интом получится добиться полностью идентичной картинки UlaTest3 на Ленинграде.
В том то и дело что я ничего не подгонял.
Опять же в том то и дело что ничего я не обманывал.
Я же Вам сказал сперва разберитесь что такое вайт и что такое торможение тактовки и что такое инт и когда он должен приходить и что такое порт атрибутов и что там и когда выводится.
И бросьте эмулировать клоны по фотографиям :)
значит это случайное совпадение. Тайминги фирменного спектрума и ленинграда (с модами или без - не важно) - это совершенно разные вещи. Задержки у этих машин не имеют ничего общего.
И простыми модами ленинграда добиться такого-же поведения как на фирменном спектруме не выйдет. Если удалось подогнать уровень бордюра (о совпадении по горизонтали я уж не говорю) в одной программе, он поплывет в дургой. Потому что структура задержек у фирменного спектрума и ленинграда совершенно разная.
Вы опять путаете тайминги с тактами проца :)
Грубо говоря тайминги - это ход телевизионного луча,
а такты проца-это количество тактовых импульсов(не длину, а именно количество) пришедшие на 6 ногу проца.
Есть строго стандарты кадра.
Есть строго положение инта в кадре - сразу за кадровым импульсом.
Все остальное - лирика.
При неправильном положении инта как раз и начинается неразбериха.
Вместо того чтобы исправить положение инта, а потом подгонять все эффекты тактовкой,
начинают заниматься фигней с вайтом. Да, как вы и сказали если вайтом обмануть одну программу, то все равно глюки вылезут в другой. Но если исправить инт, а потом тактовку, то абсолютно во всех программах будет полное совпадение. Сегодня я убедился в этом на одном клоне - полное совпадение по всем программам с фирменным 48.
вы хотите сказать что у вас на Ленинграде правильно заработал мультиколор в том-же SHOCK MEGADEMO или в MDA DEMO?
Если не заработал, значит подогнали или получили случайное совпадение.
Эмуляцию я пишу по схемам, фотографии мне нужны только для того чтобы уточнить детали которые можно не заметить или которые зависят от RC цепочек. Фотография мультиколора также облегчает понимание схемы.
С тем-же Ленинградом, я заранее знал какая примерно должна получиться картинка и она получилась один-в-один такой какой я ее ожидал увидеть, разница составила 1 пиксель. К сожалению я до сих пор не уверен на 100% что это фотка не модифицированного ленинграда, т.к. в ответ на просьбу получил всего одну фотографию.
Что такое WAIT я хорошо понимаю, также как и то что такое CLK. Также как и то каким образом формируется видеосигнал. К сожалению у вас тут пробелы, поэтому вам сложно понять о чем идет речь. Очень жаль, что вас интересует больше собственная правота, чем реальность.
Буквально неделю назад я полностью реализовал мультиколор фирменных спектрумов. И я уверен, что это дает мне право считать себя достаточно компетентным в этом вопросе. Я достаточно хорошо знаю структуру задержек фирменного спектрума. Это подтверждается тем что все мультиколорные демы фирменного спектрума идут на моей модели без проблем - пиксел в пиксел.
Вы можете убедиться в этом сами - эмулятор доступен для свободного скачивания ;)
На чем основаны ваши утверждения? Вы по сути утверждаете полный абсурд. Объясню почему, такты ULA - это по сути отсчеты времени по которым ULA формирует видеосигнал. Видеосигнал не может остановиться. Останавливается процессор, а не счетчики тактов по которым формируется видеосигнал.
Когда ULA блокирует сигнал CLK процессора, такты продолжают идти, но процессор этого не видит. Т.е. по сути процессор остановлен на N-ое число тактов. В итоге процессор пропускает N-тактов. Аналогичная ситуация с WAIT. Разница только в том что CLK можно остановить в любой момент, а WAIT процессор обрабатывает только на определенных тактах машинных циклов.
Поэтому с точки зрения модели задержек для мультиколора нет разницы чем было произведено торможение процессора -WAIT'ами или CLK. Главное тут - когда и на сколько тактов процессор приостанавливает выполнение программы.
Мне честно жаль вас разочаровывать, но утверждая что во время задержек процессора такты не тикают, вы сильно заблуждаетесь.
Во время задержек процессора, на ULA продолжают поступать такты, которые все так-же считаются счетчиками. Т.е. такты кадра продолжают тикать также, как и во время когда тактовые импульсы поступали на процессор.
Более того, такты кадра будут считаться даже если процессор полностью извлечь из спектрума.
Вы можете в этом убедиться в реале - извлеките процессор и прикоснуться щупом осцилографа к ножкам счетчиков. Вы увидите импульсы, существование которых пытаетесь опровергнуть.
А теперь, хотелось бы узнать какие модификации вы проделали над ленинградом чтобы получить полную работоспособность всех мультиколорных дем фирменного спектрума? Это довольно мощное утверждение! :D
можно посмотреть как выглядит мультиколорная заставка SHOCK MEGADEMO на ленинграде с фирменным модом? :)
ps: без обид, но у меня сложилось сильное впечатление что вы преднамеренно троллите, т.к. пишете абсурд :)
А нука покажите где я говорил, что во время задержек процессора такты не тикают ?
А я разве гдето утверждал что это ленинград ?
Некоторые фото я уже сегодня тут на форуме выкладывал.
Остальные могу сделать завтра, не проблемма.
P.S. На ленинграде мы с zst пока только сделали правильный инт и убрали вайт и более менее реализовали правильный ФФ. Тактовкой на нем я займусь только завтра.
вот:
ну вот все и прояснилось. и INT я думаю у вас неправильный, он просто подогнан и если дать задержки как в фирменном спектруме, то инт прийдется опять перестраивать.
Получить мультиколор фирменных дем на ленинграде простым путем не получится. Ну по крайней мере дополнительная схема для такой модификации будет не меньше половины схемы всего ленинрграда :)
Простым поиском комбинации сигналов для блокировки CLK тут обойтись не получится. Задержки фирменного спектрума зависят не только от текущего номера такта в кадре, но и от того что процессор выставляет на шину. Последнее лишает шансов на простую модификацию.
тактами я называю тактовые импульсы поступающие с задающего генератора. Блокируете вы их поступление на процессор или нет, они всеравно есть. И они в любом случае меняются. Число этих тактов считается счетчиками ULA, выходы которых используются для формирования таймингов растра ТВ изображения. И такты эти считаются вне зависимости от наличия/отсутствия процессора и вне зависимости от того, блокируется ли подача тактирующих импульсов на CLK процессора.
О каких тактах, которые "не меняются" говорите вы? По моемому вы просто путаете циклограмму ULA с внутренней циклограммой работы процессора. Отсюда и возникшее недопонимание.
Вот Вам шокмигадэмо:
http://s017.radikal.ru/i428/1110/2e/e6b50bd675f2t.jpg
Как я уже сказал, это не ленинград, но тоже советский клон.
Безвайтовый, чисто торможением тактовки во время отрисовки экрана.
Инт также реализован, как мы с zst его реализовали в ленинграде.
Горизонт в акваплане также идеален, тарелка в даркстар, также на месте.
В веномстрайк тоже все бордюрные линии идеально совпадают.
Улатест, совпадает до такта. floatspy тоже.
тест инт тоже картинка 1 в 1 с фирменным, даже косяк на белой полосе справа такой же.
---------- Post added at 07:25 ---------- Previous post was at 06:57 ----------
А теперь один момент из жизни отдыхающих:
Берем ленинград-1, безжалостно отрезаем вайт и подпаиваем ножку проца через резюк на +5в.
Включаем - получаем фигвам.
На лицо не совпадение тактов проца с операциями с памятью.
Вайт тем и занимался, что тормозил проц, заставляя его выполнять ненужные нопы.
И как нам быть, если вайт отрезан нафиг, а времянки изменить нельзя ?
Берем сигнал CLK идущий на процессор и во время операций с памятью удлинняем первый полупериод и укорачиваем второй. Времянка CLK остается таже - 3.5 мгц,
а вот при этом ленинград стал работать нормально и не глючить.
И что мы изменили с точки зрения времянок улы ? А ничего...
Во первых WAIT никак не заставляет "выполнять ненужные нопы". Для справки - выполнение NOP без задержек занимает 4 такта (3 такта выборка из памяти и 1 такт рефреш памяти), WAIT может занимать 1 такт и обрабатывается во время цикла обращения к памяти (первые 3 такта). Так что никаких NOP'ов тут и в помине нет.
Во вторых времянки улы тут вообще ни при чем. Суть проблемы была в том по циклограмме улы ленинграда, готовоность памяти памяти немного запаздывала. Запаздывала на время заметно меньшее чем 1 такт процессора. Манипуляцией с CLK вы сместили фронт тактового импульса на эту небольшую величину. Проблема была в медлительности памяти, а не в таймингах формирования растра.