Delay

📅 2026-07-14T05:27:32.103Z
👁️ 166 katselukertaa
🔓 Julkinen


; ----------------------------------------------------------
; Internal procedure
; Input : BX = milliseconds
; Clobbers: AX, BX, CX, DX, SI, DI
; ----------------------------------------------------------
_Delay:
    ; Convert ms -> ticks, rounding up:
    ; ticks = (ms + 54) / 55
    mov ax, bx
    add ax, 54
    xor dx, dx
    mov cx, 55
    div cx              ; AX = ticks to wait
    mov si, ax          ; SI = remaining ticks

    ; If 0, return immediately (Delay 0)
    or si, si
    jz .done

    ; Read starting BIOS tick count (CX:DX)
    mov ah, 00h
    int 1Ah
    mov di, dx          ; track low word only (sufficient for short delays)

.wait_next_tick:
    mov ah, 00h
    int 1Ah
    cmp dx, di
    je .wait_next_tick  ; same tick, keep waiting

    mov di, dx          ; tick advanced
    dec si
    jnz .wait_next_tick

.done:
    ret