Среда, 18.10.2017, 19:30
БК-0010.01. Повесть о настоящем компьютере
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории каталога
Введение в руководство [2]
Введение [0]
Организация БК-0010 [1]
Раздел 1. Организация БК-0010
Работа с МСД [1]
Раздел 2. Работа с МСД
Системные регистры [1]
Раздел 3. Системные регистры
Системное ПО [1]
Раздел 4. Системное программное обеспечение БК-0010
Прерывания. Приоритет ЦП [1]
Раздел 5. Система прерываний БК-0010. Приоритет процессора
Командные прерывания [1]
Раздел 6. Командные прерывания
ЕМТ БК-0010 [1]
Раздел 7. командные прерывания ЕМТ БК-0010
Коды и ассемблер. Мнемокод. [1]
Раздел 8. Коды и ассемблер. Мнемокод. Формат команды
Способы адресации [1]
Раздел 9. Способы адресации
Команды процессора БК-0010 [1]
Раздел 10. Система команд процессора БК-0010
Псевдокоманды. Метки. Комментарии [1]
Раздел 11. Псевдокоманды ассемблера. Метки. Комментарии
Программирование на ассемблере [1]
Раздел 12. Программирование на ассемблере. Начало. Трансляция программ. Ошибки
Отладка программ [1]
Раздел 13. Отладка программ. Позиционно-независимое программирование. Компановка
Подпрограммы ПЗУ БК-0010 [1]
Раздел 14. Подпрограммы ПЗУ БК-0010
Системная область ОЗУ БК-0010 [1]
Раздел 15. Системная область ОЗУ БК-0010. Некоторые секретные сведения об авторе и МП-клубе
Повышение быстродействия БК-0010 [1]
Раздел 16. Вопросы повышения быстродействия БК-0010
Об использовании ПЗУ [1]
Раздел 17. Полезная подпрограмма. Об использовании ПЗУ
Загадочные регистры [1]
Раздел 18. Загадочные регистры
Штурм системной области [1]
Раздел 19. Продолжаем штурм системной области
Об автозапуске программ [1]
Раздел 20. Об автозапуске программ
Коварные программы [1]
Раздел 21. Коварные программы
Еще о системной области [1]
Раздел 22. О пользе плагиата, или еще о системной области
О псевдокомандах и компановке [1]
Раздел 23. Еще раз о псевдокомандах, метках и компановке
Тук-тук, кто в стеке живет? [1]
Раздел 24. Тук-тук, кто в стеке живет?
Фокал с позиций ассемблера [1]
Раздел 25. Взгляд на фокал с позиций ассемблера
Наш опрос
Оцените мой сайт
Всего ответов: 47
 Каталог статей
Главная » Статьи » Об использовании ПЗУ

Полезная подпрограмма. Об использовании ПЗУ

Мы уже рассматривали ряд подпрограмм, входящих в резидентное по БК-0010. Вот еще одна, полезность которой очевидна. К очень часто встречающимся задачам при написании системных программ относится загрузка файлов с МЛ.
Конечно, мы можем написать программу загрузки самостоятельно, ведь мы знаем теперь и что такое блок параметров, и как использовать ЕМТ 36, но это займет и много времени, и много места в ОЗУ. Ведь нужно занести в блок параметров и имя, и адрес загрузки, а адрес блока параметров занести в регистр R1. А после загрузки необходимо проанализировать байт ответа, определить наличие ошибок, выдать сообщение "ошибка", если нужно... А если имя не совпадает с заданным?! Нужно выдать имя текущего файла на экран... Вот сколько всего "нужно"! А нужно ли?
Если мы будем пользоваться ЕМТ 36, то да. Но есть и другой путь. Как правило, при загрузке файла не предъявляется особых требований: нам не так уж важно, например, где размещен блок параметров. важен лишь адрес загрузки. В таком случае, можно выйти из положения куда проще. поможет в этом резидентная (размещенная в ПЗУ) п/программа загрузчика пускового монитора.

адрес обращения к п/программе: 100536.
входные данные: адрес загрузки файла - в R5.
регистры, кроме R4, не сохраняются.

При обращении по указанному адресу (адрес загрузки файла до этого нужно занести в R5, если R5=0, то загрузка по адресу, указанному в оглавлении файла) загрузчик выдает запрос ИМЯ?, в ответ введите с клавиатуры имя файла. исправления, как обычно, клавишей забой, конец - ввод.
Включается д.у. магнитофона, идет загрузка, несовпадающие имена выдаются на экран, нужный файл грузится с заданного адреса, словом, все как при загрузке из ПМ.
В случае ошибки по контрольной сумме выдается сообщение ошибка и управление возвращается вызвавшей программе, как и при нажатии клавиши стоп. при нормальной загрузке ошибка, естественно, не выдается. Что делать дальше? Это зависит от цели, с которой загружен файл.

Если его нужно, допустим, выдать на экран, то, если была ошибка чтения, продолжать работу нельзя! значит, необходимо проанализировать байт ответа блока параметров (адрес 321), и, если он не равен 0, ввести останов (чтобы можно было "принять меры"), либо сразу вновь вызвать подпрограмму. если же (321)=0, то делать то, что требовалось, с загруженным файлом. Например, можно его сразу запустить на исполнение с адреса загрузки, для чего передать управление по адресу, записанному в ячейке 264, или выдать текст на экран, и т.п. использование данной п/программы настолько упрощает некоторые задачи, что соответствующие программы становятся до смешного короткими.

Например, один из знакомых автора, О.Кирзон, подал ему идею: написать программу, которая загружает файл, и сразу запускает его на исполнение с адреса загрузки (думая, что это довольно сложно). Автор написал эту программу, которая названа "старт".
Приведем ее для того, чтобы показать, как просто решается данная задача с помощью системных п/программ:

 ; **программа старт**
а: MOV #12,R0
     EMT 16
     CLR R5
     JSR PC,@#100536
     TSTB @#321
     BNE a
     MOV @#264,R5
     JMP @R5  ;
end

Вот и все! Причем мы еще вначале переводим строку, а в конце - определяем ошибку, и если ошибка, то снова запрос имени.
Всю же поистине огромную работу по загрузке файла выполняет загрузчик 100536, с помощью драйвера мг. программа так коротка (д=30 !), что мы вполне можем ее разместить в стеке, с адреса 400. тогда мы получим постоянно действующий автомат - загрузчик (почти ни одна программа не использует стек на такую глубину, и наша программа в нем "бессмертна").

Теперь обратите внимание на строку, помеченную стрелкой. зачем она? разве нельзя сразу: "JMP @264" ? Нельзя! Микроассемблеры позволяют косвенную адресацию в JMP только через регистр, и сократить программу еще больше, увы, не удастся.

Теперь рассмотрим вопрос: а вообще, правомерно ли то, что мы сделали? допустимы ли такие "фокусы" с подпрограммами? вообще, позволительно ли использовать столь "вольно" резидентное ПО?
Кое-кому этот вопрос, несомненно, покажется праздным. еще бы! ведь программа получилось куда короче, чем с "законным" ЕМТ 36, она работает, что еще нужно?!
Вот что: наша программа потеряла "автономность", она теперь намертво "привязана" к ПЗУ БК-0010. но ведь и с ЕМТ 36 было бы то же самое? да, конечно. однако, все ЕМТ "зашиты" в ПЗУ монитора (100000...117777). подпрограммы же мы можем использовать и из тест-ПЗУ, и даже из ПЗУ-фокал. в данном случае это не так. а если все же придется обратиться к тест-ПЗУ? или к фокалу?
Ну и что, скажете вы, что тут такого, какая разница? Очень существенная: не на всех БК есть фокал! ведь фокал - это программа пользователя! а тест- ПЗУ? Уж оно-то есть везде?
Как бы не так! В комплект КУВТ-86, например, тест-ПЗУ обычно придается одно на 10-12 БК! БК-0010Ш, входящие в КУВТ, имеют другой язык - бейсик MSX, а его 3 ПЗУ занимают все адресное пространство, кроме ПЗУ монитора. в комплект БК-0010-01 ПЗУ фокал и тест обычно входят (БК-0010-01 первых выпусков фокалом не комплектовались - сказалась чья-то амбиция - как это, ведь бейсик же! - а бейсик-то оказался не очень, мягко говоря, вот и стали прилагать фокал), но они стоят в отдельном блоке МСТД, который нужно подключить к БК. Долго ли проживет при этом разъем магистрали МПИ? Вот и выходит, что программа будет годна для любой БК, только если мы в ней используем ЕМТ, и ничего больше (у БК-0010ш адреса подпрограмм даже в ПЗУ драйверов обычно иные!). так как же, имеем мы право использовать п/программы ПЗУ?

Профессионалы поднимают в таких случаях отчаянный визг: - ни за что на свете! преступление! - и что-то в этом, право, есть. действительно, тогда ведь применимость наших программ будет ограничена. Их не смогут использовать в школах, ПТУ, и т.п.
Любители поднимают не менее отчаянный крик: -какое ваше дело, что мы пишем? мы что, обязаны думать про ваши ПТУ? - и в этом тоже что-то есть. так как же быть? безусловно, чем "автономнее" программа, тем лучше. но и чем короче, тем лучше тоже! автор принял такое решение, к которому он призывает и своих читателей:

- использование п/программ фокала, видимо, недопустимо, так как не на всех даже личных БК он есть. С этой же точки зрения, лучше не писать на фокале описаний программ: не всякий владелец БК их сможет прочитать.

- использование п/программ ПЗУ монитора (100000...117777), видимо, допустимо в тех случаях, когда программа не учебная, т.е. почти всегда.

- вопрос использования п/программ тест-ПЗУ является спорным. автор считает их применение допустимым тогда, когда нужно любой ценой сократить длину программы. При этом необходимо в описании оговорить: "только для БК-0010,а для БК-0010-01 только с блоком МСТД".

Категория: Об использовании ПЗУ | Автор: ЗАЛЬЦМАН Ю.А., МП-КЛУБ, г.АЛМА-АТА
Просмотров: 735 | Рейтинг: 0.0/0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Используются технологии uCoz
Форма входа

Поиск
Друзья сайта
Статистика