public escribir
public esperar

params struc
  bpold dw ?
  retorno dd ?
  atrib db ?
  car db ?
  pagina db ?
  columna db ?
  fila db ?
params ends

codigo_a segment
  assume cs:codigo_a

  escribir proc far
    push bp           ;salvaguardamos bp
    mov bp, sp
    push si           ;salvaguardamos registros
    push es
    push dx
    push di
    push cx
    ;comienzo de la rutina
     mov ax, 0b800h               ;segmento de memoria de v¡deo
     mov es, ax
     mov al, [bp].fila            ;al := fila
     mov dl, 80                   ;suponemos que trabamos en modo 80x25
     mul dl                       ;ax := 80*fila
     mov si, ax
     sal si, 1                    ;si := si*2 = ax*2 = 80*fila*2
     mov di, si
     mov ah, 00h                  ;ax := 00columna 
     mov al, [bp].columna         
     mov si, ax
     sal si, 1                    ;si := si * 2
     add di, si                   ;di := di + si = fila*80*2 + columna*2
     mov ah, 00h                  ;ax := 00pagina
     mov al, [bp].pagina        
     mov si, ax                   ;si := pagina
     mov cx, 12
     bucle:
       sal si, 1                    ;si := pagina * 4096
       loop bucle
     add di, si                   ;di := di + si
     mov ah, [bp].car
     mov [es:di], ah              ;copia en mem.v¡deo, el car cter
     mov ah, [bp].atrib
     mov [es:di+1], ah            ;copia el atributo
    ;fin rutina
    pop cx ;restauramos registros
    pop di
    pop dx
    pop es
    pop si
    pop bp ;restauramos bp
    ret
  endp

  esperar proc far
    push bp
    mov bp, sp
    push ax
    push bx
    push cx
    push dx
    mov ah, 02ch
    int 21h  
    mov cl, dl
    mov bh, dl
    mov bl, dl
    add bl, ss:[bp+6]
    lazo: cmp bh, bl
          jg finlazo
          push cx
          mov ah, 02ch
          int 21h
          pop cx
          mov bh, dl
          cmp bh, cl
          jge lazo
          add bh, 100
          jmp lazo
    finlazo:
    pop dx
    pop cx
    pop bx
    pop ax
    pop bp
    ret
  endp

codigo_a ends

end
