Именно так. Автор 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