Разбирал через 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?
Сам бинарник - демка с салютом