Разбирал через ida, возможно криво, но получилось так:
;               S u b r o u t i n e
sub_0_1F2       proc near               ; CODE XREF: seg000:0186▒p seg000:01D3▒p
                push    dx
                mov     dx, 3DAh       
loc_0_1F6:                              ; CODE XREF: sub_0_1F2+Aj
                mov     ah, 9Fh      
                in      al, dx          ; Video status bits:
                                        ; 0: retrace.  1=display is in vert or horiz retrace.
                                        ; 1: 1=light pen is triggered; 0=armed
                                        ; 2: 1=light pen switch is open; 0=closed
                                        ; 3: 1=vertical sync pulse is occurring.
                and     ax, 408h
                jnz     near ptr loc_0_1F6+1
                pop     dx
                retn
sub_0_1F2       endp
Сохраняем регистр dx на стек, потом читаем из порта 3DAh (я так понял, что это сброс состояния для VGA?), потом... А вот что потом? По идее при AND может быть установлен флаг ZF, т.е. пока не получим 0 при делении, то так и будем долбить чтение с порта?
Меня смушает loc_0_1F6+1 - оно точно перейдет на mov (который тут вообще не используется?), или на следующую команду? Или на следующий байт и из остатка mov будет lahf, заливающий флаги в ah?
Сам бинарник - демка с салютом



