Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Возврат ошибки при чтении с дисковода #12

Open
blairecas opened this issue Nov 8, 2024 · 4 comments
Open

Comments

@blairecas
Copy link

Нашел странный баг в UKNCBTL. При определенных параметрах ломается чтение дорожки дисковода.
Читается через канал 2 вроде стандартным способом.
Читаем 10001 слово поначалу с дорожки 0, сектор 2, нижняя сторона. Размер специально такой чтобы баг вылез - если взять 10000 слов например - баг может не вылезти.
Затем в цикле начинаем читать дорожку 1, сектор 1, нижняя сторона размером в 12000 слов. Через некоторое количество чтений получаем возврат ошибки.
Ошибка всегда 102 (что-то типа счетчик оборотов диска обнулился).
Возможно связано с предыдущей проблемой с программируемым таймером в ПП ибо код читалки диска в ПЗУ очень сильно его использует.
Прикладываю тестовую программу. (скомпилять в .dsk вид, в батнике написано каким образом, запустить как образ дискеты, там-же уже есть скомпиленный .dsk).
dtest.zip

@ilynxy
Copy link
Contributor

ilynxy commented Nov 9, 2024

Попробуйте запретить все прерывания вначале (или добавить векторы обработки). Если поможет -- у меня есть объяснение происходящему — при входе в бутлоадер прерывания разрешены, а векторы их неопределены.
У меня в эмуляторе не происходит ошибки (даже если не запрещать прерывания) — читает долго и упорно, а если понажимать кнопки (срабатывают прерывания), то вываливается с ошибкой 102. Это, кстати, интересно и одно другого не отменяет.

@blairecas
Copy link
Author

Попробуйте запретить все прерывания вначале
А они и так запрещены в ЦП при загрузке. Иначе по первому-же прерыванию сетевого таймера с вектором 100 произошла бы уже другая беда. А ПП в примере не трогается совсем. Он работает как работал (и запрещать прерывания там не надо).

@ilynxy
Copy link
Contributor

ilynxy commented Nov 12, 2024

А какая версия ukncbtl у Вас? У меня тестовая программа работает очень долго, если не нажимать кнопки. Если нажимать -- иногда вываливается 102.

@blairecas
Copy link
Author

А какая версия ukncbtl у Вас? У меня тестовая программа работает очень долго, если не нажимать кнопки. Если нажимать -- иногда вываливается 102.

Если смотреть по About - версия 2024.1, revision 746, build date Mar 8 2024
Ах да, надо запускать так чтобы сразу запустился DSK и произошел автостарт. Иначе таймер в ПП может "натикать" всякое и бага придется ждать долго (нет, баг насовсем никуда не пропадет).
Попробуйте запустить вот так (со своими путями к файлам):
start ....\ukncbtl\ukncbtl /autostart /disk0:..\uknc_tests\DTEST.DSK /boot1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants