Просмотр полной версии : Файловая система RT-11
shattered
16.04.2013, 09:32
Коллеги, я читаю RT-11 Volume and File Formats Manual [1][2] и есть несколько вопросов.
- В 'Directory segment header' есть слово 3 "The number of extra bytes per directory entry" -- использовалось ли это как-то в реальном мире?
- В 'Directory entry status word" есть бит E.PRE "Prefix block indicator" -- тот же вопрос.
[1] AA-PD6PA-TC_RT-11_Volume_and_File_Formats_Manual_Aug91.pdf на bitsavers.org
[2] http://www.trailing-edge.com/~shoppa/rt11fs/
ETA:
Ссылки:
VaFFM -- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD6PA-TC_RT-11_Volume_and_File_Formats_Manual_Aug91.pdf
DHM -- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PE7VA-TC_RT-11_Device_Handlers_Manual_Aug91.pdf
SSM -- http://bitsavers.trailing-edge.com/www.computer.museum.uq.edu.au/RT-11/AA-H379B-TC%20RT-11%20Software%20Support%20Manual.pdf
Коллеги, я читаю RT-11 Volume and File Formats Manual [1][2] и есть несколько вопросов.
- В 'Directory segment header' есть слово 3 "The number of extra bytes per directory entry" -- использовалось ли это как-то в реальном мире?
- В 'Directory entry status word" есть бит E.PRE "Prefix block indicator" -- тот
Второе никак не обрабатывается, соответственно возможности использовать нет. Видимо это была закладка на будущее (такая же как поддержка Y2K в 5.6 [ее там нет, в доке описана] и 64-unit устройства в 5.4G [аналогично]).
Первое теоретически можно использовать для добавления своих данных к файлу, но на практике все упирается в то, что утилиты RT-11 эти слова не копируют вместе с файлом, соответственно польза тоже относительная.
Добавлю еще, что TSX-Plus сохраняет кроме даты и время создания файла, используя для этого слово с номером задания (для постоянного файла слово не используется), но проблема та же - если файл скопировать, время потеряется.
Еще одна особенность файловой структуры RT-11: начиная с RT-11 V5.6 система поддерживает защиту файла от записи (статус 140000 [реально хватит и 40000]). Эта фича работает, но ни одна утилита в системе не умеет с этим ничего делать - ни показывать ни менять :)
Эта фича работает, но ни одна утилита в системе не умеет с этим ничего делать - ни показывать ни менять
Самый логичный вывод - надо делать новый шелл ) Который бы использовал бы все возможности файловой системы, возможно с использованием псевдографики для псевдоокошек, файловый менеджер. А защита от записи чем отличается от PROTE ? Или это оно и есть )
А защита от записи чем отличается от PROTE ? Или это оно и есть )Нет.
PROTECT - это защита от удаления.
shattered
16.04.2013, 20:21
TSX-Plus сохраняет кроме даты и время создания файла, используя для этого слово с номером задания (для постоянного файла слово не используется)
А назначение битов в слове каково? Навскидку не нашел его в TSX-Plus Programmer's Reference Manual (TSX-Plus_ProgrRef_Jan88.pdf на bitsavers.org).
Были ли какие-то расширения в наших клонах RT-11?
А назначение битов в слове каково? Навскидку не нашел его в TSX-Plus Programmer's Reference Manual (TSX-Plus_ProgrRef_Jan88.pdf на bitsavers.org).
Были ли какие-то расширения в наших клонах RT-11?
Не совсем понятен вопрос про назначение - оно вроде очевидно. В RT-11 назначение прописано в описании - один байт - номер задания, второй - номер канала. Используется только пока файл создан с помощью .ENTER и не закрыт. Этим пользуется TSX-Plus - он после закрытия записывает туда время создания файла (формат времени описан в приложении TSX-Plus User's Reference Manual).
Расширений файловой системы не припомню вообще никаких ни у нас ни у буржуев (кроме описанного времени в TSX которое не требует дополнительных слов).
Кстати советский РАФОС/TS - это старый TSX - до того как стал Plus'ом. Он вроде время еще не писал для файлов.
shattered
16.04.2013, 21:26
Ага, спасибо.
Как я понял, в какой-то момент ради поддержки Y2K сменилась длина поля Year в слове даты -- было 5, стало 4 бит + добавилось поле Age?
Ага, спасибо.
Как я понял, в какой-то момент ради поддержки Y2K сменилась длина поля Year в слове даты -- было 5, стало 4 бит + добавилось поле Age?
Это вообще формат даты расширился. Было два старших неиспользуемых бита, их добавили к полю года, получилась поддержка до 2099.
Описание нового формата есть в документации по 5.6, но сама фича появилась только в 5.7.
word MakeRT11_Date( int year, int month, int day )
{
word nDate = 0;
nDate |= ((year-1972)& 0140)<<9;
nDate |= (year-1972) & 037;
nDate |= (day & 037)<<5;
nDate |= (month & 017)<<10;
return nDate;
}
---------- Post added at 20:35 ---------- Previous post was at 20:30 ----------
void Get_Date_From_RT11_Format( int rt11date )
{
year = (rt11date & 0x1F) + 1972;
if( rt11date & 0040000 ) { year += 32; }
if( rt11date & 0100000 ) { year += 64; }
month = BYTE( ( rt11date & 0x3C00 ) >>10 );
if( month > 12 ) { month = 0; }
day = BYTE( ( rt11date & 0x3E0 ) >> 5 );
if( day > 31 ) { day = 0; }
}
if( day > 31 ) { day = 0; }
Бесполезное условие которое всегда false :)
shattered
16.04.2013, 21:45
Мало ли, нейтрино какое проскочит...
С датами кстати во всех файловых системах DEC напряженка. Даже в в FILES-11 - там дата пишется в ASCII формате DD-MMM-YY, для новых дат расширили значения - по сути приняли результат, который получается от классического TWODEC (к примеру 14-APR-;9). И это при том, что в RSX под год-1900 выделено 16 бит :)
shattered
16.04.2013, 21:58
С датами вроде понятно, теперь вопросы про Home block:
722-723 Pack cluster size (= 1)
О чем это?
724-725 Block number of first directory segment (= 6)
Что будет, если сюда вписать что-то другое (чтобы влез большой boot code, например)?
726-727 System version (RAD50 "V3A")
Если это изменится, что будет?
730-742 Volume Identification ("RT11A" and seven spaces)
744-757 Owner name
На дисках, которые записаны УКНЦ, я видел кириллицу в этих полях.
760-773 System Identification ("DECRT11A" and four spaces)
Кажется, наши клоны что-то другое сюда пишут?
722-723 Pack cluster size (= 1)
О чем это?
Размер минимально адресуемого блока.
Для RT-11 всегда 1.
724-725 Block number of first directory segment (= 6)
Что будет, если сюда вписать что-то другое (чтобы влез большой boot code, например)?
Ничего скорее всего.
726-727 System version (RAD50 "V3A")
Если это изменится, что будет?
Аналогично. Вряд-ли кто-то смотрит это поле. Но точно гарантировать не буду - возможно какие-нибудь утилиты backup/restore включают данное слово в проверку.
730-742 Volume Identification ("RT11A" and seven spaces)
744-757 Owner name
На дисках, которые записаны УКНЦ, я видел кириллицу в этих полях.
760-773 System Identification ("DECRT11A" and four spaces)
Кажется, наши клоны что-то другое сюда пишут?
Наши клоны пишут то же самое. Это поля совместимости с STD 167. Они вроде есть во всех DECовских системах (к примеру в FILES-11 в фоле системы прописывается DECFILE11A). Поля метки-владельца в RT-11 используются напрямую.
---------- Post added at 01:15 ---------- Previous post was at 01:11 ----------
Кстати сразу по home block - там есть таблица плохих блоков - она используется только в DL и DM (и для них ее заполнять обязательно, иначе будут проблемы).
shattered
16.04.2013, 22:26
А теперь со всем этим мы попробуем взлететь и написать к makefs(8) (http://netbsd.gw.com/cgi-bin/man-cgi?makefs+8+NetBSD-6.0+i386) поддержку rt11fs...
А теперь со всем этим мы попробуем взлететь и написать к makefs(8) (http://netbsd.gw.com/cgi-bin/man-cgi?makefs+8+NetBSD-6.0+i386) поддержку rt11fs...
Есть исходники DUP от RT-11 V5.4, 5.5, 5.6 и 5.7 - там много коментариев, думаю есть смысл до кучи посмотреть их :)
---------- Post added at 01:29 ---------- Previous post was at 01:27 ----------
...тоже одно время думал для OpenBSD сделать rt11fs и files-11, но все лень было, тем более, что из/в files-11 без специальных утилит копирования файлы не достанешь/не положишь :)
shattered
16.04.2013, 22:50
Подумал, что можно хранить оригинальное имя файла в тех самых "Optional extra words".
Подумал, что можно хранить оригинальное имя файла в тех самых "Optional extra words".
Можно до первого копирования.
Только оригинальное имя файла может оказаться размером с сам сегмент каталога :)
shattered
17.04.2013, 01:05
Что-то получается
000003d0 00 00 01 00 06 00 a9 8e 52 54 31 31 41 20 20 20 |........RT11A |
000003e0 20 20 20 00 6d 61 6b 65 66 73 28 38 29 20 20 00 | .makefs(8) .|
000003f0 44 45 43 52 54 31 31 41 20 20 20 00 cf 31 00 00 |DECRT11A .о1..|
00000400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Что-то получается
000003d0 00 00 01 00 06 00 a9 8e 52 54 31 31 41 20 20 20 |........RT11A |
000003e0 20 20 20 00 6d 61 6b 65 66 73 28 38 29 20 20 00 | .makefs(8) .|
000003f0 44 45 43 52 54 31 31 41 20 20 20 00 cf 31 00 00 |DECRT11A .о1..|
00000400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Метка и владелец - опции, их нужно разрешить менять.
FS идентификатор хотя реально нигде не усится (также как к слову идентификаторы FAT12, FAT16, FAT32 :), но для приличия лучше не менять.
Также нужно позволять опционально менять количество сегментов в пределах 1-31 ну и на всякий случай добавлять дополнительные слова те самые :)
---------- Post added at 04:09 ---------- Previous post was at 04:07 ----------
Еще одна вещь которая кажется не отражена явно в документации: признак конца сегмента (статус 4000) самодостаточен. То есть вся запись в каталоге занимает одно слово, а не 7.
---------- Post added at 04:21 ---------- Previous post was at 04:09 ----------
И еще фича: защищенное "ничего" (статус 100000) не подлежит сжатию с помощью squeeze и пустым местом в каталоге не считается.
shattered
17.04.2013, 01:22
Пока что можно управлять только числом сегментов, потом хочу приделать выбор варианта формата даты (старый, новый и tsx-plus) и число extra words.
Кроме метки и владельца еще надо сделать запись загрузчика.
Пока что можно управлять только числом сегментов, потом хочу приделать выбор варианта формата даты (старый, новый и tsx-plus) и число extra words.
Кроме метки и владельца еще надо сделать запись загрузчика.
Запись загрузчика вещь специфичная, которая затрагивает файл монитора и драйвер конкретного устройства. В сущности ничего трудного.
Формата даты TSX-Plus не существует - он тот же самый :)
---------- Post added at 04:26 ---------- Previous post was at 04:24 ----------
Также как нет старого и нового формата.
Точнее их отличить нельзя друг от друга :)
---------- Post added at 04:31 ---------- Previous post was at 04:26 ----------
С датами там вообще некоторая неоднозначность есть.
Старые системы допускали даты вроде 31 февраля и DIR в них спокойно показывал это. В более новых такой номер не пройдет. В последних проверяется также високосность года (что для RT-11 весьма просто).
В старых системах даты с установленными битами age считались неверными. Также неверными считаются даты с явно кривыми значениями (день 0, месяц 0 или >12). Причем кривая дата может возникнуть в результате нормальной работы системы, а не кривости рук (наример если пользоваться дистрибутивными мониторами).
получилась поддержка до 2099.
Проблема 2100 ? ) Срочно патч нужен !!! )
Проблема 2100 ? ) Срочно патч нужен !!! )
Одним патчем не отделаться.
Придется все перелопачивать.
Одним патчем не отделаться.
Придется все перелопачивать.
Времени полно вроде бы как ? http://s2.rimg.info/18b77ab5869342165b05394b846ed5fa.gif (http://smayliki.ru/smilie-157653735.html)
Времени полно вроде бы как ? http://s2.rimg.info/18b77ab5869342165b05394b846ed5fa.gif (http://smayliki.ru/smilie-157653735.html)
Я с 2100го года как минимум до 3014го планирую под RSX работать ;)
shattered
17.04.2013, 09:24
Посмотрел в свой архив дисков и появились новые вопросы:
- слово System version (сейчас RAD50 "V3A") все-таки может иметь другие значения [1], где про них можно узнать подробнее?
Like RT-11, VUP requires the home block system version to be rad50 V3A, V4A or V05 -- earlier home blocks don't have the save/restore structure.
- контрольная сумма иногда вовсе отсутствует, нужна ли она вообще?
[1] http://rust.wikispaces.com/2004+Summer+Season
Посмотрел в свой архив дисков и появились новые вопросы:
- слово System version (сейчас RAD50 "V3A") все-таки может иметь другие значения [1]:
Может.
У меня V05 записано - инициализировано из RT-11 V5.7.
- контрольная сумма иногда вовсе отсутствует, нужна ли она вообще?
По идее всегда нужна - она является признаком наличия home block.
Хотя я правил home block без ее изменения и никто на это не обращал внимания.
Если кто и проверяет - это среди всяких BUP надо искать.
---------- Post added at 12:44 ---------- Previous post was at 12:42 ----------
В RT-11 вообще много чего не проверяется.
---------- Post added at 12:46 ---------- Previous post was at 12:44 ----------
V3A в сущности соответствует home block RT-11 V4 :)
Написал мелкую утилитку для проверки контнольной суммы home блока.
В тему софта смысла нет класть так как за пределами этой темы прога ценности не имеет. Утилита проверяет только блок 1 и не пытается найти его в других стандартных блоках (для RT-11 впрочем других и нету).
Прога использует RSXLIB (который как вижу нужно еще допилить - в RT-11 чистое устройство надо писать как чистое устройство, а не устройство с пустым файлом).
Из проверки видим, что FILES-11 диски (DU0 и DU1) и RT-11 диски (DU3 и D15) определяются нормально, XXDP+ (DU2) ругается, образ диска с тестами от Patron ругается - видимо создавался с помощью плугина к TC :)
.RU VCHK DU:,DU1:,DU2:,DU3:,D15:,DK:TSTMAC.DSK
File: DU:.
Volume: RSX11MPBL87
Owner: [001,001]
FS: DECFILE11A
Checksum: 132174
File: DU1:.
Volume: RSXUSERDISK
Owner: [001,001]
FS: DECFILE11A
Checksum: 051471
?VCHK-W-Bad checksum for DU2:.
File: DU3:.
Volume: RT-11 V5.7
Owner: FORM
FS: DECRT11A
Checksum: 154516
File: D15:.
Volume: RT11A
Owner:
FS: DECRT11A
Checksum: 117610
?VCHK-W-Bad checksum for DK:TSTMAC.DSK
.
Посмотрел как инитит FLX RTшный диск.
А он вообще никак не трогает home block :)
Так что если проинитить RL01/RL02/RK06/RK07 диск на котором ранее не было RT-11 с помощью FLX, диск будет нерабочим в RT-11. В остальных случаях RT-11 ничего не имеет против.
>MOU DU3:/FO
>FLX /RS/IM=DU3:VCHK.SAV/RT:5
>VCP CON [1,127]RT11PR.SYS/MOU:FOR/DRV:DU
VCP - Device VF0: (DU6:) has been assigned.
>FLX DU6:/RT=VCHK.SAV/IM
>VCP CON TEST.DSK/CR:RX50/MOU:FOR
VCP - Device VF1: (DU7:) has been assigned.
>FLX DU7:/ZE/RT
>VCP DIS DU7:/DMO
DMO -- TT0: dismounted from DU7: *** Final dismount initiated ***
17:53:34 *** DU7: -- Dismount complete
>FLX DU6:/RT/IM=TEST.DSK
>VCP DIS /USER/DMO
DMO -- TT0: dismounted from DU6: *** Final dismount initiated ***
17:53:55 *** DU6: -- Dismount complete
>RTE /VS
RTEM-11 (VAX/VMS) V01.00
RT-11FB V05.07
.SET SL ON
.VCHK TEST
?VCHK-W-Bad checksum for DK:TEST.DSK
.DUM/TER/ONL:1 TEST.DSK
DK:TEST.DSK
BLOCK NUMBER 000001
000/ 013436 063676 007146 000005 026066 013366 015050 044232 *..>gf...6,v.(..H*
020/ 043252 015054 044232 043252 013452 044066 013072 013432 **F,..H*F*.6H:...*
040/ 015050 044232 042456 013446 000155 012642 033670 044232 *(..H.E&.m.".87.H*
060/ 012672 116536 013436 121706 007146 000001 024516 013366 *:.^...F#f...N)v.*
100/ 015054 033666 064436 007414 012710 116566 013436 121710 *,.67.i..H.v...H#*
120/ 007146 000001 026430 013366 007430 065010 012710 116612 *f....-v....jH...*
140/ 013436 121712 007146 000001 024516 013366 013456 044214 *..J#f...N)v....H*
160/ 033712 013436 121630 013436 121630 013436 121630 013436 *J7...#...#...#..*
200/ 121630 013436 063654 007146 000005 026066 013436 121630 *.#..,gf...6,...#*
220/ 013436 121630 013436 033712 013436 121630 013436 063704 *...#..J7...#..Dg*
240/ 007146 000005 026066 013472 065010 013472 065012 015100 *f...6,:..j:..j@.*
260/ 064256 064211 010044 000000 015100 064260 064211 010044 *.h.h$...@.0h.h$.*
300/ 000000 013436 121714 007146 000001 026430 013366 015050 *....L#f....-v.(.*
320/ 033714 043252 015054 033714 043252 013452 044066 013072 *L7*F,.L7*F*.6H:.*
340/ 013432 015050 033714 042456 013446 000162 012642 033670 *..(.L7.E&.r.".87*
360/ 033714 012672 117064 013436 121716 007146 000001 024516 *L7:.4...N#f...N)*
400/ 012642 033714 044234 012710 117062 015050 064264 064044 *".L7.HH.2.(.4h$h*
420/ 013446 000010 013366 013442 000164 122064 015054 033670 *&...v.".t.4$,.87*
440/ 043252 013452 044072 013076 007414 012672 117122 013442 **F*.:H>...:.R.".*
460/ 000165 122064 013436 122064 007146 000001 026430 013366 *u.4$..4$f....-v.*
500/ 013436 033670 007146 000001 112502 010416 013122 012710 *..87f...B...R.H.*
520/ 117172 015050 064270 064044 013516 013366 013436 121630 *z.(.8h$hN.v....#*
540/ 013436 121630 013436 033670 013436 121720 013436 063700 *...#..87..P#..@g*
560/ 007146 000005 026066 013366 013436 121630 013436 121630 *f...6,v....#...#*
600/ 013436 121630 013436 121722 013436 063700 007146 000005 *...#..R#..@gf...*
620/ 026066 013366 015054 063512 061562 012612 063730 012710 *6,v.,.Jgrc..XgH.*
640/ 117332 013436 121630 013436 121630 013436 121630 013436 *Z....#...#...#..*
660/ 121630 013436 063512 007146 000005 026066 013366 015050 *.#..Jgf...6,v.(.*
700/ 044236 043252 015054 044236 043252 013452 044066 013072 *.H*F,..H*F*.6H:.*
720/ 013432 015050 044236 042456 013446 000223 013436 121724 *..(..H.E&.....T#*
740/ 007146 000001 026430 013366 010036 177777 064774 013436 *f....-v.....|i..*
760/ 121726 007146 000001 024516 013366 015100 064302 064211 *V#f...N)v.@.Bh.h*
.
защищенное "ничего" (статус 100000) не подлежит сжатию с помощью squeeze и пустым местом в каталоге не считается.Файлы с таким битом DIR полностью игнорирует, не показывая ни как постоянные, ни как "пустые". Была у меня мысль добавить на этой основе в RT-11 команды HIDE / UNHIDE, но до воплощения так и не дошла.
утилитку для проверки контнольной суммы home блока.vchk.rar (http://zx.pk.ru/attachment.php?attachmentid=41054&d=1366192963)
Название прямо как Русская водка ) Брэнд! )
offtop
< цитату убрал! >
http://www.mp3poisk.net/%D0%BD%D1%82%D0%BE-%D1%80%D0%B5%D1%86%D0%B5%D0%BF%D1%82-%D1%87%D0%BA
Файлы с таким битом DIR полностью игнорирует, не показывая ни как постоянные, ни как "пустые". Была у меня мысль добавить на этой основе в RT-11 команды HIDE / UNHIDE, но до воплощения так и не дошла.
Он и не должен их показывать. Это специальная фича "заблокированный сегмент". Используется в RTEM-11 для общего образа - общий образ обязан иметь первый сегмент полностью забитый такими записями (с нулевой длиной), остальные сегменты должны идти последовательно, быть сжатыми, последний сегмент должен быть забит до конца такими записями, все пространство диска должно быть использовано.
RT-11 работает с таким образом как с обычным диском, но не позволяет на нем создавать файлы даже если оттуда удалить что-то.
---------- Post added at 18:54 ---------- Previous post was at 18:53 ----------
Файлы с таким битом DIR полностью игнорирует, не показывая ни как постоянные, ни как "пустые". Была у меня мысль добавить на этой основе в RT-11 команды HIDE / UNHIDE, но до воплощения так и не дошла.
Для прятания не стоит - последствия могут быть не теми что ожидались :)
shattered
17.04.2013, 20:19
А казалось бы, такая кондовая файловая система... :)
А казалось бы, такая кондовая файловая система... :)
Дык она как раз самая простая наверное.
Подкаталогов нет, прерывных файлов нет, возможности сослаться из двух файлов в одно и то же место нет, часть диска невозможно адресовать используя файлы :)
shattered
17.04.2013, 20:37
... населена роботами
shattered
17.04.2013, 22:43
Что-то получается, но результат пока странный (даты неверные, 0 free blocks...)
# RT-11FB V05.03
.dir/sum dl1:
3 Files in segment 1
4 Available segments, 0 in use
3 Files, 41 Blocks
0 Free blocks
.dir/vol/blo/col:1/ful dl1:
Volume ID: RT11A
Owner : makefs(8)
XONIX3.RAR 18 01-Sep-77 14
GXONIX.SAV 13 -BAD- 32
XONIX .GAM 10 16-Apr-90 45
3 Files, 41 Blocks
0 Free blocks
0 free blocks...
А пустое место создается? :)
shattered
17.04.2013, 23:38
нет :v2_dizzy_facepalm:
EDIT: стало лучше:
.dir/full dl1:
ANTADV.EXE 59 12-Jul-95 BALL .EXE 73 23-Feb-95
CHOP01.SAV 18 08-Aug-97 GOON01.SAV 24 19-Nov-96
GOON02.SAV 24 16-Nov-96 KUNGFU.EXE 63 13-Apr-95
JAGU01.SAV 13 16-Nov-96 JAGU02.SAV 15 26-Nov-96
JAGU03.SAV 15 26-Nov-96 JAGUAR.EXE 58 22-Feb-95
KNIGHT.EXE 85 18-Feb-95 PAYLOA.EXE 77 02-Jun-96
MYTH01.SAV 19 19-Nov-96 MYTH02.SAV 19 20-Nov-96
MYTH04.SAV 21 23-Nov-96 MYTH05.SAV 18 28-Nov-96
MYTH06.SAV 23 02-Dec-96 MYTH16.SAV 19 09-Aug-97
RISO01.SAV 16 08-Aug-97 RISOUT.EXE 53 24-Feb-95
ROADFI.EXE 58 15-Feb-95 VALL01.SAV 17 06-Apr-98
VALLEY.EXE 59 22-Feb-95 ZANA02.SAV 23 19-Nov-96
ZANA03.SAV 23 18-Nov-96 ZANA04.SAV 23 18-Nov-96
ZANA05.SAV 23 18-Nov-96 ZANA06.SAV 23 19-Nov-96
ZANA16.SAV 17 01-Jun-97 ZANAC .EXE 84 02-Jun-96
GOONIE.EXE 86 24-Feb-95 < UNUSED > 438
31 Files, 1148 Blocks
438 Free blocks
DIR в RT-11 ничего не знает про размер устройства и не пытается его узнать. Свободное место определяется пустыми местами в каталоге. После инициализации диска должно быть создано пустое место размером с весь диск (за вычетом блоков, отведенных под каталог, домашнего блока и загрузчика). Традиционное название файла пустого места в RT-11 после инициализации или сжатия - EMPTY.FIL.
shattered
18.04.2013, 02:28
Я пока не даю пустому месту имени, надо исправить.
И видимо, надо как-то заполнять "INIT/RESTORE data area" и bad block map
Я пока не даю пустому месту имени, надо исправить.
И видимо, надо как-то заполнять "INIT/RESTORE data area" и bad block map
Имя не существенно, просто традиция.
Область трансляции bad блоков лучше заполнять, она используется в драйверах DL и DM.
INI/RESTORE можно в исходниках DUP посмотреть как создается.
Собственно и таблицу форвардинга тамже посмотреть.
shattered
18.04.2013, 22:47
Описание bad block map нашлось в RT-11 Device Handlers Manual -- AA-PE7VA-TC_RT-11_Device_Handlers_Manual_Aug91.pdf на bitsavers.org
shattered
19.04.2013, 02:19
Чем дальше, тем удивительнее. Это описание не подходит к тому, что я вижу в реальном образе DL:.
В RT-11 Software Support Manual 1983 года [1] сказано, что
To compute the checksum, all the bytes are added into a word, which is then negated.
Там же:
The date word is 0 if you did not enter a date with the DATE monitor command.
[1] AA-H379B-TC RT-11 Software Support Manual.pdf
Абсолютно правильно написано. Не понимаю что тут непонятного. Что касается реального образа - откуда информация, что это именно реальный образ? :)
---------- Post added at 05:22 ---------- Previous post was at 05:21 ----------
И особенно интересно как второе может с чем-то не стыковаться :)
---------- Post added at 05:23 ---------- Previous post was at 05:22 ----------
И первое вообще-то тоже не ясно как ибо не относится никаким боком как и второе к fs :)
shattered
20.04.2013, 13:21
Реальный образ сделан initialize из rt-11 5.3 в эмуляторе simh, к которому был подключен пустой диск http://www.dbit.com/pub/pdp11/empty/rl02.dsk.gz (в нем есть только bad block map в конце). После initialize в home block появилось вот что:
0001000 000000 170000 007777 000000 000000 000000 000000 000000
0001020 000000 000000 000000 000000 000000 000000 000000 000000
*
---------- Post added at 13:21 ---------- Previous post was at 13:19 ----------
Второе не стыкуется с алгоритмом, описанным в VaFFM 1991 года:
It is a simple additive checksum of all the other words in the home block and is computed according to the following algorithm:
MOV Header_address,R0
CLR R1
MOV #255.,R2
10$: ADD (R0)+,R1
SOB R2,10$
MOV R1,@R0
Реальный образ сделан initialize из rt-11 5.3 в эмуляторе simh, к которому был подключен пустой диск http://www.dbit.com/pub/pdp11/empty/rl02.dsk.gz (в нем есть только bad block map в конце). После initialize в home block появилось вот что:
0001000 000000 170000 007777 000000 000000 000000 000000 000000
0001020 000000 000000 000000 000000 000000 000000 000000 000000
*
Ну это собственно не реальный образ, а созданный с bad144 в конце (к файловой системе не относится). INIT сойдет. В любом случае вышенаписанное непонятно как вообще может не совпадать с образом: дата если ее нет равна нулю как и написана, а контрольная сумма описанная выше относится к драйверу, а не файловой системе :)
---------- Post added at 16:24 ---------- Previous post was at 16:22 ----------
Второе не стыкуется с алгоритмом, описанным в VaFFM 1991 года:
Отлично стыкуется если внимательно прочитать и убедиться, что описанная чексума (побайтная с инверсией) к файловой системе никаким боком не относится. А алгоритм чексумы для файловой системы описан в описании форматов.
---------- Post added at 16:52 ---------- Previous post was at 16:24 ----------
To compute the checksum, all the bytes are added into a word, which is then negated.
Нашел это место где про home block. Действительно ошибка - просто прокопированно из другого места. В home block контрольная сумма никогда не считалась таким способом. Так что можно просто забить. Правильный алгоритм с кодом в описании форматов.
---------- Post added at 17:06 ---------- Previous post was at 16:52 ----------
Точнее там не написано что это чексума home блока, в рисунке home блока рядом про чексуму ничего не написано тоже, но логически можно совместить :)
shattered
20.04.2013, 14:09
Ну это собственно не реальный образ, а созданный с bad144 в конце (к файловой системе не относится). INIT сойдет. В любом случае вышенаписанное непонятно как вообще может не совпадать с образом: дата если ее нет равна нулю как и написана, а контрольная сумма описанная выше относится к драйверу, а не файловой системе :)
Про дату я зря написал, только сбил с толку, да.
Смущает вот что:
В DHM стр. 2-3 [132 в pdf] и SSM стр. 9-1 [393], 10-36 [456] структура BBR table описана одинаково:
Block 1 is a table of two-word entries. The first word is the block
number of a bad block; the second word is its allocated replacement. The last entry
in the table is 0. The entries in the table are in order by ascending bad block number.
Тогда что означают слова 170000 и 007777 ? (смещение 1000 -- от начала файла, т.е. это как раз самое начало home block)
Про дату я зря написал, только сбил с толку, да.
Смущает вот что:
В DHM стр. 2-3 [132 в pdf] и SSM стр. 9-1 [393], 10-36 [456] структура BBR table описана одинаково:
Где взять страницу 9-1 (393) и 10-36 (456) и (заранее) - почему смущает одинаковость?
Тогда что означают слова 170000 и 007777 ? (смещение 1000 -- от начала файла, т.е. это как раз самое начало home block)
От начала какого файла и откуда в файле home block?
---------- Post added at 17:19 ---------- Previous post was at 17:16 ----------
Насчет файла понял - файл образа...
Черт его знает что оно там означает. Какой-то заголовок. Сами записи начинаются со смещения +6. Надо исходники DUP смотреть.
---------- Post added at 17:22 ---------- Previous post was at 17:19 ----------
80$: MOV R3,R2 ; Get pointer to home block data
CLR (R2)+ ; Put DW pattern into BBR table
; (0, 170000, 007777)
MOV #170000,(R2)+
MOV #7777,(R2)+
MOV #101-3,R0 ; Setup count to clear rest of BBR table
90$: CLR (R2)+ ; Clear an entry
SOB R0,90$ ; Loop till done
Вобщем какая-то хрень интересная только для DW похоже.
shattered
20.04.2013, 14:30
Всю документацию брал с http://bitsavers.trailing-edge.com/
VaFFM -- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD6PA-TC_RT-11_Volume_and_File_Formats_Manual_Aug91.pdf
DHM -- http://bitsavers.trailing-edge.com/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PE7VA-TC_RT-11_Device_Handlers_Manual_Aug91.pdf
SSM -- http://bitsavers.trailing-edge.com/www.computer.museum.uq.edu.au/RT-11/AA-H379B-TC%20RT-11%20Software%20Support%20Manual.pdf
Так а чем смущает-то одинаковость?
shattered
20.04.2013, 14:35
Ничем :-)
Прошу прощения за сумбур, и еще раз спасибо за помощь.
Ничем :-)
Прошу прощения за сумбур, и еще раз спасибо за помощь.
Да не за что. Про software support manual лучше забыть и пользоваться описанием форматов (тем более, что оно в отличие от первого полноценный PDF с возможностью поиска) :)
А вообще к ошибкам в DECовской документации нужно всегда быть готовым - ошибок там полно :)
shattered
20.04.2013, 22:36
Происходит непонятное. Создал образ с 2232 файлами (31 сегмент * 72 файла, максимум возможного) и пробую удалить из него все файлы из-под RT 5.3. Файлы из 31 сегмента не удаляются, т.е. команда DEL зависает.
Происходит непонятное. Создал образ с 2232 файлами (31 сегмент * 72 файла, максимум возможного) и пробую удалить из него все файлы из-под RT 5.3. Файлы из 31 сегмента не удаляются, т.е. команда DEL зависает.
Нужен образ для анализа.
shattered
21.04.2013, 09:15
ок, вывешу его позже, а пока кусочек дампа (только заголовки сегментов)
Если сделат образ из 2231 файла, то файлы таки удаляются, но скопировать на этот диск все равно не получается (?PIP-F-Directory full)
0000000 000000 000000 000000 000000 000000 000000 000000 000000
0002000 000000 000000 000000 000000 000000 000000 000000 000000
0006000 000037 000002 000037 000000 000104 002000 012551 003152
0010000 000000 000003 000000 000000 000324 002000 012551 003316
0012000 000000 000004 000000 000000 000544 002000 012551 003500
0014000 000000 000005 000000 000000 000764 002000 012551 003662
0016000 000000 000006 000000 000000 001204 002000 012551 004044
0020000 000000 000007 000000 000000 001424 002000 012551 004210
0022000 000000 000010 000000 000000 001644 002000 012551 004372
0024000 000000 000011 000000 000000 002064 002000 012551 004554
0026000 000000 000012 000000 000000 002304 002000 012551 004736
0030000 000000 000013 000000 000000 002524 002000 012551 005102
0032000 000000 000014 000000 000000 002744 002000 012551 006344
0034000 000000 000015 000000 000000 003164 002000 012551 006526
0036000 000000 000016 000000 000000 003404 002000 012551 006710
0040000 000000 000017 000000 000000 003624 002000 012551 007072
0042000 000000 000020 000000 000000 004044 002000 012551 007236
0044000 000000 000021 000000 000000 004264 002000 012551 007420
0046000 000000 000022 000000 000000 004504 002000 012551 007602
0050000 000000 000023 000000 000000 004724 002000 012551 007764
0052000 000000 000024 000000 000000 005144 002000 012551 010130
0054000 000000 000025 000000 000000 005364 002000 012551 011372
0056000 000000 000026 000000 000000 005604 002000 012551 011554
0060000 000000 000027 000000 000000 006024 002000 012551 011736
0062000 000000 000030 000000 000000 006244 002000 012551 012102
0064000 000000 000031 000000 000000 006464 002000 012551 012264
0066000 000000 000032 000000 000000 006704 002000 012551 012446
0070000 000000 000033 000000 000000 007124 002000 012551 012630
0072000 000000 000034 000000 000000 007344 002000 012551 013012
0074000 000000 000035 000000 000000 007564 002000 012551 013156
0076000 000000 000036 000000 000000 010004 002000 012551 013340
0100000 000000 000037 000000 000000 010224 002000 012551 014602
0102000 000000 000000 000000 000000 010444 002000 012551 014764
Если сделать образ из 2231 файла, то файлы таки удаляются, но скопировать на этот диск все равно не получается (?PIP-F-Directory full)Там [ 2230 постоянных файлов + один пустой ] или [ 2231 постоянный файл + один пустой ] ?
shattered
21.04.2013, 15:04
2231 постоянный файл + один пустой (EMPTY.FIL).
подозреваю, что это "нормально".
2230 постоянных файлов + один пустой.
подозреваю, что это "нормально".
Конец сегментов обозначен?
2231 постоянный файл + один пустой (EMPTY.FIL)Т.е. всего 2232 файла - максимум возможного.
В этой ситуации добавить записи уже нельзя, поэтому в общем случае - скопировать файл на такой диск невозможно.
shattered
21.04.2013, 16:57
Точно. Исправлю код так, чтобы помещался только 2231, или даже 2230.
---------- Post added at 16:57 ---------- Previous post was at 15:42 ----------
И можно приступать к сборке архива игрушек, для чего, собственно, все и затеяно :-)
Только выяснилось, что dosbox портит время у файлов без патча -> http://vogons.zetafleet.com/viewtopic.php?t=22600
Вот, нашел кто проверяет home block.
При автоинсталяции системы определяются диски со стандартным home block (но не RT-11) и они отмечаются как непригодные для автоинсталяции.
В моем случае диски DU0 и DU1 на которых FILES-11 пропустились и для установки предложен DU2 на котором XXDP+ записан.
shattered
26.04.2013, 09:01
Патч (лицензия BSD): https://gist.github.com/shattered/5465119
shattered
01.05.2013, 21:17
Как работает COPY/BOOT (из DHM, стр. 1-87 [100]):
Use the COPY/BOOT xxn:filnam ddm: to copy the secondary bootstrap from the
monitor file on device xx to blocks 2, 3, 4, and 5 of device dd. In the command line,
xx represents the device on which the monitor file is stored; n is its unit number; dd
represents the 2-character name of the device that is to receive the bootstrap; m is
its unit number.
As soon as this command is issued, DUP checks that devices xx and dd are random-
access devices. Next, it locates the monitor file filnam.SYS on the xxn: device. It
reads blocks 1 through 4 into a memory buffer [1]. These blocks contain the secondary
bootstrap for the monitor.
DUP locates the appropriate handler file on device dd. DUP then reads block 0 of
the device handler file into a memory buffer [2], using the contents of locations 62 and
64 to locate the primary driver, and reads it into a memory buffer [3].
The handler for the system device dd must already be located on dd before you can
copy the bootstrap to the device. DUP loads two words of Radix–50 for filnam into
locations 4724 and 4726 of the memory buffer [1]. Next, DUP copies the primary driver
into block 0 of device dd. Finally, DUP writes the secondary bootstrap to blocks 2
through 5 of device dd.
shattered
10.10.2013, 23:03
Две маленьких детали для тех, кто захочет это (COPY/BOOT) воспроизвести:
- location 4724 -- смещение от начала файла монитора
- putr.asm заполняет еще локации 4716 и 4730
; the next few patches aren't in SSM but someone did them, must be DUP
mov es:4730,dx ;set B$READ = B.READ offset
mov ax,ds:rtfile ;set B$DEVN = dev name
mov es:4716,ax ;(hope this is right!)
shattered
21.02.2019, 23:18
переписал все это под MAME, в следующем релизе imgtool будет уметь читать образы MX/MY дисков -- https://github.com/mamedev/mame/blob/master/src/tools/imgtool/modules/rt11.cpp
сравнил с rt11dsk "[Apr 14 2013 18:41:37]" и PUTR, нашел отличия:
- rt11dsk: считает E.TENT файлы за полноценные и они попадают в список
- rt11dsk: считает даты 20xx неверными
- putr: неверно считает смещение первого файла на одном из образов
shattered
24.04.2019, 21:16
Еще один инструмент -- https://gitlab.com/NF6X_Retrocomputing/pyRT11
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot