User Tag List

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

Тема: Восстановление Специалистов.

Древовидный режим

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

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию



    Вчера вечером сделал первые наброски файлового менеджера.

    Каждый программист должен в своей жизни написать Norton Commander Пока контроллер работает только в режиме чтения, поэтому вторая панель не особо нужна.

    Но! Она играет важную роль. Текст на экране рисуется относительно долго, и сократив его до двух колонок получилось значительно повысить скорость работы. При этом, при перемещении курсора (когда требуется скролл) я не рисую весь текст повторно, а активно использую копирование видеопамяти.

    А копировать видеопамять в цвете у этого компьютера не получится, поэтому расцветки файлов не будет. Но зато быстро.

    Теперь надо написать код связывающий его и микроконтроллер.

    Как хорошо писать на Си под эти компы Функция копирования видеопамяти:

    Код:
    void scroll1(char* d, char* s, uchar w, uchar h) {
      for(; w; --w, d+=0x100, s+=0x100)
        memswap(d, s, h);
    }
    Просто и быстро. Хотя ассемблерные вставки то же пока присутствуют.

    Код:
    void fillRect1_int(uchar len, uchar x, uchar* a) {
    asm {
        lda fillRect1_int_2
    fillRect1_int_cmd2:
        nop          ; CMA = 2F NOP = 00
        mov d, a
        lda fillRect1_int_1
        mov e, a
    fillRect1_int_l0:
        mov a, m
    fillRect1_int_cmd:
        ora d        ; XRA D = AA, ANA D = A2, ORA D = B2
        mov m, a
        inx h
        dcr e
        jnz fillRect1_int_l0
      }
    }
    
    void fillRect1(uchar* a, ushort c, uchar l, uchar r, uchar h) {
      if(c==0) {
        fillRect1_int(h, l & r, a);
        return;
      }
      --c;  
      fillRect1_int(h, l, a);
      a += 0x100;
      for(; c; --c) {  
        fillRect1_int(h, 0xFF, a);
        a += 0x100;
      }  
      fillRect1_int(h, r, a);
    }
    
    #define QUARDCOORDS(XX,YY) ((uchar*)(0x9000)+(YY)+((XX)*256) )
    
    #define FILLRECTARGS(X0,Y,X1) QUARDCOORDS(X0/8, Y0), ((X1)+1)/8-(X0/8), (0xFF >> ((uchar)(X0) & 7)), (0xFF >> ((uchar)((X1)+1) & 7)) ^ 0xFF, (Y1)-(Y0)+1
    
    void fillRect(ushort x0, uchar y0, ushort x1, uchar y1) {
      fillRect1(FILLRECTARGS(x0, y0, x1, y1));
    }
    
    void graphXor() {
      asm {
        mvi a, 0AAh
        jmp graph1_l1
      }
    }
    
    void graph0() {
      asm {
        mvi a, 0A2h
        sta fillRect1_int_cmd
        mvi a, 02Fh
        jmp graph1_l2
      }
    }
    
    void graph1() {
      asm {
        mvi a, 0B2h
    graph1_l1:
        sta fillRect1_int_cmd
        xra a
    graph1_l2:
        sta fillRect1_int_cmd2
      }
    }
    Макросы я добавил, что ускорить программу. Что бы всё что можно рассчитать во время компиляции, считалось во время компиляции.

    Медленно, потому что расчет адреса будет производится при вызове.
    fillRect(8,5,184,232);

    Быстро, потому что расчет адреса будет производится при компиляции.
    fillRect1(FILLRECTARGS(8, 5, 184, 232));

    Во вложении RKS файл, код на Си и промежуточный файл на асме.

    Контроля переполнения буферов пути и ком строки я пока не сделал.

    Еще надо будет свою функцию сканирования клавиатуры делать. Тут нет автоповтора и заглавных букв.

    Я заголовочные файлы для BIOS начал писать и граф. библиотеку.
    Вложения Вложения
    Последний раз редактировалось vinxru; 01.03.2013 в 14:12.

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

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

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

Похожие темы

  1. Восстановление Scorpion ZS-256
    от AlexMik в разделе Scorpion
    Ответов: 127
    Последнее: 15.08.2013, 19:30
  2. восстановление Орион-128
    от sergey2b в разделе Орион
    Ответов: 1
    Последнее: 05.02.2011, 15:32
  3. Восстановление ПК Мастер-128
    от PKZX в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 3
    Последнее: 13.03.2010, 22:10
  4. Хочу выслушать мнения специалистов...
    от ILoveSpeccy в разделе Музыка
    Ответов: 23
    Последнее: 29.08.2008, 04:35

Ваши права

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