1. Си / Говнокод #25171

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    #include <stdio.h>
    #include <inttypes.h>
    #include <stddef.h>
    
    void printuint64(const uint64_t state);
    uint64_t game_of_life8x8(const uint64_t old);
    uint8_t getbit(uint64_t in, uint8_t y, uint8_t x);
    
    uint8_t getbit(uint64_t in, uint8_t y, uint8_t x)
    {
      return !!((in) & (1ULL << ((y&0b111) + (x&0b111)*8)) );
    }
    
    uint64_t setbit(uint8_t y, uint8_t x, uint8_t bit)
    {
      if (bit)
      {
        return 1ULL << ((y&0b111) + (x&0b111)*8);
      }
      return 0;
    }
    
    uint64_t game_of_life8x8(const uint64_t old)
    {
      uint64_t new_state = 0;
      #define GETBIT(y,x,val) getbit(val, y, x)
      #define SETBIT(y,x,bit) setbit(y,x,bit)
      
      #define SUMAROUND(y,x,val) ( \
        GETBIT(y+1,x,val) + GETBIT(y-1,x,val) \
      + GETBIT(y,x+1,val) + GETBIT(y,x-1,val) \
      + GETBIT(y+1,x+1,val) + GETBIT(y+1,x-1,val) \
      + GETBIT(y-1,x+1,val) + GETBIT(y-1,x-1,val) \
      )
    
      #define CELLSTATE(y,x,val) \
      (GETBIT(y,x,old) == 1 ? \
        ( ((SUMAROUND(y,x,val) == 2 ) || ( SUMAROUND(y,x,val) == 3 )) ? 1 : 0) \
        : \
        ( ( SUMAROUND(y,x,val) == 3 ) ? 1 : 0 ) \
      )
    
      #define SETCELL_SH(y,x,val) SETBIT(y,x,CELLSTATE(y,x,val))
    
      #define FILL_LINE(y) \
        SETCELL_SH(y,7,old) | SETCELL_SH(y,6,old) | SETCELL_SH(y,5,old) | \
        SETCELL_SH(y,4,old) | SETCELL_SH(y,3,old) | SETCELL_SH(y,2,old) | \
        SETCELL_SH(y,1,old) | SETCELL_SH(y,0,old)
    
      new_state = FILL_LINE(7) | FILL_LINE(6) | FILL_LINE(5)
      |  FILL_LINE(4) | FILL_LINE(3) | FILL_LINE(2)
      |  FILL_LINE(1) | FILL_LINE(0);
    
      return new_state;
    }
    
    void printuint64(const uint64_t state)
    {
      for (size_t i = 7; i != SIZE_MAX; i--)
      {
        for (size_t j = 7; j != SIZE_MAX; j--)
        {
          printf("%u", !!((state >> (j+i*8)) & 1) );
        }
        printf("\n");
      }
    }
    
    int main(void)
    {
      // Glider
      uint64_t state =
      (( 0b01000000ULL ) << 8*7 ) |
      (( 0b00100000ULL ) << 8*6 ) |
      (( 0b11100000ULL ) << 8*5 ) |
      (( 0b00000000ULL ) << 8*4 ) |
      (( 0b00000000ULL ) << 8*3 ) |
      (( 0b00000000ULL ) << 8*2 ) |
      (( 0b00000000ULL ) << 8*1 ) |
      (( 0b00000000ULL ) << 8*0 );
    
      
      for (size_t i = 0; i < 50; i++)
      {
        printuint64(state);
        state = game_of_life8x8(state);
        printf("\n");
      }
      return 0;
    }

    Conway's game of life внутри uint64_t (8 на 8) с периодическими граничными условиями.

    Запостил: j123123, 09 Декабря 2018

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

    • На этом языке для калькуляторов ещё кто-то программирует?
      Ответить
    • <?php
      
      function GETBIT($y, $x, $in)
      {
        return intval(gmp_testbit($in, ($y&0b111) + ($x&0b111)*8));
      }
      
      function SETBIT($y, $x, $bit)
      {
        $tmp = gmp_init(0);
        gmp_setbit($tmp, ($y&0b111) + ($x&0b111)*8, $bit);
        return $tmp;
      }
      
      function SUMAROUND($y,$x,$val) {
        return GETBIT($y+1,  $x,$val) + GETBIT($y-1,$x,  $val) 
             + GETBIT($y,  $x+1,$val) + GETBIT($y,  $x-1,$val) 
             + GETBIT($y+1,$x+1,$val) + GETBIT($y+1,$x-1,$val) 
             + GETBIT($y-1,$x+1,$val) + GETBIT($y-1,$x-1,$val);
      }
      
      function game_of_life8x8($old) {
        $CELLSTATE = function($y,$x,$val) use($old) {
        return GETBIT($y,$x,$old) ?
          (SUMAROUND($y,$x,$val) == 2 ) || ( SUMAROUND($y,$x,$val) == 3 )
          : 
          SUMAROUND($y,$x,$val) == 3;
        };
        $SETCELL_SH = function($y,$x,$val) use($CELLSTATE) {
        return SETBIT($y,$x,$CELLSTATE($y,$x,$val));
        };
        $FILL_LINE = function($y) use($SETCELL_SH, $old) {
        return $SETCELL_SH($y,7,$old) | $SETCELL_SH($y,6,$old) | $SETCELL_SH($y,5,$old) | 
               $SETCELL_SH($y,4,$old) | $SETCELL_SH($y,3,$old) | $SETCELL_SH($y,2,$old) | 
               $SETCELL_SH($y,1,$old) | $SETCELL_SH($y,0,$old);
        };
        return $FILL_LINE(7) | $FILL_LINE(6) | $FILL_LINE(5)
             | $FILL_LINE(4) | $FILL_LINE(3) | $FILL_LINE(2)
             | $FILL_LINE(1) | $FILL_LINE(0);
      }
      
      function printuint64($state)
      {
        for ($i = 7; $i != -1; $i--) {
          for ($j = 7; $j != -1; $j--)
            print(intval(gmp_testbit($state, $j+$i*8)));
          print("\n");
        }
      }
      
      // Glider
      $state = gmp_init(
      "01000000" .
      "00100000" .
      "11100000" .
      "00000000" .
      "00000000" .
      "00000000" .
      "00000000" .
      "00000000",
      2);
        
      for ($i = 0; $i < 50; $i++) {
        printuint64($state);
        $state = game_of_life8x8($state);
        print("\n");
      }


      https://ideone.com/Vr6cgR
      Ответить
      • Лучше пусть bormand перепишет на Verilog с выводом на осциллограф
        Ответить
        • > Verilog
          Анскилльно. Надо на операционные усилители сразу переводить.
          Ответить
          • Все эти ваши верилоги это просто транзисторы. Superhackkiller1997 берет тразнисторы, и делает что ему надо без сраных прокладок
            Ответить
            • Транзисторы это для анскиллябр, настоящие цари сделают из реле https://3dnews.ru/602331
              http://www.nablaman.com/relay/
              Ответить
              • Кстати, напомнило: в позднем СССР продавались УМК –— учебные микропроцессорные комплекты. Они были не на реле, а уже на микросхемах, однако, к каждому регистру были припаяны светодиоды и по миганию можно было отслеживать изменение состояния регистров во время выполнения программы.

                В статье даже есть фотка УМК:
                http://www.computer-museum.ru/histussr/umk_sorucom_2011.htm
                Ответить
                • вот это царскийц дебаг
                  Ответить
                  • Про регистры я погорячился: «Индикаторы включали шестнадцать светодиодов для индикации двоичного кода адреса на системной шине адреса; восемь светодиодов для индикации двоичного кода данных на системной шине данных; восемь светодиодов для индикации слова состояния микропроцессора». И это помимо цифрового дисплея.

                    Аппаратная кнопка «Шаг» для пошагового исполнения.

                    А ещё слот расширения, в который вставляется макетная плата, на которой можно собрать какое-нибудь внешнее устройство.
                    Ответить
                    • >>Аппаратная кнопка «Шаг» для пошагового исполнения.
                      debug.com
                      Ответить
                      • Про макетную плату: в неё была впаяна микросхема К580ВВ55А (аналог i8255), реализующая три внешних параллельных 8-разрядных порта. Работа с ней была хитрой: программа должна была сначала в один порт послать номер аппаратного порта, с которым дальше будет работать, а потом уже писа́ть в другой порт или читать из него.

                        Странно, что она могла мультиплексировать три порта. Почему не четыре? Ножек у DIP-корпуса не хватило?
                        Ответить
                        • а обычный i8255 (это же LPT?) так же работал?
                          Ответить
                          • У IBM PC порт LPT имел три регистра: регистр данных, регистр состояния и регистр управления. Доступ к этим регистрам осуществлялся по разным номерам портов пространства I/O: базовый порт –— это данные, базовый + 1 —– это статус, базовый + 2 —— это управление.

                            *****

                            Теперь посмотрим, как работает 8255. Режим работы зависит от сигналов на выводах A0, A1 (выбор канала) и RD (разрешение чтения), WR (разрешение записи), CS (перевод в высокоомное состояние).

                            У 8086 размер шины адреса больше 8 бит, поэтому порты тратили, не задумываясь. Можно припаять A0, A1 к младшим разрядам шины адреса, проверять базовый адрес устройства — в последующих разрядах. Тогда получится, что запись в порт base+1 приведёт к записи во второй канал, запись в порт base+2 приведёт к записи в третий канал, а запись в порт base+3 приведёт к записи в регистр управления.

                            Как реально выглядела схема LPT-порта, я не знаю, надо гуглить.

                            *****

                            У 8080, хотя и шина адреса была 16-разрядной, опкоды инструкций IN и OUT допускали только один байт адреса порта, поэтому с I/O можно было использовать только 8 разрядов адреса. Итого 256 портов, больше добавить нельзя.

                            Опять же, как реально была припаяна эта микросхема на компах с 8080, придётся гуглить...
                            Ответить
                            • > 256 портов
                              Дык никто не заставлял юзать именно in/out. Можно и как к обычной памяти через lda/sta. Отдельной линии не было, т.е. всё как MMIO.
                              Ответить
                              • И всё это без защищённого режима, никаких привилегий, никакой дополнительной порнографии...
                                Ответить
                      • > debug.com
                        Не сравнивай труъ аппаратный отладчик с этим софтовым убожеством.
                        Ответить
                        • Мы нашли безотказный способ призыва Борманда!
                          Ответить
                        • Как работал debug.com: пхал везде INT 3 (0xCC) или юзал дебаг регистры цпу?

                          Иными словами были ли брякпоинты хардварными або софтверными?

                          Афайк регистровый дебаг попоявился в первых пнях или около тово, и был сначала вообще чуть ли не MSR
                          Ответить
                • Я под это говно (УМПК-80) лабу студенту одному на ассемблере делал за деньги. Правда не на железе, а в говносимуляторе, написанном на дельфи мудаками http://cifra.studentmiv.ru/simulyator-umpk-80/
                  В том говносимуляторе одна инструкция хуево реализована. Инструкция DAD которая складывает регистровые пары.
                  http://demin.ws/projects/radio86/info/kr580/i8080.html


                  DAD H 29 Сложить HL с HL (удвоение HL)

                  Если складывать регистровую пару HL с самой собой, то в говноэмуляторе складывалась сначала старший регистр, а потом младший (хотя должно быть наоборот). Т.е. "флаг переноса" из младшего регистра в старший пробрасывается после того, как старший просуммировался. Или может я что-то путаю, это вообще хер знает когда было
                  Ответить
                  • Начал читать про этот процессор.

                    У x86 стек растёт вниз, а у 8080 стек растёт вверх?

                    Косвенная адресация только через [HL], косвенный переход только на [HL], никакого байта mod R/M: все операции с фиксированными парами данных.

                    RST 0... RST 7 — это аналог INT, чтобы вызывать функции ОС?
                    Ответить
                    • > У x86 стек растёт вниз, а у 8080 стек растёт вверх?

                      Оно там так же растет.
                      http://emuverse.ru/wiki/Intel_8080/Коды_команд#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D1.81.D0.BE_.D1.81.D1.82.D0.B5.D0.BA.D0.BE.D0.BC

                      16 байтный регистр SP служит указателем на вершину стека. Помещение 16 байтного значения в стек происходит следующим образом: 1. SP декрементируется; 2. старший байт заносится в ячейку памяти по адресу на который указывает SP; 3. SP декрементируется; 4. младший байт заносится в ячейку памяти по адресу SP.

                      Т.е. при пуше там стекпоинтер уменьшается, аналогичное поведение и в x86 https://c9x.me/x86/html/file_module_x86_id_269.html
                      Decrements the stack pointer and then stores the source operand on the top of the stack.

                      > RST 0... RST 7 — это аналог INT, чтобы вызывать функции ОС?

                      Это программное прерывание, да. Только никакой ОС у тебя может и не быть. Можно какое-нибудь говно из биоса дергать (если он есть)
                      Ответить
                      • Если бы стек рос вверх, то акака на переполнение буфера в стеке не канала, томушо адрес разврата лежал бы перед буфером (ну, кроме случая, когда буфер заполняется с конца)? Почему тогда для x86 выбрали именно стек растущий вниз?

                        А вообще, я за отдельный стек для данных.
                        Ответить
                        • В "РНР" нет стеков.
                          Ответить
                          • Если в "PHP" нет стеков, то что тут переполняется?
                            function a() { a(); } a();

                            https://stackoverflow.com/a/1782905

                            Ответить
                        • Когда выбирали куда расти будет стек о переполнении буфера и буль-буль-цип-цип-канарейка никто и не думал
                          Ответить
                          • У них было лет 30-40 штоб исправиться.
                            Ответить
                            • и сломать нахуй соместимость?
                              Ответить
                              • В погоне за обратной совместимостью x86 оброс кусками засохшего говна. Если понадобится юзать старый софт есть имитаторы.
                                Ответить
                                • Жалко, что не взлетели IAPX432 и Itanium. Сейчас так же с недоверием смотрят на «Эльбрус», хотя к компам на «Эльбрусе» уже прилагают эмулятор x86.

                                  Хотя с другой стороны, «длинный» режим amd64 ломает возможность запускать программы реального режима, но пользователи это терпят.
                                  Ответить
                                  • Длиный да, но ничто не мешает перебутаца в реальный
                                    Ответить
                                    • Да, благодаря диспетчеру загрузки можно использовать несколько ОС: и для длинного режима, и для короткого.

                                      На других процессорах возможна только эмуляция.
                                      Ответить
                                      • Что такое "диспетчер загрузки"?
                                        Boot manager?
                                        Ответить
                                • Офтопик. Жалко, что мы пропустили эпоху расцвета 8080 и 6502, а то можно было бы попробовать и под них написа́ть программы в ASCII-кодах.
                                  Ответить
                                  • Мне тоже жаль что я не застал времена малых компов.

                                    это же было так клево: покупаешь чип, припаиваешь его на шину, учишь его порты и "API" (незнаю как правильно сказать), пишешь на асме софт для работы с ним (или драйвер если вдруг ОС их имеет) и юзаешь

                                    Вот это я называю программирование. А не смузиёбство с JS
                                    Ответить
                                    • Кокококогда на всех кокококомпухтерах была шина ISA, энтузиасты травили хлорным железом или вырезали резаком карточки (правда, мало у кого дело доходило дальше изготовления диагностической карточки).

                                      Для новых интерфейсов изготавливать свои девайсы уже труднее.
                                      Ответить
                                      • пост карты, да.

                                        на PCI такое уже не запилишь, потому что там протокол сложный: pnp, конфигурационные регистры, прырываня по уровню (а то и вовсе msi). А у ISA (кстати, она тогда так не называлась) -- простой.

                                        зы: я с компортом так игрался, лампочками мигал
                                        там омжно было явно уставливать 1 и 0.

                                        в USB так хер поиграешься конечно
                                        Ответить
                                        • >> кстати, она тогда так не называлась

                                          Да, была длинная, называлась AT (у неё два «гребешка» контактов разделялись так называемым ключом), и укороченная, называлась XT (без короткой части, т. е. обрезана на уровне ключа).

                                          XT-карта могла пропускать 8 битов данных за раз, AT-карта — 16, если я ничего не путаю.

                                          XT-карту можно было пихать в AT-слот (наоборот нельзя было). Существовали «поддельные» под AT видеокарты, у которых группа контактов за ключом не была разведена.
                                          Ответить
                                          • Первая вообще никак не называлась:)

                                            Просто в AT ее расширили до 16 бит (до этого было 8).
                                            Были так же попытки сделать 32 битную (EISA) с полуручным PnP, но всем на нее пофиг.

                                            16ти битные карты могли, соответственно, писать/читать сразу 2 байта и вероятно адресоваться в 2^16 тоже
                                            Ответить
                                            • EISA я вживую не видел. Видел VLB = VESA Local Bus.

                                              Существовали ещё машины IBM PS/2 с собственной шиной MCA, которая оказалась тупиковой.
                                              Ответить
                                              • Да, я помню. Там IBM охуел от того что все стали клепать клоны и попытался сделать проприетарную шину и сертифицировать на нее чуваков

                                                Все послали его на хуй, и сделали PCI.

                                                зы: на VLB были видяхи. Потом они перекочевали на PCI, затем на AGP (который шел прямо в северный мсот (он же мемори хаб)) ну а потом PCI-Express
                                                Ответить
                                            • >> вероятно адресоваться в 2^16 тоже

                                              С адресацией тоже интересно. Некоторые карты не проверяли несколько старших разрядов адреса, поэтому были доступны ещё по нескольким адресам (т. е. адрес считался по модулю 2 в степени N).

                                              12 младших разрядов проверяли все, а дальше как повезёт. Можно было прибавить к адресу порта 400H и попробовать по другому адресу обратиться к устройству.
                                              Ответить
                                              • Многие устройства так делали: зачем разводить все дорожки, когда хватит нескольких?

                                                В итоге они тригеррились на более чем один адрес.
                                                Самое известное такое устройство память. Заворот сигмента, Gate A20
                                                Ответить
                                                • Какой наркоман придумал переключать Gate A20 для использования HMA контроллером клавиатуры?
                                                  Ответить
                                                  • Где был свободный провод туда и въебали.
                                                    Ответить
                                                    • Кстати, в упомянутом уже сегодня «Радио-86РК» было две микросхемы КР580ВВ55А (аналог i8255). Только вторая из них использовалась для внешнего параллельного порта (a la LPT), а к первой была присобачена клавиатура, магнитофон и ещё какая-то хрень. Въёбывали всё подряд, пока оставались свободные выводы у ВВ55.

                                                      Ладно, это самоделка. Но IBM PC вроде позиционировалась как более серьёзная техника.
                                                      Ответить
                                                      • Во-первых PC позиционировался как домашний микрокпомтютер.

                                                        Во-вторых что им было делать когда ВДРУГ ВЫСТРЕЛЕЛО?
                                                        Это как с грассхопером для PHP от FB.

                                                        Сделал робота из гавна и палочек, а он начал продаваться.
                                                        Изволь теперь делать пожароупругие палочки и свинцовое говно

                                                        Удивительно что контролер клавы не на LPT.

                                                        Кстати, всю мелочь типа com, контролера 8042 и пр в какой-то момент загнали в общий чип, и посадили за южный мост.. как он назывался?
                                                        Super IO кажется?

                                                        Его по LPC цепляли (тоже кажется ребрендинг исы)
                                                        Ответить
                                                        • Конч-конч.
                                                          Ответить
                                                          • KitKat увидел слово "PHP".

                                                            Держи: "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP", "PHP".
                                                            Ответить
                                                            • Кстати, я так и не понял, о каком грассхопере речь. Этим словом называется куча ПО, никак не связанного друг с другом.
                                                              Ответить
                                                              • Потому что он HipHop , а я (как уже было сегодня сказано) далбайоб и думал что он грассхопер

                                                                Черт, надо завязывать с дезоморфином. Совсем мозги ни к черту
                                                                Ответить
                                                        • Контроллеры COM, LPT, IDE, FDD долгое время выпускали в виде отдельной платы, втыкаемой в разъём ISA. Называли такое устройство мультикартой.

                                                          Только на Пентиумах они стали штатно устанавливаться в материнскую плату, а половина материнских плат под 80486 была без встроенных COM, LPT, IDE, FDD.
                                                          Ответить
                                                          • В мультикарту встаривали дополнительное оборудование

                                                            мне кажется что ты что-то путаеш потмоу что даже первый PC имел com, lpt и FDD (как бы он блядь грузился тогда).

                                                            там же даже в BDA есть записи про колво дисководов

                                                            зы: у мну была мультикарта с UARTом потому что он был 16550A, а на борту у меня был хуевый и V36 (або v.34?) на нем было не запустить модему, бо буфер махонький и скорость не может

                                                            ззы: хуевый е 16450
                                                            Ответить
                                                            • Нет. Мультикарту могу сфотографировать и выложить, она у меня даже рабочая есть.

                                                              А материнки для 80386 и 80486, которые я держал в руках, все были без COM, без LPT, без FDD, без IDE, хотя в BIOS поддержка этого добра была. На них только клава и спикер были.
                                                              Ответить
                                                              • Так может они были сугубо на борту, а наружу нужен был выкидыш? Так до сих пор делают: на мамке разъем, а от него шлеф

                                                                хтя може ты и прав
                                                                тут вот я их не вижу
                                                                http://ru.pc-history.com/wp-content/uploads/m326-v52.jpg
                                                                Ответить
                                                                • У меня была примерно такая, только на сисе и первый ISA слот был 8-битным:

                                                                  http://www.elhvb.com/webhq/models/486vlb3/m912v14p.jpg

                                                                  Выводы были только под кнопки Turbo/Reset, под светодиоды и под спикер. Был разъём для клавиатуры. Всё остальное — на мультикарте.
                                                                  Ответить
                                                                  • димы и сокет 1 вижу я
                                                                    это первый пнь?

                                                                    мне казалось что димы появлись када шына данных стала 64, тоесть это пень

                                                                    симы надо было ставить попа рно потому что они 32
                                                                    Ответить
                                                                    • Нет, это симы: 30-контактные и 72-контактные.

                                                                      Димы выглядели немножко по-другому.
                                                                      Ответить
                                                                      • а, ок, тогнда может быть и четверко (тройки вроде впаивали)

                                                                        а, ну да, димы уже имели дорожки с двух сторон
                                                                        а симы с одной, и потому я всегда их ломал:)(
                                                                        Ответить
                                                                        • 72-контактные симы ещё были двух типов: EDO и FPM.

                                                                          Не все материнки поддерживали EDO.
                                                                          Ответить
                                                                          • Я помню всю эту свистопляску: там страница автоматически не закрывалась итд. Ей настала пизда когда пришла синхронная память SDRAM.
                                                                            Ответить
                                                                            • Про FPM: «Увеличение быстродействия по сравнению с обычной (PM RAM) достигается следующим образом: в случае, когда последовательно выбираемые элементы расположены на одной странице (строке), полный адрес (строка + столбец) подается только один раз для выборки первой ячейки строки. Для доступа к другим ячейкам той же страницы используется только адрес столбца. В классической DRAM памяти приходилось каждый раз выдавать полный адрес (строка + столбец)».

                                                                              Представляешь себе царей, которые выравнивали данные, так чтобы данные для каждой итерации цикла помещались в одном столбце?

                                                                              Кстати, в каком-то говнокоде матрицы обходили хитрым способом именно с учётом строк и столбцов оперативки.
                                                                              Ответить
                                                                              • >>Представляешь себе царей
                                                                                представляю: https://www.ozon.ru/context/detail/id/1418882/

                                                                                Он там еще больше упарывался: и чтобы в один ряд влезло, и знал как контроллер памяти превращает линейный адрес в адрес колонки, ряда, канала итд
                                                                                Ответить
                                                                              • Кстати, если хочешь углубиться в вопросы памяти (сенс амплифаерс, ранки, вот это всё) то советую
                                                                                https://www.youtube.com/watch?v=ZLCy3pG7Rc0

                                                                                Вообще очень классный чел, у него целый курс про CPU, микроархитектуру и про
                                                                                Ответить
                                                                        • Кстати, в правом нижнем углу куча одинаковых микросхем — это кэш. Причём он не впаянный, а съёмный!
                                                                          Ответить
                                                                          • кеш долго жил на метеринке (Причем там было много уровней его) пока целиком весь не уехал в CPU
                                                                            Ответить
                                                                            • На материнке обычно был один уровень. Сначала появились процессоры со встроенным кэшем, тогда кэш материнки стал L2. Потом появились процессоры с двумя уровнями встроенного кэша, тогда кэш материнки стал L3.

                                                                              На материнке было не больше одного уровня. Больше уровней вне процессора делать было бессмысленно.
                                                                              Ответить
                                                                • На твоей фотке типичная трёшка с впаянным основным процессором и с гнездом для установки плавающего питуха.

                                                                  В левом верхнем углу HT6542 — контроллер клавиатуры (аналог 6042/8042). Он тогда ещё был отдельным. На четвёрках его уже с чем-то совместили, запихнув в квадратную микросхему.
                                                                  Ответить
                                                                • Стало немножко грустно оттого, что 80386 были без вентилятора. Шум создавался только блоком питания.
                                                                  Ответить
                                                  • а какой галитозник придумал завязаться на заворот сегмента??
                                                    Ответить
                                        • > в USB так хер поиграешься конечно
                                          USB Full Speed сейчас даже на копеечных армах есть, так что жить можно.

                                          Но кроме USB FS ничего доступного в компах не осталось :(
                                          Ответить
                                          • Я не про армы, а про возможность из говна, палочек, резисторов, транзисторов и лампочек собрать что-то смешное и подключить к компу
                                            Ответить
                                            • > из говна, палочек, резисторов
                                              Напомнило, как я собирал 1-wire адаптер для COM порта из нескольких резисторов и диодов. Даже читало домофонные ключи :)

                                              > я не про армы
                                              Ну зацепишь ARM или FTDI какой-нибудь как преобразователь в параллельный порт. А дальше играйся с чем хочешь.
                                              Ответить
                                              • >>преобразователь
                                                Ох, ну я так-то могу и USB--UART--MAX232 втыкнуть

                                                Спич изначально был о том что во времена шины ISA все было просто и понятно.
                                                А теперь у шин (кроме рази что I2C/SMB) овердохуя сложные проты. USB и PCI-Express это настоящие сети с пакетами-хуетами и мрашрутизацией, там резистором и диодом не ограничишься
                                                Ответить
                                                • Собери USB девайс из говна и палок.

                                                  Завладеешь USB контроллером и будешь кидать пакеты напрямую чтобы дескрипторы и прочую хуйню не пилить (с xHCI не прокатит, он сделает твоей железке set address и сфейлится).

                                                  На USB LS всего 1.5МГц. Берёшь генератор с кварцем на 6МГц, ждёшь стартовый импульс, пропускаешь пару тиков для верности и загоняешь xnor между текущим и предыдущим стейтом в сдвиговый регистр каждые 4 тика (NRZI).

                                                  Остаётся выкинуть наполнитель после каждых 5 единичек подряд (отводы от сдвигового регистра, and, ну ты понял).

                                                  Или можно просто усилить сигнал да зажигать им светодиод. Чем чаще пакеты - тем сильнее горит.
                                                  Ответить
                                                  • светодиод могу зажэч и от обычного питания usb
                                                    сколько там по умолчаиню, если не попросить? 100ma?
                                                    Ответить
                                                  • RFC 3251. Electricity over IP. B. Rajagopalan, Tellium, Inc. 1 April 2002.
                                                    Ответить
                                            • Ну а если на x86 не завязываться, то можно же взять какой-нибудь raspberry pi. Чем не комп с кучей GPIO?
                                              Ответить
                                          • Борман, ты понимаешь в чем фишка NVMe?
                                            В смысле чтотакого медленного было в SATA что от нее решили отказаться?

                                            AHC SATA типа был в чипсете, а NVMe сидит пряимо на pci-e и с CPU напрямую говорит?

                                            Неужели SSD современные быстрее сата III?
                                            Ответить
                                            • > быстрее сата III
                                              Быстрее. Раза в три.
                                              Ответить
                                              • ты хочешь сказать что мой няшненький MLC (не TLC!) 3DNAND Samsung Evo 860 Pro упирается в 6 Гб?

                                                Вотблядь!

                                                Ладно, а вот тогда смотри: у меня PCI-Express 3 на мамке, чтобы всерьез превысить этот порог надо x16 (потому что x8 он дает 7Гб)

                                                Мне кажется что я невидал NVMe больше чем x8.

                                                Выходит что мне он не даст буста, только если я не возьму мамь (и проц) с поддержкой PCI-Express 4 как минимум?
                                                Ответить
                                                • Ну посмотри в магазине. Все саташные ssd упираются в 500МБ/с. А nvme есть и 3ГБ/с. PCI-E 3.0 4х обычно, а там вроде по 8 гигабит на линию (а у сата 3 всего 6).

                                                  З.Ы. Ты видимо байты с битами где-то попутал.
                                                  Ответить
                                                  • бля, я долбойб и не умею в арифметику

                                                    PCI-E 3.0 x4 это 3.94Гбайт. А сата это 6Гбит, тоесть да, около 500-600.

                                                    Спасибо
                                                    Ответить
                                • >> засохшего говна. Е
                                  так

                                  нахуевертили что-то такое с размером команды от 1 до 16 байт, настолько сложный ISA что пришлось делать RISC

                                  Но это же бизнес: один раз персил --на всю жизнь персил

                                  Я думаю что и MS и даже Linux с удовольствием выкинули быполовину старого кода, но увы: беквард кампатибилити
                                  Ответить
                    • > только через [HL]
                      Ещё были load/store через [BC] и [DE].
                      Ответить
              • >> http://www.nablaman.com/relay/

                В правом верхнем углу блинкерное табло, как на вокзале?
                Ответить
            • https://youtu.be/mglYNBcLKlM
              Ответить
        • > на verilog
          Ну кстати можно попробовать. Правда на циклоняшке всего 22к ячеек, сильно большое поле не получится.
          Ответить
          • Написал поле 80х60 пикселей.

            Бедный оптимизатор пердолился с ним почти 5 минут... Получилось по 4 ячейки на пиксель - одна детектит 2 соседа, вторая детектит 3 соседа, третья хранит и обновляет значение, четвёртая встроена в цепочку для загрузки/просмотра. Меньше походу никак.

            Теоретический пирфоманс 1.5Тпикс/сек (300МГц * 4800пикс) выглядит неплохо.
            Ответить
            • А картинка с выводом в осциллограф будет? Или через светодиодную матрицу? Или экранчик от мобилки?
              Ответить
              • Будет. На кетайский TFT дисплейчик.

                С ним просто накладка возникла - поле сожрало почти все ячейки и NIOS не влез. Придётся пилить железную стейтмашину для инициализации.
                Ответить
    • Переведи на "бесконечный" размер сетки.
      Ответить
      • Для этого нужно нумеровать ячейки в таком порядке:
        ─┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
        ┌┘││││││││││││││
        └─┘│││││││││││││
        ┌──┘││││││││││││
        └───┘│││││││││││
        ┌────┘││││││││││
        └─────┘│││││││││
        ┌──────┘││││││││
        └───────┘│││││││
        ┌────────┘││││││
        └─────────┘│││││
        ┌──────────┘││││
        └───────────┘│││
        ┌────────────┘││
        └─────────────┘│
        ───────────────┘

        ABIJYZw
        DCHKXav
        EFGLXbu
        PONMVct
        QRSTUds
        jihgfer
        klmnopq

        Или в таком:
        *↙↙↙↙↙
        ↙↙↙↙↙
        ↙↙↙↙
        ↙↙↙
        ↙↙
        ↙

        ABDGKPVck
        CEHLQWdl
        FIMRXem
        JNSYfn
        OTZgo
        Uahp
        biq
        jr
        s

        Осталось придумать эффективную формулу для такой нумерации.
        Ответить
        • Или даже вот так:
          *-* *-* *-* *-* *-* * * * * * *
           / / / / / / / / /
          * * * * * * * * * * * * * * * *
          |/ / / / / / / /
          * * * * * * * * * * * * * * * *
           / / / / / / /
          * * * * * * * * * * * * * * * *
          |/ / / / / /
          * * * * * * * * * * * * * * * *
           / / / / /
          * * * * * * * * * * * * * * * *
          |/ / / /
          * * * * * * * * * * * * * * * *
           / / /
          * * * * * * * * * * * * * * * *
          |/ /
          * * * * * * * * * * * * * * * *
           /
          * * * * * * * * * * * * * * * *
          Ответить
          • int f(int i, int j) {
                int x = i + j;
                return x * (x + 1) / 2 + (x % 2 ? i : j);
            }
            ?
            Ответить
          • ─┐┌─┐┌─┐┌─┐┌─┐┌─
            ┌┘└┐└┘┌┘└┐└┘┌┘└┐
            │┌┐│┌┐└┐┌┘┌┐│┌┐│
            └┘└┘│└─┘└─┘│└┘└┘
            ┌┐┌┐│┌─┐┌─┐│┌┐┌┐
            │└┘│└┘┌┘└┐└┘│└┘│
            └┐┌┘┌┐└┐┌┘┌┐└┐┌┘
            ┌┘└─┘└─┘└─┘└─┘└┐
            │┌─┐┌─┐┌┐┌─┐┌─┐│
            └┘┌┘└┐└┘└┘┌┘└┐└┘
            ┌┐└┐┌┘┌┐┌┐└┐┌┘┌┐
            │└─┘└─┘││└─┘└─┘│
            └┐┌──┐┌┘└┐┌──┐┌┘
            ┌┘└┐┌┘└┐┌┘└┐┌┘└┐
            │┌┐││┌┐││┌┐││┌┐│
            └┘└┘└┘└┘└┘└┘└┘└┘
            Ответить
            • Какой лабиринт )))
              Ответить
            • Цари хранят двумерные массивы как-то так
              https://en.wikipedia.org/wiki/Z-order_curve
              Ответить
              • Да это же z-ордер!
                Ответить
                • Вставил свой грязный немытый член тебе в горло и дал проглотить.
                  Ответить
              • Что-то мне это еще https://en.wikipedia.org/wiki/Polytope_model вспомнилось
                https://xeno-by.livejournal.com/28122.html
                Полиэдральная модель оптимизации циклов
                Ответить
              • Зачем я полез по ссылкам из этой статьи?

                https://ru.wikipedia.org/wiki/Де_Брёйн,_Николас

                В "PHP" де Брёйна и Эрдёша нет. Именно поэтому я за "PHP".
                Ответить
        • На первом ASCII-изображении — Питон?
          Ответить
          • Уроборос.
            Ответить
            • Накормил тебя дохлыми крысами, проверь.
              Ответить
              • нассал тебе в ротан, проверь
                Ответить
                • Насрал тебе в ротан. Проверь.
                  Ответить
                  • Пропустил свой пучок электронов через твои щели, проверь.
                    Ответить
                    • Направил гамма-лучи в область твоего пахана. Проверь.
                      Ответить
                      • Испустил продукты альфа-распада в твой детектор, проверь.
                        Ответить
                        • Разомкнул твои урановые полусферы и направил между ними свой пучок нейтронов.
                          Ответить
                        • С помощью туннельного эффекта своим электроном с кремниевой подложки пробил твой изолятор, прямо в плавающий затвор
                          Ответить
                          • Разместил свою стоячую волну в твоём волноводе, проверь.
                            Ответить
                            • Пропилил волновод болгаркой и превратил его в щелевую антенну, проверь.
                              Ответить
                  • Засохло. Проверь.
                    Ответить
              • Накормил тебя живыми крысами. Проверь.
                Ответить
                • Напустил своих змей в твой горшок, проверь.
                  Ответить
                  • Натравил своего мангуста на твою змеиную нору, проверь.
                    Ответить
                    • Спустил своего мегалодона на вашу землю, проверь.
                      Ответить
                    • Показал тебе своего питона. Проверь.
                      Ответить
                      • показал тебе perl, ruby, groovy, tcl, bash, csh, lua а так же Sieve.
                        Проверь
                        Ответить
                        • Показал тебе свои мокросы. Проверь.
                          Ответить
                          • написал селф хостинг макропроцессор и отдал тебе на поддержку, проверь
                            Ответить
                  • Сбросил твоих змей из своего горшка в твой рот. Проверь.
                    Ответить
                    • Посадил твой горшок на свой ухват и отправил в печь, проверь.
                      Ответить
                      • Надел свой горшок тебе на голову. Проверь.
                        Ответить
                        • В скайрим переиграл?
                          Ответить
                          • Меня больше интересует почему корноулл назывался корноулом во временя короля артура. Когда как corn это кукуруза, а кукуруза небыла еще известна кельтам в то время
                            Ответить
                            • крн индоевропейский корень, озночающий жвачное животное или его рог

                              отсюда корова, корона, crown, горн, хорваты (пастухи коров)

                              думаю что cornwall оттуда же
                              Ответить
                              • Да не, хуита.
                                Есть 100% инфа.
                                кароче жилибыли астерикс и обеликс, судя по историческим хроникам они жили на полуострове бретань, а так же они плавали в омерику потому что у римлян был такой вот злой план сбросиить их за край земли. Кароче от туда привезли кукурузу. Далее по мере развития мира нам ничего не известно об этих ребятах, но по какой-то причине пипн короткий (меровинг или каролинг хз) не захватил полуостров бретань, значит поцоны все еще пиздили "римлян" даже потом собственное королевство сделали, а так же есть свидетельства в том что корноул это была населена этими же самыми бритами. Так как самими англичанами эта територия была занята только около 1400
                                Ответить
                                • Астерикса я знаю, это АТС такая софтварная
                                  И еще звездочка: *
                                  Ответить
                        • Неохота член вытаскивать. Кончу - проверю.
                          Ответить
                        • Обнаружил на своей головке копоть и сажу, так что — правда твоя.
                          Ответить
            • Познал силу. Проверь.
              Ответить
    • Насрал. Проверьте.
      Ответить

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