Важная информация

User Tag List

Страница 21 из 48 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 472

Тема: Орион-ПРО. Софтверные дела

  1. #201

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Теперь бы еще с подряд записанными большими файлами на hdd разобраться.
    Вот образ для примера. Там в user 4 несколько больших файлов (плеер в эмуляторе не работает). Начиная с bach44.wav дурит.
    А эти файлы записаны последним плагином? И в образ раньше чем с моими третьего дня правками?
    Просто я думал, что проблема с "заворотом" на четвертом большом последовательно лежащем файле оттого, что не правильно работал плагин (нумеровал экстенты больших файлов в каталоге в "переполненной" с точки зрения BDOS форме) плюс порушенная мной для эксперимента разрядность EX в BDOS.
    Иначе (если оно так и на неправленной мной BDOS), с ходу не понятно на что и думать.

    - - - Добавлено - - -


    В-общем попробовал на неправленном BDOS, "заворачивается" оно на группе с номером 2000h. Вместо группы 2000h читает группу 0000h (т.е. каталог). Такое ощущение, что в коде BDOS где-то делается "groupN and 1FFFh". Какие будут мысли?
    Код:
    09 50 45 54-4C 59 41 20-20 54 58 54-07 00 00 80  ○PETLYA  TXT•  А
    FE 01 FF 01-00 02 01 02-02 02 03 02-04 02 05 02  ■☺*☺ ☻☺☻☻☻♥☻♦☻♣☻
    09 50 45 54-4C 59 41 20-20 54 58 54-0F 00 00 80  ○PETLYA  TXT☼  А
    06 02 07 02-08 02 09 02-0A 02 0B 02-0C 02 0D 02  ♠☻•☻◘☻○☻◙☻♂☻♀☻♪☻
    09 50 45 54-4C 59 41 20-20 54 58 54-17 00 00 80  ○PETLYA  TXT↨  А
    0E 02 0F 02-10 02 11 02-12 02 13 02-14 02 15 02  ♫☻☼☻►☻◄☻↕☻‼☻¶☻§☻
    09 50 45 54-4C 59 41 20-20 54 58 54-1F 00 00 80  ○PETLYA  TXT▼  А
    16 02 17 02-18 02 19 02-1A 02 1B 02-1C 02 1D 02  ▬☻↨☻↑☻↓☻→☻←☻∟☻↔☻
    09 50 45 54-4C 59 41 20-20 54 58 54-07 00 01 80  ○PETLYA  TXT• ☺А
    1E 02 1F 02-20 02 21 02-22 02 23 02-24 02 25 02  ▲☻▼☻ ☻!☻"☻#☻$☻%☻
    09 50 45 54-4C 59 41 20-20 54 58 54-09 00 01 4E  ○PETLYA  TXT○ ☺N
    26 02 27 02-00 00 00 00-00 00 00 00-00 00 00 00  &☻'☻
    - - - Добавлено - - -

    Вот DPB этого раздела:
    Код:
    C3 30 00 00-00 00 00 00-00 00 02 00-40 00 00 04
    //-------------------------------------------------------------------- Orion specific
    jump: array [0..7] of byte;
    PAGE1: byte;
    PAGE2: byte;
    LEN1:  byte;   // phisical sector size (1=256, 2=512, 3=1024)
    LEN2:  byte;   // sides (density?) (0=one_side, 1=double_sided)
    SEC:   word;   // phisical sectors per track
    TRK:   word;   // phisical tracks on disk (one side)
    
    00 01 07 7F-07 FD 07 FF-01 80 00 80-00 01 00
    //-------------------------------------------------------------------- CP/M standard
    SPT:   word;   // logical sectors (128) per track
    BSH:   byte;   // Block Shift - Block Size is given by 128 * 2^(BSH)
    BLM:   byte;   // Block Mask - Block Size is given by 128 * (BLM +1)
    EXM:   byte;   // Extent Mask
    DSM:   word;   // user space size in kb = SEC * (TRK-OFF) - (CKS/8)
    DRM:   word;   // max quantity of file records (FCBs) in catalog
    AL:    word;   // 16-bit Directory Allocation Pattern
    CKS:   word;   // Directory Check Sum = catalog size (in logical blocks)
    OFF:   word;   // system tracks
    Думаю, в проверке нуждаются EXM и DSM
    Последний раз редактировалось Error404; 01.08.2016 в 17:19.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  2. #202

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,392
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    А эти файлы записаны последним плагином? И в образ раньше чем с моими третьего дня правками?
    Да, последней версией плагина в "старый" образ.

  3. #203

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что-то я не нахожу ошибок в DPB
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #204

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Вместо группы 2000h читает группу 0000h (т.е. каталог).
    Ясен пень, если у тебя BSH=7, а номер кластера 200h. Сдвинь-ка это число семь раз налево, получишь номер записи 10000h. Я выше писал, что максимальный номер записи 65535.

    Вообще, почему все молчат об ограничении в 8Мб? Это-ж известный факт

    - - - Добавлено - - -

    Вот, кстати, в сорцах zsdos я видел, что там ещё 2 бита учитываются, т.е. максимальный размер тома там 32Мб.

    - - - Добавлено - - -

    Цитата Сообщение от Error404 Посмотреть сообщение
    что-то я не нахожу ошибок в DPB
    А я нашёл еще и ошибку в DPB: размер диска указывается в кластерах (т.е. блоках), а не в килобайтах. Нужно туда номер последнего доступного блока записывать. У тебя будет 1FFh.

    - - - Добавлено - - -

    Хотя у тебя для 64Мб правильно указано

  5. #205

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Номер записи - абстрактное свойство файла, А не файловой системы. Причем тут номера групп сиречь номера кластеров? 32 мб предел размера файла а не ФС, максимальный размер ФС ZSDOS 1гиг, ЕМНИП

    - - - Добавлено - - -

    Цитата Сообщение от b2m Посмотреть сообщение
    А я нашёл еще и ошибку в DPB: размер диска указывается в кластерах (т.е. блоках), а не в килобайтах. Нужно туда номер последнего доступного блока записывать. У тебя будет 1FFh.
    Хотя у тебя для 64Мб правильно указано
    Почему 64? 64 это размер всего образа, в нем 4 партиции.
    Не, для DSM вроде верное значение - 7FDh (2045). Размер группы (=блока=кластера) 16кб, размер самой партиции (ФС) 32Мб (800h * 16кб), минус системный трек (32кб, т.е. 2 группы по 16к), минус каталог (1 группа по 16к).

    - - - Добавлено - - -

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

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #206

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Дико не хочется лезть в отладчик.
    Так я сначала залез, а потом ответил тебе. В одной из процедур номер кластера сдвигается влево на 7. В результате в HL ноль.

    Номер записи это не только свойство файла. Номер кластера не сразу пересчитывается в номер дорожки и номер записи на дорожке. Сначала находится номер записи файловой системы, потом он делится на количество записей на дорожке SPT. Частное будет номером дорожки, остаток - номером сектора (т.е. записи). SPT не обязательно должно быть степенью двойки. Например для нашего диска 5 секторов по 1024 байт SPT равно 40 (или 80, в зависимости от того, где биос будет учитывать номер стороны).
    Последний раз редактировалось b2m; 02.08.2016 в 12:33.

  7. #207

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Так я сначала залез, а потом ответил тебе. В одной из процедур номер кластера сдвигается влево на 7. В результате в HL ноль.

    Номер записи это не только свойство файла. Номер кластера не сразу пересчитывается в номер дорожки и номер записи на дорожке. Сначала находится номер записи файловой системы, потом он делится на количество записей на дорожке SPT. Частное будет номером дорожки, остаток - номером сектора (т.е. записи). SPT не обязательно должно быть степенью двойки. Например для нашего диска 5 секторов по 1024 байт SPT равно 40 (или 80, в зависимости от того, где биос будет учитывать номер стороны).
    Зачем группа сдвигается на семь? В какой именно процедуре (вот в исходнике во вложении этого поста можно сориентироваться)? Значит, аффторы там накосячили с разрядностью переменной которую двигают, она должна быть 24-разрядная, а не 16 разрядная. Чтобы не улетали значащие биты.
    Я DPB формирую (в fdisk) по описаниям от CP/M 2.2, которые встречал и в русских и в английских источниках (примерно одно и то же везде пишут), где прямым текстом пишут, что для групп(кластера) размером в 16кб BSH,BLM,EXM должны быть таким-то. Вот должны и все тут.

    Если не затруднит, распиши как я пишу, типо на пальцах: такая-то переменная DBP, такое-то значение, потому что в коде оно так. Потому что из того что я читал не следует ограничение на файловую систему ни в 8М ни 32М. И согласно тем описаниям, ошибки в DPB я не нахожу.

    По "номеру записи" я тебя тупо не понял. Т.к. в описаниях CP/M record - это относится к файлу (та самая текущая позиция по которой читается 128-байтная запись из файла), все что к диску относится - это что угодно другое (группа, сектор, дорожка,...).

    Что имеется в виду под "номер записи файловой системы"? Группа (кластер), номер которых указывается в FCB-шках в позициях FCB+16...FCB+31? Других логических единиц хранения на диске вроде нету у CP/M. Дорожки и сектора это уже физические (они передаются в BIOS как параметры).
    Последний раз редактировалось Error404; 02.08.2016 в 13:39.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  8. #208

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ограничение на файловую систему вытекает из того, что в CP/M 2.2 используется 16-битная арифметика для рассчёта номера записи файловой системы. Чтобы не путаться в понятиях:

    запись = 128 байт = сектор в терминах биос CP/M
    кластер = группа (в твох терминах) = блок
    экстент = 128 записей = 16 Кб (у тебя совпадает с размером кластера, может отсюда и путаница)
    модуль (тот самый S2) = 32 экстента

    Давай логически прикинем, как преобразуется номер записи файла file_rec в номер дорожки track и номер сектора sector (большими буквами далее - значения из DPB):

    Код:
    blk_rec = file_rec & BLM;
    file_blk = file_rec >> BSH;
    file_ext = file_rec >> 7; // т.к. 1 экстент = 128 записей
    extent = file_ext & 1Fh;
    s2 = file_ext >> 5;
    get_dir_record(file_name, extent, s2); // у номера экстента игнорируются младшие биты, еденичные в EXM
    blk = dir.alloc[file_blk & 7]; // для случая с 16 однобайтовыми значениями берём нужную половину, в зависимости от младшего бита номера экстента
    record = (blk << BSH) | blk_rec; // тут у нас переполнение т.к. record 16-битная переменная
    record += DRM/4;
    sector = record % SPT;
    track = record / SPT + OFF;
    Вроде бы нигде не ошибся.

  9. #209

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Т.е. ошибка все же "авторская" (не думали про большие носители - структуры распланировали заманчиво, а реализацию в коде обкарнали), и вот этот вот кусок
    Код:
    record = (blk << BSH) | blk_rec; // тут у нас переполнение т.к. record 16-битная переменная
    record += DRM/4;
    sector = record % SPT;
    track = record / SPT + OFF;
    надо в BDOS переписать поправив математику так, чтобы разрядность record увеличить с 16 до 24 бит.
    В какой процедуре оно в тексте во вложении?
    Вложения Вложения
    • Тип файла: zip CPM22.zip (28.3 Кб, Просмотров: 99)
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #210

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Собственно проблемная строчка это процедура LOGICAL. Но нужно будет ещё посмотреть места, где используется 16-битная переменная BLKNMBR, потому что она там используется и как номер блока, и как номер записи (вот такой дурдом). Рассчёт сектора и дорожки, где эта переменная уже как номер записи, это процедура TRKSEC1. И да, деление там сделано циклом с вычитанием

    - - - Добавлено - - -

    Пока заметил следующие места, где нужно будет учесть третий байт номера записи:
    1. при чтении каталога (TRKSEC), нужно обнулять третий байт
    2. собственно рассчёт сектора и дорожки (TRKSEC1), лучше всего переписать с использованием нормального деления 24/16
    3. естесственно LOGICAL
    4. ну и процедура записи, там есть зануление неиспользованного пространства блока, тоже 16-битный счётчик номера записи

    - - - Добавлено - - -

    У тебя ведь SPT=100h, можешь для начала сделать так:
    1. проблем не должно составить
    2. тупо использовать старшие 16 и младшие 8 бит номера записи в качестве номера дорожки и сектора
    3. тут надо сделать честно
    4. зануление выкинуть нафиг, всё равно наверное не используется

    Таким образом, если всё будет работать как надо, то и 2, и 4 тоже дописать до честного варианта.
    Последний раз редактировалось b2m; 02.08.2016 в 17:14.

Страница 21 из 48 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Дела паяльные.
    от Sayman в разделе Для начинающих
    Ответов: 24
    Последнее: 09.10.2009, 20:14
  2. валаются без дела разобранные спектрумы
    от Damein Alpha в разделе Барахолка (архив)
    Ответов: 17
    Последнее: 17.09.2009, 10:15
  3. Дела мышиные...
    от Producer в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 22.01.2005, 02:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •