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

User Tag List

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

Тема: UNIX для УКНЦ!!!

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

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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от xakep_tm1 Посмотреть сообщение
    спасибо за совет
    Начинать надо с изучения WCX Writer's Reference.

    ---------- Post added at 13:16 ---------- Previous post was at 13:01 ----------

    Если кто-то ещё не видел родные исходники LSX - LSX.src

    ---------- Post added at 13:42 ---------- Previous post was at 13:16 ----------

    Цитата Сообщение от xakep_tm1 Посмотреть сообщение
    Если честно, то я так и не увидел рабочий unix на БКшке.
    После анализа кода bkunix у меня сложилось впечатление, что авторов подкосила "мистическая тайна терминального буфера".


    В LSX терминальный буфер cfree[NCLIST] описан и реализован в файле usr/kl.c


    Код:
    /*
     * The actual structure of a clist block manipulated by
     * getc and putc (mch.s)
     */
    struct cblock {
    	struct cblock *c_next;
    	char info[6];
    };
    
    /* The character lists-- space for 6*NCLIST characters */
    struct cblock cfree[NCLIST];
    
    /* List head for unused character blocks. */
    struct cblock *cfreelist; 
    
    /*
     * Initialize clist by freeing all character blocks, then count
     * number of character devices. (Once-only routine)
     */
    cinit()
    {
    	register int ccp;
    	register struct cblock *cp;
    
    	ccp = cfree;
    	for (cp=(ccp+07)&~07; cp <= &cfree[NCLIST-1]; cp++) {
    		cp->c_next = cfreelist;
    		cfreelist = cp;
    	}
    }


    В bkunix всё почти так же, но есть и небольшая "оптимизация" ( src/sys/dev/kl.c ):

    Код:
    /*
     * The actual structure of a clist block manipulated by
     * getc and putc (mch.s)
     */
    struct cblock {
    	struct cblock *c_next;
    	char info[6];
    };
    
    /* The character lists-- space for 6*NCLIST characters */
    struct cblock cfree[NCLIST];
    
    /* List head for unused character blocks. */
    struct cblock *cfreelist;
    
    /*
     * Initialize clist by freeing all character blocks, then count
     * number of character devices. (Once-only routine)
     */
    void
    cinit()
    {
    	register struct cblock *cp;
    
    	for (cp=cfree; cp <= &cfree[NCLIST-1]; cp++) {
    		cp->c_next = cfreelist;
    		cfreelist = cp;
    	}
    }

    Очевидно, что оба варианта совпадают для случая, когда массив cfree[NCLIST] выровнен по 8-байтовой границе. По жестокой случайности в актуальном коде bkunix это именно так и поэтому всё работает, но поэтому же любые изменения в размере кода, нарушающие выравнивание массива cfree[NCLIST] - приводят коварным и неуловимым глюкам.
    Последний раз редактировалось Patron; 01.04.2015 в 19:30.

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

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

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

Похожие темы

  1. Ответов: 465
    Последнее: 03.01.2020, 07:15
  2. Linux/Unix Emuls
    от mungo в разделе Эмуляторы
    Ответов: 44
    Последнее: 11.06.2012, 19:45
  3. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27
  4. эмуль под linux/unix, альфа-версия, тестируем!!!
    от boo_boo в разделе Эмуляторы
    Ответов: 33
    Последнее: 25.01.2006, 17:35

Ваши права

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