Тема: Вопросы по программированию Агата
Собственно несколько вопросов:
На реальном Агате 30 лет назад у меня не было доп. памяти и поэкспериментировать не получилось...
1. Как правильно программно определить наличие модуля доп. ОЗУ?
Я конечно знаю, как подключаются и отключаются банки памяти доп. ОЗУ. Я знаю о приоритете, если таких модулей несколько. Алгоритм в принципе прост, начать с 6-го слота, попытаться подключить банк модуля по какому-либо адресу, произвести операции чтения/записи/переключения банков и ежели результата нет, уменьшить слот и т.д.
Но тревожит вот вот что, а если там в слоте какое-то гипотетическое устройство? И мои операции записи по адресам CXYY, где X от 2 до 6, вызовут нештатное срабатывание этого устройства, тогда что?
Можно конечно сразу после старта пробежаться чтением по адресам СXky, от CX00 до CX7F, и если это доп. модуль, то по каждому адресу CXkz должно лежать значение kn, а по адресам СX(8+k)z, тоже kn т.е. k должно везде совпадать... Так что-ли?...
2. При подключении банка доп. модуля ОЗУ по адресам E000-FFFF меняется режим работы псевдо ПЗУ, в том числе и для адресов D000-DFFF где в тот момент подключен банк основного ОЗУ. При подключении банков доп. ОЗУ вне адресов D000-FFFF, режим работы псевдо ПЗУ не меняется... Конечно это не вопрос, можно произвести запись в регистр С080+XY, и все встанет на свои места, но так ли это на реальном железе?
3. Теоретически, к разным адресам можно подключать один и тот же банк ОЗУ. Хоть основного, хоть дополнительного. Грубо говоря, можно во всем пространстве адресов сделать подключенным один единственный банк памяти. Есть ли на это какие-либо реальные ограничения?
4. Как определить наличие контроллера дисковода 840кБ? Сравнивать что записано по адресам CX**? А прошивки контроллеров одинаковые были или различались? Аналогичный вопрос с контроллером принтера...
Извиняюсь, если где-то на сайте есть ответы на эти вопросы... информации очень много выложено, еще не успел все перечитать...