всем пока
всем пока
Возможно, курение исходников эмуляторов - неплохой путь для нахождения новых детектов. ZXMAK2 в этом смысле хорош.
Я понимаю, как разбираться в железе, но прошу поделиться конкретным опытом, так же, как я поделился своим опытом чуть выше. Изобрести тест ничего не стоит, а вот учесть, что новоизобретённый тест сделает на какой-нибудь неучтённой конфигурации - далеко не тривиальная задача.
introspec, я так понял ты собираешься сделать универсальную тестирующую процедуру, которая однозначно на выходе выдает модель?
Думаю тут комплексно всё тестить нужно, и память, и такты и прошивки.
Ну я примерно так и делаю сейчас. Любую классику я сейчас ловлю по числу тактов и/или поведению диспетчера памяти #1FFD; плюс, есть ещё описанное выше свойство ПЗУ, которым я больше не пользуюсь, хотя работало оно, кажется, неплохо.
Проблемы у меня начинаются с отечественными клонами, т.к. многие из них имеют довольно похожие времянки. Плюс, их реально слишком много, а хочется, ок, если не поддерживать ВСЁ, то хотя бы более-вменяемо отрабатывать на неподдержанном "в лоб" железе.
хорошее определение классики (для правильного построения бордюрного скролла) есть в игре Sentinel, там после задержки проверяется системная переменная (frames)
Компы Амстрада можно определить по 1FFD, отключением ПЗУ, потом смотрим регистры FDC если они есть, то вполне вероятно, что у нас +3. У +2(серый) и +2A/B+3 разные страницы медленные (на форуме velesoft расписывал уже 2 или 3 раза). Читать содержимое ПЗУ не очень надёжный способ, т.к. юзер ПЗУ может и заменить. Если на профи нажата кнопка отключения всего, что выше Sp-128, то DFFD не опознается никак. Времянки смотреть + читать пустую шину данных, на 48, 128 и +2(серый) будут читаться атрибут если мы читаем в момент его отображения на экране, на компах от Амстрада этого вроде нет (я не помню точно).
Спасибо! у меня с классикой пока нет проблем, но глянуть полезно будет.
---------- Post added at 13:09 ---------- Previous post was at 13:01 ----------
Да, про дополнительные ПЗУ, изменённые медленные страницы и отсутствие порта #FF у Amstrad я знаю. Про порты диска я не подумал, спасибо, хотя пока мне не нужно было отличать +2а от +3.
Про тумблер у профи не знал - получается, надёжнее всего сделать тест задержек памяти и ловить отечественные клоны на их отсутствии. Спасибо, это очень полезная информация.
Если тест загружается с магнитофона то область переменных TR-Dos может быть еще не инициализирована.
А если серьезно, то надо делать три теста для более менее правдоподобного определения модели:
1) CRC16 ПЗУ (и соотв. где-то под рукой иметь табличку собранных заранее значений);
2) Длина INT
3) Порты
Только вот какой смысл? Такой полноценный тест как раз и займет большую часть ОЗУ в 16k модели. Лучше заранее затачивать свои разработки на кол-во строк в экране Pentagon/Original - все остальное лесом.
тут уже чисто логика здравого разума. Если загрузили с магнитофона при наличии TR-DOS - ну не лох ли я? Во всяком случае катастрофы не будет, как при попытке обращения к TR-DOS при ее отсутствии.
---------- Post added at 12:16 ---------- Previous post was at 12:14 ----------
не очень удачная идея... для фирменных машин - все ок, а вот для остальных... Сколько версий 48го бейсика существует? Сотни, если не больше.
drbars, увы итальянский сайт с ромами сломался... но сам можешь примерно прикинуть - чуть ли не каждая фирма, выпускающая клон спектрума считала своим долгом сделать свою версию бейсика, внедряла в нее русский шрифт, копирайты, турбо-загрузчики и прочие плюшки. Один Робик только имеет 3 версии ПЗУ Basic48, из-за чего поплатился с совместимостью, как и многие другие русские клоны. А всякие Didactic Scalika, Delta, Орель БК??? Или они все будут иметь одну CRC?
---------- Post added at 12:30 ---------- Previous post was at 12:28 ----------
Я не говорю уже о том, что некоторые версии TR-DOS с возможностью чтения с винта, часть функций содержали процедуры работы с винтом в области 48го бейсика.
---------- Post added at 12:31 ---------- Previous post was at 12:30 ----------
ПЗУ Basic48 Кворумов так же содержало модифицированный шрифт.
---------- Post added at 12:32 ---------- Previous post was at 12:31 ----------
OpenBasic или как его там... так же очередная версия![COLOR="Silver"]
---------- Post added at 12:53 ---------- Previous post was at 12:32 ----------
нашел полсотни ромов... подскажите чем проверить уникальность файлов?
UPD: нашел, среди 50 ромов только 2 одинаковых пары! Все еще думаете сотню не наберем? ;)
http://s019.radikal.ru/i612/1309/11/bd51e8efacb0t.jpg
---------- Post added at 13:10 ---------- Previous post was at 12:53 ----------
Все ромы тут - http://rghost.ru/48835637
BYTEMAN, ну не то что бы мало... но оно указывает уже на то, что таким способом определять модель нет смысла, только для "фирмы"...
Почему нет смысла проверять CRC ПЗУ? Зато так вы, скажем, сможете точно определить какая из трех моделей Робика перед нами. Самая точная привязка по железу. Ну а если кто ПЗУ своего клона перепрошил - тут как бы сам виноват. Вся табличко займет 100 байт.
В принципе, АТМ можно попытаться определить, написав на экране большими буквами что-то обидное для АТМ-щиков.
Если человек со злости ударит по клавиатуре -- значит, АТМ.
Этот же способ годится для определения некоторых других моделей.
А если серьезно -- а может, пускай юзер сам в сетупе выбирает модель из полусотни вариантов, а тест только на тонкие различия смотрит?
надо уходить от четкой логики к нечеткой:) там можно и пзу применить, и все что хочешь. и даже отмазаться, что вот 99%, что у вас скорпион, а не 100%:)
И крайне желательно предусмотреть ручной выбор, на случай если неправильно определит автоматом или попадется неизвестный зверь. Тем более что:
1) уже писали (хотя можно попытаться определять не CRC или не только его, а отдельные куски кода или например надписи)
2) длительность инта на многих клонах пытались (доработками или настройками)
3) Многи порты (особенно память) на разных клонах могут пересекаться или дублироваться
---------- Post added at 16:45 ---------- Previous post was at 16:30 ----------
Если не бОльшая часть, то очень многие такие ПЗУ давно заменены на стандартные
---------- Post added at 16:51 ---------- Previous post was at 16:45 ----------
А вообще, imho, задача сильно упрощается если определиться для чего это определение нужно. Для многих задач достаточно не достоверно определить модель, а определить определенные параметры модели или их совокупность.
Лично меня в первую очередь интересуют точные временные параметры кадра (бордер и/или мультиколор). К сожалению, варианты с ручным выбором далеко не всегда реалистичны, просто в силу усложнения итогового кода и ограниченных возможностей спектрума как машины. Более реалистично, с моей т.зр. оказывается поддержать фиксированный набор хорошо изученных и распространённых моделей.
1. Тесты ПЗУ я не считаю элегантными и, по возможности, стараюсь их избегать, т.к. они, в каком-то смысле, косвенные. Т.е. если мы видим ПЗУ как у оригинального Спектрума, это не означает, что это Спектрум оригинальный. Если мы видим ПЗУ отличное от оригинального Спектрума, это не значит, что интересующие меня времянки не совпадут с оригиналом. Не очень ясно в таком случае, как относиться к любым итоговым результатам таких тестов - в любом случае, решение придётся принять на основании чего-то ещё, так зачем плодить сущности? Примерно по тому же принципу, определение TR-DOS по системным переменным - возможно, но не очень-то и надёжно.
2. Длительность инта. Кстати, неудачное название теста, т.к. под этим некоторые люди понимают число тактов между кадровыми прерываниями, а некоторые - собственно, саму продолжительность сигнала кадрового прерывания поступающего на процессор. В моём понимании, это отличный тест, т.к. его легко сделать компактным по памяти, и т.к. этот тест позволяет чётко отличить некоторые модели спектрумов, в частности пентагон и зелёный скорпион, а также спектрумы от Amstrad.
3. Именно из-за того, что порты пересекаются, дублируются и, зачастую, из-за неполной дешифрации, ещё и откликаются на чужие имена, я и просил людей поделиться своми наработками в этом плане.
4. У себя в программе я остановился на 2 основных тестах: кол-во тактов на фрейм + вариант кол-ва тактов на фрейм завязанный на медленной памяти, так что можно отличать компьютеры с вейтами от компьютеров без вейтов, а ещё и сортировать по видам вейтов. Кроме этого, я написал дополнительный определитель по портам, но им я совершенно недоволен, т.к. он далеко не всегда отлавливает то, что мне хотелось бы отловить.
Если временные параметры, то что мешает запилить сетуп, в котором юзер курсорными клавишами подгоняет простенький бордюрный эффект под метку на экране?
Согласен, кроме ПЗУ, по причинам изложенным выше. Проверять ПЗУ по-настоящему есть смысл только в том случае, если планируется именно что использование ПЗУ. По-настоящему, я надеялся услышать какие-то идеи относительно 3, т.е. о проверенных в деле последовательностях для тестирования моделей по портам.
---------- Post added at 15:44 ---------- Previous post was at 15:40 ----------
Мешает то, что есть очень много различных подводных камней, которые можно обойти в случае знания конкретной модели спектрума, и которые нельзя обойти "простеньким бордюрным эффектом". Разные виды задержек памяти и процессора. Разное положение int относительно экрана.
А что тут сложного? Пауза больше -- пауза меньше.Цитата:
Разное положение int относительно экрана.
Мда, согласен.Цитата:
Разные виды задержек памяти и процессора
Ко мне больше подходит вот это. Я не кодер.Цитата:
Ммм... давай сделаем так, запрограммируюй что-нибудь
А если поиграть со стеком на грани вылета из прерывания и посмотреть, в какой памяти на каких значениях процедура вылетает?
Ты извини, если я случайно глупости пишу.
---------- Post added at 17:03 ---------- Previous post was at 17:01 ----------
Есть такой прием -- "свежая голова", человек со стороны. Иногда он неожиданно находит правильное решение.
Вот я и хочу тебе помочь.
Определенное количество раз за прерывание и в определенном порядке ноликов и единичек по определенному алгоритму. На этом сигнале в свое время строилась система защиты плат от пиратского копирования. "Родная" ПЗУ от МикроАРТ была заксорена (так, что даже не просмотришь HEX-эдитором), а в определенной последовательности ноликов и единичек сигнала Z был зашифрован ключ от расксорки. Если ключ не подходил (или контрольная сумма ПЗУ в результате правки не совпадала), комп ругался, что он взломан злобными хакерами и отказывался работать (выхавал надпись "I cracked! I halted! Press RESET to continue!"). Сама ПЛМ 1556ХЛ8 была защищена от считывания, чтобы нельзя было посмотреть, как сформировать такой же сигнал. Само собой, что сигнал Z был разным у разных версий ATM - на ATM-1 - одна последовательность, на ATM-2 версии фирмы ATM - другой, ну уже на ATM-2 и 2+ от МикроАРТ - третий. В современном ПЗУ xBIOS, само собой, эта защита уже не используется...
Но это так - сообщаю для академического саморазвития. Нам все эти последовательности не нужны. Нам нужно просто дать HALT, после чего в течении одного прерывания читать нужный бит. Если он хотя бы ОДИН раз изменит свое значение, значит это та самая модель, которую мы определяем. Вот и все.