Как работает bugoga??

Тема в разделе "WASM.ASSEMBLER", создана пользователем drunk_speech, 26 мар 2007.

Статус темы:
Закрыта.
  1. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    click_and_die
    Где?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Это смотря как настроить. Например LNK(ярлыки) формат предусматривает флаг SEPARATE_VDM. Чтобы прога запускал в отдельной вирт машине.
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    ЛОЛ! Пишите проги в текстовом редакторе! (не исходники а именно проги =)))
    Когда запущены две бугоги система в два раза тормозится из-за тормознутости NTVDM и возможно поэтому курсор становится видимым (медленнее перемещается). А закрытие одной при закрытии другой видимо зависит от версии системы. НА хрени без СП работает и поодиночке (возможно машина не очень шустрая) и при завершении одной другая продолжает работать.
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Vov4ick
    Именно так и пишу.
    Запускаю 1-й экземпляр - никакой анимации. Запускаю 2-й - в нем начинает метаться курсор. Запускаю 3-й - в третьем анимация, зато во 2-м курсор останавливается. Если кликнуть на 1-й - никакой реакции. Если поочередено кликать то на 2-й, то на 3-й, курсор будет метаться в кликнутом окне, зато в другом останавливается.
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Вот это точно bugoga :)
    Кругом всё по разному.
    У меня не так как у crypto...
    Пускаю 5 штук.
    В первой курсор стоит в остальных бегает.
    Убиваю первую бугогу :), во второй курсор останавливается в остальных бегает.
    И так далее.
    Т.е. всегда одна стопорнутая есть, а остальные работают.
    С медленностью работы ntvdm не связано это...
     
  6. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    как дети малые, чессслово))
     
  7. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Пока тут проверял методы разные оказалось если создать файл 123.com, то винда думает что это какой то лотус 1-2-3
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Курсор можно остановить клавишей Break
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Надо ж как-то развлекаться ;)
     
  10. drunk_speech

    drunk_speech New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    9
    crypto Многое можно остановить клавишей Break... Ну... В пределах консоли, по крайней мере )
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    drunk_speech
    Это понятно, я о том, что процесс управляем.
     
  12. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Он всегда управляем когда IRQ1 обрабатывает стандартный обработчик.
     
  13. Myk

    Myk New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2004
    Сообщения:
    35
    Адрес:
    Ukraine
    Угу, у меня тоже - WinXP 64 bit
     
  14. drunk_speech

    drunk_speech New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    9
    Myk

    Новая, мультиплатформенная bugaga, работает везде!

    //bugaga.c
    #include <stdlib.h>
    #include <ctype.h>
    #include <curses.h>

    int main ()
    {
    initscr ();
    int xmax,ymax;

    getmaxyx(stdscr,ymax,xmax);

    for(;;)
    {
    int y,x;
    y = rand()%ymax;
    x = rand()%xmax;
    move(y,x);
    refresh();
    };

    endwin ();
    return 0;
    }
     
  15. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Особенно вот это
    Мультиплатформенностью и не пахнет :)
     
  16. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    насчет самого эффекта:

    (цитата с интлиста)
    точно такой же эффект можно получить, если накидать .com-файл с командами int 5/jmp $-2

    насчет необходимости в 2х запущенных экземплярах -- это исключительно perfomance issue. Вся работа основывается на переборе всех знакомест консоли ф-ями set cursor pos, чтении символа с тек. положения курсора, и выводе символа ч/з int 17h. Просто-напросто при 2х запущенных копиях эта работа становится более заметной ;) -- отсюда иллюзия "хаотичного" перемещения курсора по экрану.

    Вот сама процедура, которая делает всю работу:
    Код (Text):
    1.         push    ax
    2.         push    bx
    3.         push    cx
    4.         push    dx
    5.         push    ds
    6.         mov ax, 40h ; '@'
    7.         mov ds, ax
    8.         assume ds:nothing
    9.         cmp byte ptr ds:100h, 1
    10.         jz  short skip_already_active
    11.         mov byte ptr ds:100h, 1
    12.         mov ch, ds:4Ah
    13.         mov cl, ds:84h
    14.         mov bh, ds:62h
    15.         call    send_crlf_to_printer
    16.         push    cx
    17.         mov ah, 3
    18.         int 10h     ; - VIDEO - READ CURSOR POSITION
    19.                     ; BH = page number
    20.                     ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line
    21.         pop cx
    22.         push    dx      ; backup cursor pos
    23.         xor dh, dh
    24.  
    25. next_line:              ; CODE XREF: seg000:491Bj
    26.         xor dl, dl
    27.  
    28. next_char:              ; CODE XREF: seg000:4912j
    29.         push    dx
    30.         mov ah, 2
    31.         int 10h     ; - VIDEO - SET CURSOR POSITION
    32.                     ; DH,DL = row, column (0,0 = upper left)
    33.                     ; BH = page number
    34.         mov ah, 8
    35.         int 10h     ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
    36.                     ; BH = display page
    37.                     ; Return: AL = character
    38.                     ; AH = attribute of character (alpha modes)
    39.         or  al, al
    40.         jnz short send_char_to_printer
    41.         mov al, 20h ; ' '
    42.  
    43. send_char_to_printer:           ; CODE XREF: seg000:48F7j
    44.         xor dx, dx
    45.         xor ah, ah
    46.         int 17h     ; PRINTER - OUTPUT CHARACTER
    47.                     ; AL = character, DX = printer port (0-3)
    48.                     ; Return: AH = status bits
    49.         pop dx
    50.         and ah, 25h
    51.         jz  short loc_490E
    52.         mov byte ptr ds:100h, 0FFh ; set prntscr err status
    53.         jmp short done_prntscr
    54. ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
    55.  
    56. loc_490E:               ; CODE XREF: seg000:4905j
    57.         inc dl
    58.         cmp dl, ch
    59.         jb  short next_char
    60.         call    send_crlf_to_printer
    61.         inc dh
    62.         cmp dh, cl
    63.         jbe short next_line
    64.         mov byte ptr ds:100h, 0
    65.  
    66. done_prntscr:               ; CODE XREF: seg000:490Cj
    67.         pop dx      ; restore cursor pos
    68.         mov ah, 2
    69.         int 10h     ; - VIDEO - SET CURSOR POSITION
    70.                     ; DH,DL = row, column (0,0 = upper left)
    71.                     ; BH = page number
    72.  
    73. skip_already_active:            ; CODE XREF: seg000:48CBj
    74.         pop ds
    75.         assume ds:nothing
    76.         pop dx
    77.         pop cx
    78.         pop bx
    79.         pop ax
    80.         jmp loc_484C
    насчет того, что у кого-то работает, а кого-то нет -- это ессно проявляется зависимость от содержимого памяти VM при запуске проги + значений регистров при старте. Т.к. при непосредственном запуске проги из винды загрузчик VM грузит один и тот же набор из специфичных для проги/общих для всех autoexec.nt и config.nt, то при каждом запуске по идее прога попадает в один и тот же "контекст". Т.к. у большинства людей autoexec.nt и config.nt -- дефолтовые, то при запуске проги ее "контекст" определяется только версией винды (точнее тем, что грузится перед прогой в config/autoexec и содержимым si/di). Отсюда деление на тех, кто элита -- работает, и лузеров -- не работает. ;)
    Если бы "контекст" проги был абсолютно разный при каждом запуске (допустим, винда тупо выделяет кусок памяти под память VM и не очищает его), с учетом того, что винда при запуске .com в si всегда 100h оставляет по наблюдениям, то вероятность срабатывания bound была бы
    (100h < LeftRand) || (100h > RightRand+2), с учетом того, что сравнения знаковые, и что случ. числа -- разрядностью 16 бит, + могут быть <0. Лень считать вероятность, но очевидно, что удачных запусков было бы больше неудачных. ;)

    P.S. Нет, не напишет миллион обезьян "Войну и Мир"... ;(
     
  17. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    и еще: не знаю, как у NT/XP с ntvdm'ом, но в 9х существовало такое понятие, как VM background/foreground priority (к приоритетам процессов/потоков это не имеет никакого отношения), плюс всяческие временные повышения/понижения приоритета -- например, при ожидании ввода можно приорити слегка притушить, а при вводе -- повысить. ntvdm по идее должен был этот стафф унаследовать от VMM, поэтому это может объяснять эффект типа ускорения метания курсора при зажатой клавише, если VM имеет фокус ввода.
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    _BC_
    OFFTOP:
    Пришел и разогнал песочницу... я думал "дети" будут еще страничек 5 ее исследовать , на предмет зарытого клада..
     
  19. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    TermoSINteZ
    "дети" резвились, а некоторые "взрослые" к этому очень серьезно отнеслись :)))
     
  20. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    хм.. Было странно другое: что на некоторых "особых" тачках (вроде моей) всё замечательно работает и с одной копией.
    и всё заключается в тех злополучных шести байтах,
    ибо
    обработчику/процессору далеко и глубоко с проглотом на то, что вы припишите дальше этой "конструкции".

    ..тут есть смысл..
    ..может это ктулху проснулся? О.о..

    ужос. всё оказалось так прозаично и пошло..


    ___________________________
    /*now listening*/: Pink Floyd -- Speak To Me; Breathe In The Air..
     
Статус темы:
Закрыта.