Именно так. Автор Pentagon 2.666 сидит здесь: Алексей Жабин <KingOfEvil :) yandex.ru>
Вид для печати
Давненько меня тут не было. Много работы и всё такое. Спринтер мой пока ещё у Жижа, но я его заберу. если восстановить не получится, буду собирать на новой плате (есть место где есть ещё одна пустая). А пока нет железного Спринтера, используя эмулятор zxmak2 (Спасибо за плугин Дмитрию, хотя плугинчик не допиленный) накидал пару обновлений на местную дос. есть два обновления - 1.62.11 и 1.62.16.
в чём отличие между 1.60 (1.61.8) и новыми?
Основное отличие в том, что в старой системе все файловые операции были построены на основе индексных регистров, в первую очередь iy, в котором хранился адрес текущего файлового дескриптора. В новых версиях iy не используется, алгоритм работы с дескрипторами изменился. Изменил процедуру деления (div32) воткнув её из Профинской PQ-DOS. Был ещё один осадочек - при чтении и/или записи система постоянно (зачем то) пыталась залезать в биос с вызовом открытия девайса и сразу следом делала чтение bpb с последующим разбором. Присёк это безобразие. Василий с соседнего форума помог с тестирование обновлений на реальной системе (за что ему отдельное Спасибо!).
В обновлении 1.62.16 добавил две функции и две утилиты. В общих чертах - эта версия является попыткой заставить дос работать с драйверами в кэше. Для Спринтера 97 была такая утилита - cachedos.exe, которая помещала в кэш драйвера дисковых устройств (кусок биоса). Но на Спринтере 200x эта утилита не работает, да и не может работать. Поскольку железного Спринтера у меня нет, оценить производительность в кэше я не могу. Утилита timer.exe запущенная Василием на его Спринтере показала, что код помещённый в кэш даёт немалый прирост производительности на некоторых операциях (примерно в 4 раза относительно кода в озу, т.к. код в озу тупит из-за пачки вэйтов, я подумал, что в кэше вэйтов явно должно быть меньше). Timer.exe показала, что код исполняющийся в озу исполняется примерно на частоте 8 или 9 мгц. код из кэша на частоте почти 21мгц (там 20.9мгц). Поэтому я накарячил 16й билд куда воткнул ecache.exe для включения кэша (вызывает функцию 0ch из доса, там одна страница памяти помечется как занятая, код страницы помещается в переменную (флаг) bios_cache и возвращается в утилиту, а потом кусок биоса копируется в 0е окно процессора в кэш, в заказанную страницу помещается на адрес c100h переключатель пзу/кэш) и dcache.exe (выключает кэш, сбрасывает флаг, возвращает ранее занятую страницу).
Тесты показали, что в старой версии 1.60 или 1.61.8 копирование в FN файла размером 1.43мб с диска C на диск D производится за 60сек. На 1.62.11 этот же файл на тех же дисках та же операция показала уже 24сек. В 1.62.16 при включённом кэш показывает 21сек. Да, к сожалению прироста при включении кэша оказалось минимум. Тем не менее прирост есть. Все подробности на соседнем форуме.
сам архив с обновлением тут.
Напрасно пресекли. Таким образом в "больших" системах распознается обычно факт смены диска. Если открыть файл на запись, и в промежутке между открытием и записью/закрытием сменить диск операция чтения вам вернет что ей под руку попалось, а операция записи вам распашет всю файловую систему. Просто это все обычно завязано еще на признаки DOOR_OPEN и REMOVABLE_MEDIA. Биос BPB не перечитывает если носитель несьемный, или на сьемном дверца/лоток не открывалась, а просто возвращает управление. А если детектит факт смены диска, то дает ошибку "носитель был сменен". Не знаю реализована ли такая фича в биосе спринтера.
Но просохатить BPB никак нельзя. Можно убить диск.
Факт смены диска на несъёмных носителях крайне сомнителен. на дискетах да, знаю про смену. пока если пишем на дискету или читаем с дискеты, при смене дискету можно запороть. с винтом такое не прокатит. этот момент я помню, доработаю уже когда будет железный спринтер.
ещё пока ехал домой, вспомнил такой момент - какой адекватный человек, будучи в здравом уме, решит во время записи дискеты её же вытащить и вставить другую? на дискетах-то да, отслеживать смену диска нужно. как это работает сейчас - загрузились с дискеты. пишем c:\fn\fn (просто для примера). тут будет вызвана процедура open_dsk которой передан аргумент с кодом диска C. Процедура сравнит диск текущий (а это будет диск А) и код диска в аргументе. не совпадают, значит нужно перечитать. а если у нас уже диск C текущий и мы вызвали какую-то прогу с того же диска, смысла перечитывать нет. Есть резон перечитать диск если была операция записи.
Квотить все не стал. Я не напрасно упомянул про атрибут REMOVABLE_MEDIA. Процедура смены носителя актуальна только для сменных и сетевых девайсов (для сетевых правда другой атрибут есть, там свои заморочки). Ну это раз.
А что касается "извлечь диск во время записи", так существует туча программ, которые постоянно в файл не пишут, но в процессе работы держат его открытым. Например большинство виденных мной текстовых редакторов, которые способны работать с документами которые не лезут целиком в память. При отсутствии контроля за сменой носителя можно открыть файл, извлечь диск, вставить другой, и успешно сохраниться и файл закрыть. Что произойдет с файловой структурой при этом обьяснять не надо. Это два.
Так что постоянное ощупывание BPB сделано не просто так. И ощупывать это дело необходимо. Даже для носителей доступных только на чтение. Иначе можно прочитать не то что собирался.
Я опять-же не могу утверждать как это сделано в CP/M, но в MS-DOS которая из этой CP/M многими ногами растет файл через FCB можно открыть не только с текущего диска.
Вся засада не в том что BPB ощупывается, а в том как определить момент когда BPB потерял актуальность чтобы дать по рогам операции чтения/записи. Можно на каждый чих его перечитывать и сравнивать не поменялось ли чо, и если поменялось то слать всех лесом. Тут все от контроллера устройства зависит, способен ли он сказать что пока он ничонеделал он из готовности выходил.
как и я. всё сильно проще, чем ты думаешь. открыв файл и не закрыв его и после сменив дискету. ну что же, сам виноват в порче дискеты. в любом случае, отслеживать такие вещи просто. в досе там в open_dsk достаточно добавить пару строк. ну ещё в Func_14 тоже там одну строчку ввести почти в начале. всё банально - если диск сменный, то перечитать bpb. если диск не сменный и диск текущий == диску в аргументе, но была запись (есть изменения, стоит dirty флаг), то перечитать bpb. не сложно и не долго. непосредственно аппаратно выявлять смену дискеты, то на спринтере скорей всего не прокатит. не уверен я. ситуация с редактором тобой описанная несколько не корректна. корректно всё-таки файл закрывать. в крайнем случае при операциях чтения (т.е. когда файл большой и весь не влезает и мы его читаем кусками) это допустимо. если пользователь внёс в файл изменения и начинает писать, то лучше всего файл закрыть и открыть его по новой. кроме того. если проводить аналогий с мс-дос, то мс-дос позволяет открывать несколько раз один и тот же файл. соответственно ничто нам не мешает этот файл при записи открыть повторно, сделать запись и эту копию закрыть. перед закрытием получить текущее положение внутри файла, закрыть файл, передвинуть указатель в ранее открытом для чтения файле используя свежие данные и перечитать кусок. хотя наверно можно и не перечитывать. в итоге данная манипуляция спасает от тех, кто прочитав файл с одной дискеты, начинает тут же записывать его на другую дискету и потом бегает и кричит, что его дискета здохла, а твой редактор нехороший...
что-то мы сильно ушли куда-то. подобные большие темы лучше через личку проводить или в отдельной теме, чтобы тут сильно не захламлять.
и да, кстати, на спринтере нет цпм. его дос даже примерно не совместим с цпм. там есть эмулятор, но он глючный. можно сказать, что не рабочий.
Всем привет. Приехал вчера Acex, запаял я его, но Спринтер работать не хочет. В связи с этим вопрос знающим людям. Китайцы по доброте душевной вместо EP1K30QC208 положили EP1K50QC208-3N. Собственно, заметил, когда уже припаял :) Так вот, может быть кто-то знает, насколько это критично.
Непропаев/соплей нет, элементы исправные, частота 14М есть, прошивка EPM7064 - sp2, 10K_CLK и 10K_DAT0 есть, на выходе 10K_CNFD постоянно 0, на nSTATUS периодичные короткие отрицательные импульсы, судя по описанию процесса загрузки - Acex устанавливает его в 0 при ошибке CRC, чем вызывает сброс процессора.
Это "доброта" приводит к не соответствию "прошивки" ПЛИСы к её фактическому статусу.
Иными словами для EP1K50QC208-3N нужна другая прошивка.
До кучи ещё важно чтобы "прошивка" соответствовала speed grade конкретной ПЛИС.
В Ваше случае требуется "найти" прошивку именно для EP1K50QC208-3 (объём 50 и скорость -3). Подсказка: сию прошивку можно "попросить" у автора "оригинальной прошивки".
Даташит говорит о некой дополнительной совместимости по 5 Вольтовым операциям с PCI 2.2 1 скоростных чипов против 3. Хотя оба умеют 2.5, 3.3 и 5 Вольт.
http://images.ihscontent.net/vipimag...TES00335-1.pdf
andy150677, спидгрейт не критичен - тут в теме есть сообщение что работает стабильно на другом спидгрейте.
А вот то что EP1K50QC208 больше чем нужно - имея скромные познания - нужно в квартусе самому скомпилировать прошивку из исходников под этот тип микросхемы.Будет работать или нет не могу сказать.
Еще частота должна быть 14*3=42мгц или подбирать кварци или ставить готовый резонатор 42 мгц.
Понял, спасибо всем, я так и подозревал, просто развеять сомнения хотел :)
По скорости - скорее всего подойдет, т.к. даже на чьем-то фото видел EP1K30QC208-3N. Palsw, по частоте все тоже правильно - я имел в виду частоту проца, она 14М до прошивки, потом поднимается до 21М (вроде?). С кварца вполне так 42М идет. По прошивке - есть у меня архив, который выкладывался здесь ранее - в нем есть файлы квартуса sp2_1k30.*, попробую из них сделать, только квартус 9.0 скачаю, т.к. он последний, кто Acex поддерживал.
Есть еще непонятный момент - глянул бегло прошивку _sprin.bin в части заливки прошивки в альтеру. Получается, что процесс заливки идет бесконтрольно на границы массива - т.е. альтера сама должна понять, что уже наелась конфигом? Это я к тому, что размер RAM по даташиту у 1К50 - 40К вместо 24К у 1К30.
Автора оригинальной прошивки, к сожалению, уже нет в живых. Автором был Иван Мак.Цитата:
Подсказка: сию прошивку можно "попросить" у автора "оригинальной прошивки".
В исходниках какие есть, последняя версия прошивки для альтеры - 3.00 (если верно понял). в наличии есть собранная 3.04 и она рекомендована к прошивке, т.к. устраняет перегрев видео-памяти на версиях спринтера, где стоит видео-память в шахматном порядке (альянсовские микрухи). но если вам это не сильно напрягает, то в Max II+ проект надо пересобрать под указанную альтеру. Если пересобирать в Квартусе, получите минимум пачку глюков, максимум ничего работать не будет. Евгений уже пробовал собирать прошивку в квартусе. В итоге из-за его (Квартуса) оптимизаций на его спринтере гора глюков, в частности, не работает флопогрыз. кроме того, не забываем, что для большой альтеры её прошивка затягивается в неё из биоса при включении или ресете компа. если проект пересобирать, то после компиляции должен быть файл с расширением ttf. этот файл при помощи нужной программки написанной Иваном перегонять в bin, который потом при сборке биоса на какой-то стадии приклеивается.
Sayman, спасибо за информацию, что-то мне начинает казаться. что проще перепаять альтеру :)
andy150677, на самом деле, лучше протестировать эту тему. если я верно понял, у альтеры которую ты запаял больше "вентелей" да? можно тогда пересобрать прошивку. пусть будет 3.00, но зато знать будем, попрёт оно или нет. если попрёт, то тогда можно будет чё-нить туда накарячить ещё или старое исправить. например, дешифратор.
В общем случае ПЛИСа выдаёт тактовые импульсы на внешнюю память в нужном количестве в зависимости от своего объёма. Далее если прошивка правильная ПЛИСа должна запуститься , иначе ....
Размер прошивки зависит от количества реально существующих триггеров, ла3, озу в ПЛИСЫ (так называемый объём) и не зависит от размеров реализуемой схемы в ПЛИСе.
В идеале при создании прошивки надо учитывать скорость ПЛИСы - иначе могут быть глюки при крайних значениях температуры и питания.
Собирать прошивку лучше в той среде - в которой она изначально создавалась. Будет меньше глюков.
PS: Автору светлая память. Увы запамятовал...
Sayman, да, буду пробовать, все равно если заказывать новую, ждать месяц почти - есть время для экспериментов! Да, судя по даташиту, то больше всего - вентилей, ЛЭ, RAM, пинов.
---------- Post added at 14:09 ---------- Previous post was at 14:02 ----------
А что за программка, не знаете?
transtt3.com наверное?
andy150677, она самая
Получилось... Почти в 2 раза больше, чем для 1К30 - 98023 байт. Осталось написать распаковщик и засунуть в отведенные 60К :)
Посмотрел - там нулей вагон в самом конфиге, можно просто заменить их на подсчет количества. Другой вопрос (я не очень в теме) - есть ли другие конфиги, в мануале написано про существование конфигов, которые можно загрузить с винта.
смысл в том, чтобы засунуть туда дешифратор и расширить функционал Акселя, например. вообще, была мысля перекинуть дум из трдоса в dss. исходник есть (не знаю на сколько рабочий).
Загрузилась альтера, но лучше не стало. Вот такая сейчас картинка <2.8Mb>(искажения пр вертикали - это проблема телека). Некоторые квадратики моргают спековским флэшем. Прозвоню завтра еще раз весь Acex, а сегодня почитаю код, который выполняет проц - он сидит в третьей четверти ПЗУ, где-то было про CRC ПЗУ, а я ведь его руками склеил - проверить идею, так сказать :)
/WE для SIMM стоит постоянно в 1.
PS. ВидеоОЗУ греется - пальцы обжигаю.
andy150677, А можно фото платы крупным планом?
видео озу 5 или 3 вольтовое припаяно?
andy150677, какого тогда они греются .резюки подтяжки напаяны на видео память - на альтере питание задерлось вверх?стабилизаторы оригинальные на транзисторах или что то современное ?Потребление платы измерять?
AS7C1024 140мА кушает = 560 мА на 4х.Рабочая тепература 0-70.Замерять есть чем температуру микросхем?может там 50 градусов всего.
Опять же ничего сейчас не измерю, спят все, шуметь не хочу. Стабилизатор на 3,3В стоит LP2950-CZ3.3, а для 2,5В - на транзисторе КТ815Г, выдает 2,65В. Резисторы напаяны (это те, которые на 300 и 510 Ом, всего 8шт). Ну, может не так страшно она и греется, просто эти микросхемы самые горячие на всей плате, включая SIMM. Градусов 60 на ощупь, наверное.
уже не помню был такой вопрос в теме.
Есть микросхемы AS7C1024-12 (2000 год выпуска) и AS7C1024B-12 (год выпуска 2004) - скачал даташит и пытался понять в чем отличие но так и не понял - на вид одинаковые микрухи.кто владеет языком гляньте что лучше паять для спринтера.
Только потребление меньше у AS7C1024B-12 всего 100 мА против 140 мА у AS7C1024-12
Может просто техпроцесс улучшили и все?
год выпуска даташита имею ввиду.
Посмотрел, судя по всему, так и есть, т.к. в 2004-м появились дополнительно со спидгрейдом 10.
Самое интересное - на сайте Альянс - продажа линейки озу другим производителям.Погуглил и вот что обнаружил
AS7C1024С-12 2006 г.в.
AS7C1025B-12 и AS7C1024С-12 2004 и 2006 г.в. соотвтствено.Не такая уже и древняя Срам как тут говорилось.
Еще интересно оправдано заказывать имено AS7C1024B-12 ,а не 15 или даже 20 ?
Если перевести 12 н\с в мгц =84мгц не избыточная частота для нашего видео озу?
Что-то я погорячился, после загрузки альтеры на ПЗУ устанавливается RA15=RA16=RA17=0, также отчетливо вижу сигнал сброса, приходящий на проц по окончании заливки альтеры, т.е. должен начать исполнять код с самого начала прошивки ПЗУ. А там DI HALT. В связи с чем вопрос - не ту страницу выбирает?
andy150677, мануал по запуску на всякий http://winglion.ru/sprinter/montaj.htm
и проверки http://zx-pk.ru/attachment.php?attac...9&d=1255071632
кстати - сохранили бы все с того сайта - не ровен час - сайт закроют и труба - инфа вся потеряется.
Есть подозрение, что после сборки проекта под другую плис и получения файла большего размера эта прошивка тупо не лезет в прошивку биоса. адреса все сползли. если не ошибаюсь, заливка прошивки в плис большую происходит посредством мелкой альтеры. там одним битом она всё заливает, не помню точно по какой ноге. т.е. прошивка теперь 90кб, а заливается по-прежнему 60кб. + данные которые за прошивкой тоже сползли (адреса). хотя я могу не прав. т.е. при включении компа или его ресете в пзу включается страница с прошивкой большой плис. мелкая плис начинает перегонять от туда данные бит за битом (по одному биту). по окончанию, кажется, сигнал wr_col толи должен погаснуть, толи наоборот в 1 быть...блин, надо найти записки от Ивана, он говорил что и как.
andy150677, вот о нагреве микросхем http://zx-pk.ru/showpost.php?p=38669...6.Страно но микросхемы работают от 4,5-5-5,5 в и 4,1в это уже явно не по даташиту
Вот еще по нагреву микросхем видеопамяти http://zx-pk.ru/showpost.php?p=552726&postcount=1074
вывод - убрать нафиг резисторы подтяжки вокруг видеопамяти - они задирают питание на альтере
Sayman, конечно не лезет, для 1К50 она получилась размером почти 96К. Но т.к. бОльшую часть ее содержимого занимают нули (в процентном соотношении, вперемешку с данными), я просто посчитал их и перегнал в новый файл, в котором после нуля стоит число, обозначающее их количество в этом месте. Новый файл получился размером 50К, это уже стало нормально, чтобы его вклеить на место оригинального конфига (с адреса 0х30100 в ПЗУ). Также я поправил код заливки конфига (для его распаковки), теперь если при заливке попадается 0, в регистр В загружается следующий байт и по DJNZ будет выведено нужное число нулей. Заливщик стал больше на 12 байт, все относительные переходы я поправил. В конце ПЗУ последние 30 байт не трогал (там, где дата сборки).
Теперь все происходит так, как должно быть, т.е. после включения CLK_Z80=14M, чуть меньше секунды 7064 передает данные на 10K_D0 со стробированием на 10К_CLK, потом CNF_DONE переходит в 1, на выходе /RESET формируется короткий сигнал сброса, CLK_Z80 становится 21М, WR_COL из единицы переходит в генерацию 14М (чуть больше, правда, а может осцил врет) и на экране появляется приведенная выше картинка. Но т.к. RA17=RA16=RA15=0, начинает выполняться код из самого начала ПЗУ, а там первыми же командами идет DI HALT. И все, процессор стоит (наверное?). В связи с этим меня интересует, какая часть ПЗУ должна включиться при нормальном запуске Спринтера с 1К30, или я что-то неправильно понимаю в коде ПЗУ.
По картинке - белые и темные вертикальные полосы всегда находятся в одном и том же месте, квадратики (видимо, мусор из видеоОЗУ) - в произвольных местах при каждом включении питания. Некоторые квадратики моргают с частотой спектрумовского флэша, при этом на светлых полосах размер знакоместа (квадратика) - четко спектрумовский, на темных - ширина знакоместа меньше.
palsw, почитал, спасибо, наверное так и сделаю, все равно уже плата для экспериментов получилась. В связи с чем хочу купить новую пустую платку, чтобы на нее впаять 1К30 :)
andy150677, какая страница ПЗУ включается после заливки точно сказать не могу (какая-то из кратных вроде - 4/8...), забыл уже,а файлов под руками никаких нет - остались в Донецке. Но можете проверить в эмуляторе zxmak2, там в дебаггере отображаются нужные регистры и по мануалу (либо по содержимому дампа проверить) расшифровать. Да и сырки эмуля могут помочь - там пропускается этап загрузки ACEX-а, сразу прыгает в нужную страницу ПЗУ выставляя регистры RA как необходимо.
На конструкцию DI:HALT вы натыкаетесь - это т.н. BSOD в спринтере, там при ошибках обычно выдается на экран мол "CTRL+ALT+DEL" в верхней строке и виснем.
Также стоит обратить внимание на прошивку для мелкой альтеры, т.к. могли не ту прошивку залить - попадались тут с неправильными развертками аля ВГА.
---------- Post added at 10:18 ---------- Previous post was at 10:13 ----------
По поводу 1К50 - далеко вы с ней не уедете, как правильно заметил Рома, часть прог используют свои прошивки альтеры, а их пропатчить будет уже не просто.
Так же есть подозрение, что откомпилировали не ту прошивку или не с теми параметрами (там вроде бы одна прошивка использовалась как костяк для формирования прошивки DOOM, Sprinter-AY и прочих...).
Так что действительно проще найти 1к30...
У ПЗУ то ли один, то ли два старших бита адреса подтянуты к +5В (схемы под рукой нет), поэтому проц начинает выполнять то, что записано в верхней четверти ПЗУ
Upd. Да, см. пост ниже. Проц после включения начинает выполнять программу из последней четверти ПЗУ.
После заливки конфига в большую альтеру должен появиться сигнал WR_COL (идет с нее на мелкую альтеру и регистры цветов) и клок на проце. И какая страница ПЗУ будет подключена после заливки конфига, зависит от него самого...
по схеме сигналы ПЗУ RA16 и RA17 подтянуты к VCC резюками 1 ком
Zhizh, так я видел схему, подтянуты RA17 и RA16, и все так и происходит, и конфиг у меня уже заливается (вроде даже корректно, иначе бы альтера в соответствии с даташитом выдавала бы низкий уровень на nSTATUS, приводя к перезагрузке проца и старту заново кода из последней четверти - так у меня и было с оригинальным ПЗУ), меня интересует, какая часть ПЗУ должна включиться после загрузки конфигурации (в нормальном Спринтере), а у меня, повторюсь, после загрузки конфига становится RA17=RA16=RA15=0. И если самое начало, то интересно, каким образом проц, получая сигнал /RESET от альтеры, должен обработать DI HALT?
---------- Post added at 14:31 ---------- Previous post was at 14:05 ----------
Запустил zxmak2, подскажите, кто знает, в дебаггере в левом верхнем углу Variables - что такое SYS?
вот и я уже 1,5 часа воюю с эмулятором -терпел сколько лет все хотел реальное железо.
Но капут - на ноуте 100% загрузка проца еле вырубил.Буду пробовать на 2хяйцевом.Не плохо бы отельную темку по эмуляторам спринтера ,настройкам,конфигам.Софт какой работает какой нет и тд...
запустил - 55-60% грузит проц да и фиг с ним
беру образ из этой темы sprinter-bootable-fdd-image.img выбираю его как а и б и тишина.в сетапе выпрал все дисководы как FDD
ура - поехали.образ hdd была ссылка и просрочилась. кто поделиться?