ЮТ-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) прекрасно работают на этом компьютере. Многие из них не требуют даже дополнительных настроек или инсталляций. Для загрузки скачанных из Интернета программ в компьютер можно действовать по следующей схеме:

  1. Загрузить эмулятор с этого сайта.
  2. Запустить его на любом Windows компьютере выбрав «UT88» при запуске.

    Emulator (step 1)

  3. Выбрать в меню View > Start Debugger. Откроется окно дебаггера.
  4. Нажать Ctrl-L и в появившемся окне в поле From ввести 0x0100 и выбрать файл, который надо перенести.
  5. Файл будет загружен в память эмулятора. Перед закрытием окна дебаггера надо найти адрес конца загруженной программы для определения количества блоков для сохранения в CP/M. Для этого надо пролистать содержимое памяти в дебаггере и найти место после которого идут нули до адреса E000. Запишите это число. Два старших разряда адреса надо перевести в десятичный вид и это будет количество блоков, которые занимает программа. Например, если программа оканчивается по адресу 2F55, то переводим 2F в десятичный вид и получаем 47, что и является количеством блоков. Это число также надо записать или запомнить.
  6. Закрываем окно дебаггера и вводим команду Монитора O0100,XXXX (XXXX — адрес окончания программы, например 2F55из предыдущего примера). Перед тем как нажать ВВОД  запустите запись в wav файл нажав по этой кнопке:

    Emulator (step 2)

  7. По окончании записи вновь появится приглашение => после чего надо повторно нажать на кнопку с красным кругом, чтобы остановить запись в файл. Больше эмулятор нам не понадобится. Далее работаем только с компьютером на DE1.
  8. Следующим шагом надо загрузить CP/M и после загрузки нажать СБРОС (ESC на клавиатуре). Перед этим необходимо включить ПЗУ Монитора-0 переведя выключатель SW[2] в положение “1”.
  9. Далее запускаем Монитор-F обычным способом и после этого отключаем ПЗУ Монитора-0 (SW[2] в положение “0”).
  10. Загружаем сохраненную в эмуляторе программу в компьютер командой I, подключив проигрыватель wav файлов ко входу платы и подобрав подходящую громкость сигнала (подробнее см. раздел “Монитор-F”). Программа будет загружена с адреса 0100.
  11. По окончании загрузки выполняем “горячий старт” CP/M командой GDA00.
  12. Теперь сохраним загруженную программу на квазидиск командой SAVE используя количество блоков, определенное в пункте 5 и имя файла под которым он будет сохранен. Например:
 

A> SAVE 47 M80.COM

Этот компьютер не имеет большой библиотеки программ, поэтому если вам удалось адаптировать другие программы для него, я с удовольствием добавлю их в библиотеку. Для простых программ wav файл пожалуй наиболее подходит. Но для комплексных программ или коллекций дамп памяти является лучшим решением.

Пожалуй на этом все. Я надеюсь вам понравился цикл статей об этом необычном компьютере. Но мне очень не хотелось бы ставить точку на этом, поэтому возможно в дальнейшем я как-нибудь вернусь к этой теме если к ней будет интерес.

А пока мы начнем проектировать другой интересный компьютер — Агат-7. Он будет работать на настоящем 6502 процессоре и использовать ПЛИС в качестве замены схемы. Вы можете подписаться на RSS рассылку кнопкой в верхнем правом углу страницы, чтобы быть в курсе всех обновлений. До встречи в следующих постах!

 

Leave a Reply