ЮТ-88. Операционная система CP/M. Часть 2/2.
В этом посте мы рассмотрим работу некоторых программ CP/M и научимся загружать любые программы на квазидиск.
Программа POWER является очень мощным инструментом. Она предназначена для работы с файлами, находящимися в квазидиске или в ОЗУ. С ее помощью можно просматривать файлы, менять их содержимое и название, удалять, а также просматривать и менять информацию в ОЗУ. POWER позволяет получить информацию о квазидиске, тестировать квазидиск, изолировать бракованные области памяти.
Программу необходимо загрузить с магнитофона на квазидиск и запускать командой POWER.
После загрузки POWER на экране появится его приглашение:
А!
В POWER могут использоваться команды с многозначными файловыми ссылками, например для вывода каталога:
А! R*.*
В этом случае будет выведен каталог файлов, начинающихся с буквы R.
Чтобы вывести весь перечень команд программы POWER, необходимо набрать:
А! ?
Для вывода на экран списка скрытых команд нужно ввести:
A! ??
Для тестирования диска пользуются командой
А! TEST
Диск полностью прочитывается, вычисляется контрольная сумма, изолируются дефектные сектора, образуя файл «= = =.= = =» с целью принятия дальнейшего решения.
Информацию о диске ― емкость, формат, плотность и где находятся системные треки ― можно получить с помощью команды
А! DISK
Информация о занятом и свободном пространстве на диске, о состоянии файлов (R/W ― запись разрешена, R/O ― запись запрещена) выводится с помощью команды:
А! STAT
Для просмотра каталога пользуются командой DIR.
Сортировка каталога осуществляется командой SORT.
Имеется пять способов сортировки каталога:
А! SORT 1 (по именам файлов)
А! SORT 2 (по именам файлов, но в конце идут системные файлы)
А! SORT 3 (по типам расширения файлов)
А! SORT 4 (по типам расширения, но в конце идут системные файлы)
А! SORT 0 (без сортировки)
Переименовать файлы можно командой REN
A! REN *** (старое имя файла)
Для установки состояния файлов ― создания невидимых файлов ― служит команда SETSYS, хотя они и доступны СР/М:
А! SETSYS *** (имя файла)
Команда SETDIR противоположна по смыслу команде SETSYS.
Защита файлов от записи осуществляется командой SETRO:
A! SETRO *** (имя файла)
Команда SETWR противоположна по смыслу команде SETRO.
Подробную информацию о файле можно получить с помощью команды SIZE.
В первом столбце выдается количество использованных секторов, во втором ― количество свободных секторов, в третьем ― объем памяти, занимаемой файлом (кбайт), в четвертом ― объем памяти, занимаемой группой файлов.
Команды пересылки данных из квазидиска в ОЗУ и обратно:
1. А! LOAD (имя файла, тип) ХХХХ
Эта команда загружает файл из квазидиска в ОЗУ, начиная с адреса ХХХХН > 4000Н.
Завершается выполнение команды выводом на экран конечного адреса ОЗУ и числа секторов, которые занимает файл.
2. А! SAVE (имя файла.тип) ХХХХ YY
Команда загружает файл из ОЗУ с адреса ХХХХН в квазидиск, занимая число секторов, равное YY (если файл был загружен командой LOAD и его длина не увеличилась, то количество секторов можно не указывать).
3. DUMPA ― вывод на экран ASCII символов.
DUMPH ― вывод на экран двоичных кодов.
DUMPX ― вывод на экран и двоичных, и ASCII кодов.
Имеется несколько вариантов использования команды DUMP:
A! DUMPH ХХХХ YYYY ― вывод на экран информации с адреса ХХХХН по адрес YYYYH
А! DUMPH XXXX,N ― вывод на экран N байт информации с адреса ХХХХН.
A! DUMPH ХХХХ ― вывод всей памяти, начиная с адреса ХХХХН.
4. Просмотр и исправление текстов с помощью команды DS:
A! DS ХХХХ
ХХХХН ― начальный адрес памяти. На экран выводится следующая информация:
адрес ячейки памяти , шестнадцатеричный код, десятичный код, двоичный код , ASCII код , ENTER (.)
ENTER ― указывает, в каком коде будет внесено изменение (А), (Н), (В), (D). Для перехода в другой код надо ввести .В(.) ― в скобках указать один из символов. Просматривать информацию можно как в прямом, так и в обратном направлении. Для смены направления адресации на обратное вводят ^, при этом у адреса появится “-“. Выход из команды DS осуществляется вводом двух точек.
5. Заполнение памяти константой
А! FILL ХХХХ YYYY ZZ
Начальный адрес ХХХХН, конечный адрес YYYYH и константа ZZH.
6. Перемещение содержимого памяти осуществляется командой MOVE
А! MOVE ХХХХ YYYY ZZZZ
ХХХХН ―начальный адрес, YYYYH ― конечный адрес, ZZZZH ― новый адрес.
7. Программа сравнения содержимого памяти СМ.
А! СМ ХХХХ YYYY ZZZZ
XXXXH, YYYYH ―начальный и конечный адреса первой сравниваемой области памяти, ZZZZH― начальный адрес второй сравниваемой области памяти.
8. Поиск в памяти символов осуществляет команда SEARCH.
Эта команда выводит на дисплей номера найденных ячеек и коды (или символы ASCII), находящиеся в этих ячейках. Возможен размер искомой строки до 128 символов. Если искомым символам предшествовали знаки вопроса «?» то на экран выводятся найденные коды в контексте.
А! SEARCH (начальный адрес) (конечный адрес) (байт) (байт)
В обычном режиме поиск ведется шестнадцатеричных кодов. Если же искомая последовательность заключена в кавычки, то ведется поиск символов ASCII.
Для запуска программ в POWER имеются несколько команд:
1. Команда GO считывает программу с квазидиска, загружает ее в память и затем передает управление по новому адресу. Команда удобна для запуска программ, которые работают с адреса, отличающегося от стандартного 100Н.
A! GO (имя файла) ХХХХ
ХХХХН ― адрес загрузки программы.
2. Команда JP позволяет запустить программу, уже имеющуюся в памяти, с указанного адреса, при этом по завершении выполнения программы происходит выход из POWER:
А! JP ХХХХ
ХХХХН ― адрес запуска программы.
3. Команда ЕХ действует аналогично предыдущей команде, но по завершении выполнения программы управление возвращается POWER.
Программа, предполагающая возврат в POWER, должна заканчиваться командой С9 (RETURN).
4. Команда RUN осуществляет загрузку и исполнение одного или нескольких файлов.
Подсчет контрольной суммы файла осуществляют с помощью команды CHECK
А! CHECK (имя файла)
В программе POWER имеется команда для выхода в СР/М
А! EXIT
Рассмотрим некоторые другие программы CP/M.
ED.СОМ — это программа текстового строкоориентированного редактора. Описание команд и работы с этим редактором можно посмотреть по этой ссылке (текст на английском).
L80.СОМ — это программа, преобразующая файлы, полученные после трансляции, в файлы с исполняемым машинным кодом, а также осуществляющая сборку различных файлов в единый исполняемый файл. Описание на английском языке можно скачать по этой ссылке: LINK-80.
M80.COM — Microsoft MacroAssembler. Позволяет создавать программы на языке Ассемблер. Описание на английском языке можно скачать по этой ссылке: MACRO-80.
MBASIC.СОМ — интерпретатор с языка Бейсик.
BASCOM.СОМ — компилятор с языка Бейсик.
На самом деле большинство существующих программ для CP/M-80 (CP/M 2.2) прекрасно работают на этом компьютере. Многие из них не требуют даже дополнительных настроек или инсталляций. Для загрузки скачанных из Интернета программ в компьютер можно действовать по следующей схеме:
- Загрузить эмулятор с этого сайта.
- Запустить его на любом Windows компьютере выбрав «UT88» при запуске.
- Выбрать в меню View > Start Debugger. Откроется окно дебаггера.
- Нажать Ctrl-L и в появившемся окне в поле From ввести 0x0100 и выбрать файл, который надо перенести.
- Файл будет загружен в память эмулятора. Перед закрытием окна дебаггера надо найти адрес конца загруженной программы для определения количества блоков для сохранения в CP/M. Для этого надо пролистать содержимое памяти в дебаггере и найти место после которого идут нули до адреса E000. Запишите это число. Два старших разряда адреса надо перевести в десятичный вид и это будет количество блоков, которые занимает программа. Например, если программа оканчивается по адресу 2F55, то переводим 2F в десятичный вид и получаем 47, что и является количеством блоков. Это число также надо записать или запомнить.
- Закрываем окно дебаггера и вводим команду Монитора O0100,XXXX (XXXX — адрес окончания программы, например 2F55из предыдущего примера). Перед тем как нажать ВВОД запустите запись в wav файл нажав по этой кнопке:
- По окончании записи вновь появится приглашение => после чего надо повторно нажать на кнопку с красным кругом, чтобы остановить запись в файл. Больше эмулятор нам не понадобится. Далее работаем только с компьютером на DE1.
- Следующим шагом надо загрузить CP/M и после загрузки нажать СБРОС (ESC на клавиатуре). Перед этим необходимо включить ПЗУ Монитора-0 переведя выключатель SW[2] в положение “1”.
- Далее запускаем Монитор-F обычным способом и после этого отключаем ПЗУ Монитора-0 (SW[2] в положение “0”).
- Загружаем сохраненную в эмуляторе программу в компьютер командой I, подключив проигрыватель wav файлов ко входу платы и подобрав подходящую громкость сигнала (подробнее см. раздел “Монитор-F”). Программа будет загружена с адреса 0100.
- По окончании загрузки выполняем “горячий старт” CP/M командой GDA00.
- Теперь сохраним загруженную программу на квазидиск командой SAVE используя количество блоков, определенное в пункте 5 и имя файла под которым он будет сохранен. Например:
A> SAVE 47 M80.COM
Этот компьютер не имеет большой библиотеки программ, поэтому если вам удалось адаптировать другие программы для него, я с удовольствием добавлю их в библиотеку. Для простых программ wav файл пожалуй наиболее подходит. Но для комплексных программ или коллекций дамп памяти является лучшим решением.
Пожалуй на этом все. Я надеюсь вам понравился цикл статей об этом необычном компьютере. Но мне очень не хотелось бы ставить точку на этом, поэтому возможно в дальнейшем я как-нибудь вернусь к этой теме если к ней будет интерес.
А пока мы начнем проектировать другой интересный компьютер — Агат-7. Он будет работать на настоящем 6502 процессоре и использовать ПЛИС в качестве замены схемы. Вы можете подписаться на RSS рассылку кнопкой в верхнем правом углу страницы, чтобы быть в курсе всех обновлений. До встречи в следующих постах!