Сообщение от
Error404
1. Прошу о небольшом ликбезе - как в Unreal проверить/сделать вот это:
Цитата Сообщение от Максагор Посмотреть сообщение
ВАЖНО: флоппи диск в дисководе НЕ ДОЛЖЕН НАХОДИТЬСЯ
ВНИМАНИЕ: При работе со всеми ОСями на винте ВЕСЬМА ЖЕЛАТЕЛЬНО включать эмуляцию ATM-контроллера PC-клавиатуры! (причем в случае с CP/M - желательно ДО ЗАГРУЗКИ самой ОСи)
С флопиком все очень просто. Я даже удивился этому вопросу для человека, знакомого с Unreal - вы же вставляете виртуальные TRDшки в эмуле либо по F3 (там вставляется только в A:), либо через выбора соответствующей опции в конфигурационном меню, вызываемом по ALT+F1 - там уже можно выбрать устройства A: B: C: D: (сразу скажу, для CP/M, где можно программно гибко подключать любые физические устройства к любым логическим буквам устройств, данные перечисленные ABCD скорее означают физические флопики 0,1,2,3). Так вот, если какой-то образ подсоединен к дисководу A:, но не забудьте отмонтировать образ через меню по ALT+F1, выбрав там вкладку Beta-Disk и нажав там у образа кнопочку remove.
По клавиатуре:
В версиях эмуля v0.34 или 0.35 ATM-клава включается/отключается по CTRL+ALT+Z. Может быть в других версиях и другая раскладка "горячих клавиш", тогда это можно посмотреть или в хелпе по F1, или в INI-файле настроек.
Сообщение от
Error404
2. Сразу рационализаторское предложение: исправить сектор с LBA=0 (первый от начала) так, чтобы в нем находилась валидная MBR-таблица разделов с одним (первым) разделом зарезервированного типа, накрывающим собой все занятые данными области (на ATM разделы как я понимаю размечены нестандартно, и через MBR к ним доступа не будет, но хотя бы их данные гарантированно не пострадают, если на этот диск натравить нормальный fdisk - хоть CPM-овский, хоть Спринтеровский, хоть от Linux, хоть от мелгкомягких - например для создания второго MBR-раздела на свободном месте cyl 301...). Для этого в очень удачно пустой (заполненной нулями) области MBR мы пропишем такое:
Эта идея не нова, я на данном форуме также ее продвигал, когда здесь обсуждалась разработка Partition Magic для спектрума - так как CP/M использует только первые 128 байт нулевого сектора, а остальные не нарушает, а MBR использует последние 64 байта, то если сделать так, что программа разбивки винта на совместимые с PC разделы при создании MBR-разметки также не нарушит первые 128 байт, то совместимость (точнее - совместное существование) разметки CP/M с FAT и проч. на одном винте вполне реально. Ну еще надо учитывать TASiS/iS-DOS, которые в варианте АТМ для данных о части своих разделов использует сектор №2 нулевой дорожки, так что при разметке винта через стандартный MBR как раз первый по счету раздел необходимо сделать "пустым", чтобы спектрумовские ОСи резвились в нем как угодно.
Сообщение от
Error404
3. Еще вопрос по структуре (не хочу угадывать, вдруг инфа известна): в первом ATM-разделе с CP/M, начинающемся c 7E000h, сначала идет 32256 нулей (т.е. не 32кб, а почему-то на 512 байт меньше), затем с 85E00 начинается каталог.
Тут все просто: если посмотреть на описания даже форматов дисков на флопике, то там есть такое понятие, как зарезервированнная область область системных дорожек. Так, например, на АТМ-флопике это 4 логических дорожки (два двухсторонних цилиндра). В данном конкретном образе винта я при создании разделов зарезервировал на них одну логическую дорожку (не цилиндр) - напоминаю, что драйвер винта в АТМовском ЦПМ (зашитый в ПЗУ), работает в CHS-формате - т.е. с цилиндрами, дорожками, головками и секторами. А так как, исходя из параметров данного конкретного винта, одна дорожка содержит в себе именно 63 сектора по 512 байт каждый, то 63*512=32256 зарезервированных байт и ни байтом больше.
Сообщение от
Error404
Еще вопрос/пожелание. Первый раздел CP/M имеет места в каталоге ровно столько сколько туда уже записано. И чтобы добавить туда что-то ненужное, надо будет сначала что-то ненужное удалить. Может быть, сделать каталог побольше?
Первый раздел с системой на винте я намеренно сделал небольшим и с каталогом в 128 файлов максимум для скорости работы - ибо данная версия ЦПМ достаточно тормозная, и чем больше объем раздела, тем больше тормозов. А этот раздел - именно основной, системный, требующий максимальной скорости работы. В остальных разделах по 8Мб я сделал размер каталога в до 512 файлов. Такой подход диктует как мой личный опыт, так и опыт других пользователей винта на АТМ, который описан в газете "Online":
http://zxpress.ru/article.php?id=2496
Изменить число файлов в каталоге именно первого, "системного" можно только перезаписав описатель раздела с измененным размером каталога в конфигурационную запись в нулевом винте и переформатировав после этого раздел. С остальными разделами проще - там достаточно подправить имеющиеся на системном разделе файлы с конфигурацией и переформатированием этих разделов. Менять конфиг при этом не надо будет.
Сообщение от
Error404
Где-то в образе диска хранится размер этого странного оффсета (нужно для наших PC-утилит обмена файлами) и начальные адреса разделов? Откуда грузится система если эти системные треки(?) перед каталогом забиты нулями?
Сообщение от
Error404
Вопрос в том хотя бы где этот сектор, это явно не первый сектор жесткого диска, т.к. в нем чего-то похожего на загрузчик не наблюдается. Кроме того сам загрузчик тоже явно должен по какой-то таблице, описывающей расположение данных, все остальное подгружать (то что относится к описанию файловой системы - DPH, DPB в CP/M), ибо даже по количеству секторов зарезервированных под ОС (перед каталогом) явно оно отличается от того что было на дискетках - слишком жирно 32кб отступ для дискеток. И если это захардкодено в загрузчике, то это пипец какой дурной тон в CP/M где всё настраиваемое таблично (посему не думаю что оно задано константно в коде загрузчика).
Не все так просто. Да, загрузочный сектор нулевой на нулевой дорожке в данном образе имеется. Но нет какого-то стандарта, в соответствии с которым достаточно запомнить, в каком байте по какому смещению лежат нужные данные для настройки (вроде MBR), чтобы настроиться на структуру винта. Ниже я попытаюсь как можно проще (но коротко не получится) разъяснить это.
Нет, никаких жестких предустановок нет - все можно перенастроить как угодно. И не только в случае с винтом. Можно, например, флоп настроить на стандарт дискет ЦПМ Профика, корвета или Роботрона и работать с ними точно также, как утилита Штейнблюм настраивается путем изменения ряда констант на незнакомые образы.
Для каждого канала, к которым можно подключить драйвера физических носителей существуют 35-байтные загружаемые описатели. Что из себя такие описатели представляют, можно посмотреть в доке по BIOS CP/M ATM на странице 17 здесь:
http://atmturbo.nedopc.com/inf/books/bios/bios.zip
Также для лучшего понимания того, что будет изложено ниже, необходимо прочитать "Инструкцию по установке ОС CP/M на винчестер" - http://atmturbo.nedopc.com/inf/books/nedopc/install.zip - ей все равно так или иначе придется руководствоваться, если захотите самостоятельно устанавливать (или менять параметры разделов).
В приложении я прикрепил образ загрузочного диска, аналогичного размещенному на сайте АТМ - http://atmturbo.nedopc.com/download/...t/bootdisk.zip но с настройками именно на разделы текущего образа винта. Именно в этом образе флопа я вносил правки и грузил систему на винт. В принципе, все настроенные конфигурационный файлы и необходимые системные программы с их описанием я перенес на системный раздел образа винта (так что далее я не буду уточнять, имеется ввиду винт или системная дискетка), но все равно - если придется заново все переразмечать, лучше делать это с системной дискетки (почему - станет ясно из текста ниже). Да и "Штейнблюмом" пока что удобнее смотреть описываемые мной далее файлы конфигурации именно на образе дискетки (а все упоминаемые далее файлы и программы можно посмотреть на системном разделе на винте или на загрузочной дискете).
Итак: жестко заданных параметров устройств нет, но есть дефолтные значения, которые хранятся в ПЗУ и копируются в область описателей в ОЗУ (вместе с ядром системы - CCP/BDOS/часть BIOS и монитор) при первичном старте системы. В этом первичном случае по дефолту из все возможных десяти (A,B,C,D,E,F,G,H,I,J) устройств мы имеем подключенными три:
A: - RAM-диск (его с этой буквы лучше не смещать и не удалять, так как он используется для хранения временных файлов при работе пакетных процедур (аналогичных обработке BAT-файлов в MS-DOS и т.д. - это позволяет не обращаться лишний раз к реальным физическим носителям))
B: - флоппи-дисковод №0 (тот, что соответствует букве A: в TR-DOS) описатель которого настроен на физический формат TR-DOS (640Кб, 2 стороны, 80 дорожек по 16 секторов на каждой размером по 256 байт, 4 системные дорожки (две двухсторонние и др.), 128 файлов в каталоге).
C: - IDE HDD №0 (Master) - с тоже прописанными по дефолту параметрами CHS винта. Какие это параметры - нам в данном случае совершенно неважны. Важно только то, что начало логического раздела винта, исходя из этих дефолтных параметров совпадает с физическим началом собственно винта (т.н. нулевой сектор нулевой дорожки логического раздела соответствует нулевому сектору нулевой дорожки физического винта). Это самое главное -
Потому что после старта система пытается искать конфигурационную запись сначала на нулевом секторе (первых его 128 байт) нулевой дорожки логическом устройстве B: и если находит его, до начинает выполнять содержащуюся в нем программу автостарта, а если не находит запись при вставленной дискете, то вываливается с оставшимися дефолтными настройками в командную строку.
А если система не находит дискеты в устройстве B: вообще, то тогда ищется аналогично конфиг на нулевом секторе нулевой дорожки устройства C: - в нашем случае - винта. Если находит - отрабатывает то, что заложено в записи и через нее можно настроить винт (и другие устройства) по своему хотению, или даже поменять расположение устройств относительно букв. Если нет (или винт не подключен) - выходит опять в командную строку с дефолтными настройками.
Как сконфигурировать устройства? Я уже упоминал, что каждой букве устройства можно подключить 35-байтный описатель конфигурации. Этим занимаются утилиты AS.COM/ASSIGN.COM (через командную строку) или ASS.COM (через интерактивное меню) - описание этих утилит есть на диске - воспользуйтесь в эмуле утилитой HELP.COM. (также разбиением винта на разделы и прописыванием их в конфигурационную запись занимается утилита FDISK.COM, но делает она это негибко, в частности всегда устанавливает каталог размером в 128 файлов и смена его объема не предусмотрена, так что ее я для настроек не использую, хотя она сделана наглядно и красиво). Данные утилиты могут работать с конфигурационными файлами в двух видах (все они имеют расширение *.CDS вне зависимости от типа) - собственно в виде 35-байтного массива данных, либо в виде обычного текстового файла, создаваемого в любом редакторе, команды которого при переконфигурировании данными уьилитами кстройств переводятся в эти 35 байт.
Вот как, к примеру, выглядит текстовый описатель раздела винта, подключенного к букве E (файл HDDE.CDS):
Код:
DRIVER = 4 ;номер драйвера. 4=HDD, 3=FDD, 2=RAM. В этом ПЗУ все, но разработчики упоминают еще 1=ROM-диск, 5=NET-диск. А всего цифр может быть от 0 до 7
UNIT = 0 ;номер физического устройства. В данном случае 0=master, 1=slave
SECTORS = 63 ;CHS-параметры
TRACKS = 16 ;CHS-параметры
SECSIZE = 512 ;размер сектора (может быть равен 128, 256, 512 или 1024)
HEADSR = 0 ;число сменных головок (применяется для флопов)
HEADSF = 16 ;CHS-параметры
SYS = 1 ;число системных дорожек (те самые 32256 байт в 63 секторах)
DIR = 512 ;число файлов в каталоге
PATBEG = 6 ;номер физического цилиндра, с которого начинается нулевая дорожка логического раздела. Так описатели остальных одинаковых разделов для F: и
G: будут различаться
WORD 13 = 50660 ;это я не знаю что это - так было в образцах
BYTE 2 = 64 ;аналогично
А вот как выглядит описатель для второго флопа, имеющий теже дефолтные "TRDшные" настройки, но подключаемые ко второму флопу (файл FDD2.CDS):
Код:
DRIVER = 3 ;драйвер флопа
UNIT = 1 ;флоппи-привол №1 (или буква B: в TR-DOS)
SECTORS = 16 ;далее обычный физический формат для TR-DOS
TRACKS = 80
SECSIZE = 256
HEADSR = 2
HEADSF = 0
Стоит заметить, что в отличие от описателя винта, тут меньше команд. В частности, не упомянуты команды SYS, DIR и PATBEG - в этом случае эти (и другие команды, так как по описанию утилиты AS их гораздо больше) выставляются "нулевые" дефолтные параметры. В данном случае SYS - будет равняться 4 системным логическим дорожкам, DIR будет равняться 128 файлам в каталоге, а PATBEG - нулевому цилиндру на физическом носителе.
В общем, с помощью утилит AS, ASSING, ASS и текстового редактора мы можем создать и подсоединить через командную строку необходимые разделы винта и прочие устройства. Но как все это запихнуть в автоконфигурационную запись для автостарта? Для этого есть утилита CONFIG.COM, которая тоже имеет свои конфигурационные текстовые файлы с расширением *.CFG, котоыре затем преобразовываются с конфигурационную запись на любом логическом устройстве. Так с помощью нее же создавалась автозагружаемая системная флоппи-дискета. Кстати, немаловажно, что утилита пишет конфиг в нулевой логический (размерос в 128 байт) сектор на нулевую дорожку ЛОГИЧЕСКОГО устройства - но так как по дефолтным параметрам первоначально нулевая дорожка логического раздела винта у нас совпадает с физической - то мы имеем возможность, грузясь с системной дискеты записать инфу в физический нулевой сектор винта.
И вот как выглядит конкретная конфигурационная запись, которая была сделана мной при создании образа винта (файл CONF1.CFG):
Код:
FORMAT:
CHANNAL=1
TRACK=1 ;форматирование (очистка каталога) RAM-диска
ASSIGN:
DRV=2
CHANNAL=2
<FDD2.CDS> ;назначение на букву C: (0=A, 1=B, 2=C и т.д.) описателя второго флопа.
ASSIGN:
DRV=3
CHANNAL=3
<HDDD.CDS> ;назначение на букву D: (вместо C: где теперь флоп) сформированного нами нового описателя винта.
GO:
"D:@ D:AUTOEXEC" ;запуск с D: утилиты @.COM - обработчика пакетных *.SUB файлов (аналога BAT на ПиСи) - в данном случае - AUTOEXEC.SUB
END:
Таким образом мы видим, что при автозапуске с винта мы получаем первоначальную настройку в виде RAM-диска, ДВУХ флопов и ОДНОГО (системного) раздела винта на D: (хотя, например, при использовании конфига CONF2.CFG получим RAM, ОДИН флоп и ОДИН раздел винта на C:)
А куда делись другие разделы E,F и G? И что если я хочу создать разделы для H,I,J (по максимуму) и еще больше (сверх максимального количества букв)?
Можно забить в конфиг и еще разделы, но только в ограниченном количестве - так как конфигурационная запись ограничена 128 байтами, а только один описатель устройства, как уже упоминалось, состоит из 35 байт. Так что даже этот конфиг из двух таких описателей, кодов команд и их параметров плюс строка с автозапуском AUTOEXEC уже составит чуть более 100 байт. Так что особо тут не разгуляться. При этом CONFIG.COM не контролирует итоговый объем получающейся конфигурационной записи, но в итоге запишет на винт только первые 128 байт из нее с понятными последствиями для работоспособности такой записи.
Поэтому все *.CDS описатели разделов винта хранятся на самом системном разделе и уже подсоединяются утилитой AS.COM как раз в процессе работы стартового пакетного файла AUTOEXEC.SUB.
Вот как он выглядит в нашем случае:
Код:
; ASSIGN DISKS
;+===================+
;| |
;| HDD PARTITION 1 |
;| |
;| (SYSTEM) |
;| |
;+===================+ ;выводим "эхом" надпись
D: ;переходим на диск D: как основной
;AS D: 3 D:HDDD.CDS ;"закомментированное подключение раздела на D: - оно у нас и так присутствует. А вот если бы винт начинался с C:, то раскомментировали бы
AS E: 4 D:HDDE.CDS ;подсоединение описателя раздела к E:
AS F: 5 D:HDDF.CDS ;подсоединение описателя раздела к F:
AS G: 6 D:HDDG.CDS ;подсоединение описателя раздела к G:
XC ;запуск нортоноподобной оболочки XC.COM
При желании по данной схеме можно дополнить SUB-файл и изготовит и подсоединить описатели разделов для других букв устройств. Более того. Можно изготовить описатели хоть на сотни разделов. Но так как число букв ограничено (только от A: до J: (и то из-за глюков в системе свыше H: буквы использовать рискованно)), то можно использовать хорошо известный на спектруме принцип страничной адресации - наример через отдельно изготовленные пакетные SUB-файлы подключать к букве G: то один "теневой" раздел, то другой - их количество ограничено только объемом винта и размером файлового каталога для хранения всех описателей и пакетных файлов-запускалок.
В общем, подводя итог резюмирую - конфигурационная запись как бы есть, но не имеет четких форм, так как через CONFIG.COM можно по разному формировать эту запись (например, внедрить в нее текстовую строчку, выводимую перед началом отработки конфига во время автозапуска), в разном порядке подавать команды конфига, использовать разное число описателей устройств и т.д. А основная часть описателей устройств хранится собственно на устройстве ЦПМ и подгружается пользователем.
Кстати, похожая схема и в случае с TASiS/iS-DOS - ее конфигурационная запись хранится в секторе №2 нулевой дорожки и содержит в себе лишь абсолютные координаты раздела системы, на котором находится файл ядра системы и координаты этого файла внутри раздела. Но данные по текущим разделам опять-таки храни в себе ядро систему в подсоединенном к нему драйвере. И тоже разделов можно создавать сколько угодно (больше 8 одновременно доступных) и менять по страничному принципу - просто я создал образ винта как пример и всякие "излишества" я в настройках закомментировал, но я при работе на реале только так и использую множество страниц. И ничто не мешает при желании использовать оставшееся свободное место в образе и раскомментировать соответствующие настройки.