Няшная / Говнокод #26801 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
/* meta */
typedef struct r_anal_meta_item_t {
	ut64 from;
	ut64 to;
	ut64 size;
	int type;
	int subtype;
	char *str;
	int space;
} RAnalMetaItem;

typedef struct {
	struct r_anal_t *anal;
	int type;
	int rad;
	SdbForeachCallback cb;
	void *user;
	int count;
	struct r_anal_type_function_t *fcn;
} RAnalMetaUserItem;

typedef struct r_anal_range_t {
	ut64 from;
	ut64 to;
	int bits;
} RAnalRange;

#define R_ANAL_UNMASK_TYPE(x) (x&R_ANAL_VAR_TYPE_SIZE_MASK)
#define R_ANAL_UNMASK_SIGN(x) (((x& R_ANAL_VAR_TYPE_SIGN_MASK)>> R_ANAL_VAR_TYPE_SIGN_SHIFT)==R_ANAL_VAR_TYPE_UNSIGNED)?0:1

#define R_ANAL_GET_OFFSET(x,y,z) \
	(x && x->binb.bin && x->binb.get_offset)? \
		x->binb.get_offset (x->binb.bin, y, z): -1
enum {
	R_ANAL_DATA_TYPE_NULL = 0,
	R_ANAL_DATA_TYPE_UNKNOWN = 1,
	R_ANAL_DATA_TYPE_STRING = 2,
	R_ANAL_DATA_TYPE_WIDE_STRING = 3,
	R_ANAL_DATA_TYPE_POINTER = 4,
	R_ANAL_DATA_TYPE_NUMBER = 5,
	R_ANAL_DATA_TYPE_INVALID = 6,
	R_ANAL_DATA_TYPE_HEADER = 7,
	R_ANAL_DATA_TYPE_SEQUENCE = 8,
	R_ANAL_DATA_TYPE_PATTERN = 9,
};

// used from core/anal.c
#define R_ANAL_ADDR_TYPE_EXEC      1
#define R_ANAL_ADDR_TYPE_READ      1 << 1
#define R_ANAL_ADDR_TYPE_WRITE     1 << 2
#define R_ANAL_ADDR_TYPE_FLAG      1 << 3
#define R_ANAL_ADDR_TYPE_FUNC      1 << 4
#define R_ANAL_ADDR_TYPE_HEAP      1 << 5
#define R_ANAL_ADDR_TYPE_STACK     1 << 6
#define R_ANAL_ADDR_TYPE_REG       1 << 7
#define R_ANAL_ADDR_TYPE_PROGRAM   1 << 8
#define R_ANAL_ADDR_TYPE_LIBRARY   1 << 9
#define R_ANAL_ADDR_TYPE_ASCII     1 << 10
#define R_ANAL_ADDR_TYPE_SEQUENCE  1 << 11

#define R_ANAL_ARCHINFO_MIN_OP_SIZE 0
#define R_ANAL_ARCHINFO_MAX_OP_SIZE 1
#define R_ANAL_ARCHINFO_ALIGN 2
#define R_ANAL_ARCHINFO_DATA_ALIGN 4

Как нужно называть идентификаторы.

Источник:
https://github.com/radareorg/radare2/

Запостил: TEH3OPHblu_nemyx TEH3OPHblu_nemyx, (Updated )

Комментарии (81) RSS

      • Царь в кернеле! Ура!!!

        drivers/tty/serial/sunsab.h
        u8	tsar;		/* Time-Slot Assignment Reg. Receive	*/
        
        /* Time Slot Assignment Register Receive (TSAR) */
        #define SAB82532_TSAR_TSNR_MASK		0xfc
        Ответить
    • Красиво
      R_API bool r_anal_set_bits(RAnal *anal, int bits) {
      	switch (bits) {
      	case 8:
      	case 16:
      	case 27:
      	case 32:
      	case 64:
      Ответить
      • https://oeis.org/A246549
        >>> Prime powers p^e where p is a prime and e >= 3 (prime powers without 1, the primes, or the squares of primes).
        >>> 8, 16, 27, 32, 64, 81, 125, 128, 243, 256, 343, 512, 625, ...
        Ответить
  • * Some anal retentivity here: even if both 'struct
     * uwb_{dev,mac}_addr' have the actual byte array in the same offset
     * and I could just pass _addr to hwarc_cmd_dev_addr_mgmt(), I prefer
    
    #define VS6624_DIRECT_ANAL_GAIN_MSB   0x119D /* analog gain for Direct Mode MSB */
    #define VS6624_DIRECT_ANAL_GAIN_LSB   0x119E /* analog gain for Direct Mode LSB */


    Там очень много:
    https://github.com/torvalds/linux/search?q=anal&unscoped_q=anal
    Ответить
    •  	/* Totally anal locking here... */
      	spin_lock(&journal->j_list_lock);


      https://github.com/torvalds/linux/blob/master/fs/jbd2/journal.c

       	fpdis_exit2:
      	wr		%g7, 0, %gsr
      	ldx		[%g6 + TI_XFSR], %fsr
      	rdpr		%tstate, %g3
      	or		%g3, %g4, %g3		! anal...
      	wrpr		%g3, %tstate
      	wr		%g0, FPRS_FEF, %fprs	! clean DU/DL bits
      	retry


      https://github.com/torvalds/linux/blob/master/arch/sparc/kernel/fpu_traps.S

      Похоже, что разработка ядра — нелёгкое дело.
      Ответить
      • Интересно, что у SPARC'а инструкция OR трёхместная: можно указать и регистры обоих аргументов, и регистр назначения. А ещё у него есть инструкция XNOR. Это XOR + NOT ?
        Ответить
        • XOR + NOT — это же тупое равенство, разве нет?
          0 == 0 | 1
          0 == 1 | 0
          1 == 0 | 0
          1 == 1 | 1


          >инструкция трёхместная
          RISC же
          Небольшое число простых инструкций, обилие регистров, трехместные комманды, всё это отличало риски.
          Ответить
          • > XOR + NOT — это же тупое равенство, разве нет?
            Я слышал, железячники вообще любят ко всем операциям букву «N» добавлять. «NAND», «NOR», «XNOR».
            Ответить
            • В ТТЛ базовым элементом является И-НЕ (NAND), а в КМОП (CMOS) базовым элементом является ИЛИ-НЕ (NOR). Все остальные логические элементы (AND, OR, XOR) лепили из нескольких базовых. Отсюда и любовь к букве «N».

              Была ещё ЭСЛ, в которой базовый элемент выдавал сразу два сигнала: ИЛИ (OR) и ИЛИ-НЕ (NOR). Схема была такая, что комплементарный результат можно было получить почти бесплатно.
              Ответить
            • >«NAND», «NOR»
              Так это 2 элемента, кобенируя которые можно собрать все остальные операции.

              Минимально необходимый и достаточный базис. Такой же как двоичная система или тьюринг-полные вещи вроде brainfuck, movfuskator.

              N* они любят поскольку подавая на оба входа один и тот же сигнал получаем инвертор.

              С помощью инвертора из NAND получается AND, а из NOR=>OR.

              А благодаря правилу Де-Моргана из ANDa делается OR и наоборот.

              После чего лепится произвольная логика в КНФ/ДНФ.
              Ответить
              • Хочу язык программирования, где будут только nand и nor. Пишущий на нем имеет шансы неплохо прокачать внимательность
                Ответить
                • Зачем тебе и nor и nand? Любого из них достаточно для реализации любой логики.
                  Ответить
                • Были шутки про какого-то гугловского чела, у которого на калькуляторе только одна кнопка: NAND.
                  Ответить
                  • Надо ещё константу 0 хотя бы. А то над чем операции то делать?

                    Ну или константу с неопределенным значением чтоб веселее было. Тоже должно прокатить.
                    Ответить
                      • >> Jeff Dean's calculator.

                        А промежуточные результаты на листочке бумаги записывать? Если бы у этого калькулятора были хотя бы кнопки MS/MR...
                        Ответить
                          • У стековых микрокалькуляторов была ещё кнопка вращения стека и кнопка обмена двух верхних ячеек стека:
                            https://ru.wikipedia.org/wiki/Электроника_МК-52
                            https://ru.wikipedia.org/wiki/Электроника_МК-61
                            https://ru.wikipedia.org/wiki/Электроника_Б3-34

                            Кружочек — это вращение (обычно нажималась после кнопки «F», потому что отдельной физической кнопки не было), две стрелочки или XY — это обмен двух ячеек стека.

                            Обмен двух верхних ячеек очень часто использовали перед операциями вычитания и деления, поскольку они некоммутативны, а аргументы из стека забирают в одном определённом порядке.

                            У моделей последнего поколения стековых калькуляторов была ещё операция «Bx» — восстановление предыдущего значения верхней ячейки стека. Появился специальный регистр, который перед любыми арифметическими операциями сохранял значение верхней ячейки.
                            Ответить
                            • Кстати, советские стековые микрокалькуляторы, вероятно, были созданы под впечатлением от «Хули Паккард»:
                              https://en.wikipedia.org/wiki/HP-19C/-29C
                              https://en.wikipedia.org/wiki/HP-35
                              https://en.wikipedia.org/wiki/Hewlett-Packard_Voyager_series

                              «HP» вообще дальше всех продвинулся в этом направлении. Мало того, что они выпустили стековые калькуляторы со встроенным принтером, они ещё дошли до графических дисплеев:
                              https://en.wikipedia.org/wiki/HP_48_series

                              Навороченный микрокалькулятор, у которого нет клавиши «равно», зато есть клавиша «PUSH» (у «HP» она называется «ENTER»).

                              Кто-нибудь ещё в мире производил что-то подобное? «Вика» упоминает только «Комодор», «Синклер» и какие-то малоизвестные компании (судя по описанию, синклеровский стековый калькулятор — вообще тупая фигня).
                              Ответить
                • Да что уж nand. Вон была игрушка от zachtronics где надо было рисовать полоски кремния с p и n проводимостями.
                  Ответить
                  • И что этой игрушкой можно было моделировать? Насколько адекватная в ней была физическая модель?
                    Ответить
                    • Сходи поиграй, если флеш еще не удалил. KOHCTPYKTOP называется.

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

                      Но в последних заданиях на основе этого довольно сложные микросхемы получаются.

                      З.Ы. Раз nand можно нарисовать - значит можно все.
                      Ответить
                      • Спасибо.

                        Посмотрел демку. Ничего не понял. Как они «N» на «P» переключили?

                        P.S. Уже понял: Shift.
                        Ответить
                        • Ну да, управление там ебанутое немного из-за флеша.
                          Ответить
                      • Неплохо для игры, но довольно упрощённая питушня. В реальных схемах ещё ставят стабилизаторы (цепочки, нарушающие равновесие, заставляющие транзисторы открываться или закрываться полностью), потому что при последовательном соединении элементов без стабилизаторов напряжение уплывёт. Ну и ещё тут все схемы с «открытым выходом» (т. е. при логическом нуле на выходе фактически выход оторван), что тоже ограничивает их применение.
                        Ответить
                        • > открытым выходом

                          Ну я собственно про это "отсутствие GND" и писал выше. Но ради реализма пришлось бы или подтяжки лепить (nMOS) или вообще по 2 раза всё рисовать (CMOS). А там и так боль в последних задачках. Особенно где про память с произвольным доступом.

                          З.Ы. Но вообще более низкоуровневой игры я ещё не встречал 🙂
                          Ответить
                          • Как я понял, там можно лепить только транзисторы с изолированным затвором и встроенным каналом (поскольку полоска легированного полупроводника не прерывается), а вот с индуцированным каналом (когда канал «исток — сток» разорван) нельзя. И pn-переходы нельзя, и барьеры Шоттки нельзя (у них контакт «металл — полупроводник» почему-то получается безбарьерным), и многослойные девайсы нельзя.
                            Ответить
            • >XNOR
              Вот XOR ральзовывать сложнее всего, поскольку карта Карно неудобная:
              0 1
              1 0

              Она никак не минимизируется. И нужно очень много элементов:
              a ⊕ b = (not (a) and b) or (a and not(b))

              Потому его выгодно хуйнуть отдельным элементом.
              Тем более что это готовый полусумматор.
              Ответить
              • Сразу видно, что ты дискретный математик из рашки.
                Ответить
              • Перепишу:
                a ⊕ b = (not (a) nand b) nand (a nand not(b))

                Для реализации в TTL нужно взять 5 базовых NAND-элементов. Кажется, так их и делают, потому что с отдельной реализацией много пердолинга, чтобы совпали уровни сигнала и прочие электрические характеристики.
                Ответить
                • Есть хак из четырёх элементов:

                  c = a nand b
                  res = (a nand c) nand (b nand c)
                  Ответить
                  • И правда, работает.

                    c = 0, только если a = b = 1.

                    a nand c = 0, только если a = 1 И c = 1. Последнее возможно, только если b = 0.
                    b nand c = 0, только если b = 1 И c = 1. Последнее возможно, только если a = 0.

                    Итого: при a≠b хотя бы одна из скобок равна нулю, следовательно, res = 1.
                    При a=b обе скобки будут равны 1, следовательно, res = 0.
                    Ответить
                    • > и правда работает

                      Ну дык. Так можно было собрать xor из одной К155ЛА3, я даже пробовал.
                      Ответить
                • > TTL

                  А в CMOS вроде прям как базовый элемент делают. Там нету особо проблем с этим, любую таблицу истинности пильнуть можно, почти как на реле.
                  Ответить
                • А в FPGA вообще тупо мультиплексором из таблицы истинности ответ достают. Поэтому там любая функция до 4 аргументов одинаково реализуется (на некоторых и до 6).
                  Ответить
                    • В этой модели даже сложение не захардкожено, лол. Просто табличка разваливается на 2 - для выхода и для переноса.

                      Получается что одна ячейка может в любую функцию от четырёх бит или в джве любых функции от трёх.
                      Ответить
      • >разработка ядра — нелёгкое дело

        Забавно что у сишников самый ядрённый нейминг.
        Ответить
  • arch/x86/mm/extable.c
    		extern u32 pnp_bios_is_utter_crap;
    		pnp_bios_is_utter_crap = 1;
    		printk(KERN_CRIT "PNPBIOS fault.. attempting recovery.\n");
    Ответить
    • >pnp_bios_is_utter_crap

      Вот какие примеры надо Мартину в «Чистый код».
      Прочитал переменную и сразу всё понятно.
      Ответить
  • include/linux/mfd/tps65910.h
    #define TPS65910_SLEEP_SET_RES_OFF			0x44
    #define TPS65910_EN1_LDO_ASS				0x45
    #define TPS65910_EN1_SMPS_ASS				0x46
    #define TPS65910_EN2_LDO_ASS				0x47
    #define TPS65910_EN2_SMPS_ASS				0x48
    #define TPS65910_EN3_LDO_ASS				0x49
    Ответить
  • tools/perf/tests/attr.c
    #define __WRITE_ASS(str, fmt, data)					\
    		return -1;						\
    	}								\
    									\
    } while (0)
    
    #define WRITE_ASS(field, fmt) __WRITE_ASS(field, fmt, attr->field)

    enum qeth_ip_ass_cmds {
    	IPA_CMD_ASS_START	= 0x0001,
    	IPA_CMD_ASS_STOP	= 0x0002,
    	IPA_CMD_ASS_CONFIGURE	= 0x0003,
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8