Взносы в призовой фонд конкурса "Твоя игра 5" принимаются с помощью PaуPal, ЯндексДенег или перевода на карту Сбербанка (см. http://ti5.retropc.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сек. Да, к сожалению прироста при включении кэша оказалось минимум. Тем не менее прирост есть. Все подробности на соседнем форуме.
сам архив с обновлением тут.
Последний раз редактировалось Sayman; 23.09.2014 в 11:46.
Последний раз редактировалось Ewgeny7; 23.09.2014 в 14:46.
Напрасно пресекли. Таким образом в "больших" системах распознается обычно факт смены диска. Если открыть файл на запись, и в промежутке между открытием и записью/закрытием сменить диск операция чтения вам вернет что ей под руку попалось, а операция записи вам распашет всю файловую систему. Просто это все обычно завязано еще на признаки DOOR_OPEN и REMOVABLE_MEDIA. Биос BPB не перечитывает если носитель несьемный, или на сьемном дверца/лоток не открывалась, а просто возвращает управление. А если детектит факт смены диска, то дает ошибку "носитель был сменен". Не знаю реализована ли такая фича в биосе спринтера.
Но просохатить BPB никак нельзя. Можно убить диск.
Последний раз редактировалось ram_scan; 23.09.2014 в 16:02.
Факт смены диска на несъёмных носителях крайне сомнителен. на дискетах да, знаю про смену. пока если пишем на дискету или читаем с дискеты, при смене дискету можно запороть. с винтом такое не прокатит. этот момент я помню, доработаю уже когда будет железный спринтер.
ещё пока ехал домой, вспомнил такой момент - какой адекватный человек, будучи в здравом уме, решит во время записи дискеты её же вытащить и вставить другую? на дискетах-то да, отслеживать смену диска нужно. как это работает сейчас - загрузились с дискеты. пишем c:\fn\fn (просто для примера). тут будет вызвана процедура open_dsk которой передан аргумент с кодом диска C. Процедура сравнит диск текущий (а это будет диск А) и код диска в аргументе. не совпадают, значит нужно перечитать. а если у нас уже диск C текущий и мы вызвали какую-то прогу с того же диска, смысла перечитывать нет. Есть резон перечитать диск если была операция записи.
Последний раз редактировалось Sayman; 23.09.2014 в 18:34.
Квотить все не стал. Я не напрасно упомянул про атрибут REMOVABLE_MEDIA. Процедура смены носителя актуальна только для сменных и сетевых девайсов (для сетевых правда другой атрибут есть, там свои заморочки). Ну это раз.
А что касается "извлечь диск во время записи", так существует туча программ, которые постоянно в файл не пишут, но в процессе работы держат его открытым. Например большинство виденных мной текстовых редакторов, которые способны работать с документами которые не лезут целиком в память. При отсутствии контроля за сменой носителя можно открыть файл, извлечь диск, вставить другой, и успешно сохраниться и файл закрыть. Что произойдет с файловой структурой при этом обьяснять не надо. Это два.
Так что постоянное ощупывание BPB сделано не просто так. И ощупывать это дело необходимо. Даже для носителей доступных только на чтение. Иначе можно прочитать не то что собирался.
Я опять-же не могу утверждать как это сделано в CP/M, но в MS-DOS которая из этой CP/M многими ногами растет файл через FCB можно открыть не только с текущего диска.
Вся засада не в том что BPB ощупывается, а в том как определить момент когда BPB потерял актуальность чтобы дать по рогам операции чтения/записи. Можно на каждый чих его перечитывать и сравнивать не поменялось ли чо, и если поменялось то слать всех лесом. Тут все от контроллера устройства зависит, способен ли он сказать что пока он ничонеделал он из готовности выходил.
Последний раз редактировалось ram_scan; 23.09.2014 в 21:15.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
как и я. всё сильно проще, чем ты думаешь. открыв файл и не закрыв его и после сменив дискету. ну что же, сам виноват в порче дискеты. в любом случае, отслеживать такие вещи просто. в досе там в open_dsk достаточно добавить пару строк. ну ещё в Func_14 тоже там одну строчку ввести почти в начале. всё банально - если диск сменный, то перечитать bpb. если диск не сменный и диск текущий == диску в аргументе, но была запись (есть изменения, стоит dirty флаг), то перечитать bpb. не сложно и не долго. непосредственно аппаратно выявлять смену дискеты, то на спринтере скорей всего не прокатит. не уверен я. ситуация с редактором тобой описанная несколько не корректна. корректно всё-таки файл закрывать. в крайнем случае при операциях чтения (т.е. когда файл большой и весь не влезает и мы его читаем кусками) это допустимо. если пользователь внёс в файл изменения и начинает писать, то лучше всего файл закрыть и открыть его по новой. кроме того. если проводить аналогий с мс-дос, то мс-дос позволяет открывать несколько раз один и тот же файл. соответственно ничто нам не мешает этот файл при записи открыть повторно, сделать запись и эту копию закрыть. перед закрытием получить текущее положение внутри файла, закрыть файл, передвинуть указатель в ранее открытом для чтения файле используя свежие данные и перечитать кусок. хотя наверно можно и не перечитывать. в итоге данная манипуляция спасает от тех, кто прочитав файл с одной дискеты, начинает тут же записывать его на другую дискету и потом бегает и кричит, что его дискета здохла, а твой редактор нехороший...
что-то мы сильно ушли куда-то. подобные большие темы лучше через личку проводить или в отдельной теме, чтобы тут сильно не захламлять.
и да, кстати, на спринтере нет цпм. его дос даже примерно не совместим с цпм. там есть эмулятор, но он глючный. можно сказать, что не рабочий.
Последний раз редактировалось Sayman; 23.09.2014 в 22:04.
Всем привет. Приехал вчера Acex, запаял я его, но Спринтер работать не хочет. В связи с этим вопрос знающим людям. Китайцы по доброте душевной вместо EP1K30QC208 положили EP1K50QC208-3N. Собственно, заметил, когда уже припаял Так вот, может быть кто-то знает, насколько это критично.
Непропаев/соплей нет, элементы исправные, частота 14М есть, прошивка EPM7064 - sp2, 10K_CLK и 10K_DAT0 есть, на выходе 10K_CNFD постоянно 0, на nSTATUS периодичные короткие отрицательные импульсы, судя по описанию процесса загрузки - Acex устанавливает его в 0 при ошибке CRC, чем вызывает сброс процессора.
Скрытый текст
OLD SCHOOL:
Leningrad-1 48K
Baltik-48
Корвет 8010
МС 0511
Поиск-1 512К
Хобби ПК8000
Вектор-06Ц
MC 1502
REMAKES:
Орион-128 rev.512
Pentagon-128 [512] release 2012
Scorpion ZS 1024 turbo+
ZXM-Phoenix rev05.1+ZXM SoundCard Lite+ZXM SoundCard Extreme+ZXM GS
ATM Turbo 2+ ver 7.10
Радио-86РК
ЮТ-88 Minimal
[свернуть]
Это "доброта" приводит к не соответствию "прошивки" ПЛИСы к её фактическому статусу.
Иными словами для 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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)