- Вопрос про эксплуатацию СМК-512
- [+] Старые сообщения (21)
-
? maxstudios@ - 02.11.2019 23:57
Дмитрий, все варианты перепробовал, ошибка уже другая, в файле BK.EXE.
Вот такое выдает теперь:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: BK.exe
Версия приложения: 3.10.1910.7716
Отметка времени приложения: 5db68966
Имя модуля с ошибкой: BK.exe
Версия модуля с ошибкой: 3.10.1910.7716
Отметка времени модуля с ошибкой: 5db68966
Код исключения: c0000005
Смещение исключения: 00059b8f
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789
-
? maxstudios@ - 03.11.2019 00:00
У меня поддерживает только OpenGL - интегрированное видео intel GMA 3150.
-
? gid - 03.11.2019 09:42
[утилита BKHDDTool с какими образами HDD работает?]
С любыми, как с посекторным дампом HDD .img, так и с .hdi, ей без разницы
¤
про ig4icd32.dll APPCRASH в интернете пишут, что из-за косячности драйверов, кому-то помогает установка свежей версии дров.
¤
[У меня поддерживает только OpenGL]
В вин7 ещё можно включить Direct2D (для этого нужно установить DirectX redistributable), и самый дубовый рендер VFW (DrawDib) который работает в любом виндовсе.
¤
Подозреваю, что падает из-за того, что VS2017 компилирует прогу с использованием каких-то инструкций, не поддерживаемых старыми процессорами.
версия 3.8.1410.4183 - это было в 2014 году, и собиралось в VS2010 или VS2012 там всё попроще было.
-
? maxstudios@ - 03.11.2019 10:30
gid, утилита BKHDDTool работает только из командной строки? Или из эмулятора?
При запуске напрямую я c помощью кнопки Pause только смог инструкцию немного прочитать.
:)
-
? gid - 03.11.2019 15:17
очевидно, что BKHDDTool консольная прога, и она не может работать из эмулятора, т.к. в эмуляторе нет GUI для работы с утилитой.
[При запуске напрямую я c помощью кнопки Pause только смог инструкцию немного прочитать.]
Это пагубное воздействие всяких тоталкомандеров и проводников. Используйте нормальный файловый менеджер FAR.
-
? Дмитрий - 03.11.2019 20:15
>> Это пагубное воздействие
gid, это не воздействие, а незнание DOS'a :) Есть перенаправление вывода: bkhddtool >1.txt и в текстовом файле будет все, что выведет на консоль программа.
-
? Manwe - 19.09.2020 23:26
Вопрос про страницы памяти. В документации написано:
«При включении режима "All" из режимов Hlt10, Hlt11 в ОЗУ режима "All" по адресу 177130 вписывается 20+КодСтраницы».
То есть в режиме All можно подключать разные страницы. А в режиме Halt нельзя таким же образом, добавляя код страницы? Halt-режим всегда только с нулевой страницей памяти работает? Если так, то это печально.
-
? gid - 20.09.2020 13:59
там написано, что при включении режима "All" из режимов Hlt10, Hlt11, портится ОЗУ по адресу 177130. Потому что оно налагается на область регистров. Т.е. при записи в 177130 кода режима "All", этот код одновременно записывается и в ОЗУ.
В режимах Hlt10, Hlt11 по адресам 177000-177777 подключен сегмент 7 заданной страницы, и если там находился исполняемый код - то он будет испорчен, если какие-либо данные - то они будут повреждены. Поэтому это - дополнительное уточнение, что конкретно данным видом переключения нужно пользоваться очень осторожно.
Режим работы и код страницы - вещи между собой не пересекающиеся и складываются по OR, поэтому с любым режимом можно использовать любой код страницы. Halt-режим - самый обычный режим, не отличающийся от остальных режимов работы с аппаратной точки зрения.
-
? Manwe - 21.09.2020 15:04
Хм, я вот чего не понял: почему когда я устанавливаю режим Hlt11 с нулевой страницей, всё работает, а когда с кодом страницы 2015 - происходит прерывание по 4-му вектору в момент попытки установить режим? Программа переключения режима находится в нижней памяти, не в страницах СМК.
-
? gid - 21.09.2020 16:53
т.е. команда mov #6,@#177130 выполняется, а mov #2015,@#177130 уже вызывает trap to 4?
-
? Manwe - 21.09.2020 17:31
> mov #2015,@#177130 уже вызывает trap to 4?
На следующей команде. Похоже, проблема в обращении к 177130 командой CLR (R4). Если заменить на MOV #0,(R4) - не вылетает.
Пытаюсь понять логику: выходит, установка Halt-режима происходит ещё на команде MOV #2015,@#177130, до того как послан 0, "закрывающий" регистр. В этом случае понятно: CLR сначала читает содержимое 177130, а он уже в области памяти write only, как и должно быть в Halt-режиме.
Но разве так должно работать на реальном железе? Я думал, что пока не послан 0, режим контроллера не переключается.
-
? Manwe - 21.09.2020 17:54
Но самое удивительное, что на эмуляторе MOV #0 и потом CLR работает, не вываливается. А MOV #2015 и потом CLR вываливается. На реальном железе пока не проверял.
-
? gid - 21.09.2020 18:55
ну в документации же написано, что нужно использовать mov #0,@#177130 и нельзя использовать clr @#177130, как раз потому, что регистр 177130 в некоторые моменты по чтению не доступен.
[выходит, установка Halt-режима происходит ещё на команде MOV #2015,@#177130]
да, последняя команда - очистка регистра 177130 вообще не нужна, если нету физических дисководов. Она нужна только для того, чтобы остановить двигатель и погасить лампочки дисководов, после второй команды - которая как раз и устанавливает режим, попутно выдавая мусор в дисководы.
[Но разве так должно работать на реальном железе?]
именно так и работает реальное железо. См его схему.
[Но самое удивительное, что на эмуляторе MOV #0 и потом CLR работает]
потому что эмулятор не может досконально точно сэмулировать устройство. Потому-то он эмулятор, а не симулятор. Там есть допущения, когда регистр 177130 доступен по чтению, когда он не должен быть доступен в реальности.
-
? Manwe - 22.09.2020 22:16
А где почитать документацию? На pk-fpga есть "ПОДРОБНОЕ техническое описание контроллеров АльтПро", но я не на все вопросы нашёл там ответы.
¤
Сейчас у меня засада дисководом в Halt-режиме. По адресу 162364 находится процедура чтения дисковода, она обращается к 177130 и обламывается на третьей по счёту инструкции TST (R5)+
в R5 лежит 177130. Инструкция вызывает прерывание по 4-му вектору - сразу, минуя обработчик Halt-режима. А 4-ый вектор указывает на TST (R5), которая также вызывает прерывание на саму себя и рекурсивно загаживает стек.
Halt-режим включен, но никак в этом карнавале не участвует.
Это всё в эмуляторе я проверяю.
-
? Manwe - 22.09.2020 22:35
Может быть TST (R5) делает read-modify-write и контроллер как-то сходит с ума от этого? Вообще не очень понятна схема "Режимы работы и распределения памяти" - что за "170(177000hdd)-0" и "HDD :170-177000"? Есть где-нибудь человеческая схема?
-
? Manwe - 22.09.2020 23:51
Ivanq помог разобраться: недокументированная функция СМК: не все страницы работают одинаково. Нужно использовать только те, в кодах которых сброшен бит №2. Дикость, конечно.
-
? gid - 23.09.2020 08:43
[На pk-fpga есть "ПОДРОБНОЕ техническое описание контроллеров АльтПро"]
Это и есть документация, + есть ещё схема электрическая принципиальная, из которой можно узнать нюансы работы.
¤
[недокументированная функция СМК: не все страницы работают одинаково.]
Это не недокументированная функция, это наследственная фича. Я всё время про это забываю, У СМК осталось ещё от контроллеров А16 такая штука: установленный бит 2 в 177130 отключает регистры 177130, 177132 по чтению, до тех пор, пока бит 2 не будет сброшен. Это было нужно для работы Бейсика на БК10, и так оно и осталось.
Причём, где-то, в какой-то документации это упоминается, так же как и бит 3, который на БК10 подключает ПЗУ Бейсика, Причём на старых оригинальных СМК-64 этот бит 3 работает, а на старом прототипе СМК-256 и репликах СМК-512 этот функционал уже не реализован.
¤
так что когда я говорил что "последняя команда - очистка регистра 177130 вообще не нужна", я как обычно ошибался, она нужна, и в том числе и для того, чтобы очистить этот бит 2, если он будет установлен каким-то кодом страницы. Правда я через два дня снова забуду про этот бит 2 и снова стану говорить, что регистр можно не обнулять, пока снова не наткнусь на незапланированное поведение, тогда снова вспомню, и так бесконечно.
¤
Так что, использовать можно ВСЕ страницы, просто нужно при установках режимов для записи в 177130 использовать ТОЛЬКО команду MOV и больше никаких других команд. И если жалко двух слов, то для обнуления можно использовать какое-нибудь подходящее значение регистра, где младшие 11 битов равны нулю, а остальные - не имеют значения
-
? Manwe - 23.09.2020 11:13
Проверил на реальном железе, всё так же как на эмуляторе.
_
> репликах СМК-512 этот функционал уже не реализован
Вроде, недавно правили прошивку СМК ради этого. Обнаружили, что не работает Бейсик.
_
> она нужна, и в том числе и для того, чтобы очистить этот бит 2, если он будет установлен каким-то кодом страницы
Вот оно что... Спасибо за разъяснение! Добавил MOV #0 после всех операций со страницами - теперь дисковод заработал независимо от номера страницы. И в эмуляторе, и на реальном железе.
-
? gid - 23.09.2020 20:00
[Вроде, недавно правили прошивку СМК ради этого. Обнаружили, что не работает Бейсик.]
Правили, как раз добавили функционал с отключением регистров 177130, 177132 по чтению битом 2, а то они вообще не отключались и бейсик не работал. Я и правил, получилось как в оригинальном СМК-64, во всех случаях, а не только в режиме 20, как написано там https://forum.pk-fpga.ru/viewtopic.php?f=15&t=492
Серьёзные правки в прошивку внести невозможно, т.к. плата уже разведена и ноги ФПГА уже жёстко заданы. Поэтому когда не хватало то ячеек, то маршрутов, квартус всё советовал перераспределить назначения ног, чтобы нужные ресурсы высвободить, а вот фиг. Пришлось ограничиться самым минимумом.
-
? Manwe - 24.09.2020 17:51
Можно, наверное, ПЗУ СМК поправить, чтобы оно перед вызовом процедуры ENGIN сбрасывало второй бит.
-
? gid - 24.09.2020 19:12
Не надо ничего править, В ПЗУ все операции делаются корректно по алгоритму - mov #6... mov #code... mov #0...
Т.е. после себя оно оставляет всё в целости и работоспособности.
И всем остальным писателям, тоже следует придерживаться этого метода. Тогда ничего не будет глючить. Кстати, в числе 6 тоже есть бит 2 и после записи строба в регистр, он тоже отключается по чтению, но потом туда записывается код режима+страницы, и никто ничего не замечает, а потом, если вдруг забыли сбросить бит 2, начинаются сюрпризы.
- << Форум