User Tag List

Страница 10 из 54 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 538

Тема: Планирую сделать FDD эмулятор на Atmega8

  1. #91

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не, мне кажется это уже не из той серии Может так дисковод внутри работает, но то что в него из него передается оно имеет вид именно тот что я привел на рисунке. Оно даже по той ссылке так показано.

    Вот, еще раз приведу диаграммы.
    Первая это сигнал который сейчас генерит ардуина (верхний график) через RC (нижний график).
    Вторая реальный дисковод.
    Сигналы полностью идентичны, правда на реальном нужно было поставить частоту побольше, а то брешет немного.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	mfm_rc24mhz.jpg 
Просмотров:	158 
Размер:	24.0 Кб 
ID:	56598   Нажмите на изображение для увеличения. 

Название:	diagram5.jpg 
Просмотров:	146 
Размер:	37.7 Кб 
ID:	56599  
    Последний раз редактировалось EvgenRU; 26.03.2016 в 02:24.

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

  3. #92

    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я не вижу что идентичного, похожие импульсы и интервалы это еще не значит что правильно, я привел ссылку что на выходе дисковода, по описанию mfm байт 0xff это 16 импульсов с минимальным шагом
    на диаграммах нужна привязка к времени и какие входные данные были до mfm кодирования, что бы понять правильно или нет

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

    >> 0xF8:0xAA95,0xF9:0xAA92,0xFA:0xAA89,0xFB:0xAA8A,0x FC:0xAAA5,0xFD:0xAAA2,0xFE:0xAAA9,0xFF:0xAAAA,

    вот кстати из таблицы, видно что 0xFF = 0xAAAA это не 8 импульсов а !16 смен уровня сигнала, то есть 16 мпульсов на выходе дисковода, о чем я и говорил, вернее 15, нужно учитывать последний бит предыдущего байта

  4. #93

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так оно и кодируется там в 2 байта по таблице, каждый импульс получается 2мкс, после инвертирования и применения RC импульс становится 1мкс (уменьшается только импульс нуля, единица остается такой как и была), всё в точности как в оригинальном сигнале.

  5. #94

    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно семпл, как буфет выглядеть последовательность, 0xff, 0x00, 0xAA

  6. #95

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вечером выложу, неожиданно пришлось ехать на работу

    Исправил ошибку в скетче на предыдущей странице, по дурости заменил >>= 3 на ROL )) а надо на 3 LSR

    Вот картинка с этими 3 байтами с самого начала передачи
    Нажмите на изображение для увеличения. 

Название:	FF00AA.jpg 
Просмотров:	347 
Размер:	55.3 Кб 
ID:	56601

    Походу пришло время генерить дорожки, на основе этого сектора пока что, и цеплять к реалу. Потом уже SD.

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

    Вот так вычисляю CRC для заголовка
    Код:
            // CRC CALCULATION, PRE-CALC value for A1,A1,A1,FE = 0xB230
            {
              union
              {
                  uint16_t value;
                  unsigned char bytes[2];
              } crc;
    
              crc.value = 0xB230;
              
              crc.bytes[0] ^= track;
              for (b_index = 0; b_index < 8; b_index++) crc.value = crc.bytes[0] & 0x80 ? (crc.value << 1) ^ 0x1021 : crc.value << 1;
              crc.bytes[0] ^= side;
              for (b_index = 0; b_index < 8; b_index++) crc.value = crc.bytes[0] & 0x80 ? (crc.value << 1) ^ 0x1021 : crc.value << 1;
              crc.bytes[0] ^= sector;
              for (b_index = 0; b_index < 8; b_index++) crc.value = crc.bytes[0] & 0x80 ? (crc.value << 1) ^ 0x1021 : crc.value << 1;
              crc.bytes[0] ^= 1; // sector size;
              for (b_index = 0; b_index < 8; b_index++) crc.value = crc.bytes[0] & 0x80 ? (crc.value << 1) ^ 0x1021 : crc.value << 1;
              sector_header[0x56]=crc.bytes[0];
              sector_header[0x57]=crc.bytes[1];
            }
    Каждое действие делаю на шаге генерации байта первого пробела сектора, т.е. циклов там нет, а есть кейс по номеру байта пробела.

    И так, дорожку сгенерировал, данные на лог анализаторе выводятся нормально, без разрывов, всё отлично, CRC успевает сгенерироваться.
    Причем дорожка у меня во флеше 4к, и он её читает по пол сектора, успевает! Проверял успеваемость флажком состояния, когда не успевает, то отключает прерывания и уходит в бесконечный цикл.
    Последний раз редактировалось EvgenRU; 27.03.2016 в 17:38.

  7. #96

    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    не, отбой, в голове попутался mfm и fm

  8. #97

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подключил к ZX, получаю

    Disc Error
    Trk 0 sec 9
    Retry, Abort, Ignore ?

    Помню такая фигня была когда втыкаешь MS-DOS дискету

    В чем здесь может быть проблема? Неверный формат? Не вовремя Index генерирую?

    PS: скорее всего где-то что-то напутал, буду дальше разбираться...

    Выяснил, такую ошибку выдает, когда вычисленная CRC не совпадает, при этом должен генерироваться INDEX, если INDEX не генерируется, то зависает CRC генерил в регистре 20,21, но он видимо портился при вызове функций.

    UPD: теперь диск егор, думаю это уже наполовину успех
    UPD2: действительно! наполовину успех! диск егор означает, что адресное поле грузится нормально и CRC в нем рассчитано нормально, а вот поле данных кривое пока что, буду дальше оптимизировать. САМОЕ УДИВИТЕЛЬНОЕ это то, что эта штука работает напрямую с выхода атмеги, никаких резисторов и конденсаторов не нужно!

    UPD3: Ура товарищи! Чтение работает как надо! Всё, буду допиливать ближайшие дни, потом буду выкладывать результаты, так что ожидайте. Короче, в итоге для эмуляции дисковода нужно будет I2C дисплей, Atmega328p, SD карта по SPI, кнопки. Ну и всё, в принципе.
    Последний раз редактировалось EvgenRU; 29.03.2016 в 00:04.

  9. #98

    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    если разобраться не получится, можно на fpga сделать сепаратор и декодер mfm и логировать что видит контролер дисковода

  10. #99

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну что ж, господа, выкладываю первый рабочий вариант для ардуины.
    В данном скетче нулевая дорожка с одного из моих дисков вбита во флеш.
    Из флеша читаются сектора, для других дорожек нулевая дублируется. В итоге, при подключении к ZX нормально выводится оглавление диска и можно бегать по секторам в диск докторе.

    Принимается любая критика и пожелания по дальнешему допиливанию.

    Вот, собственно скетч. Провода к шлейфу цеплять прямо от ардуины, те что указаны в дефайнах. PD0-PD7 это пины 0-7 на ардуины, PC0-PC2 - это A0-A2, PB0-PB1 пока что не используются. DRIVE SELECT цеплять пока что не надо, только MOTOR ON.
    Код:
    // ZX-Spectrum FDD Emulator
    //
    //#include <petit_fatfs.h>
    
    #define SIDE_SEL  PC0   // SIDE SELECT                                  (INPUT)
    #define DRIVE_SEL PC1   // DRIVE SELECT CONNECT DS0-DS3 using jumper    (INPUT) /// not used yet
    #define MOTOR_ON  PC2   // MOTOR ON                                     (INPUT)
    
    #define WRT_GATE  PB0   // WRITE GATE                                   (INPUT) /// not used yet
    #define WRT_DATA  PB1   // WRITE DATA                                   (INPUT) /// not used yet
    
    #define READ_DATA PD1   // READ_DATA                                    (OUTPUT) /// defined in USART
    #define STEP      PD2   // STEP                                         (INPUT)
    #define DIR_SEL   PD3   // DIRECTION SELECT                             (INPUT)
    // PD4 UNABLE TO USE!!
    #define INDEX     PD5   // INDEX                                        (OUTPUT)
    #define TRK00     PD6   // TRACK 00                                     (OUTPUT)
    #define WP        PD7   // WRITE PROTECT                                (OUTPUT)
    
    
    uint8_t sector_header[64]; // sector header
    uint8_t sector_data[256]; // sector data
    
    // STATE variable values
    // 0 - TRACK HEADER
    // 1 - SECTOR HEADER
    // 2 - SECTOR DATA
    // 3 - SECTOR FOOTER
    // 4 - TRACK FOOTER
    register uint8_t XH_Save asm("r2");
    register uint8_t XL_Save asm("r3");
    register uint8_t ZH_Save asm("r4");
    register uint8_t ZL_Save asm("r5");
    
    register volatile uint8_t state asm("r6");
    register volatile uint8_t SREGSave asm("r7");
    
    register volatile uint8_t sector_byte asm("r8");
    register volatile uint8_t track asm("r9");
    register volatile uint8_t sector asm("r10");
    register volatile uint8_t side asm("r11");
    register volatile uint8_t data_sent asm("r12");
    register volatile uint8_t second_byte asm("r13");
    register volatile uint8_t prev_byte asm("r14");
    
    register volatile uint8_t b_index asm("r17");
    register volatile uint8_t tmp asm("r19");
    
    //register volatile uint8_t trk00 = 0;
    
    uint16_t CRC;
    
    uint8_t MFM_tab[32] =
    {
      0xAA,0xA9,0xA4,0xA5,0x92,0x91,0x94,0x95,0x4A,0x49,0x44,0x45,0x52,0x51,0x54,0x55,
      0x2A,0x29,0x24,0x25,0x12,0x11,0x14,0x15,0x4A,0x49,0x44,0x45,0x52,0x51,0x54,0x55,
    };
    
    
    // STEP pin interrupt
    ISR(INT0_vect)
    {  
      if ((PIND & (1 << DIR_SEL))==0) {
        track++;
        if (track > 79) track = 79; // !!!!!!!!!!!!!!!! use max track calculated on mounting TRD
      }
      else
      {
        if (track > 0) track--;
      }
      sector = 1;
    }
    
    ISR(USART_UDRE_vect, ISR_NAKED)
    {
      asm ("in r7,0x3F");    // save SREG
      asm ("mov r2,r24");    // save XH
      asm ("mov r3,r25");    // save XL
      asm ("mov r4,r30");    // save ZH
      asm ("mov r5,r31");    // save ZL
      if (!tmp) // it is ok, as MFM_tab doesn't have zero values
      { // Send first MFM byte
    
        // GET DATA BYTE (REAL DATA NOT MFM)
        switch (state)
        {
          case 0: // ------------------------------------------------------------
            // send track GAP
            switch (b_index)
            {
              case 0:
                // set index LOW
                PORTD &= ~(1 << INDEX);
                sector_byte = 0x4E;
                //set TRK00 LOW or HIGH
                if (track == 0) PORTD &= ~(1 << TRK00); else PORTD |= (1 << TRK00);
                break;
    
              case 78:
                // set index HIGH
                PORTD |= (1 << INDEX);
                break;
    
              case 80:
                sector_byte = 0;
                break;
    
              case 92:
                sector_byte = 0xC2; // translate this value!
              case 93:
              case 94:
                second_byte = 0x24;
                break;
                
              case 95:
                sector_byte = 0xFC;
                break;
                
              case 96:
                sector_byte = 0x4E;
                break;
            }
            b_index++;
            if (b_index != 146) break;
            state = 1;
            b_index = 0;
            break;
            
          case 1: // ------------------------------------------------------------
            switch (b_index)
            {
              case 0:
                CRC = 0xB230;
                CRC ^= track*256;
                break;
              
              case 1:
              case 2:
              case 3:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                break;
              
              case 4:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                tmp = PINC;
                tmp ^= 1;
                tmp &= 1;
                side = tmp;
                break;
              
              case 5:
                sector_header[16] = track;
                sector_header[17] = side;
                CRC ^= side*256;
                break;
              
              case 6:
              case 7:
              case 8:
              case 9:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                break;
    
              case 10:
                CRC ^= sector*256;
                break;
    
              case 11:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                break;
                
              case 12:
              case 13:
              case 14:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                second_byte = 0x89;
                break;
    
              case 15:
                sector_header[18] = sector;
                CRC ^= 256; // sector size;
                break;
    
              case 16:
              case 17:
              case 18:
              case 19:
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
                break;
    
              case 20:
                sector_header[20] = (byte)(CRC >> 8);
                break;
    
              case 21:
                sector_header[21] = (byte)CRC;
                /*if(sector == 1 && side == 0 && CRC != 0xFA0C) { 
                  cli();
                  while(1);
                }*/
                break;
    
              case 56:
              case 57:
              case 58:
                second_byte = 0x89;
                break;
            }
            // send sector bytes before data
            sector_byte = sector_header[b_index];   // pre-get new byte from buffer
            b_index++;
            if (b_index != 60) break;
    
            b_index = 0;
            state = 2;
            // START GENERATING CRC HERE, PRE-CALC value for A1,A1,A1,FB = 0xE295        
            CRC = 0xE295; // next CRC value
            data_sent = 0;
            break;
            
          case 2: // ------------------------------------------------------------        
            // get sector data values
            sector_byte = sector_data[b_index];   // pre-get new byte from buffer
            // CALCULATE CRC HERE!
            CRC ^= sector_byte << 8; // sector size;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            CRC = CRC & 0x8000 ? (CRC << 1) ^ 0x1021 : CRC << 1;
            
            if (b_index != 255)
            {
              b_index++;
              break;
            }
            state = 3;
            b_index = 0;
            break;
            
          case 3:
            // send CRC + sector footer
            if (b_index == 0)
              sector_byte = (byte)(CRC >> 8);
            else if (b_index == 1)
              sector_byte = (byte)CRC;
            else sector_byte = 0x4E;
    
            b_index++;
    
            if (b_index != 24) break;
    
            if (sector <= 15)
            {
              sector++; // increase sector
              data_sent = 1;
              state = 1;
              b_index = 0;
              break;
            }
            sector = 1;
            data_sent = 1;
    
            state = 4;
            b_index = 0;
            break;
    
          case 4:
            // send track footer
            sector_byte = 0x4E;
            b_index++;
            
            if (b_index != 80) break;
            
            state = 0;
            b_index = 0;        
            break;
        }
        // PRE-FETCH END
    
        
    //    tmp = sector_byte;
    //    tmp >>= 4;
        asm(
          "mov r19,r8\n" //tmp = sector_byte;
          "swap r19\n"     //tmp >>= 4; -------------
          "andi r19,0x0f" // -----------------------
        );
    
        tmp = MFM_tab[tmp]; // get first MFM byte from table
        
        if((prev_byte & 1) && !(sector_byte & 0x80)) tmp &= 0x7F;
        UDR0 = ~tmp;  // put byte to send buffer
    
      }
      else
      { // Send second MFM byte
    
        prev_byte = sector_byte;
    
        if (second_byte == 0)
        {
          tmp = sector_byte;
          tmp &= 0x1f;
          tmp = MFM_tab[tmp]; // get second MFM byte from table to "tmp"
        }
        else 
        {
          tmp = second_byte;
          second_byte = 0;
        }    
    
        UDR0 = ~tmp;  // put byte to send buffer
        
        tmp = 0; // this is important!
      }
    
      asm ("mov r31,r5");    // restore ZL
      asm ("mov r30,r4");    // restore ZH
      asm ("mov r25,r3");    // restore XL
      asm ("mov r24,r2");    // restore XH
      asm ("out 0x3F,r7");        // restore SREG
      reti();
    }
    
    void prepare_sector_header()
    {
      // Address field
      byte i;
      for(i=0; i <= 11; i++) sector_header[i] = 0x00; // 0x00(0)-0x0B(11) sync field
      for(i=12; i <= 14; i++) sector_header[i] = 0xA1; // 0x0C(12)-0x0E(14) 3x0xA1
      sector_header[15] = 0xFE;         // 0x0F(15) 0xFE
      // TRACK, SIDE, SECTOR
      sector_header[16] = 0x00;         // 0x10(16) track
      sector_header[17] = 0x00;         // 0x11(17) side
      sector_header[18] = 0x01;         // 0x12(18) sector
      sector_header[19] = 0x01;         // 0x13(19) sector len (256 bytes)
      sector_header[20] = 0xFA;         // 0x14(20) CRC1 for trk=0, side=0, sector=1
      sector_header[21] = 0x0C;         // 0x15(21) CRC2
    
      // GAP 2
      for(i=22; i <= 43; i++) sector_header[i] = 0x4E; // 0x16(22)-0x2B
    
      // DATA field
      for(i=44; i <= 55; i++) sector_header[i] = 0x00; // 0x2C(44)-0x37 sync field
      for(i=56; i <= 58; i++) sector_header[i] = 0xA1; // 0x38(56)-0x3A
      sector_header[59] = 0xFB;         // 0x3B(59)
    }
    
    //alignas(256) 
    const byte track0[4096] PROGMEM =
    {
      0x62, 0x6F, 0x6F, 0x74, 0x20, 0x20, 0x20, 0x20, 0x42, 0xB4, 0x00, 0xB4, 0x00, 0x23, 0x00, 0x01,
      0x46, 0x55, 0x4C, 0x4C, 0x20, 0x54, 0x48, 0x52, 0x42, 0x6D, 0x00, 0x6D, 0x00, 0x01, 0x03, 0x03,
      0x66, 0x74, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x40, 0x9C, 0x00, 0x12, 0x12, 0x04, 0x03,
      0x66, 0x74, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0xB4, 0x5F, 0x0A, 0x6E, 0x6F, 0x06, 0x04,
      0x52, 0x41, 0x49, 0x4E, 0x42, 0x4F, 0x57, 0x2B, 0x42, 0x08, 0x01, 0x08, 0x01, 0x02, 0x05, 0x0B,
      0x52, 0x41, 0x49, 0x4E, 0x42, 0x2E, 0x2B, 0x24, 0x43, 0x00, 0x40, 0x00, 0x1B, 0x1B, 0x07, 0x0B,
      0x52, 0x41, 0x49, 0x4E, 0x42, 0x2E, 0x2B, 0x63, 0x43, 0xA8, 0x61, 0x58, 0x9E, 0x9F, 0x02, 0x0D,
      0x52, 0x41, 0x49, 0x4E, 0x42, 0x2E, 0x2B, 0x73, 0x43, 0x00, 0x40, 0x08, 0x07, 0x08, 0x01, 0x17,
      0x52, 0x41, 0x49, 0x31, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x57, 0x1A, 0x1B, 0x09, 0x17,
      0x52, 0x41, 0x49, 0x32, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x1A, 0x1B, 0x1C, 0x04, 0x19,
      0x52, 0x41, 0x49, 0x33, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x13, 0x1D, 0x1E, 0x00, 0x1B,
      0x52, 0x41, 0x49, 0x34, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x26, 0x1D, 0x1E, 0x0E, 0x1C,
      0x52, 0x41, 0x49, 0x35, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x92, 0x1C, 0x1D, 0x0C, 0x1E,
      0x52, 0x41, 0x49, 0x36, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x08, 0x1E, 0x1F, 0x09, 0x20,
      0x52, 0x41, 0x49, 0x37, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0x10, 0x1C, 0x1D, 0x08, 0x22,
      0x52, 0x41, 0x49, 0x38, 0x20, 0x20, 0x20, 0x20, 0x43, 0x98, 0x00, 0xE3, 0x1F, 0x20, 0x05, 0x24,
      0x50, 0x2E, 0x42, 0x4F, 0x41, 0x54, 0x34, 0x38, 0x42, 0x1F, 0x01, 0xF9, 0x00, 0x02, 0x05, 0x26,
      0x50, 0x2E, 0x42, 0x31, 0x20, 0x20, 0x20, 0x20, 0x43, 0xFF, 0x00, 0x00, 0x1B, 0x1B, 0x07, 0x26,
      0x50, 0x2E, 0x42, 0x32, 0x20, 0x20, 0x20, 0x20, 0x43, 0xA8, 0x61, 0x60, 0x9B, 0x9C, 0x02, 0x28,
      0x53, 0x54, 0x5F, 0x43, 0x4F, 0x42, 0x52, 0x41, 0x42, 0xFF, 0x00, 0xEC, 0x00, 0x02, 0x0E, 0x31,
      0x53, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0xBE, 0x6E, 0xCB, 0x07, 0x08, 0x00, 0x32,
      0x53, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0xA8, 0x61, 0x58, 0x9E, 0x9F, 0x08, 0x32,
      0x48, 0x49, 0x47, 0x48, 0x5F, 0x53, 0x5F, 0x52, 0x42, 0xE9, 0x00, 0xE9, 0x00, 0x01, 0x07, 0x3C,
      0x48, 0x53, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x00, 0x40, 0x00, 0x1B, 0x1B, 0x08, 0x3C,
      0x48, 0x53, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x00, 0x66, 0x00, 0x9A, 0x9A, 0x03, 0x3E,
      0x53, 0x41, 0x49, 0x47, 0x4F, 0x4E, 0x31, 0x52, 0x42, 0x47, 0x01, 0x34, 0x01, 0x02, 0x0D, 0x47,
      0x53, 0x43, 0x31, 0x32, 0x20, 0x20, 0x20, 0x20, 0x43, 0x00, 0x7C, 0x00, 0x03, 0x03, 0x0F, 0x47,
      0x53, 0x43, 0x31, 0x31, 0x20, 0x20, 0x20, 0x20, 0x43, 0xA8, 0x61, 0x5A, 0x64, 0x65, 0x02, 0x48,
      0x53, 0x43, 0x31, 0x24, 0x20, 0x20, 0x20, 0x20, 0x43, 0xBE, 0x6E, 0x33, 0x0B, 0x0C, 0x07, 0x4E,
      0x53, 0x41, 0x4E, 0x58, 0x5F, 0x52, 0x55, 0x53, 0x42, 0x33, 0x02, 0x20, 0x02, 0x03, 0x03, 0x4F,
      0x53, 0x41, 0x4E, 0x58, 0x2E, 0x31, 0x52, 0x20, 0x43, 0xA8, 0x61, 0x12, 0x3E, 0x3F, 0x06, 0x4F,
      0x53, 0x41, 0x4E, 0x58, 0x2E, 0x32, 0x52, 0x20, 0x43, 0xF0, 0x6E, 0x00, 0x03, 0x03, 0x05, 0x53,
      0x43, 0x2E, 0x53, 0x68, 0x65, 0x72, 0x77, 0x2E, 0x42, 0x66, 0x00, 0x66, 0x00, 0xA9, 0x08, 0x53,
      0x4F, 0x56, 0x45, 0x52, 0x2E, 0x52, 0x55, 0x53, 0x42, 0x3F, 0x01, 0x2C, 0x01, 0x02, 0x01, 0x5E,
      0x6F, 0x76, 0x6C, 0x31, 0x20, 0x20, 0x20, 0x20, 0x43, 0x40, 0x9C, 0xBA, 0x10, 0x11, 0x03, 0x5E,
      0x6F, 0x76, 0x6C, 0x32, 0x20, 0x20, 0x20, 0x20, 0x43, 0xA8, 0x61, 0xA9, 0x99, 0x9A, 0x04, 0x5F,
      0x6F, 0x76, 0x6C, 0x33, 0x20, 0x20, 0x20, 0x20, 0x43, 0x00, 0x7C, 0x00, 0x03, 0x03, 0x0E, 0x68,
      0x56, 0x49, 0x58, 0x45, 0x4E, 0x2D, 0x33, 0x20, 0x42, 0xA5, 0x00, 0xA5, 0x00, 0xB3, 0x01, 0x69,
      0x46, 0x52, 0x55, 0x49, 0x54, 0x2D, 0x49, 0x49, 0x42, 0x64, 0x00, 0x64, 0x00, 0x01, 0x04, 0x74,
      0x46, 0x52, 0x55, 0x49, 0x54, 0x5F, 0x34, 0x38, 0x43, 0xC0, 0x5E, 0xBB, 0x95, 0x96, 0x05, 0x74,
      0x57, 0x41, 0x54, 0x45, 0x52, 0x4D, 0x49, 0x4C, 0x42, 0x10, 0x01, 0x10, 0x01, 0x02, 0x0B, 0x7D,
      0x57, 0x4D, 0x34, 0x38, 0x2F, 0x31, 0x32, 0x38, 0x43, 0x00, 0x40, 0x00, 0x00, 0xFF, 0x0D, 0x7D,
      0x4B, 0x61, 0x62, 0x61, 0x6C, 0x69, 0x73, 0x74, 0x42, 0x00, 0x03, 0x00, 0x03, 0xD7, 0x0C, 0x8D,
      0x55, 0x44, 0x41, 0x42, 0x2E, 0x52, 0x20, 0x20, 0x42, 0x24, 0x10, 0x24, 0x10, 0x11, 0x03, 0x9B,
      0x75, 0x64, 0x61, 0x76, 0x20, 0x20, 0x20, 0x20, 0x43, 0x18, 0xF6, 0xE8, 0x09, 0x0A, 0x04, 0x9C,
      0x00, 0x6F, 0x6F, 0x74, 0x20, 0x20, 0x20, 0x20, 0x42, 0xB4, 0x00, 0xB4, 0x00, 0x23, 0x02, 0x9B,
      0x00, 0x61, 0x72, 0x75, 0x6D, 0x61, 0x7E, 0x32, 0x43, 0x00, 0x80, 0xFF, 0x05, 0x06, 0x02, 0x23,
      0x00, 0x65, 0x73, 0x73, 0x69, 0x79, 0x61, 0x20, 0x43, 0x00, 0x80, 0x90, 0x05, 0x06, 0x08, 0x23,
      0x00, 0x6F, 0x75, 0x6E, 0x64, 0x6D, 0x7E, 0x31, 0x43, 0x00, 0x80, 0xE4, 0x09, 0x0A, 0x0E, 0x23,
      0x00, 0x74, 0x61, 0x72, 0x74, 0x32, 0x20, 0x20, 0x43, 0x00, 0x80, 0x76, 0x06, 0x07, 0x08, 0x24,
      0x00, 0x68, 0x65, 0x66, 0x6C, 0x61, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x51, 0x03, 0x04, 0x0F, 0x24,
      0x00, 0x6F, 0x72, 0x6C, 0x64, 0x20, 0x20, 0x20, 0x43, 0x00, 0x80, 0xF7, 0x02, 0x03, 0x03, 0x25,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x16, 0x05, 0x06, 0x06, 0x25,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x32, 0x43, 0x00, 0x80, 0x86, 0x07, 0x08, 0x0C, 0x25,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x33, 0x43, 0x00, 0x80, 0xD6, 0x0D, 0x0E, 0x04, 0x26,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x34, 0x43, 0x00, 0x80, 0x4C, 0x08, 0x09, 0x02, 0x27,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x35, 0x43, 0x00, 0x80, 0xBA, 0x0A, 0x0B, 0x0B, 0x27,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x36, 0x43, 0x00, 0x80, 0x5F, 0x06, 0x07, 0x06, 0x28,
      0x00, 0x78, 0x63, 0x6C, 0x75, 0x62, 0x7E, 0x37, 0x43, 0x00, 0x80, 0xDE, 0x08, 0x09, 0x0D, 0x28,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x31, 0x43, 0x00, 0x80, 0xD9, 0x0A, 0x0B, 0x06, 0x29,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x32, 0x43, 0x00, 0x80, 0x9B, 0x07, 0x08, 0x01, 0x2A,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x33, 0x43, 0x00, 0x80, 0x7B, 0x0A, 0x0B, 0x09, 0x2A,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x34, 0x43, 0x00, 0x80, 0xC1, 0x09, 0x0A, 0x04, 0x2B,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x36, 0x43, 0x00, 0x80, 0x27, 0x0D, 0x0E, 0x0E, 0x2B,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x37, 0x43, 0x00, 0x80, 0x64, 0x13, 0x14, 0x0C, 0x2C,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x38, 0x43, 0x00, 0x80, 0xD5, 0x08, 0x09, 0x00, 0x2E,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x61, 0x7E, 0x39, 0x43, 0x00, 0x80, 0xC0, 0x09, 0x0A, 0x09, 0x2E,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x30, 0x43, 0x00, 0x80, 0x08, 0x0B, 0x0C, 0x03, 0x2F,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x31, 0x43, 0x00, 0x80, 0x01, 0x07, 0x08, 0x0F, 0x2F,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x32, 0x43, 0x00, 0x80, 0x8B, 0x07, 0x08, 0x07, 0x30,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x33, 0x43, 0x00, 0x80, 0x98, 0x06, 0x07, 0x0F, 0x30,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x34, 0x43, 0x00, 0x80, 0x8E, 0x10, 0x11, 0x06, 0x31,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x35, 0x43, 0x00, 0x80, 0xF7, 0x06, 0x07, 0x07, 0x32,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x36, 0x43, 0x00, 0x80, 0xF1, 0x06, 0x07, 0x0E, 0x32,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x37, 0x43, 0x00, 0x80, 0x00, 0x0A, 0x0A, 0x05, 0x33,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x38, 0x43, 0x00, 0x80, 0x38, 0x0E, 0x0F, 0x0F, 0x33,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x31, 0x39, 0x43, 0x00, 0x80, 0xEA, 0x04, 0x05, 0x0E, 0x34,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x32, 0x30, 0x43, 0x00, 0x80, 0x57, 0x0A, 0x0B, 0x03, 0x35,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x32, 0x31, 0x43, 0x00, 0x80, 0xC4, 0x05, 0x06, 0x0E, 0x35,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x32, 0x32, 0x43, 0x00, 0x80, 0x81, 0x06, 0x07, 0x04, 0x36,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x32, 0x33, 0x43, 0x00, 0x80, 0xAD, 0x16, 0x17, 0x0B, 0x36,
      0x00, 0x75, 0x6E, 0x65, 0x72, 0x7E, 0x32, 0x34, 0x43, 0x00, 0x80, 0xB5, 0x09, 0x0A, 0x02, 0x38,
      0x00, 0x65, 0x77, 0x79, 0x65, 0x61, 0x7E, 0x31, 0x43, 0x00, 0x80, 0xC6, 0x06, 0x07, 0x0C, 0x38,
      0x00, 0x61, 0x72, 0x75, 0x6D, 0x61, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x1E, 0x03, 0x04, 0x03, 0x39,
      0x00, 0x69, 0x6E, 0x67, 0x62, 0x6F, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x49, 0x05, 0x06, 0x07, 0x39,
      0x00, 0x69, 0x6E, 0x67, 0x62, 0x6F, 0x7E, 0x32, 0x43, 0x00, 0x80, 0xF2, 0x05, 0x06, 0x0D, 0x39,
      0x00, 0x61, 0x74, 0x76, 0x61, 0x39, 0x20, 0x20, 0x43, 0x00, 0x80, 0x5A, 0x06, 0x07, 0x03, 0x3A,
      0x00, 0x5F, 0x63, 0x61, 0x72, 0x74, 0x20, 0x20, 0x43, 0x00, 0x80, 0x65, 0x06, 0x07, 0x0A, 0x3A,
      0x00, 0x72, 0x65, 0x65, 0x6C, 0x6F, 0x76, 0x65, 0x43, 0x00, 0x80, 0x03, 0x07, 0x08, 0x01, 0x3B,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x75, 0x0B, 0x0C, 0x09, 0x3B,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x32, 0x43, 0x00, 0x80, 0xA1, 0x04, 0x05, 0x05, 0x3C,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x33, 0x43, 0x00, 0x80, 0x05, 0x0C, 0x0D, 0x0A, 0x3C,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x34, 0x43, 0x00, 0x80, 0x90, 0x05, 0x06, 0x07, 0x3D,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x35, 0x43, 0x00, 0x80, 0x3C, 0x04, 0x05, 0x0D, 0x3D,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x36, 0x43, 0x00, 0x80, 0xA2, 0x06, 0x07, 0x02, 0x3E,
      0x00, 0x75, 0x6E, 0x6E, 0x79, 0x62, 0x7E, 0x37, 0x43, 0x00, 0x80, 0x2B, 0x06, 0x07, 0x09, 0x3E,
      0x00, 0x5F, 0x6D, 0x5F, 0x62, 0x6F, 0x62, 0x61, 0x43, 0x00, 0x80, 0x87, 0x03, 0x04, 0x00, 0x3F,
      0x00, 0x6E, 0x76, 0x69, 0x73, 0x69, 0x7E, 0x31, 0x43, 0x00, 0x80, 0x07, 0x0A, 0x0B, 0x04, 0x3F,
      0x00, 0x30, 0x6C, 0x64, 0x65, 0x61, 0x74, 0x68, 0x43, 0x00, 0x80, 0xB0, 0x03, 0x04, 0x0F, 0x3F,
      0x00, 0x6F, 0x6C, 0x6F, 0x62, 0x6F, 0x7E, 0x31, 0x43, 0x00, 0x80, 0xE0, 0x08, 0x09, 0x03, 0x40,
      0x00, 0x7A, 0x32, 0x5F, 0x35, 0x20, 0x20, 0x20, 0x43, 0x00, 0x80, 0x20, 0x06, 0x07, 0x0C, 0x40,
      0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x31, 0x38, 0x43, 0x00, 0x80, 0xAE, 0x06, 0x07, 0x03, 0x41,
      0x00, 0x61, 0x72, 0x61, 0x7A, 0x6D, 0x35, 0x20, 0x43, 0x00, 0x80, 0xC9, 0x02, 0x03, 0x0A, 0x41,
      0x00, 0x70, 0x65, 0x63, 0x74, 0x72, 0x65, 0x32, 0x43, 0x00, 0x80, 0x7F, 0x04, 0x05, 0x0D, 0x41,
      0x00, 0x74, 0x6F, 0x70, 0x66, 0x69, 0x72, 0x65, 0x43, 0x00, 0x80, 0xD4, 0x07, 0x08, 0x02, 0x42,
      0x00, 0x6E, 0x6B, 0x6E, 0x32, 0x20, 0x20, 0x20, 0x43, 0x00, 0x80, 0xB3, 0x05, 0x06, 0x0A, 0x42,
      0x00, 0x6E, 0x6B, 0x6E, 0x33, 0x20, 0x20, 0x20, 0x43, 0x00, 0x80, 0x63, 0x05, 0x06, 0x00, 0x43,
      0x00, 0x6E, 0x6B, 0x6E, 0x34, 0x20, 0x20, 0x20, 0x43, 0x00, 0x80, 0xAA, 0x03, 0x04, 0x06, 0x43,
      0x00, 0x5F, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x20, 0x43, 0x00, 0x80, 0xA1, 0x05, 0x06, 0x0A, 0x43,
      0x00, 0x5F, 0x77, 0x65, 0x61, 0x72, 0x20, 0x20, 0x43, 0x00, 0x80, 0x4D, 0x06, 0x07, 0x00, 0x44,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x0E, 0x9C, 0x16, 0x2D, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x11, 0x00, 0x44, 0x55, 0x47, 0x4C, 0x41, 0x53, 0x20, 0x20, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    };
    
    
    // read sector
    void read_sector()
    {  
      byte i = 0;
      while(1)
      {
          sector_data[i] = pgm_read_byte_near(track0 + i + (sector-1)*256);
          if(i==255) break;
          i++;
      }
    }
    
    
    int main() {
      // init();
    
      cli();
      prepare_sector_header();
    
      // Setup USART in MasterSPI mode 500000bps
      //DDRD |= (1 << DDD4);
      UBRR0H = 0x00;
      UBRR0L = 0x0F; // 500 kbps
      UCSR0C = 0xC0;
      UCSR0A = 0x00;
      UCSR0B = 0x28; // enable USART
    
      //INIT INT0 interrupt
      EICRA = 0x03; // falling edge=2, rising edge=3
      EIFR = 0x01; // clear interrupt flag
      EIMSK = 0x01; // enable INT0
    
      // AFTER TRD is MOUNTED
    
      PORTC |= ((1 << MOTOR_ON) | (1 << DRIVE_SEL) | (1 << SIDE_SEL));
    
      //SET INDEX,TRK00 AS OUTPUT AND HIGH, WP AS OUTPUT AND LOW
      //PORTD |= ((1 << INDEX) | (1 << TRK00)); // set 1
      //PORTD |= (1 << STEP) | (1 << DIR_SEL);
      PORTD = 255;
      //////PORTD &= ~(1 << READ_DATA); // set 0
      PORTD &= ~(1 << WP); // set 0
      DDRD |= ((1 << INDEX) | (1 << TRK00) | (1 << WP));
    
      // ---------------------------------------------------
    
      while (1)
      {
        uint16_t sector_offset;
        
        while ((PINC & (1 << MOTOR_ON)) > 0);
    
        // this part is after motor on and drive sel --------
        PORTD &= ~(1 << TRK00); // set 0
        tmp = 0;
        state = 0;
        b_index = 0;
        prev_byte = 0x4E;
        second_byte = 0;
        sector = 1;
        track = 0;
        side = 0;
        data_sent = 0;
    
        read_sector();
    
    
        sei();   // ENABLE INTERRUPTS
    
        do
        {      
          while (data_sent != 1);
          // read next half of sector
          read_sector();
          
          if (data_sent == 0) { cli(); while (1); } // speed test
          while (data_sent != 0);
        }
        while ((PINC & (1 << MOTOR_ON)) == 0);
        cli();   // DISABLE INTERRUPTS
        PORTD |= (1 << TRK00);
      }
    }
    Теперь наконец-то можно спокойно поспать :-D

  11. #100

    Регистрация
    12.03.2016
    Адрес
    г. Нижний Новгород
    Сообщений
    28
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отлично! А что за проблема была постом ранее?

    ps увидел, не превыкну, что здесь принято сообщения старые дополнять)

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

    Ещё бы в итоге оставить независимость блока работы с дисководом, чтобы не вплеталось в него работа с картой памяти, дисплеем и прочим, чтобы при желании использовать с другим дисплеем например или совсем без него.

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

    Где-то выше было про открытый проект и обучающий вроде)
    Давно не программировал, но всё это интересно уровне хобби,
    если можно опишите структуру уже написанной программы,
    возможно добавите обобщающие комментарии непосредственно в коде?

    ps надо купить ардуино, на досуге повторить этот проект и кормушку для кота сделать давно задумал.

Страница 10 из 54 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 24
    Последнее: 08.12.2012, 19:00
  2. Тестер транзисторов на ATmega8
    от ILoveSpeccy в разделе Творчество
    Ответов: 10
    Последнее: 19.05.2011, 15:03
  3. Ответов: 0
    Последнее: 31.01.2007, 18:18

Ваши права

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