Borrar carácter
Este es el código de la función borrar_caracter
de DariOS
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 enDL
).
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.