Skip to main content

Borrar carácter

Este es el código de la función borrar_caracter de DariOS

borrar_caracter

Explicación de la función borrar_caracter

La función borrar_caracter elimina el último carácter escrito en pantalla (y en el buffer) sin borrar el prompt. Usa interrupciones del BIOS y escritura directa en memoria de video.


Propósito

Retroceder un carácter en pantalla y eliminarlo del buffer de entrada del shell.


Lógica paso a paso

mov ah, 0x03
mov bh, 0x00
int 0x10
  • Obtiene la posición actual del cursor (devuelve fila en DH y columna en DL).
cmp dl, 7
jbe shell
  • Si el cursor está a la izquierda del prompt (columna 0 a 7), no permite borrar.
dec dl
  • Retrocede una columna.
mov ax, 0xB800
mov es, ax
  • Prepara el segmento de video (modo texto: 0xB800).
movzx si, dh
imul si, 80
movzx di, dl
add si, di
shl si, 1
  • Calcula la dirección del carácter en pantalla (fila * 80 + columna) y multiplica por 2 (cada carácter son 2 bytes: carácter + atributo).
mov byte [es:si], ' '
mov al, [color_actual]
mov byte [es:si + 1], al
  • Escribe un espacio (' ') en pantalla y aplica el color actual para borrar visualmente el carácter.
mov ah, 0x02
mov bh, 0x00
mov dh, dh
mov dl, dl
int 0x10
  • Mueve el cursor a la nueva posición (una columna atrás).
cmp bx, 0
je shell
dec bx
mov byte [buffer_shell + bx], 0
  • Si hay caracteres en el buffer, elimina el último (coloca 0).
jmp shell
  • Vuelve al shell.

Requisitos

  • Debe haber un prompt fijo que no se debe borrar.
  • color_actual debe estar definido para asignar atributos al carácter borrado.
  • El buffer de entrada debe estar gestionado con bx como índice.