10. Эмулятор НГМД/НЖМД 18.09.90 Эмулятор НГМД/НЖМД управляет работой контроллера накопителей и самими накопителями. Программный доступ к эмулятору осуществляется с помощью одного регистра: HFBUF (177130) ─ буферный регистр эмулятора; HDVEC ═ 230 ─ вектор прерывания от НЖМД FDVEC ═ 234 ─ вектор прерывания от НГМД прерывания запрещены 0 разрещены 1 HFBUF (при записи в регистр) ┌───────────────────────────────────────────────┐ │15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0│ └──────────────────────┬────────────────────────┘ └─────────────────────┼───────────────────────┘ └─── для запуска операции в этот регистр необходимо записать виртуальный адрес элемента очереди вводаевывода в формате ДОС При запуске операции, если необходимо после ее завершения получить прерывание, младший разряд виртуального адреса должен содержать 1. В противном случае (работа без прерываний) младший разряд виртуального адреса должен содержать 0. HFBUF (при чтении регистра) ┌───────────────────────────────────────────────┐ │15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0│ └───────────────────────────────────────────────┘ ───────────┬─────────── ┬ ────┬─── ┬ ────┬─── │ │ │ │ └┤ номер лог. диска │ │ │ │ для перезагрузки │ │ │ │ (Warm-Boot) │ │ │ │ │ │ │ └──┤═1 ─ диск для Warm─Boot │ │ │ не определен │ │ │ ═0 ─ номер диска для │ │ │ Warm─Boot задан │ │ │ разрядами 2..0 │ │ │ │ │ └───┤ ─ номер лог.диска для началь─ │ │ ной загрузки (Cold─Boot) │ │ │ └─────────┤=1 эмулятор готов для выполнения │ следующей операции │ └──────────────┤ после завершения операции содержит копию разрядов регистра ошибок контроллера (0-означает отсутствие ошибок) В элементе очереди фактически используется следующая информация: адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ blkn │ ─ номер первого блока в операции ├────┬────┤ номер накопителя │unit│code│ ─ код операции ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ wcnt │ ─ счетчик слов в операции └─────────┘ Байт "unit" в младших трех разрядах содержит номер логического диска, а в четвертом разряде признак работы с НЖМД (0) или с НГМД (1). 10.1. Работа с НЖМД Эмулятор работает с диском, имеющем сложную структуру: с точки зрения ДОС физический накопитель разбит на логические диски. Общее количество логических дисков может быть от 1 до 8 включительно. Доступ к логическим дискам осуществляется с помощью следующих имен: HD0:, HD1:, ... HD7:. Размеры логических дисков и их фактическое расположение на физическом носителе определяется при форматировании (для этой цели используется системная утилита HARD). Вся информация о логических дисках находится в особом секторе на физическом накопителе (partition table ─ таблица разделов ─ PARTBL). При инициализации эмулятора копия PARTBL считывается и хранится в локальной памяти эмулятора. Описание основных параметров накопителя также находится в особом секторе и включает: ─ количество секторов на дорожке ─ количество головок ─ количество цилиндров ─ емкость накопителя в секторах (блоках) Для каждого из восьми логических дисков в особом секторе хранится следующая информация: ─ статус диска: ─ признак нулевого диска ─ признак разрешения доступа к диску ─ признак разрешения доступа только по чтению ─ признак диска с ОС (Сold─Boot) ─ признак диска с ОС (Warm─Boot) ─ номер 1─го цилиндра, принадлежащего диску ─ число цилиндров, принадлежащих диску ─ номер первой головки ─ количество головок ─ номер первого сектора ─ количество секторов ─ абсолютный номер 1─го сектора, принадлежащего диску ─ емкость диска в секторах Каждый логический диск ─ это совокупность блоков, занумерованных последовательно, начиная с 0. Размер блока ─ 512 байт и совпадает с емкостью одного сектора. Операция, выполняемая эмулятором, полностью определяется представленной выше таблицей (полем CODE): CODE ═ 000 ─ чтение/запись данных Если счетчик слов положительный, то с логического диска номер гтше будет считано цсте слов, начиная с блока номер идлт. Считанная с диска информация будет размещена в буфере оперативной памяти, начиная с виртуального адреса игаа. Если счетчик слов отрицательный, то на диск будет записано (─wcnt) слов, начиная с блока идлт (остаток сектора, если он есть, заполняется нулями). Информация, которая будет записана на диск, считывается из буфера оперативной памяти, начиная с адреса игаа. Одной операцией чтения (или записи) можно прочитать (записать) не более 64К байт. При выполнении любых операций с диском на индикаторе высвечивается номер логического диска , а также номер цилиндра, с которым выполняется операция. СЩВУ ═ 360 ─ получить/передать копию PARTBL из памяти эмулятора адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ │ ├────┬────┤ │ 000│ 360│ ─ код операции ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ wcnt │ ─ счетчик слов в операции └─────────┘ ═ +1 ─ получить PARTBL из эмулятора ─1 ─ передать PARTBL в эмулятор Данная операция не вызывает обращений к физическому накопителю: копия PARTBL пересылается между локальной памятью эмулятора и буфером пользователя. CODE ═ 361 ─ чтение/запись PARTBL с физического накопителя адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ 123456 │ ─ константа для контроля ├────┬────┤ │ 000│ 361│ ─ код операции ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ wcnt │ ─ счетчик слов в операции └─────────┘ ═ +1 ─ прочитать PARTBL с диска ─1 ─ записать PARTBL на диск СЩВУ ═ 362 ─ форматирование дорожки адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ blkn │ ─ номер дорожки на логическом диске ├────┬────┤ номер диска │ 00x│ 362│ ─ код операции x ═ 0:7 ├────┴────┤ │ buff │ ─ виртуальный адрес буфера с данными ├─────────┤ для форматирования │ 123456 │ ─ константа для контроля └─────────┘ CODE ═ 373 ─ получить емкость логического диска в блоках Возвращает в первом слове буфера емкость логического диска в блоках. адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ │ ├────┬────┤ номер диска │ 00x│ 373│ ─ код операции x ═ 0:7 ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ │ └─────────┘ Эмулятор работает с накопителем, который должен быть предварительно структуризован и отформатирован. Это выполняется с помощью системной программы HARD.SAV под управлением ДОС. В состав ДОС входит драйвер HD.SYS, управляющий работой НЖМД. Программа HARD входит в состав ВПО, поставляемого с ПЭВМ, и должна использоваться только с ПЭВМ ПК─11/16. Данный вариант утилиты позволяет структуризовать и форматировать НЖМД только на данной ПЭВМ и будет непредсказуемо функционировать на любых других ЭВМ. Запуск программы выполняется командой монитора R или RUN: .R HARD или .RUN FDn:HARD Программа HARD работает в экранном режиме с использованием меню для выбора всех необходимых действий по структуризации и форматированию (всего или частей) физического накопителя. 10.2. Работа с НГМД Эмулятор НГМД предоставляет возможность работы с 8─. логическими дисками. Каждый логический диск описывается следующим набором параметров (хранящимся в виде таблицы ─ FLXTBL): ─ номер начального цилиндра (2 байта); ─ количество цилиндров (2 байта); ─ физический номер привода е плотность записи (2 байта): ╔═════════════╦══╦══╦══╦══╗ ║... ║ 3║ 2║ 1║ 0║ ╚═════════════╩══╩══╩══╩══╝ │ │ │ └────┤0 ─ 500 кбит/с (1.6 М) │ 1 ─ 250 кбит/с (800 К) │ ─ количество поверхностей логического диска (2 байта: 1 или 2); ─ номер начального сектора на дорожке (2 байта); ─ количество секторов на дорожке (2 байта); ─ размер межблочного промежутка в байтах "Gap3" (байт); ─ время позиционирования головки в мс (байт); ─ заполнитель сектора при форматировании (байт); ─ резерв (байт); ─ размер логического диска в блоках (2 байта); ─ резерв (2 байта). Операция, выполняемая эмулятором, полностью определяется представленной выше таблицей (полем СODE): CODE ═ 000 ─ чтение/запись данных Если счетчик слов положительный, то с логического диска номер гтше будет считано цсте слов, начиная с блока номер идлт. Считанная с диска информация будет размещена в буфере оперативной памяти, начиная с виртуального адреса игаа. Если счетчик слов отрицательный, то на диск будет записано (─wcnt) слов, начиная с блока blkn (остаток сектора, если он есть, заполняется нулями). Информация, которая будет записана на диск, считывается из буфера оперативной памяти, начиная с адреса buff. Одной операцией чтения (или записи) можно прочитать (записать) не более 64К байт. При выполнении любых операций с диском на индикаторе высвечивается номер логического диска , а также номер цилиндра, с которым выполняется операция. CODE ═ 360 ─ получить/передать копию FLXTBL из памяти эмулятора для указанного логического диска адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ │ ├────┬────┤ │ 01x│ 360│ ─ код операции ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ wcnt │ ─ счетчик слов в операции └─────────┘ ═ +1 ─ получить FLXTBL из эмулятора ─1 ─ передать FLXTBL в эмулятор Данная операция не вызывает обращений к физическому накопителю: копия FLXTBL пересылается между локальной памятью эмулятора и буфером пользователя. CODE ═ 361 ─ чтение/запись FLXTBL с физического накопителя адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────┤ │ 123456 │ ─ константа для контроля ├────┬────┤ │ 01x│ 361│ ─ код операции ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ wcnt │ ─ счетчик слов в операции └─────────┘ ═ +1 ─ прочитать FLXTBL с диска ─1 ─ записать FLXTBL на диск CODE ═ 362 ─ форматирование дорожки адрес, записы─ ваемый в РАИГА ┌─────────┐ addr ───────┤ │ blkn │ ─ номер дорожки на логическом диске ├────┬────┤ номер диска │ 01x│ 362│ ─ код операции x ═ 0:7 ├────┴────┤ │ buff │ ─ виртуальный адрес буфера с данными ├─────────┤ для форматирования │ 123456 │ ─ константа для контроля └─────────┘ CODE ═ 373 ─ получить емкость логического диска в блоках Возвращает в первом слове буфера емкость логического диска в блоках. адрес, записы─ ваемый в HFBUF ┌─────────┐ addr ───────Д │ │ ├────┬────┤ номер диска │ 01x│ 373│ ─ код операции x ═ 0:7 ├────┴────┤ │ buff │ ─ виртуальный адрес буфера ├─────────┤ │ │ └─────────┘ Эмулятор работает с дискетами, которые должны быть предварительно отформатированы. Форматирование выполняется с помощью системной программы FLOP.SAV под управлением ДОС. В состав ДОС входит драйвер FD.SYS, управляющий работой НГМД. Программа FLOP входит в состав ДОС, поставляемой с ПЭВМ, и должна использоваться только с ПЭВМ ПК─11/16. Данный вариант утилиты позволяет форматировать дискеты только на ПЭВМ и будет непредсказуемо функционировать на любых других ЭВМ. Запуск программы выполняется командой монитора: .R FLOP *FDn:/ключи "n" номер логического диска 0:7. Ключи: /Y ─ запрещает выдачу запроса на подтверждение операции; /W ─ используется для форматирования в однодисковых конфигу─ рациях и позволяет выполнять смену дисков; /V ─ включает режим проверки при форматировании; /U ─ сохраняет текущие установленные параметры на диске; /D:x ─ плотность записи: х═0 ─ 800К, х═1 ─ 1.6М; /L:x ─ интерливинг х═1,2,... /T:x ─ количество дорожек; /S:x ─ количество секторов на дорожке; /H:x ─ количество головок (или поверхностей); /G:x ─ размер "Gap3" в байтах; /R:x ─ время позиционирования головки (15.─х) мс; /P:x ─ заполнитель сектора при форматировании; /F:x ─ физический номер накопителя (х═0,1); // ─ выполнить команду.