📂 Документ: orion128-soft-cpm80-sp-club-bios_clean.html


 

OS DOS (CP/M-80) - SP Computer Club

SP Computer Club - иформация о системном ПО OS-DOS  Орион-128, CP/M-80

Продаю платы и наборы микросьем, куплю микросьемы

Все версии CP/M-80

Все версии ORDOS

 Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем.  Читайте про пакет Атлас. Также дискеты можно отформатировать из под ORDOS пакетом программ Атлас.

Дискеты должны быть отформатированы в OS DOS (CP/M-80) программой FORMAT.COM и на дискету записана система OS DOS V3.60  программой SYS.COM или SG360.COM

SP Computer Club - иформация о системном ПО

Данный текст был набран в файл В. Чистяковым и О. Шаляпиным в мае 1987 г.  Для проведения занятий по cp/m-80 в "ЛИПК МПСС" (Ленинградский институт по вышения квалификации инженерных работников министерства промышленности средств связи, Седова 55/2).

 При этом использовались материалы полученные  от НФИПК МПСС (Новгород), методические материалы кафедры ВТ ЛЭТИ, материалы с завода ЛЭМЗ (Ленинград) и фирменные материалы фирмы digital research (перевод государственного отдела переводов технической информации, 1984). Текст был  набран на ЭВМ СО-04 (Киев, аналог СМ1800, но с дополнительными блоками) редактором  "Пианола" в среде DOS-CO (isis-80), т.к., эти ЭВМ поставлялись без CP/M-80.

Впоследствии этот текст с помощью программы dec.com (не пытайтесь использовать  эту программу на 1818вг93, т.к она для 8-ми дюймовых нгмд ес5074) был переведен на 8-ми дюймовую дискету в формате cp/m и в ноябре 1989 г. Был сгружен на магнитную кассету. Для этого была создана специальная программа (ее текст сохранился), работающая в реальном времени и потребовалось применение специальной схемы (1 имс 155аг3) для счета "реального" времени, ибо на СМ1800 для регенерации  озу и синхронизации системной магистрали используется /wait, что приводило к тому  что в записи на ленте "дрожали фронты" и нельзя было просто "запустить" обычный програмный драйвер двухфазной кодировки. Таким образом были выгружены на  ленту и считаны на 5-ти дюймовые дискеты "Специалиста" 10 мбайт cp/m программ от СМ1800, которые сейчас широко используются всеми пользователями "Ориона" по всей стране.

 См1800 комплектовались 8-ми дюймовыми нгмд (только  уже в 1989 г. Стали появляться см1800 укомплектованные нормальным принтером  (не матричным) и 5-ти дюймовыми флопами. Другая большая часть cp/m-программ  была получена как "ПО Корвета" в НИИ СЧЕТМАШ г. Петродворец (а именно там создавалось системное по "Корвета" и делались его печатны платы). Здесь не возникло ни каких трудностей с обменом файлами, т.к там 5-ти дюймовые нгмд.

 Пиратский кооператив "Орион-Сервис" в 1991 г., присвоил этот текст и продает  его в составе дистрибутива cp/m. Для доказательства вышеизложенного я располагаю, как исходными материалами, так и сохранившейся методичкой ЛИПК 1987  года (кафедра "Микропроцессорных средств").

Организация файловой структуры CP/M и проблемы развития CP/M ОРИОНА, от Чистякова

Работа с CP/M-80 SP Computer Club

Описание DOS - SP Computer Club

 1. Редактирование и управление выводом

 cr - конец ввода строки
 rubout - стирание последнего символа. курсор влево
 ctrl-u стереть строку
 ctrl-x стереть строку
 ctrl-r повторить ввод текущей командной строки
 ctrl-b конец строки (с продолжением на следующей)
 ctrl-z конец ввода с консоли (для pip и ed)
 ctrl-p копировать весь дальнейший ввод с консоли на печать
 ctrl-s временная приостановка вывода на консоль
 ctrl-c горячий старт (перезагрузка cp/m)
 
 2. Список допустимых физических устройств
 
 con: системная консоль
 ptr: ввод с п/л
 run: вывод на п/л
 lst: печатаюшее устройство
 tty: телетайп (медленная консоль)
 crt: дисплей (быстрая консоль)
 uc1: консоль, заданная пользователем
 prt: быстрый ввод с п/л
 ur1: ввод1,определенный пользователем
 ur2: ввод2,определенный пользоватглем
 ptp: быстрый вывод на п/л
 up1: перфоратор 1,определенный пользователем
 up2: перфоратор 2,определенный пользователем
 lpt: ацпу
 ul1: устройство 1 вывода текста, определенное пользователем
 
 3.допустимые назначения логических устройств на физические
 
 con: = tty: crt: bat: uc1:
 rdr: = tty: ptr: ur1: ur2:
 pun: = tty: ptr: up1: up2:
 lst: = tty: crt: lpt: ul1:
 
 4. Знаки,запрешенные в именах
 
 < > . , ; : = ? * { }
 
 5. Типы файлов
 
 asm исьодный файл для ассемблера asm
 prn файл для печати листинга
 hex файл шестнадцатиричных машинных кодов
 bas исходный файл для компилятора cbasic
 int промежуточный файл для интерпритатора crun
 com командный файл ccp
 pl1 исходный файл для pl/1
 rel перемещаемый модуль
 tex tex форматированный источник
 bak вспомогательный файл для ed
 for исходный файл для компилятора f(ortran)80
 cob исходный файл для компилятора cobol
 dat файл данных для фортрана
 sym символический файл для sid
 $$$ временной файл
 
 6. Резидентные команды
 
 6.1 era{x:} afn стирание файлов с диска
 6.2. Dir{x:} {afn} вывод каталога диска или ряда файлов
 6.3. Ren{x:} ufn1 = ufn2 имя файла ufn2 заменяется на имя ufn1
 6.4. Save n {x:} ufn запись из tpa n страниц по 256 байт  начиная с адреса 100h в файл с именем ufn
 6.5. Type {x:} ufn печать файла ufn в кодах ascii
 6.6. User n установка номера пользователя
 
 7. Транзитные команды
 
 7.1. Stat
 
 команда сообшения
 stat d: r/w, space: nnnk
 d: r/o, space: nnnk
 stat d: bytes remaining on x: nnnk
 stat {d:} afn{*} {size} recs byts ext d:filename.typ
 rrrr bbb ee d:pppppppp.sss
 rrrr - количество 128-байтных записей
 bbb - количество килобайт (bbb = rrrr*128/1024)
 ee - количество екстентов по 16k (ee=bbb/16)
 d - имя диска,содержашего данный файл
 pppppppp.sss - основное и вспомогательное имя файла
 
 stat d:dsk: d:drive characteristics
 65536: 128 byte record capacity
 8192: kilobyte drive capacity
 128: 32 byte directory capacity
 0: checкed directory entries
 1024: records/ex|ent
 128: records/block
 58: sectors/track
 2: reserved tracks
 
 stat val: temp r/0 disk: d:=r/o (диск только
 для чтения)
 печать списка всех set indicator: d:filename.typ *r/0 r/w  допустимых назначений *sys *dir (установить  логических устройств индикатор)  на физические disk status: dsk: d:dsk (статус диска)  usev status: usr: (статус пользователя)
 iobyte assign: (список возможных  назначений)
 stat d:=r/o перевести диск в режим ''только чтение''.
 Обратный перевод возможен только при  ''горячем'' старте.
 Stat dev: печать текуших назначений
 stat id1=pd1,id2=pd2,...,idn=pdn - изменение назначений логических и  физических устройств, где idn-лог. устр.
 Pdn-физ.устр.
 
 7.2. Asm
 
 вызов двухпроходного ассемблера и трансляция файла с заданным именем.
 Вызов команды:
 asm имя файла (1)
 asm имя файла.p1p2p3 (2)
 
 в любом случае файл должен иметь тип asm.
 
 P1 - диск, содержаший исходный текст
 р2 - диск, на корый будет записываться hex файл  (если p2=z,то hex файл не создается)
 p3 - диск, на который будет записываться prn файл,  т.е. файл с листингом (если p3=x,то листинг  выводится на консоль; если p3=z,то prn файл  не создается)
 
 программа состоит из последовательности строк вида:
 
 номер метка операция операнд ;примечания
 
 типы меток: идентификатор или  идентификатор:
 
 идентификатор состоит из букв и цифр и начинается с буквы, длина  идентификатора не должна превышать 16 знаков. Знак * игнорируется.
 
 Типы констант:
 b двоичная константа
 q восьмеричная константа
 d десятичная константа
 h шестнадцатиричная константа
 
 строковые константы представляют собой набор знаков ascii,  заключенный в апострофы.
 
 Зарезервированные имена: имена всех регистров, имена машинных  инструкций и директив ассемблера.
 
 Арифметические и логические операторы:
 
 a+b беззнаковое сложение a и b
 a-b беззнаковое вычитание b из a
 +b унарный плюс
 -b унарный минус
 a*b беззнаковое умножение a на b
 a/b беззнаковое деление a на b
 a mod b остаток от деления a на b
 not b логическая инверсия b
 a and b логическое ''и''
 a or b логическое ''или''
 a xor b логическое ''исключающее или''
 a shl b сдвиг а влево на в битов, дополнение нулями
 a shr b сдвиг а вправо на в битов, дополнение нулями
 
 приоритет операторов  * / mod shl shr - + not and or xor
 
 директивы ассемблера
 
 org установить значение счетчика адреса
 end конец программы, может присутствовать стартовый адрес
 equ числовое ''приравнять''
 set числовое ''установить''
 if начало условного ассемблирования
 endif конец условного ассемблирования
 db задать байт данных
 dw задать слово данных
 ds отвести область памяти
 
 список инструкций совпадает со списком инструкций микропроцессора  intel 8080
 
 сообшения об ошибках:
 
 d ошибка в данных:элемент данных не может быть помешен  в указанную область памяти
 e неверное выражение: выражение неверно образовано и не может быть вычислено в процессе ассемблирования
 l неверная метка:метка не может появиться в данном  контексте(может быть двойное определение)
 n не реализовано: возможности, которые будут присутствовать в следующих версиях asm
 o переполнение: очень сложное выражение
 p ошибка фазы: метка получает разные значения при двух  последовательных проходах по программе
 r регистровая ошибка: значение заданное в качестве регистра, не соответствует коду инструкции
 v ошибка значения: операнд, вычисленный в выражении, неверно образован
 
 no source file present файл заданный в команде asm, не сушествует на диске
 no directory space каталог диска заполнен
 source file name error неверно задано имя файла asm
 source file read error ошибка при чтении исьодного файла
 output file write error ошибка при записи выходного файла
 cannot close file выходной файл не может быть закрыт
 
 7.3. Load {x:} ufn
 
 чтение файла с заданным именем в hex формате и создание файла в com формате.
 
 7.4. Pip
 
 (1) pip
 (2) pip ''командная строка''
 
 формат (1) позволяет выполнить несколько командных строк,вводимых после *. Выход из pip по cr (сразу после *).
 Формат командной строки:
 
 приемник = источник #1, ... , источник #n
 
 допустимые виды сокрашений:
 
 pip x:=afn копировать на x все файлы afn с активизированного диска
 pip x:=y:afn копировать на x все afn файлы с y
 pip ufn=y: эквивалентно pip ufn=y:ufn
 pip x:ufn=y: эквивалентно x:ufn=y:ufn
 
 дополнительные имена устройств:
 
 nul: ! Вывод 40 нулей в коде ascii
 eof: вывод конца файла (ctrl-z)
 inp: специальное устройство ввода. Вызов:
 call 103h,данные в 109h
 out: $ специальное устройство вывода. Вызов:
 call 106h,данные в регистре c
 prn: вывод на lst:с номерацией строк, с табуляцией  по каждой восьмой колонке, с установкой стра ницы после каждых 60 строк
 
 параметры pip, заключаемые в квадратные скобки:
 
 b режим передачи блоками
 dn стирание символов после n-го (для узкой печати)
 e эхо операций передачи
 f определение форматов передачи
 gn ввод файла пользователя с номером n (0 - 15)
 h передача шестнадцатиричных данных с проверкой
 i игнорирование 00 при передаче (одновременно  влечет h)
 l перекодирование верьнего регистра в нижний
 n нумерация строк (если n2, то включаются ведушие  нули и устанавливается табуляция)
 o передача об'ектного файла
 pn перевод страницы после каждых n строк
 qs z прекратить передачу после строки s
 r чтение системного файла
 ss z начать передачу со строки s
 tn табуляция в каждой n-ой колонке
 u перекодирование нижнего регистра в верхний
 v проверка правильности кодирования
 w перезапись файла с индикатором r/o без вывода  запроса на консоль
 z сбросить в 0 бит четности
 
 7.5. Ed {x:} ufn {y:}
 
 инициализируется командой:
 
 ed имя файла . Тип файла  строка символов оканчивается <cr lf>
 
 cp - указатель символа в буфере команды:
 
 na добавление n строк в буфер из редактируемого  файла(если n=#,то заполнение всего буфера)
 +-b перемешение cp в начало или в конец буфера
 +-nc перемешение cp по буферу на n символов вперед,  если ''+'' и назад, если''-'' (cr и lf воспринимаются как два отдельных символа)
 +-nd стирает n символов перед cp , если ''+'' и за  cp, если ''-''  e конец редактирования, закрытие файлов
 nf c1c2...ck поиск строки по образцу(c1c2...ck),cp передвигается за последним символом cp, если сравнение  произошло, ищется n-ое вхождение образца в буфере.
 H окончание редактирования, закрытие и повторное  открытие отредактированного файла в качестве  исходного для ed.
 I c1c2...ck ввод строк символов с консоли (каждая строка  оканчивается cr lf) до ctrl+z
 ni c1c2...ck <ctrl+z> d1d2...dn <ctrl+z> e1e2...eq <ctrl+z)  команда сопоставления ишет n раз ближайшее вхождение образца (c1c2...ck),затем за ck вводится последовательность символов (d1d2...dn)
 и стираются все символы от dn до образца (е1е2 ...eq).
 +-nk стирание n строк исходного текста в буфере. Если cp находится не в начале строки, то сохраняются  символы перед cp, если ''+'' и после cp, если''-''
 +-nl перемешает cp по строкам, если n=0, то в начало  текушей строки; если n не равно 0,to в начало  текушей строки,а затем на n строк вниз (''+'')  или вверь (''-'').  Nm c1c2...ck макрокоманда (c1c2 и т.д. команды ed), выполняет  строку команд n раз или если n=0/1, до ошибочного условия.
 +-nn c1c2...ck поиск n-го вьождения образца аналогично f, но  поиск происходит по всему исходному файлу.
 O ввостановление исходного файла, перезапуск ed  и действия предыдуших команд анулируются.
 +-np пересылка и печать страницы.
 Q выход из e без изменения исьодного файла.
 R f1f2...fn чтение библиотечного файла в буфер в процессе  редактирования (f1f2...fn файла тип lib).
 Ns c1c2...ck (ctrl+z) d1d2...dh  подстановка второго образца вместо первого осу шествляется n раз (аналогична f c1c2...ck i  d1d2...dh).
 +-nt печать строки:
 если n=0,то начало текушей строки до cp;
 если n=1,то конец текушей строки после cp;
 если n>1,то текушая строка и n-1 строк за ней  (''+'') или перед ней (''-'').
 +-u перевод из нижнего регистра в вверхний (+u) и  отмена (-u).
 Nz
 +-n перемешает cp вверь или вниз на n строк и печатает одну строку (эквивалентно +-nlt).
 
 7.6. Sysgen - инициализация дискеты с операционной системой cp/m.

 Диалог:
 
 sysgen запустить программу sysgen.
 Sysgen version m.m сообшение о запуске sysgen.
 Sourse drive name ответ - имя диска, содержашего cp/m. Если  (or return to skip) копия cp/m уже есть в памяти после команды movcpm,то нажать ''cr''.
 Sourse on x then type return  после этого сообшения поставить дискету,  содержашую cp/m,на дисковод x и нажать  ''cr''.
 Function complete система скопирована в память.
 Destination drive name (or return to reboot)  задать номер дисковода с новой дискетой  для инициализации, ли нажать ''cr'', что  вызовет перезагрузку системы с диска a.
 Destination on x then type return  поставить инициализируемую дискету и нажать'cr''.
 Function complete на дисководе x инициализирована новая дискета.
 Movcpm и sysgen не имеют никакого смысла для "неродных" intel bios-ов  так, как поддерживают только intel-bios (длиной ровно 768 байт). Они не  могут перемещать bios "корвета", который почти вдвое больше. Поэтому для  перемещения cp/m в другие рабочие адреса приходится просто перетранслировать имеющиеся у нас исходные тексты ccp, bdos и bios.
 
 7.7. Sumbit ufn par1...parn
 
 создание на активизированном диске файла типа sub для дальнейшей работы в автоматическом режиме. Внимание версия 2.2 значительно  усилена программой xsub, допускающий в ком. файлах замену вводов с консоли на ввод команд из файла.
 
 7.8. Dump ufn
 
 печать на системной консоли содержимого системного файла в шестнадцатиричном виде.
 
 7.9. Movcpm
 
 смотри пункт 7.6
 переконфигурация системы на заданный обьем памяти.
 Форматы команды:
 
 movcpm создать в оперативной памяти cp/m с bios  для mds 800.
 Movcpm n создать систему cp/m на n килобайт памяти  (n от 16 до 64).
 Movcpm * * для данной конфигурации памяти создать перемешаемый образ памяти,готовый для работы  с sysgen.
 
 7.10. Ddt
 
 ddt загружается вместо ccp
 форматы команд:
 
 ddt
 ddt имя файла.hex
 ddt имя файла.com
 
 управляюшие символы:
 
 rubout стирание последнего введенного символа
 ctrl-u стирание введеной строки
 ctrl-c перезагрузка cp/m  команды:

 as выдача ассемблерной мнемоники с операндами, s-стартовый адрес
 d вывод содержимого памяти в шестнадцатиричных  кодах, начиная с данного адрнса; выводится 16  строк.
 Ds вывод содержимого памяти, начиная с адреса s  ds,f вывод содепжимого памяти, начиная с адреса s и кончая f.
 Fs,f,c заполнить область памяти, начиная с адреса s  и кончая адресом f шестнадцатиричной константой c.
 G начать выполнение программы с текушего адреса  gs начать выполнение программы с адреса s.
 Gs,b начать выполнение программы с адресаs и остановиться по адресу b.
 Gs,b,c здесь заданы две точки остановки: b и c.
 G,b начать выполнение программы с текушего адреса  с остановкой по адресу b.
 G,b,c начать выполнение программы с текушего адреса  с остановкой по адресу b или c.
 I имя файла занести в управляюший блок файла заданное имя  и файла.
 I имя файла.тип файла  занести в управляюший блок файла заданное имя  и тип файла.
 L распечатать 12 строк дезассемблированных машинных кодов,начиная с текушего адреса.
 Ls распечатать 12 строк, начиная с адреса s.
 Ls,f распечатать строки дезассемблирования, начиная  с адреса s и кончая адресом f.
 Ms,f,d переслать в область памяти, начинаюшуюся с ад реса s и кончаюшуюся адресом f,область памяти  начинаюшуюся с адреса d.
 R{b} считать с диска файл с заданным в fcb именем  (см. Команду i) в tpa; b-необязательный адрес  смешения.
 Ss исследовать(и возможно заменить) область па мяти,начиная с адреса s.
 T трассировать один шаг программы.
 Tn трассировать n шагов программы.
 X вывести на консоль содержимое всех регистров.
 Xr вывести на консоль(и возможно изменить) содержимое регистра r.
 Целесообразнее использовать значительно более совершенный xsid.
 
 8. Сообшения об ошибках bdos
 
 bad sector ошибка при чтении/записи.
 Select неверная адресация дисковода (буква вне диапазона a-d).
 Read only данная дискета командой stat назначена 'только для чтения'.
 Внимание ! После появления надписи bad sector при считывании вы  можете нажать на любую клавишу, кроме ~c, чтобы продолжить чтение  проигнорировав ошибку (если идет загрузка программы, она может за виснуть, если идет копирование копия будет дохлая). Если надпись  появилась при записи - значит дохлый сектор, при нажатии любой  клавиши ошибка будет проигнорирована. Поэтому, чтобы не мучиться  потом с неработающими программами сразу после появления надписи  bad sector нажимайте ~c (f4) и не забудьте удалить неудачную копию  (если запись экстента не закончена это может быть файл name.$$$)
 
 9. Соглашения по интерфейсу bdos
 
 call ячейки 0005h,номер функции в регистре c,адрес информации в  паре регистров de.
 Однобайтовая величина возврашается в аккумуляторе а,а двухбайтовая величина в паре регистров hl. При возврате всегда (а)=(l) и  (b)=(h).
 
 Номера функций
 
 0 сброс системы 19 стирание файла
 1 ввод с консоли 20 последовательное чтение
 2 вывод на консоль 21 последовательная запись
 3 ввод с п/л 22 создать файл
 4 вывод на п/л 23 переименовать файл
 5 вывод на печать 24 вернуть вектор активизации
 6 прямой ввод/вывод 25 вернуть текуший диск
 7 дать байт ввода/вывода 26 установить адрес dma
 8 установить байт вводц/вывода 27 дать адрес
 9 печать строки 28 записать зашиту диска
 10 читать буфер консоли 29 дать адрес (вектор r/o)
 11 дать статус консоли 30 установить атрибуты файла
 12 вернуть номер версии 31 дать адрес (параметры диска)
 13 сбросить дисковую систему 32 установить/дать код пользователя
 14 выбрать диск 33 произвольное чтение
 15 открыть файл 34 произвольная запись
 16 закрыть файл 35 вычислить размер файла
 17 поиск первого 36 установить произвольную запись
 18 поиск следуюшего
 
 структура управляюшего блока файла
 
 ------------------------------------------------------------
 !dr!f1!f2!/ /!F8!t1!t2!t3!ex!s1!s2!rc!d0!/ /!Dn!cr!r0!r1!r2!
 ------------------------------------------------------------
 00 01 02 ... 08 09 10 11 12 13 14 15 16 ... 31 32 33 34 35
 
 dr код диска (0 - 16)
 f1...f2 имя файла в прописных буквах ascii  t1,t2,t3 тип файла в прописных буквах ascii; если старший бит  t1 равен 1,то файл только для чтения; если старший бит t2 равен 1,то это файл sys (не выводится по команде dir)
 ex текуший номер зкстента
 s1 зарезервировано системой
 s2 зарезервировано системой
 rc счетчик записей для экстента ex
 d0...dn заполняется cp/m,зарезервировано системой cr текушая читаемая или записываемая запись при последовательной работе с файлом  r0,r1,r2 необязательный произвольный номер записи в диапазоне  0 - 65535
 
 структура памяти (для оригинальной intel-машины)
 
 tpa 0100h
 ccp e400h
 bdos ec00h
 bios fa00h
 
 00h
 ccp e400h
 bdos ec0

Для работы с ос ср/м вам необьодима системная дискета.

Вставьте системный диск в дисковод и включите питание (если питание включено нажмите "сброс"). Раздастся звуковой сигнал и на экране должна появится надпись:

  60 cp/m-80  v2.2
   ** bios v1.6  **
   sp-computer club
  
peterburg 1990
  a>

  Это значит, что загружена ос ср/м - 80,версия 2.2, и машина Готова принимать команды из словаря ОС, вводимые нами с Клавиатуры. Отметим, что содержание третьей строки говорит о Авторе разработавшем данный bios для ос. пятая строка - -стандартное сообщение, о том, что ос в данный момент работает

С диском "а" и ждет команды пользователя.  Как мы знаем, ос служит для управления различными, Входящими в состав эвм, устройствами.За это отвечает часть ос, Называемая bios(basic input-output sistem - базовая система

Ввода-вывода),содержащая программы управления перефирией. Поскольку состав перефирийных усройств различается на разных Эвм и bios различен на них. Обычно bios пишут разработчики для данной машины.

  Оставшая часть ср/м - общая для всех машин, которые могут с ней работать. Она не зависит от эвм и ее периферийных устройств И работает с ними только через bios:bdos (basic disk operating

System - базовая дисковая операционная система) и ccp (console Command processor -- процессор команд консоли).

  Все три части ос загружаются с системного диска. Процесс начальной загрузки называется "холодным стартом"системы.

  Необьодимо помнить, что для нормальной работы в дисководе а всегда должен находиться диск на первых двух дорожках у  которого записана копия ос ср/м.

  Реинициализация системы -"теплый старт", процедура в результате которой с системного диска в память копируется часть ОС. Остальная память остается не тронутой. Обычно теплый старт используют при выходе из программы выполнявшейся в системе.

Можно однако принудительно вызвать теплый старт нажав клавиши "ctrl+c"(т.е. одновременно "упр" и "c").

  Работа с дисками в ос ср/м

  Росле успешной загрузки ос диск а автоматически становится "текущим",т.е. диском обращение к которому подразумевается если нет явного обращения к диску. Изменить текущий диск просто, Для этого после промпта указываетмя имя диска который будет текущим И ставится двоеточие:

  а>b:{bk}

   b>

  Перед тем как изменить диск надо в соответствующий дисковод вставить дискету, в противном случае появится сообщение об ошибке:

  bdos error select

После чего надо нажать любую клавишу для возврата.  Для того чтобы обратится к программе на другом диске вовсе не обязательно изменять диск достаточно перед именем программы указать через двоеточие имя диска на котором есть данная

Программа:

  а>b:type text.txt

 (просматриваем содержимое текстового файла на диске b)

  Команды управляющих символов в ос ср/м имеется набор специальных команд-"управляющих символов". Для ввода управляющего символа необходимо нажать одновременно клавишу "упр/ctrl" и клавишу с требуемым символом:

  ctrl+c  -  команда реинициализации системы

  ctrl+м  -  вызывает возврат каретки {bk}

  ctrl+j  -  перевод строки

  ctrl+h  -  возвращает курсор наодну позицию назад и стирает Символ, стоящий в этой позиции

  del  -  стирает символ слева от курсора

  ctrl+v  -  удаляет уже набранную командную строку и

Перемещает курсор на начало следующей

  ctrl+x  -  удаляет текст командной строки и возвращает

Курсор в ее начало

  ctrl+e  -  переносит командную строку на следующую строку

Экрана, пока не нажата клавиша {bk};когда {bk} нажата все  введенные таким образом команды будут восприняты как единая командная строка

  ctrl+r  -  повторный вывод командной строки, с одержащей удаленные с помощью "del" символы. В результате из командной строки будут исключены все удаленные символы и в таком виде она будет выведена на следующую строку

  ctrl+s  -  задержка вывода на экран текста;при первом нажатии текст останавливается, при повторном возобнавляется вывод

  ctrl+p  -  вывод на принтер любого текста, появляющегося

На экране; способ использования как у "ctrl+s"

 

 Встроеные и транзитные команды

 В ос ср/м существуют еще два типа команд: Встроеные (они еще называются резедентными) являются частью ос и хранятся вместе с ней в одной и той же области озу; и транзитные, хранятся на диске в виде файлов(с расширением -"com").

  примерами встроеных команд являются:

  dir  -  команда вывода на экран дисплея или принтер данных о файлах, содержащихся на указаном диске;

  ren  -  изменение имени файла;

  era  -  удаление файлов;

  type -  просмотр содержимого текстовых файлов;

  user -  обращение различных пользователей к своим файлам, хранящимся на одном диске;

  save -  сохранение указаного числа блоков(страниц)системной памяти в виде файла на диске.

  транзитных команд может быть оченх много. По существу,любая программа в машинных кодах может являтся транзитной командой. Все файлы содержащие транзитные команды имеют расширение "com".

Примерами этих команд являются стандартные программы, вьодящие в пакет cp/m фирмы digital research:

  stat  -  предоставляет информацию о состоянии диска;

  pip -  обмен данными с перефирийными устройствами;

  еd  -  позволяет запустить текстовой редактор;

  submit-  предоставляет возможность запустить группу команд, указанных в зарание подготовленном файле;

  аsm -  позволяет поизвести ассемблирование,т.е. перевод программы написаной на языке ассемблер при помощи редактора

"еd" в шестнадцатиричный файл с расширением "nex",который в  ввою очередь можно преобразовать в командный файл при помощи команды "load";

  load  -  преобразует шестнадцатиричный файл в файл содержащий машинные коды;

  ddt -  позволяет проследить за работой программ в машинных кодах и таким образом выявлять ошибки;

  dump  -  вывод на экран дисплея или принтер содержимого командных файлов в шестнадцатиричном формате;

  format-  форматирует диски;

  sysgen-  копирует ос с диска на диск.

Рассмотрим подробнее встроеные команды.

 dir

    Команда "dir" иллюстрирует способ ввода сообщений с клавиатуры для ос ср/м. Сообщение состоит из команды и операндов отдешенных от нее пробелом. Операндами являются сообщения системе о том, что конкретно от нее требуется. Например, просто "dir", позволяет получить полное оглавление текущего диска:

  а>dir {bk}

   a:movcpm  com:stat  com:pip  com:sysgen com

   a:format  com:load  com:

   a>

 Kak мы видим, при завершении выполнения команды"dir" появляется промпт этой командой можно пользоваться при выводе оглавления других дисков. В этом случае в качестве операнда нужно указать имя диска и поставить двоеточие:

  а>dir b: {bk}

   b:text txt:basic  com:pip  com:submit com

   b:prog1  com

   a>

 Заметим ,что после выполнения команды "dir b:" появился промпт "a>" поскольку текущим диском остался диск а.если в дисковод b был вставлен чистый диск появится сообщение:

  no file

  Командой"dir" можно выводить на экран не только все оглавление, но и имена файлов.для этого в качестве операнда указвается имя файла. Оно может содержать глобальные символы "*" и "?" для задания групп имен:

  а>dir b:*.com

 -таким образом выводится оглавление всех командных файлов с диска b.

  ren

 Синтаксис этой команды так же довольно прост,после "ren" надо указать, сперва новое имя, затем, через знак равно старое имя файла:

  а>ren name.new=name.old

 Проверить, действительно ли мы переименовали файл, можно с помощью следующих команд:

  а>dir name.new

   a:name  new

   a>dir name.old

   no file

   a>

 Мы видим, что файл name.old изчез из оглавления, а name.new появился.при попытке переименовать не существующий файл выдается сообщение:

  no file

  В ос обычно устанавливается различный уровенх защиты файлов.это делается для того, чтобы предотвратить случайное стирание нужных файлов. Уровни защиты бывают двух типов:

R/o(read only - только чтение)и r/w(read write - чтение и запись). При попытке переименовать файл с уровнем защиты r/о выдается сообщение:

  file is set r/o

 (для файла установлен признак "только чтение") Файл имеет такой уровенх защиты, что может быть только прочитан. Для появления промпта необьодимо нажать {bk}. Переименовывать файлы можно не только на текущем диске, но и на любом другом:

  а>ren b:new.txt=old.txt

   a>

 Важно,чтобы имя диска присутствовало только один раз и помещалось в начале операнда перед новым именем. Допустимо указание имени диска также непосредственно перед старым именем:

  а>ren b:new.txt=b:old.txt

   a>

 !!! Использование глобальных символов в данной команде !!!

!!! Недопустимо  !!!

  era

  Данная команда опасна тем, что не правильное пользование ею вызовет стирание полезных файлов. Поэтому пользуйтесь этой командой с осторожностью. Справедливости ради отметим, что по команде "era" реально ничего не уничтожается.имя файла просто удаляется из каталога.при этом сам файл остается на месте.

Однако после этого прочесть его стандартными средствами ос  невозможно.в случае если вы стерли, что-нибудь ценное, обратитесь за помощью к опытным програмистам.

  Синтаксис команды очень просто достаточно после имени команды указать имя файла (файлов):

  а>era text.txt

   a>dir text.txt

   no file

   a>

 -t.o. мы уничтожили файл text.txt и проверили его присутствие к каталоге. В данной команде можно использовать глобальные символы:

  а>еra *.txt

  -уничтожить все текстовые файлы. Возможно обращение к другим дискам:

  а>era b:name.*

 -уничтожить на диске b все файлы с именем "name"(любое расширение). Если вы захотите уничтожить все файлы надо указать это в операнде:

  а>еra *.*

 -если вы нажмете {bk} в данном случае, появится сообщение:

  all(y/n)

 -нажав "y" вы уничтожите все файлы, в противном случае команда не будет выполнена. Попытка уничтожить файл с уровнем защиты r/o машина выдаст сообщение:

  file is set r/o

  type

  Предположим вы написали большой конспект статьи и сохранили его в виде файла на диске. Прочитать его можно с помощью данной команды:

  а>тype consp.txt

 -на экране появится текст вашего конспекта. Остановить текст можно нажав клавиши"ctrl" и "s" одновременно.  Недопустимо использование глобальных символов.

  user

  Данная команда используется при работе многих пользователей на одной машине,а их файлы хранятся на одной дискете.команда "user" разбивает диск на области (их может быть 16 :  от 0 до 15). После загрузки ос активной областью обьявляется "user 0" попробуем обьявить новую область:

  а>user 1

   a>

 После ввода этой команды на экран не выводится ни каких сообщений кроме основного промпта.однако кое-что все-таки произошло. При выводе каталога вы получите сообщение:

  no file

 T.o. пропадает доступ к файлам в нулевой области.

  save

 Команда "save"помещает n-страниц(256-и байтных блоков) памяти на диск в виде файла с заданным пользователем именем. В дистрибутивных системах ср/м  область транзитных программ начинается с адреса 0100h , что является второй страницей памяти. Т.о. если программа пользователя занимает область от 100h до 2ffh,команда "save" должна специфицировать две страницы системной памяти. Полученый т.о. файл машинного кода может быть загружен с диска и выполнен.

   а>save 3 x.com (запись 3 блоков на диск в виде файла

X.com)

   a>save 40 prg.txt (запись на диск участка памяти

От 100h до 2*16+8=40 т.е.28ffh)

  возможна запись не на текущий диск:

   а>save 6 в: prg.com (запись на диск b шести блоков памяти)

    Транзитные команды

  Транзитные команды загружаются с текущего диска и выполняются в области транзитных команд. Рассмотрим работу стандартного набора этих команд фирмы digital research.

  format

  Прежде, чем начинать работу с дисками их необьодимо разметить-т.е. отфарматировать, чем и занимается данная программа. Итак для начала вставьте системный диск в дисковод  "a" наберите имя файла "format" и нажмите {bk} на экране появится:

  программа форматирования гибких дисков v1.1

  имя дисковода (а,b,...)? -вводится имя рабочего дисковода  80 или 40 дорожек (8/4)? -количество дорожек на которое  размечается данный диск  одна, две стороны (1/2)?  -2 для двух стороннего дисковода одинарная,двойная плотность (s/d)?

   -вводится в зависимости от типа гибкого диска

  выполнять (y/n) или выход (е)?

   -если нажимается клавиша "y"  программа приступает к форматированию,если "n" ввод параметров повторяется,и при нажатии "e" выводится подсказка:

    Вставте в дисковод а:системный диск.  Нажмите любую клавишу после форматирования программа проверяет диск на ошибки форматирования и выдает количество неисправных секторов. В конце программы выдается запрос на экран:   повторить?

 -при утвердительном ответе пользователя форматирование с преж ними данными произойдет снова (при этом можно до ответа поменять диск, форматируя т.о. несколько дисков), при отрицательно будет инициализирована операционная система.

   stat

   Команда "dir" дает весьма скудное представление о вашем диске.вы не видите ни размера файлов, ни имеющихся областей, ни оставшегося свободного пространства.всю эту информацию  Вам предоставит команда"stat".прежде, чем пользоваться этой командой убедитесь в наличии на текущем диске файла stat.com   данная команда выполняет следующие функции:

  -выводит на экран обьем свободного пространства на всех дисках присутствующих в данное время в дисководах,и режим доступа к ним.

  -выводит на экран характеристики как отдельных файлов, так и их групп.для этого в качестве операнда используется имя файла (или задают группу файлов с помощью глобальных символов):

    а>stat теxt.txt

   recs  bytes  ext  acc

   110 14  1  r/w a:text.txt

   bytes remaining on a:476k

   a>

   (- в данном случае мы получили информацию о том,что файл Text.txt представляет из себя 110 записей по 128 байт(recs), всего длинна файла 14 килобайт(bytes), длинна  его в экстентах (ext=16 килобайт) равна 1, уровенх защиты r/w, свободное пространство на диске -476 килобайт.)

  -позволяет защищать отдельные файлы и целые каталоги файлов т.е. присваивать им статус r/o:

    а>stat text.txt $r/o

   text.txt set to r/o

   a>

   (теперь файл text.txt нельзя уничтожить обычными средствами Ос ср/м)

    а>stat a:=r/o

   a>

   (защита всего диска)

  -позволяет организовывать скрытые файлы. С помощью этой команды можно присвоить файлу такой атрибут, который сделает Так, что файлы не будут выводится по команде"dir"(из соображения секретности):

    а>stat text.txt $sys

   text.txt set to sys

   а>

   -отмена режима невидимости:

    а>stat text.txt $dir

   text.txt set to dir

   ( теперь файл опять можно увидеть по команде"dir")   -позволяет просмотреть номер активной облости и наличие областей на диске:

 

   а>stat usr:

   active user 0

   active files 0 1 2

   a>

   (текущая область 0, но существуют еще области 1 и 2)   - обычно стандартным перефирийным устройствам присвоены Некоторые логические имена.например, консоль - con; принтер - - lpt; и т.д.. По данной команде вы можете узнать какие имена

Присвоены переферии и изменить их:

    а>stat dev:

   con:is crt:

   rdr:is prt:

   pun:is prt:

   lst:is lpt:

   что же за crt,prt,lpt и т.д.?  Это имена логических устройств. Чтобы узнать, какие физические устройства могут быть назначены четырем логическим устройствам, а также правила работы с командой "stat",введите команду stat val:

    а>stat val:

   temp r/o disk:d:=r/o

   set indicator:d:filename.typ $r/o,$r/w,$sys,$dir

   disk status:dsk:d:dsk

   user status:usr:

   iobyte assing:

   con:=tty:crt:bat:uc1:

   rdr:=tty:rtr:ur1:ur2:

   pun:=tty:ptr:up1:up2:

   lst:=tty:crt:lpt:ul1:

   a>

   Вторая часть сообщения (iobyte assing), перечисляет имена всех физических устройств,которые при вводе-выводе могут быть назначены каждому логическому устройству:

  tty:-телетайп,низкоскоростное устройство (которое обычно осуществляет вывод информации на бумагу);

  crt:-высокоскоростное устройство(обычно это дисплей с клавиатурой);

  bat:-устройство пакетной обработки;

  uc1:-консоль,назначаемая пользователем(обычно это устройство нестандартное и требует модификации секции bios)

  ptr:-устройство чтения с перфоленты;

  ur1:,ur2:-устройства ввода с номерами 1 и 2,определенные пользователем;

  pun:-уст-во вывода на перфоленту;

  up1:,up2:-определенные пользователем устройства вывода;

  lpt:-цифропечать;

  ul1:-устройство для печати определенное пользователем. Присваивание того или иного физического устройства логическому осуществляется так,например мы хотим присвоить логическому устройству con: физическое устройство crt::

    а>stat dev:

   con:is tty:

   rdr:is prt:

   lst:is lpt:

   a>stat con:=crt:

   a>stat dev:

   con:is crt:

   rdr:is prt:

   lst:is lpt:

   a>

 При ошибочном присваивании выдается сообщение об ошибке.  Можно присваивать сразу много устройств разным логическим устройствам:

    а>stat con:=crt:,rdr:=ur1:,pun:=up1:

   a>

   не назначайте физических устройств для которых нет программной поддержки.

 

  pip

     Для того,что бы пользоваться командой "pip" надо на текущем диске иметь файл pip.com.

  функции данной команды:

   -создание копий файлов на текущем диске;

   -копирование файлов на другие диски;

   -обьединение нескольких файлов в один;

   -обмен данными между дисками и другими устройствами.  Команда"pip" инициируется печатью в одной из следующих форм

    а>pip {bk}

   или

   a>pip"командная строка"  {bk}

   В обоих случаях,"pip" загружается в область транзитных команд и выполняется.в первом случае,"pip"считывает командные строки непосредственно с пульта (в начале строки появляется знак *),до тех пор, пока не будет введена пустая строка (т.е. один возврат каретки используется оператором). Каждая последующая командная строка вызывает преобразованиеопределенного носителя в соответствии с результатами,приведенными ниже. Во втором, все тоже, но одна командная строка , та которая вводится сразу, выполняется автоматически при инициализации программы"pip".

  форма командной строки представляет собой:

    d:filename=s:filename1,filename2,...,filenamen

  ,где d:-выходное устройство-может быть не только диском, но и логическим устройством.то же можно сказать и про выодное устройство s:. Имена файлов могут быть опущены, однако если идет

Работа с дисками хотябы одно имя должно присутствовать.   Итак предположим нам надо скопировать файл на одном диске:

    *а:text.txt=a:text1.txt

    (мы считаем,что "pip" уже инициирован)

  на этом же диске появится копия файла,но с другим,указаным, именем.если диск а текущий,то нет необьодимости указывать его.   Для копирования с диска на диск надо влевой части команды указать диск для копирования:

    *b:text.txt=text1.txt

   если при копировании на другой диск вы хотите оставить имя файла прежним, то равноправными командами являются:

    *b:text.txt=text.txt

   *b:=text.txt

   *b:text.txt=a:

   для копирования нескольких файлов можно использовать глобальные символы.

    а>pip {bk}

   *b:=text.*

   в ходе копирования машина выдаст на экран сообщение:

    copying

   text.txt

   text.com

   text.bak

    если вы явно указываете имя файла копии в левой части командной строки,ни в коем случае не используйте в нем глобальные символы. В случае нарушения этого правила вы получите Сообщение об ошибке "improper format". Если хотите скопировать несуществующий файл, pip выдаст вам сообщение "no file". При этом все же создаст на диске рабочий файл с расширением .$$$.

Если имя нового файла совпадает с имеющимся на диске, pip сотрет Файл уже существующий и запишет вновь созданый, допустим, что у Файла уже имеющегося на диске уровенх защиты r/o , тогда pip сообщит вам об этом и спросит стирать его или нет. При ответе (y) pip сотрет старый файл и запишет новый, при (n) все останется как было.

  данная команда копирует только те файлы, которые выводятся по команде"dir".

  так же эта команда позволяет выводить содержимое файлов на стандартные устройства, которые мы уже рассматривали при изучении команды"stat". Есть возможность производить обмен информацией между стандартными устройствами.в этом случае имена логических и физических устройств равноправны с именами файлов.

Например если вы хотите ввести какие-либо данные с консоли в файл test.txt,надо ввести команду:

    а>pip test.txt=con:

 После этого программа переходит к процессу обмена информацией с консоли на диск:все,что вы набираете на клавиатуре, записывается на диск.для окончания этого процесса надо ввести

Символ "ctrl+z", он является стандартным признаком конца файла (текстового).

 дополнительные имена устройств могут быть использованы в командах pip:

  nul: - посылает 40 нулей(ascii 0)на устройство(могут быть изданы в конце перфорированого вывода)

  eof: - посылает сигнал конца файла(ascii  ctrl+z) на утройство назначения (посылается автоматически в конце всех циклов передачи данных ascii через pip)

  inp: - специсточник ввода "pip", который может быть "вставлен" в саму программу "pip":pip получает выходные данные знак за знаком путем вызова ячейки 103н и возвратом в яч.109н (бит четности должен быть равен нулю)

  out: - специалный конечный пункт назначения вывода программы"pip", который может быть вставлен в программу"pip" (вызывает ячейку 106н с данным в регистре c для каждого знака, который необьодимо передать. Отметим, что яч. С 109н по 1ffн памяти "pip"не используются и могут быть заменены приводами спецназначения путем исползования "ddt")

  prn: - тоже самое, что и lst, за исключением того, что  позиции табулятора расширяются на месте каждого восьмого знака строки нумеруются  и через каждые 60 строк вставляется знак продвижения страницы.

Примеры:

    а>pip lst:=x.prn {bk}

    (копирует файл на устр. "lst")

    а>pip prn:=nul:,х.asm,eof:nul:{bk}

    (посылает 40 нулей на перфорирующее кстройство;

   после этого копирует файл x.asм на перфоратор,

   затем идет конец файла "ctrl+z" и еще 40 нулей)

   пользователь может также специфицировать один или более параметров "pip", заключенных в левую или правую часть в квадратные скобки,разделенные нулями или большим количеством пробелов. Каждый параметр воздействует на операцию копирования и вставленный список параметров должен идти сразу после файла, на который оказывается воздействие или после устройства. Обычно за каждым параметром может следовать произвольное десятичное целое число(s и q - параметры являются исключением).параметры "pip" перечислены ниже:

   b  перевод режима блока: данные помещаются в буфере   программой "pip" пока не будет получен знак-x    (кода ascii) с исходного устройства.это позволяет    перевести данные на дисковый файл с устройства    непрерывного считывания, такого как кассетное     устройство.после получения знака -x=off,"pip"    очищает буферы диска и возвращается за     дополнительными входными данными. Количество    данных, которые могут быть помещены в буфер, зависят    от обьема памяти ведущей системы(при переполнении   буфера появится сигнал).

   dn  - удаляет знаки, которые расширили последнюю  колонку (n) при передачи данных в пункт   назначения с источника знаков.этот параметр  используется наиболее часто для усечения длинных   строк, которые посылают на (узкий) принтер или  устройство консоли.

   е - производит эхо всех операций по передачи данных     на пульте по мере их выполнения.

   p - фильтрует подачу формы файла.все вставленные

    знаки подачи формы удаляются. Параметр "p"может

    быть использован одновременно для того, чтобы

    вставить новые знаки подачи формы.

   h - передача шестнадцатиричных данных:все данные проверяются на правельность их формата.   Несущественные знаки между шестнадцатиричными   записями удаляются во время операции копирования   на пульте будет издана подсказка для исправления   в случае возникновения ошибки.

   i - игнорируются записи ":00" при передачи файла     в шестнадцатиричном формате intel(параметр "i"     автоматически устанавливает параметр "h").

   l - переводит буквы верьнего регистра в нижний.

   n - добавляет номера строк к каждой строке, переданной    в пункт назначения начиная с первой, и с     приращением на 1.нули, которые идут впереди,   подавляются и за номером идет двоеточие. Если    специфицирован "n2",то идущие в переди нули    включаются и табулятор вставляется вслед за    номером. Табулятор расширяется если установлен  параметр "т".

   о - обьектный файл(не код ascii) и его передача:    нормальное окончание "cf/m" файла игнорируется.

   pn  - включается продвижение страниц на вьодных строках     "n"(с первоначальным продвижением страницы). Если    "n=1" или вообще исключено,продвижение страниц    происьодит через каждые 60 строк. Если параметр"f"    используется, подавление подачи формы имеет место    прежде чем будут вставлены новые знаки    продвижения страниц.

   qs~z- прекращает копирование с исьодного устройства или    файла когда встречается цепочка (которая    завершается знаком"ctrl+z").

   ss~z - начинается копирование с исьодного устройства

  когда встречается цепочка "s"(завершаемая знаком  "ctrl+z").параметры s и q могут быть заданы   для "получения" конкретного сектора файла (такого   как подпрограмма). Цепочки начала и завершения   всегда включается в операцию копирования.

  примечание:цепочки которые идут вслед за   параметрами  "s"и"q" переводятся в верхний   регистр ccp, если используется форма 2 команды  "pip".форма 1 вызова "pip"не выполняет авто  перевод в верьний регистр.

  1. Pip {bk}

  2. Pip "command line"{bk}

   тn - расширяет табуляторы, каждой n-ой колонки во  время передачи знаков в пункт назначения из   источника.

   u  - перевод буквы нижнего регистра в буквы верхнего   регистра во время операции копирования.

   v  - проверяет, что данные были скопированы правильно  при помощи повторного считывания после операции  записи (пунктом назначения должен быть дисковый   файл).

   z  - обнуляет бит четности на вьходе для каждого знака  кода "ascii".

   ниже приводятся действительные команды "pip", которые специфицируют параметры при передаче файла:

   pip x.asm=b:{v} {bk}

 Копирует x.asm с привода b на настоящий привод и проверяет, чтобы данные были скопированы правильно.

   pip ltp:=x.asm{nt8u} {bk}

 Копирует x.asm на ltp: устройство;нумерует каждую строку,

Расширяет табуляторы до каждой восьмой колонки и переводит буквы нижнего регистра в верхний. 

  pip pun:=x.nex{i},y.zot{h} {bk}

 Сначала копирует x.nex на pun:устройство и игнорирует конечную запись":00" в x.nex, после этого продолжает передавать данные

Путем считывания y.zot,которое содержит шестнадцатиричные записи, включая любую запись":00",которую она содержит.

   pip x.lib=y.asm{ssubr1:~z qjmp l3~z} {bk}

Копирует с файла y.asm на файл x.lib. Начинает копирование когда цепочка"subr1:" была обнаружена и завершает копирование, когда встретилась цепочка "jmp l3".

 

  pip prn:=x.asm{p50} {bk}

 Посылает x.asm на lpt: устройство с номерами строк, причем

Табуляторы расширяются до каждой восьмой колонки и страницы

Продвигаются после каждых 50 строк.отметим, что nt8p60,это

Предпологаемый список параметров для файла prn;p50 превышает величину по умолчанию.

  ed

   Программа "ed" представляет собой редактор контекста системы ср/м,который позволяет создавать и изменять файлы Кода "ascii" на оборудовании системы ср/м.

  Программа еd имеет ряд команд для отыскания цепочек команд, замены и вставки,которые оказываются полезными при создании и исправлении программ или текстовых файлов под управлением ср/м.

Несмотря на то,что ср/м имеет ограниченую область рабочей  памяти , размер файла,который может быть отредактирован, не ограничен, поскольку данные свободно расрпеделяются по блокам.

  после инициирования еd создается специфицированный исходный файл, если он не существует, и открывает файл для доступа.

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

  если оператор отпечатал:

    еd x.asm {bk}

   программа еd создает промежуточный рабочий файл с именем:   x.asm

  Для содержания отредактированных данных во время прогона Ed. после завершения работы ed, файл х.аsm переименовывается в файл x.bak, а отредактированный файл в x.asm.т.о., файл x.bak

Содержит первоначальный файл и x.asm содержит заново отредактированный файл.оператор всегда может возвратится к первой версии файла при помощи удаления самой последней версии и сохраняяя предшествующую. Предположим, что настоящий файл был не правельно отредактирован:

    dir x.* - убеждаемся в наличии файла ".bak"

   еra x.asm  - стираем последнюю версию

   ren x.asm=x.bak  - переименовываем файл ".bak" в ".asm"

   Отметим, что оператор может аварийно завершить в любой точке редактирование (повторная загрузка,сбой питания, ctrl+c или команда "q") без разрушения первоначального файла.в этом случае файл ".bak" не создается и первоначальный файл всегда остается не поврежденным.

  данная программа также позволяет пользователю использовать источник по своему усмотрению и создавать резервные файлы между двумя дисками:

    ed file.asm d:

  - будем редактировать файл с текущего диска на диск d:. т.е. временный файл ".$$$" будет создан на диске d:, файл на диске а переименуется в файл "file.bak", а файл "file.$$$" в "file.asm".

Если на диске d:был файл "file.asm" появится сообщение:

    file exists

    оналогично другим транзитным командам ed мажет работать с любого зарегистрированного диска:

    еd b: x.asm

  -редактирует файл с привода b:.

   sysgen

   Данная команда позволя ею создавать на дискетах операционную систему для дальнейшей работы с этой дискетой. Инициализация Sysgen:

    а>sysgen  {bk}

   sysgen version n.n

   unit = 

  Выводит версию sysgen, считывает систему с первых 4 дорожек дискеты с дисковода а: (!!!) И запрашивает имя диска

На который записать систему. Программа не проверяет есть или нет система на исьодной дискете, просто считывает дорожки, полагая, что она там есть.

  - вставьте дискету и укажите имя дисковода приемника, после чего ос будет переписана на дискету в указаном дисководе.

Если один дисковод то sysgen попросит установить диск-приемник и после этого нажать на любую клавишу. Дальнейший перенос файлов на новую дискету возможен либо с помощью команды "pip", "fcopy" или "power".

   submit

  Данная команда позволяет группировать команды ос для  автоматической обработки. Имя, которое дается в команде submit

Должно быть именем файла, содержащимся на текущем диске с предпологаемым типом ".sub".файл ".sub" содержит прототипы команды ос с возможной заменой параметров. Фактические параметры (parm#1...parm#2) представляют собой команды и если нет ошибок, файл представленных команд обрабатывается последовательно.

  Файл прототипов команд создается при помощи использования Еd с распределенными параметрами "s" в форме:

  $1  $2  $3  ...  $n

 -соответственно количеству  фактических параметров, которые будут включены когда файл будет передан на исполнение. Когда выполняется команда submit фактические параметры сравниваются с официальными в прототипах. Если количество официальных и фактических параметров не совподает,то функция передачи аварийно завершается с сообщением об ошибке.функция submit

Создает файл подставляемых команд с именем:

   $$$.sub

 -на зарегистрированном диске. Когда система повторно загружается(после завершения команды submit), этот командный файл считывается ccp как источник ввода, а не как консоль.

Если функция submit выполняется на другом дисководе(не а), команды не обрабатываются до тех пор, пока дискета не будет вставлена  в дисковод а и повторно загружена. Для того, чтоб ввести знак "доллар" в файл submit,

Пользователь может отпечатать "ss", что сокращает один знак"s" в командном файле.знак стрелки, направленой вверь может идти перед буквой "x", что соответствует ctrl+x.

  последняя команда в файле "sub" может инициировать еще один файл "sub", позволяя т.о. составлять сложные конструкции из файлов "sub".

  Предположим, что на диске есть файл "asmbl.sub", который содержит прототипы команд:

    аsm $1

   dir $1.*

   era *.bak

   pip $2:=$1.prn

   era $1.prn

   команда :

    submit asmbl x prn  {bk}

   -позволяет submit считать файл asmbl.sub подставляя "x" везде

Где встречается "$1" и "prn" , где встречается "$2",что образуеt

Файл $$$.sub, содержащий команды:

    asm x

   dir x.*

   era *.bak

   pip prn:=x.prn

   era x.prn

   -которые последрвательно выполняются ccp.   Функция "submit" может иметь доступ к файлу "sub", который находится на другом диске (не а) путем добовления впереди имени файла имени диска.

   dump

  Данная команда печатает содержимое файла на консоли в шестнадцатиричном формате. Содержимое файла представляет собой перечисление 16 байт одновременно, причем адрес абсолютного  байта распечатывается слева  от каждой строки в шестнадцатиричном коде. Длинные расречатки могут быть аварийно завершены путем нажатия клавиши стирания.

   movcpm

    Программа "movcpm" позволяет пользователю изменять конфигурацию ос для конкретного обьема памяти.два необязательнных параметра могут быть использованы для того, чтобы указать, первое: желаемый размер памяти, второе: место расположения новой системы после завершения программы. Если первый параметр не задается или вводится знак"*", "movcpm" расширяет обьем памяти до максимального, на основе килобайт непрерывного запоминающего устройства с произвольным доступом в ведущей системе начиная с адреса 0000h.если второй параметр опускается система выполняется, но не записывается постоянно; если вводится "*" ,система сстается в памяти готовая к выполнению команды"sysgen".

Программа "movcpm" изменяет местоположение изображения памяти ос и располагает этот образ в памяти для подготовки к операции по созданию системы. Формы команд представляют собой:

    movcpm {bk}  - изменяет расположение и выполняет ос   для управления конфигурацией памяти,   имеющейся в данный момент времени   (память проверяется на наличие   непрерывного запоминающего устройства   с произвольным доступом, начиная с  100h). После завершения изменения расположения новая система выполняется,   но не записывается на дискету.

   movcpm n {bk}  - создает систему с измененным обьемом  памяти для управления ос в n-кбт.

  (n от 16 до 64) и выполняет систему,  как в предидущем случае.

   movcpm * * {bk}

 - создает образ памяти,имеющейся в   данный момент времени,но готовит его   для операции "sysgen"

   movcpm n * {bk}

 - строит образ памяти с измененным расположением для системы памяти в n-кбт   и оставляет образ памяти для операции   "sysgen".

  например:

    movcpm * * {bk}

   - строит новую версию ос и оставляет ее в памяти для записи на диск с помощью команды "sysgen":

    ready for "sysgen" or

   "save 32 cpmxx.com"

   - это сообщение появляется на дисплее после завершения работы программы, где xx означает настоящий обьем памяти в кбт. После этого оператор может отвечать:

    sysgen {bk}

   - на что ос сообщает:

    source drive name    /on return to skip/

   - на что пользователь отвечает {bk} так как  система уже в памяти, далее должно появится сообщение:

    destination drive name    /or return to reboot/

   - ответ пользователя "b" указывает на то, что копия ос должна быть записана на диск "b".после чего появится подсказка Ос:    destination on b,    then type return

   - o tom,что новая система записана на диск "b" и готова записать ее еще куда-нибудь.

Отметим, что если вы укажите диск "a" вместо "b" система будет записана на диск "a",а в подсказке будет запрос о имени приемника до тех пор пока не будет нажато {bk},а не имя диска.

Примечание: программа movcpm не имеет никакого значения т.к она расчитана перемещать cp/m с bios 77-трековых нгмд, а у нас bios и bdos (от корвета, это новейшая версия digital Research для 5'' нгмд, 1983 г.). При попытке перемещать Нашу cp/m будет выдаваться ошибка. Поэтому перемещайте - перетранслируя заново все части cp/m с пом. ассемблера.

    Условные обозначения интерфейса

    Система cp/m v2.0 вызывается тем же самым образом, что и предшествующие ее версии, причем вызов идет в ячейку 0005h, номер функции находится в регистре "c" и адрес информации в паре регистров "de". Величины, состоящие из одного байта, возвращаются в регистр "a", а двух байтовые в пару "hl"(по причине совместимости, регистры "a"="l" и "b"="h" после возврата во всех случаях). Список вызовов ос приводится ниже; звездочкой помечены функции, которые являются либо новыми, либо пересмотренными в данной версии. Отметим, что нулевая величина возвращается для номеров функций, выходящих за рамки установленных пределов.

   0  сброс системы

  1  ввод с консоли

  2  вывод с консоли

  3  ввод со считывающего устройства

  4  вывод с перфоратора

  5  вывод с устройства распечатки

  6* непосредственный ввод/вывод с консоли

  7  получение байта ввода/вывода

  8  установка байта ввода/вывода

  9  печать цепочки

  10* считывание буфера консоли

  11  получение состояния консоли

  12* номер возвращаемой версии

  13  сброс дисковой системы

  14  выбор диска

  15* открытие файла

  16  закрытие файла

  17* отыскание первого

  18* отыскание следующего

  19* удаление файла

  20  последовательное считывание

  21  последовательная запись

  22* создание файла

  23* переименование файла

  24* возврат зарегистрированного вектора

  25  возврат текущего диска

  26  установка адреса dma

  27  получение адреса (распределения)

  28* диск с защитой от записи

  29* получение адреса (вектор только считывания r/o)

  30* получение параметров файла

  31* получение адреса(параметров диска)

  32* установка/получение кода пользователя

  33  произвольное считывание

  34* произвольная запись

  35* вычисление размеров файла

  36* установка произвольного считывания

 Примечание: в cp/m v2.2 есть ф.37, а в cpm v3.0 - 42 функции.  (функции 28,29 и 32 должны избегаться в прикладных программах для поддержания совместимости по верхнему уровню с mp/m).

Не пугайтесь у вас mp/m никогда на будет - mp/m многопользовательская, т.е много терминалов, а к ориону можно подключить 1.

   описание новых или пересмотренных функций:

  (добавленных в версии 2.0 по сравнению с 1.4, впрочем  вы не работали в 1977 на cp/m 1.4, и это не помните)

 Ф.6 -  данная ф.поддерживается системой для тех видов применения ,где необьодимо избегать операций bdos по вводу/выводу с консоли. Программы,которые в данный момент времени выполняют непосредственный ввод/вывод при помощи   bios должны быть изменены для использования непосредственного ввода/вывода под управлением bdos т., чтоб они могли полностью поддерживаться будующими релизами  mp/m и cp/m.

   после ввода ф.6, регистр "e" либо содержит шестнадцатиричное ff, обозначаемое запрос ввода с консоли, либо  знак кода ascii. Если вводимая величина ff, то ф.6 возвращает "a"=00 (если не готов не один знак), в противном   случае "a" содержит следующий знак ввода с консоли.

  если вводимая величина в "e" не ровна ff,то ф.6 предпологает наличие в "e" знака кода ascii,который посылается на консоль.

Ф.10 -  операция считывания буфера консоли сохраняется неизменной за исключением того, что поддерживается редактирование строки консоли. Надо отметить,что определенные функции,которые возвращают каретку в крайнее левое  положение (например ctrl+x) делают это только до положения колонки, где заканчивается подсказка (ранее каретка    возвращенная в крайнее левое поле). Это новое правило   делает ввод данных для оператора и исправление строки    более четким.

Ф.12 -  эта ф.была повторно определена для предоставления   информации,которая позволяет иметь програмирование,    независимое от версии(ранее это был "подьем головки" - - ф.,которая возвращала "hl"=0000 в версию 1.4,но не    выполняла ни каких операций). Величина,возвращаемая ф.12    состоит из двух байтов,причем "h"=00 для релиза cp/m и    "h"=01 для мр/м ,а также "l"=00 для всех предшествующих   релизов на cp/m.2.0 возвращает шестнадцатиричную велинину 20 в регистр"l" и последующие релизы версии 2 в   шестнадцатиричном коде в диапазоне 21,22 по 2f. При   помощи использования ф.12, например, вы можете написать  прикладные программы,которые обеспечивают как ф-ции   произвольного доступа, так ф-ции последовательного  доступа, причем произвольный доступ запрещен при работе  под управлением ранних релизов cp/m. 

Если операции файла,описанные выше, имеют место, "de" адресуется к управляющему блоку файла(fcb). Далее, все операции справочника происьодят в зарезервированной области, которая не оказывает воздействие на запись буферов, как это было в версии 1.4, за исключением "поиска первого" и "поиска следующего", где требуется совместимость.

  Управляющий блок файла(fcb) и его область данных состоит из последовательности 33 байтов для последовательного доступа И 36 в случае, если файл имеет произвольный доступ. Управляющий Блок файла по умолчанию обычно распологается в ячейке 005ch и может быть использован для файлов с произвольным доступом, поскольку байты 007dh,007eh и 007fh имеются для этой цели. С целью обозначения формат "fcb" показан со следующими полями:

 ---------------------------------------------------------------

Dr  f1 f2 . F8  t1 t2 t3  ex  s1 s2  rc  d0 . Dn cr  r0 r1 r2

---------------------------------------------------------------

C0  c1 c2...c8  09 10 11  12  13 14  15  16...31 32  33 34 35

 Где:

  dr  код дисковода(0-16)

  0=>использование привода по умолчанию для файла,

  1=>автоматический выбор диска привода а,

  2=>автоматический выбор диска, привод b,

  16=>автовыбор диска, привод p.

  f1...f8

  содержит имя файла в коде ascii верьнего регистра

  с битом высшего порядка = 0

   т1,т2,т3

  содержит тип файла в коде аscii верьнего регистра   с битом высшего порядка = 0

  т1,т2,т3 обозначают бит эть позиций;т1=1 - файлу   только считывание,т2=1 - файлу нет перечня dir   ex  содержит номер настоящего экстента, обычно   устанавливается на ноль(00) пользователем, но в  диапазоне 0 - 31 во время ввода/вывода файла.

   s1  зарезервировано для внутреннего системного использования

  s2  --"--,установка на ноль по вызову в "open", "name", "search"

  rc  счет записей для экстента, принимает величину от 0 до  128

  d0...dn

  заполняется ос, зарезервировано для системного использования.

  cr  настоящая запись для считывания или записи при последовательной операции файла, обычно устанавливается   пользователем на ноль.

  r0,r1,r2   необязательный номер произвольной записи в пределах   0 -65535 с переполнением до r0,r1,r2 представляют   16-ти битовую величину с битом низшего порядка r0   и высшего r1

 Ф.15

  Операция по открыванию файла идеентична предшествующим определениям, за исключением того, что байт s2 автоматически обнуляется. Отметим, что предшествующая версия ос, определила этот Байт как ноль, но не сделала проверки совместимости. Т.о., байт очищается для того,чтобы обеспечить совместимость по верхнему Уровню с самой последней версией, где она требуется.

 Ф.17

  данная ф. сканирует справочник для определения соответствия с файлом, заданным fcb, адресуемым "de".величина 255(ff)возвращается если файл не был найден, в противном случае, величина "a"

Равная 0,1,2,3 возвращается, указывая на то,что файл имеется в наличие. В том случае, если файл был найден,настоящий адрес dma заполняется записью, содержащей данные справочника и относительная начальная позиция представляет собой a*32(т.е. вращение регистра "a" влево на 5 бит или сложение "a" пять раз). Хотя она обычно не требуется для прикладных программ, информация со справочника может быть получена из буфера в этой позиции. Знак вопроса кода ascii(63 в десятичном формате,3f в шестнадцатиричном) в любом положении от f1 до ex соответствует полю любой записи справочника по умолчанию или автоматическому выбору привода диска. Если dr - поле содержит знак вопроса кода Ascii, то функция автоматического выбора диска запрещается, отыскивается диск по умолчанию и функция поиска возвращает любую соответствующую запись, распределенную или свободную, принадлежащую любому номеру пользователя. Эта ф. обычно не используется прикладными программами, но разрешает иметь полную гибкость при сканировании настоящих величин справочника. Если поле dr не является знаком вопроса,байт s2 автоматически обнуляется.

 Ф.18

  эта ф. Аналогична предшествующей,за исключением того,что

Сканирование српавочника продолжается с последней соответствующей записи. Аналогично ф.17,ф.18 возвращает величину 255 в "a" когда ни одно из звеньев справочника больше не совпадает.

 Ф.19

  данная ф.,удаляет файлы,которые совпадают с fcb, адресуемым "de".имя файла и тип могут содержать однозначные ссылки (т.е знак вопроса в различных позициях), однако код выбора привода

Не может быть однозначным,как в ф.17 и ф.18.   ф.19 возвращает десятичную величину 255,если справочный файл или файлы не могут быть найдены, в противном случае, величина  в пределах от 0 до 3 возвращается.

 Ф.22

  данная ф. Идентична предшествующим версиям cp/м, за исключением того, что байт 2 обнуляется при вводе записи в bios.

 Ф.23

  эта ф. Такая же, как и в предшествующих релизах, за исключением того,что величина 255 возвращается, если ф.переименования не была успешной (файл,который должен быть переименован, не может быть найден), в противном случае включина в пределах от 0 до 3 возвращается.

 Ф.24

  величина зарегистрированного вектора, возвращается ос(в.2.0)

Составляет 16-ти битовую величину в "hl", где бит наименьшей значимости 1 соответствует первому приводу а и наиболее значимый бит h соответствует шестнадцатому приводу с меткой p.

Отметим, что совместимость поддерживается ранними релизами, поскольку регистры "a" и "l" содержат теже самые величины после возврата.

 Ф.28

  функция защиты диска от записи обеспечивает временную защиту от записи для настоящего диска. Любая попытка записи на диск перед следующим холодным запуском или горячим запуском или горячим запуском выдает сообщение:

   bdos err on a:r/o

Ф.29

  это фукция возвращает вектор бита в пару регистров"hl", что указывает на приводы с временной установкой бита только считывания. Аналогично ф.24, наименее значимый бит соответствует приводу а,тогда как наиболее значимый - приводу p .бит только

Записи устанавливается либо четким вызовом в функцию 28, либо автоматическим механизмом математического обеспечения в cp/м который обнаруживает измененные диски.

 Ф.30

  ф.установки параметров файла позволяет производить програмное манипулирование постоянными указателями,приложенными к файлам.в частности, параметры системы и r/o(т1 и т2 в таблице)

Могут быть установлены или сброшены.пара "de" адресуется к неоднозначному имени файла с соответствующими параметрами, установленными или сброшенными.ф.30 отыскивает соответствие и изменяет совпавшие записи справочника т.о., чтобы они содержали выбранные указатели. Указатели с f1 по f4 в данный момент не используются, но могут оказаться полезными для прикладных программ, поскольку они неучаствуют в процессе совпадения во время открывания файла и операций по его закрытию. Указатели с f5 по f8 и т3 зарезервированы для последующего расширения системы в будующем.

 Ф.31

  адрес блока параметров диска, резидентного в bios, возвращается в "hl" в результате вызова этой ф.. этот адрес может быть использован для одной из следующих целей: во-первых, величины параметров диска могут быть получены для отображения и для вычисления пространства, либо же транзитные программы  могут динамически изменить величины настоящего диска и его параметров при изменении оборудования диска, если это потребуется. Обычно прикладные программы не требуют использования этого средства.

 Ф.32

  Прикладная программа может изменить или запросить настоящий активный номер пользователя при помощи вызова ф.32.Если  Регистр "e"=ff, то величина настоящего номера пользователя возвращается в регистр "a", где величина находится в пределах от 0 до 31. Если регистр "e" не ff , то настоящий номер пользователя изменяется до величины "e" (модуль 32).

 Ф.33

  данная ф. Аналогична произвольному считыванию файлов предшествующих релизов, за исключением того,что операция проходит в

Конкретном номере записи,выбраной 24-битовой величины, построенной из полей трех байтов, следующих за fcb (позиций байтов r0  в 33,r1 в 34,r2 в 35). Отметим, что последовательность из 24 бит хранится сначала с наименее значимым байтом (r0),затем с байтом среднего значения (r1) и байтом наивысшего значения (r2). Сp/м релиз 2.0 не обращается к байту r2, за исключением тех случаев, когда производится вычисление размера файла(ф.35).байт r2 должен быть обнулен,однако,поскольку ненулевая величина указывает переполнение после конца файла.

  т.о., в версии 2.0 пара байтов r0,r1 рассматривается как двойной байт или величина "слова", которая содержит запись, подлежащую считыванию.эта величина находится в диапазоне от 0

До 65535,при условии предоставления доступа к любой конкретной записи файла 8 мбт.для того,чтобы обработать файл,использующий произвольный доступ, основной экстент (экстент 0)должен быть сначала открыт.описание основного экстента позволяет правильно составлять справочник и пользоватся командой "dir". Выбранный  номер записи после занесения его в справочник хранится в поле произвольной записи(r0,r1) и bdos вызывается для считывания записи. После возврата с вызова,регистр"а" либо содержит код ошибки, как приводится ниже, либо величину 00, указывающую на то, операция прошла успешно. В последнем случае настоящий адрес dma содержит запись с произвольным доступом. Отметим, что в противоположность операции последовательного считывания, номер записи не выдвигается вперед.т.о., последующие операции произвольного считывания продолжают считывать туже самую запись.

  После каждой операции произвольного считывания, логический экстент и величины настоящей записи устанавливаются автоматически (файл может быть последовательно считан или записан

Начиная с настоящей позиции с произвольным доступом, в этом случае последнее последовательное считывание и последняя запись будут переписываться после того,как вы перейдете к операции последовательной записи.конечно,вы можете просто продвинуть вперед позицию произвольной записи, которая следует за каждым произвольным считыванием или записью для того, чтобы получить эффект последовательной операции ввода/вывода).

  Коды ошибок, возвращаемые в регистр"a" после произвольного считывания, перечислены ниже:

    01  считывание незаписанных данных

   02  /без возврата в произвольный режим/

   03  нельзя закрыть настоящий экстент

   04  поиск незаписанного экстента

   05  /без возврата в режим считывания/

   06  поиск прошедшего физического конца диска

 

  Коды 01 и 04 встречаются,когда операция произвольного считывания имеет доступ к блоку данных,которые не были ранее записаны  или экстенту,который не был очищен, что является эквивалентным условием. Ошибка 03 обычно не встречается при нормальной работе системы,однако может быть устранена простой операцией повторного считывания, или повторным открытием нулевого экстента, если только диск не имеет защиты от записи. Код  ошибки 06 встречается каждый раз, когда байт r2 не равен нулю В настоящем релизе 2.0.обычно, не нулевая величина возвращает коды, которые могут рассматриваться как отсутствующие данные, а возвращаемые нулевые коды указывают на завершение работы.

 Ф.34

  операция произвольной записи инициируется аналогично вызову произвольного считывания,за исключением того, что данные записывваются на диск с настоящего адреса dma. Далее, если экстент диска или блок данных,которые представляют собой цель записи не были еще распределены, распределение производится прежде чем продолжается операция записи. Как и в операции произвольного считывания, номер произвольной записи не изменяется в результате записи номер логического экстента и позиции настоящей записи блока управления файла устанавливается т.о., чтобы они соответствовали произвольной записи,которая записывается. Еще раз можно отметить что последовательная запись или считывание могут начинаться после произвольной записи с замечанием, что запись,к которой в данный момент времени производится адресация либо считывается, либо повторно записывается при начале последовательной операции  также вы можете просто продвинуть вперед позицию произвольной записи после каждой операции записи для получения эффекта последовательной операции записи. Отметим, в частности, что считывание или запись последней записи экстента в произвольном режиме не вызывает переключения экстента в авторежиме, как это происходит при последовательном режиме под управлением либо cp/m 1.4, либо cp/м 2.0.

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

 Ф.35

  при вычислении размера файла,пара регистров"de" адресуется к fcb в формате произвольного режима(байтыr0,r1 и r2 имеются в наличии).fcb содержит неоднозначное имя файла, которое используется при сканировании справочника.после возврата, байты произвольной записи содержат"виртуальный" размер файла,который в действительности,является адресом записи, которая идет после окончания файла,если после вызова ф35 идет байт записи высшего порядка r2 составляющий 01,то файл содержит составную величину 16-бит(r0-это байт наименшего значения, как и прежде), который представляет собой размер файла.

  Данные могут быть дополнены до конца существующего файла простым вызовом ф35 для установки позиции произвольной записи, и выполнением после этого последовательности произвольной записи, начиная с адреса настоящей.

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

 Ф.36

  по вызову данной ф. Bios автоматически производит позиционирование произвольной записи с файла, который был считан или записан последовательно в конкретной точке. Ф. может оказаться полезной в двух случаях:

  -во-первых, она бывает необьодима для того, чтобы первоначально считать и просканировать последний фaйл для получения различных полей "ключей". По мере того, как встречается каждый ключ, ф36 вызывается для вычисления позиции произвольной записи для данных, соответствующих этому ключу. Если размер единицы данных составляет 128 байт, получающаяся позиция записи помещается в таблицу с ключом для последующего восстановления. После сканирования всего файла и свода в табличную форму ключей и номеров их записей, вы сразу же можете переходить к записи с конкретным

Ключом при помощи выполнения произвольного считывания путем использования соответствующего номера произвольной записи, который был сохранен ранее. Схема довольно просто обобщается, когда записи с различной длинной вовлекаются в данный процесс, т.к. программе необьодимо хранить лишь позицию байта по отношению к буферу вместе с ключом и номерром записи для того, чтобы найти точную начальную позицию закодированных данных в будущем;

  -во-вторых, использование ф36 происходит при переходе с последовательного считывания и записи к произвольному (файл имеет последовательный доступ к конкретной точке).ф36 вызывается и устанавливает номер записи и последующие произвольные операции считывания или записи продолжаются с выбранной точки файла.

 

К сожалению когда набирался этот текст, подлец и шуллер украл (говорит, что потерял) фирменное руководство по cp/m версии 1.4, поэтому А. Васильев набирал материал по дополнению digital research к версии 2.0, которое рассматривает только доработанные функции. Впоследствии я достал фирменное руководство и к версии 2.2. В сжатой форме часть материалов набрал А. Кузнецов (если надо пишите мне). Возможен любой обмен на материалы о z-cpr (это загружаемый модуль расширения к cp/m: позволяет иметь имена вместо user-ов иметь дату и время у файлов дополнительные команды ccp, в ссср не распространен, т.к для z80).

    Чистяков Владимир: 199238 С-Петербург а/я 175 Санкт-Петербург, март 1992

  

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу