1. Assembler / Говнокод #28011

    +1

    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
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    .org 22h
    dw @vbi
    
    .org 80h
    bpos: db 0h 0h
    vector: db 2h 1h
    
    process:
    	push %a
    	push %b
    	mov %a [@bpos] ; {h:x, l:y} ;
    	mov %b [@vector] ; {h:dx, l:dy} ;
    	add %ah %bh
    	add %al %bl
    	cmp %ah 11h
    	jng @.skip_xoverflow_handle
    	cmp %ah 14h
    	jg @.overflow_left
    	mov %ah 11h
    	jmp @.xoverflow_finally
    	.overflow_left:
    		mov %ah 0h
    	.xoverflow_finally:
    		neg %bh
    	.skip_xoverflow_handle:
    	cmp %al 5Ch
    	jng @.skip_yoverflow_handle
    	cmp %al 60h
    	jg @.overflow_up
    	mov %al 5Bh
    	jmp @.yoverflow_finally
    	.overflow_up:
    		mov %al 1h
    	.yoverflow_finally:
    		neg %bl
    	.skip_yoverflow_handle:
    	mov [@bpos] %a
    	mov [@vector] %b
    	pop %b
    	pop %a
    	ret
    	
    cls:
    	push %a
    	push %b
    	mov %a 3A98h
    	
    	.loop:
    		mov [%a + @T1] 0000h
    		sub %a 2h
    		jnz @.loop 
    	pop %b
    	pop %a
    	ret
    
    render:
    	push %a
    	push %b
    	push %c
    
    	mov %a [@bpos]  ; {h:x, l:y} ;
    	mov %b %al
    	mul %b 12h
    	add %b %ah
    	add %b @T1
    	
    	mov %c 8h
    	.loop:
    		movb [%b] FFh
    		add %b 12h
    		dec %c
    		jnz @.loop
    	
    	pop %c
    	pop %b
    	pop %a
    	ret	
    
    start:
    	mov %sp FFFFh
    	outb 20h 1h
    	outb 21h 16h
    	out  22h @T1
    	
    	mov %al 1h
    	int 10h
    	
    	.loop:
    		jmp @.loop
    
    vbi:
    	call @cls
    	call @render
    	call @process
    	ret
    
    .org 1000h
    T1:

    решил пойти по накатанному пути и добавил видеоконтроллер, пока только монохромная битовая карта 144x100, но большего и не надо
    сабж выводит на экран что отпрыгивает от стен, простое умножение компонента вектора на -1

    digitalEugene, 14 Февраля 2022

    Комментарии (71)
  2. Си / Говнокод #28009

    0

    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
    #include <stdio.h>
    #include <setjmp.h>
    #include <assert.h>
    
    jmp_buf ebuf;
    
    void f2(void)
    {
    	longjmp(ebuf, (int)"kokoko");
    }
    
    int main(void)
    {
    	const char* i;
    	printf("petuhi ");
    	i = (const char*)setjmp(ebuf);
    	if (!i) 
    	{
    		f2();
    		printf ("moo ");
    	}
    	printf("%s\n", i);
    	return 0;
    }

    можно елду сделать

    digitalEugene, 14 Февраля 2022

    Комментарии (17)
  3. Assembler / Говнокод #28007

    0

    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
    .org 80h
    data:
    	db "Hello, world!\n"
    	
    wait:
    	.loop:
    		inb %cl E9h
    		cmp %cl 0h
    		jnz @.loop
    	ret
    		
    start:
    	mov %sp 300h
    	.loop:
    		mov %al [%b + @data]
    		inc %b
    		outb E9h %al
    		call @wait
    		cmp %al Ah
    		jnz @.loop
    	int 0h

    забацал port-mapped io, работает в отдельном потоке
    sudo bormand

    digitalEugene, 11 Февраля 2022

    Комментарии (19)
  4. C++ / Говнокод #28006

    0

    1. 1
    std::tie(v[0], v[1]) = std::make_tuple(v[1], v[0])

    какой swap)))

    digitalEugene, 11 Февраля 2022

    Комментарии (2)
  5. C++ / Говнокод #28005

    0

    1. 1
    std::tie(v[0], v[1]) = std::make_tuple(v[1], v[0])

    какой swap)))

    digitalEugene, 11 Февраля 2022

    Комментарии (0)
  6. JavaScript / Говнокод #28004

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    function main() {
        let arr = [1, 2, 3];
    
        for (const v of arr.map(x => x + 1)) print(v);
    
        print("done.");
    }

    Для тех кто не понял предыдущий пример.. я упростил для вас :)

    ASD_77, 11 Февраля 2022

    Комментарии (23)
  7. C++ / Говнокод #28003

    0

    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
    #define OPCODEFORMAT_CASE(opcode, format) case opcode: return format; break
    inline OpcodeFormat getOpcodeFormat(Opcode opcode)
    {
    	switch (opcode)
    	{
    		OPCODEFORMAT_CASE(NOP		, OPCODE);
    		OPCODEFORMAT_CASE(MOV_RR	, OPCODE_RR);
    		OPCODEFORMAT_CASE(MOV_RC	, OPCODE_RC);
    		OPCODEFORMAT_CASE(MOV_RM	, OPCODE_RM);
    		OPCODEFORMAT_CASE(MOV_MR	, OPCODE_MR);
    		OPCODEFORMAT_CASE(MOV_MC	, OPCODE_MC);
    		OPCODEFORMAT_CASE(MOV_MM	, OPCODE_MM);
    		OPCODEFORMAT_CASE(ADD		, OPCODE_RR);
    		OPCODEFORMAT_CASE(SUB		, OPCODE_RR);
    		OPCODEFORMAT_CASE(ADD_C	, OPCODE_RC);
    		OPCODEFORMAT_CASE(SUB_C		, OPCODE_RC);
    		OPCODEFORMAT_CASE(MUL		, OPCODE_RR);
    		OPCODEFORMAT_CASE(DIV		, OPCODE_RR);
    		OPCODEFORMAT_CASE(MUL_C	, OPCODE_RC);
    		OPCODEFORMAT_CASE(DIV_C		, OPCODE_RC);
    		OPCODEFORMAT_CASE(LEA		, OPCODE_RM);
    		OPCODEFORMAT_CASE(INC		, OPCODE_R);
    		OPCODEFORMAT_CASE(DEC		, OPCODE_R);
    		OPCODEFORMAT_CASE(INT		, OPCODE_C8);
    		OPCODEFORMAT_CASE(CMP_RC	, OPCODE_RC);
    		OPCODEFORMAT_CASE(JMP		, OPCODE_C);
    		OPCODEFORMAT_CASE(JZ		        , OPCODE_C);
    		OPCODEFORMAT_CASE(JNZ		, OPCODE_C);
    		OPCODEFORMAT_CASE(JG		, OPCODE_C);
    		OPCODEFORMAT_CASE(JNG		, OPCODE_C);
    		OPCODEFORMAT_CASE(JGZ		, OPCODE_C);
    		OPCODEFORMAT_CASE(JL		        , OPCODE_C);
    		OPCODEFORMAT_CASE(CALL		, OPCODE_C);
    		OPCODEFORMAT_CASE(PUSH_R	, OPCODE_R);
    		OPCODEFORMAT_CASE(PUSH_C	, OPCODE_C);
    		OPCODEFORMAT_CASE(PUSH_C8	, OPCODE_C8);
    		OPCODEFORMAT_CASE(POP_R	, OPCODE_R);
    		OPCODEFORMAT_CASE(POP		, OPCODE);
    		OPCODEFORMAT_CASE(POP8		, OPCODE);
    		OPCODEFORMAT_CASE(POP_M8	, OPCODE_M);
    		OPCODEFORMAT_CASE(POP_M16	, OPCODE_M);
    		OPCODEFORMAT_CASE(OUT_M8	, OPCODE_MC);
    		OPCODEFORMAT_CASE(OUT_M16	, OPCODE_MC);
    		OPCODEFORMAT_CASE(OUT_C8	, OPCODE_CC8);
    		OPCODEFORMAT_CASE(OUT_C16	, OPCODE_CC);
    		OPCODEFORMAT_CASE(OUT_R	, OPCODE_RC);
    		OPCODEFORMAT_CASE(IN_R		, OPCODE_RC);
    		OPCODEFORMAT_CASE(IN_M8	, OPCODE_MC);
    		OPCODEFORMAT_CASE(IN_M16	, OPCODE_MC);
    		OPCODEFORMAT_CASE(RET		, OPCODE);
    
    	default: return (OpcodeFormat)0xFF; break;
    	}
    }
    #undef OPCODEFORMAT_CASE

    отрефакторил

    digitalEugene, 10 Февраля 2022

    Комментарии (39)
  8. JavaScript / Говнокод #28002

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    function test() {
        const ws = new WebSocket('ws://127.0.0.1:445');
        ws.addEventListener('close', event =>
            console.log('event.code = ', event.code, '; event.reason = ', event.reason)
        );
        ws.close(3500, 'some reason');
    }
    test();

    Кто угадает значения полей event.code и event.reason — тому два нихуя.
    Кто угадает значение одного из полей — тому одно нихуя.

    ISO, 10 Февраля 2022

    Комментарии (85)
  9. JavaScript / Говнокод #28001

    0

    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
    function main() {
        let arr = [1, 2, 3];
    
        const it =
            (
                function* iter() {
                    for (const v of arr)
                        yield ((x: typeof v) => x + 1)(v);
                }
            )();
    
        for (const v of it) print(v);
    
        print("done.");
    }

    продолжаем говнокодить... т.е. генерировать жуткое.. г-но :) ну как вам такой код? слабо?

    ASD_77, 10 Февраля 2022

    Комментарии (3)
  10. Куча / Говнокод #28000

    0

    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
    %% Note: set and unset are not thread-safe.
    -spec set(key(), value()) -> ok.
    set(Key, Value) ->
        case ets:lookup(?status_tab, Key) of
            [{_, {set, _OldValue}}] ->
                ets:insert(?status_tab, {Key, {set, Value}});
            [{_, {unset, Pid}}] ->
                MRef = monitor(process, Pid),
                Pid ! {set, Value},
                receive
                    {'DOWN', MRef, _, _, _} -> ok
                end;
            [] ->
                case ets:insert_new(?status_tab, {Key, {set, Value}}) of
                    true  ->
                        ok;
                    false ->
                        set(Key, Value)
                end
        end,
        ok.
    
    -spec unset(key()) -> ok.
    unset(Key) ->
        case ets:lookup(?status_tab, Key) of
            [{_, {set, _OldValue}}] -> ets:delete(?status_tab, Key);
            _                       -> ok
        end,
        ok.
    
    -spec read(key()) -> value().
    read(Key) ->
        case read_or_wait(Key) of
            {set, Value} ->
                Value;
            {wait, MRef} ->
                receive
                    {'DOWN', MRef, _, _, {cvar_set, Value}} ->
                        Value;
                    {'DOWN', MRef, _, _, noproc} ->
                        read(Key)
                end
        end.
    
    -spec read_or_wait(key()) -> {set, value()} | {wait, reference()}.
    read_or_wait(Key) ->
        case ets:lookup(?status_tab, Key) of
            [] ->
                {Pid, MRef} = spawn_monitor(?MODULE, waker_entrypoint, [Key, self()]),
                receive
                    {Pid, proceed} ->
                        {wait, MRef};
                    {'DOWN', MRef, _, _, Reason} ->
                        cvar_retry = Reason,
                        read_or_wait(Key)
                end;
            [{_, {set, Val}}] ->
                {set, Val};
            [{_, {unset, Pid}}] ->
                {wait, monitor(process, Pid)}
        end.
    
    -spec waker_entrypoint(key(), pid()) -> no_return().
    waker_entrypoint(Key, Parent) ->
        case ets_insert_new({Key, {unset, self()}}) of
            false ->
                exit(cvar_retry);
            true ->
                Parent ! {self(), proceed},
                receive
                    {set, Value} ->
                        ets_insert({Key, {set, Value}}),
                        exit({cvar_set, Value})
                end
        end.

    CHayT, 08 Февраля 2022

    Комментарии (23)