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

    −98

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    #include "memory.h"
    #include "core.h"
    #include "start.h"
    
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        printf("Halo Virtual Machine version 0.01\n");
        initCore(&proc, ram);
        run(&proc);
        return 0;
    }

    Главное - пафосное название

    Запостил: kgm-rj, 17 Ноября 2015

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

    • Файл датируется апрелем 2011. Я тогда виртуальными машинами болел
      Ответить
      • и, видимо, Halo
        Ответить
        • Не, я тогда в Преторианцев рубился. Мне просто нравилось название "галактическое гало"
          Ответить
      • В чём "говно"? Пока я вижу говно только в твоём пафосе.
        Ответить
        • Это потому что не заком с программировапнием эвм
          Ответить
          • И действительно,.. я ведь только на будильнике с часовым механизмом программирую...
            Ответить
            • Я вообще не увереничто ты знаешь что такое программировпние.
              Ответить
              • Да откуда тебе быть уверенным, если ты даже запятую поставить не можешь..
                Ответить
                • Тебе просто нечего ответить на мои резонные замечания, вот ты и психуешь.
                  Ответить
                  • Разумеется мне нечего ответить, ведь ты ни о чём не спросил.
                    P.S.: А ты долго думал. Наверное занят был...
                    Ответить
        • в камелкейсе
          Ответить
          • Да ну. Очень много контор, в которых camelCase в идентификаторах юзается. Ну и Qt, до кучи.
            Ответить
          • А что плохого в CamelCase?
            Ответить
            • CamudelCase
              Ответить
            • Отличается от std и буста.
              Ответить
              • Получается, что всё, что написано не в стиле std и boost - является говнокодом?
                Ответить
                • Да
                  Ответить
                  • Глупая какая-то у вас обоих логика.
                    Для примера, llvm и clang написаны в подобном стиле. Так что же, llvm и clang - говно, а его разработчики - говнокодеры? Нет конечно.
                    Каждый пишет в удобном ему стиле, главное не отходить от него в пределах одного проекта.
                    Кто вбил в ваши головы такие принципы?
                    Ответить
                    • Шланг и ллвм это эппл, эппл это геи, геи это говно
                      Ответить
                      • При чём тут Apple?
                        Ответить
                        • Шланг и ллвм поддерживаются яблоком и являются их главным сдк
                          Ответить
                      • И вебкит туда же?
                        Ответить
                      • А можно конкретней?
                        У меня в голове не укладывается даже фраза "геи это говно", не говоря уже об остальном.
                        Ответить
                        • Запишем мысль guest'а в виде силлогизма:

                          Геи ебутся в жопу.
                          В жопе говно.
                          ---
                          Следовательно - геи говно.
                          Ответить
                          • Похоже на то... Но тогда зачем вообще интересоваться программированием с таким мышлением?
                            Ответить
                            • А как установка "геи говно" мешает интересоваться программированию?

                              В какой конторе ты работаешь?
                              Ответить
                              • > как установка "геи говно" мешает интересоваться программированию
                                Нетолерантно же. Во всякие гуглы не возьмут.
                                Ответить
                                • И многие посетите нашего сайта работают в гугл?

                                  Меня максимум в детстве родители ставили в гугл
                                  Ответить
                                  • Если станешь пидором геем - больше шанс, что возьмут в гугл.
                                    Ответить
                                    • А что, пидар в гугле работает?
                                      Ответить
                                      • По его словам пидар не он, а пи. Значит в гугле работает Пи! Травля-дианон.
                                        Ответить
                                        • А пидар максимум грузить гугль
                                          Ответить
                                          • Если русский не думает о хуях и очке - он думает о пидоре.
                                            Ответить
                                            • Блджад, выглядит так, что на сайте только один русский - 3_14dar.
                                              Ответить
                                              • Русских тут гораздо больше, как минимум курточка и кегдан.
                                                Ответить
                                    • это из разряда "двое геев были не готовы к тому, что на собеседование придет лезбиянская пара с инвалидкой и черным младенцем"
                                      Ответить
    • если proc это глобальная переменная, определенная в другом модуле, то почему маленькими букавками?
      Ответить
      • Надо было какими?
        Ответить
        • большими, конечно же. Иначе как их отличать от локальных?

          Такой большой, машину виртуальную делаешь, а таких простых вещей не знаешь. Стыдно!
          Ответить
          • > большими, конечно же.
            КАПСОМ_ПИШУТ_МАКРОСЫ, МАКРОСЫ_ПИШУТ_КАПСОМ. Для глобалок, имхо, надо всё-таки какой-нибудь другой конвеншн, например gProc. Но мысль верная, глобалки должны отличаться от остальных переменных.
            Ответить
            • Во-первых макросы не всегда пишут капсом. Иногда макросы делают вид что они функции, и тогда они пишутся не капсом. И даже в комментарии пишут "эта функция может быть макросом, берегите руки".

              Во-вторых хоть какой-то стиль нужен, потому что у меня первая мысль "это не скомпилится, нету переменной proc и ram".
              Ответить
              • > Во-вторых хоть какой-то стиль нужен
                Ну я разве спорю? "Но мысль верная, глобалки должны отличаться от остальных переменных."

                > макросы не всегда пишут капсом
                > иногда макросы делают вид что они функции
                И это очень плохо, и должно быть очень, очень, очень редкой и исключительной ситуацией, особенно в крестах... И так уже всяких errno и assert'ов понаплодили без капса, не надо ещё добавлять... Потому что это не "берегите руки, когда вызываете этот макрос", а "берегите жопу, если случайно объявите что-то с таким же именем".
                Ответить
                • настраиваешь разную подсветку для дефайнов и функций и живешь припеваючи.
                  Ответить
                • stdin и stdout по стандарту обязаны быть макросами. Нахера - не вполне понятно.
                  Ответить
                  • [boris@dev ~]$ grep stdin /usr/include/stdio.h
                    extern struct _IO_FILE *stdin;		/* Standard input stream.  */
                    #define stdin stdin

                    Принцип наименьшего удивления
                    Ответить
                    • /* C89/C99 say they're macros.  Make them happy.  */
                      #define stdin stdin
                      #define stdout stdout
                      #define stderr stderr


                      Целиком оно выглядит так.
                      Ответить
              • "Во-первых макросы не всегда пишут капсом."
                А во-вторых, глобальные переменные не всегда пишут не "маленькими букавками".
                Ответить
    • Я столько говна нарыл у себя на диске. Даже примеры ассемблера. Судя по названию, некоторые предназначались для этой машины.

      class Boot implements Task {
      	void Main() {
      		ldstr "Halo System: Boot"
      		irq bios.PRINT
      		newtask
      	}
      }
      Ответить
    • И даже такое

      ; Boot sector
      
      import bios
      import halo
      
      define {
      	struct Task {
      		dword _options
      		pointer _startAddress
      		pointer _endAddress
      	}
      	struct SystemTaskTable {
      		pointer _start
      		pointer _end
      	}
      	macro storStart(to, from) {
      		pa &from    ; Push Address
      		pa &to      ; Push Address
      		sa          ; Store Address
      	}
      	macro storEnd(to, from) {
      		pa &&from   ; Push Address
      		pa &to      ; Push Address
      		sa          ; Store Address
      	}
      }
      
      main() {
          ldstr &_message
      	pushb bios.puts
      	int bios.request
      	pa &oldTaskTable
      	stt             ; Save Task Table
      	storStart(me._startAddress, myTask)
      	storEnd(me._endAddress, myTask)
      	pushd 0
      	ord halo.iopl.full
      	pa &me._options
      	stord
      	storStart(myTableDescriptor._start, me)
      	storEnd(myTableDescriptor._end, me)
      	pa &myTableDescriptor
      	ltt             ; Load Task Table
      	lt 0            ; Load Task
      	rs              ; ReStart
      	loop $
      }
      
      myTask() {
      	ret
      }
      
      data {
      	char [] _message = "Trying to change processor mode.\n\0"
      	struct SystemTaskTable oldTaskTable
      	struct SystemTaskTable myTableDescriptor
      	struct Task me
      }
      Ответить
      • Прикольно, так это какая-то самодельная виртуальная машина со своим байткодом?
        Ответить
        • Задумывалась. Недоделал. Хотя, простенькие машинные коды выполняла

          #ifndef START_H_INCLUDED
          #define START_H_INCLUDED
          
          #include "commands.h"
          
          void load() {
              int i;
              ram[0] = HC_BLOAD;
              ram[1] = 0x00;
              ram[2] = 0x00;
              ram[3] = 0x01;
              ram[4] = 0x00;
              ram[5] = HC_HALT;
              for (i = 0; i < 256; i++) {
                  commands[i] = hcUnknown;
              }
              commands[HC_BLOAD] = hcBload;
              commands[HC_HALT] = hcHalt;
          }
          
          #endif // START_H_INCLUDED
          Ответить
          • У меня их несколько, этих виртуальных машин, было в разное время. Разной степени доделанности.
            Ответить
            • Прикольно, а меня, в своё время, только на эмулятор 8080 хватило... Очень хотелось шахматы запустить из журнала "моделист-конструктор", вот и замутил эмулятор-дебаггер-асм-дизасм для 8080, а потом несколько часов вбивал хексы из журнала. Там такое говнокодище было на досовском борланд паскале... В асме и дизасме кейсы на 500 строк, а в самом эмуляторе примерно столько же голого асма...

              http://govnokod.ru/10011
              Ответить
              • шо вы какие-то говёные архитектуры себе выбираете

                лучше MMIX запилите
                Ответить
                • > какие-то говёные архитектуры
                  Legacy же. Я всё детство мечтал на чём-нибудь запустить эти проги из журнала... Вот где-то классе в 11, когда доступ к ПеКа появился, и нахуярил этот эмулятор.
                  Ответить
              • Я тоже подумывал о таком. У меня остались страницы от МК с парой игр в машинных кодах.
                Ответить
                • Ну там не совсем честный эмулятор получился. Железо вообще не эмулировалось, только cpu. А морда к шахматам была на паскале и писала/читала ходы в виртуальную оперативку.
                  Ответить
                  • не знаю как в ваших 8080, но вообще обычный 8086 без обвязки эмулировать бессмысленно

                    нужен bios, нужен таймер, нужен контроллер клавиатуры, и иначе как на нем игрушки запускать?
                    Ответить
                    • > не знаю как в ваших 8080
                      Да 8080 это ж вообще восьмибитная лампота... Какие операционки, там BIOS'а то толком не было...

                      А с шахматами там чит вышел - у них и в оригинале была морда на бейсике, которая писала в память ходы. А на асме была только расчётная часть, которая к железу вообще не лезла. Поэтому и хватило только эмуляции процессора.

                      > без обвязки эмулировать бессмысленно
                      Ну да, весь остальной софт на этом эмуляторе не пойдёт ;(
                      Ответить
                      • да я знаю про 8080, из него же Z80 вырос вроде. Но ведь и спекки имел не только проц, но и видео как-то пиздецки программируемое например.

                        Кстати! Я не знаю архитектуру z80, но говорят что она крайне проста. вот её может и имело бы смысл написать, и получить сразу миллион суперских игр
                        Ответить
                        • > может и имело бы смысл написать
                          Дык всяко уже есть эмуляторы.

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

                          > крайне проста
                          Проще, наверное, только 6502, который у NES был.
                          Ответить
                          • Кстати, о таймингах. Ты помнишь, что модуль Crt нашего любимого Борманд Паскаля падает с ошибкой 200 при попытке запуска на процессорах с частотой выше 300 мегагерц? А ведь его назначение вовсе не игрушечное...

                            Фиксилось, кстати, заменой WORD'а на DWORD в функции расчёта задержек.
                            Ответить
                            • Я вот помню. Некоторые игрушки у меня из за этого не шли.

                              А еще я помню как лодранер у меня заканчивался за секунду на 166м.
                              А еще гоблииины первые спрашивали какой у меня проц: 386 или 486 и показывали анимацию с такой вот скоростью
                              Ответить
                            • Ну я тогда толком не разбирался с этой проблемой, т.к. очень быстро нашёлся пропатченный crt, который не падал.
                              Ответить
                            • Была такая проблема. Division by zero :) Если быстро надо было вылечить, то nop'али этот зловещий div.
                              Ответить
    • Суровый такой Halo, World.
      Ответить
    • Halo - голандский?
      Ответить

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