User Tag List

Показано с 1 по 10 из 266

Тема: ImageUtils

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как там... "Небольшой шаг для человека и громадный для человечества"

    Сделал первый (небольшой) шаг на пути к функционалу по созданию образов ODS-1 И он отработал - как ожидалось

    Шаг действительно небольшой - переделка классов (нууу.. пока только класса для home block-а) описания структуры ODS-1 по той же схеме, что я сделал для DisAsm-11 - то есть, весь код создания объекта выглядит так:
    Код:
            HomeBlock hbtest = new(ImageData.BlkGetBlocks(blkNo));
    А внутри (любого!) конструктора, использующего этот подход - всего одна строчка:
    Код:
        public HomeBlock(byte[] data, uint baseOffset = 0)
          => this.Mapper(data, baseOffset);
    и всю работу делает (универсальный!) метод Mapper
    Как выглядит описание класса:
    Код:
      [Serializable]
      [Flags]
      [Macro("LBLDF$")] public enum F_VCHA : UInt16
      {
          CH_NDC = 8   //  10 no device control functions
        , CH_NAT = 16  //  20 no attach/detach
        // CH.RCK = ?? // Set if the volume is to be read checked (not in RSX?)
        // CH.WCK = ?? // Set if the volume is to be write checked (not in RSX?)
        , CH_SDI = 256 // 400 single directory volume
      }
    
      [Serializable]
      [Macro("HMBO1$")] public class HomeBlock
      {
        [Map("H.IBSZ: .BLKW 1")]                                      public UInt16 H_IBSZ;           // [2] Index file bitmap size in blocks (number of blocks in the index bitmap, which is the offset for the file-headers)
        [Map("H.IBLB: .BLKW 2", dataOrder: PDP11Order.BigWordEndian)] public ODS1BlockNum H_IBLB;     // [4] Index file bitmap LBN addres ([2] #define H_iblh H_iblb[0] - high word, [2] #define H_ibll H_iblb[1] - low word) (long) -> GetBDWord
        [Map("H.FMAX: .BLKW 1")]                                      public UInt16 H_FMAX;           // [2] Maximum number of files allowed on this volume (& 077777)
        [Map("H.SBCL: .BLKW 1")]                                      public UInt16 H_SBCL;           // [2] Storage bitmap cluster factor (cluster size for storage bitmap); the only legal value for this item in ODS-1 is must always be 1
                                                                                                      //     (That means, the disk cluster sizes 2 - that is two 512 byte sectors (1 kbyte) was the smallest chunk of disk that would be allocated to store a file. Etc.)
        [Map("H.DVTY: .BLKW 1")]                                      public UInt16 H_DVTY;           // [2] Disk device type
        [Map("H.VLEV: .BLKW 1")]                                      public UInt16 H_VLEV;           // [2] Volume structure level (ods-1 = 0x102, ods-2 = 0x201)
        [Map("H.VNAM: .BLKB 12.")]                                    public string H_VNAM;           // [12] Volume name (id)
        [Set(".=.+4")]
        [Map("H.VOWN: .BLKW 1")]                                      public string H_VOWN;           // [2] Volume owner's decimal UIC in binary (ie: [1,1])
        [Map("H.VPRO: .BLKW 1")]                                      public VolumeProtection H_VPRO; // [2] Volume protection code
        [Map("H.VCHA: .BLKW 1")]                                      public F_VCHA H_VCHA;           // [2] Volume characteristics (24 (030) = no attach, no device control fcns)
        [Map("H.DFPR: .BLKW 1")]                                      public FileProtection H_DFPR;   // [2] Default file protection (2 h_dfpr = 164000 - default protection for files)
    
    ...
    
        static HomeBlock()
          => Helpers.Mapper<HomeBlock>();
    
        public HomeBlock(byte[] data, uint baseOffset = 0)
          => this.Mapper(data, baseOffset);
      }
    Но шаг достаточно важный - так как теперь можно использовать не только простые типы данных (строки, числа, перечисления-флаги), но и более сложные (как например классы VolumeProtection и FileProtection) - при определённых условиях для таких классов - Mapper сможет преобразовать байты или слова из блоков - в соотвествующие объекты.

    Что будет дальше - надо описать полностью те классы, которые я сделал (но по другому) для работы по распаковки ODS-1, сделать возможным изменения для объектов этих классов (технически, первый вариант это позволяет, но.. не всё там будет гладко) и нарисовать метод ReMapper - для обратного преобразовния - то есть из объекта в блок (блоки) для образа диска. А его уже можно будет сбрасывать в образ Попробую успеть за выходные полностью сделать новое описние и этот функционал для Home блока. Описание - тупо перенести остаток (ну и сделать некоторое количество классов типа FileProtection и VolumeProtection) - достаточно механическая работы. ReMapper тоже не сильно сложный, так как он похож на Mapper, только в обратную сторону

    Ну и по прежнему идёт рефакторинг - как выяснилось - приличное количество кода повторяется, что не есть порядок

    А, да, в .NET 6 есть некоторое количество своих приколов, так что налетел в паре мест на то, что код в старом .NET (4.x) работает, а в новом - фиг вам Решилось достаточно быстро

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

    А, да, ещё - на работа небольшая запарка, так что в рабочие дни процесс идёт так себе.. Но по часу-два вроде получится выделять. А вот во второй половине декабря - начнётся отпуск - где-то до 10 января - там получится оторваться Может даже повожусь с PDP-2011

    Ну и ещё одна цель - аналог подключенных к HD в эмуляторе Патрона папок - ещё и с ODS-1 И с возможностью цеплять их к реальных PDP-11 - пока только в варианте через контроллер DD (у него общение идёт через serial порт на стороне PDP-11), но есть некоторые мысли - какой путь выбрать дальше
    Последний раз редактировалось Hunta; 23.10.2022 в 01:54.

    Этот пользователь поблагодарил Hunta за это полезное сообщение:

    Radon17(23.10.2022)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Ваши права

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