interrupciones

Iniciado por -dominique-, 8 Diciembre 2012, 00:48 AM

0 Miembros y 1 Visitante están viendo este tema.

-dominique-

Hola, tengo un problema con la interrupcion 10h.
Lo que pasa es que quiero imprimir varios mensajes y quiero cambiar los colores de las letras y el fondo. Me guie del ejemplo "Hola mundo" pero cuando quiero imprimer otro mensaje despues de ese, se imprime ensima.

¿Como puedo hacerlo? ¿y se puede combinar la funcion 9 de la interrupcion 21h con alguna de la interrupcion 10h?

Gracias  :D

x64core

Estas en modo texto o modo grafico? Decis que quieres cambiar el fondo, en modo texto solo se puede cambiar el borde.
respecto a que si se pueden combinar eso me hace pensar más que estas en modo grafico, las cuales si es así necesitas cambiar
las coordenadas seguramente ese es tu problema, postea el codigo para mirar tu problema

_Enko

Hola, no recuerdo si habia una interrupcion para eso.

Lo que si te puedo decir, es que en modo texto, la matriz del texto de la pantalla (80x25) esta guardada en 0xB8000

Y si aun no recuerdo mal, estaba compuesto por una matriz de 80x25 de WORD.
Donde el primer byte es la combinacion de color-fondo y el segundo byte el caracter.

Por ejemplo, el texto en con letras blancas y texto negro es:
'0',h','0','o','0','l','0','a'

Para otro color, se cambia el 0 por un 1,2,3,4etc...


aqui mas info
http://wiki.osdev.org/Printing_To_Screen

-dominique-

Esta en modo texto. Me guie del ejemplo que tiene el emu, "Hello World". En él quise cambiar el codigo para que pueda imprimir varios mensajes. Algo asi:

************
* Mensaje     *
************

pero solo imprime en una sola linea, uno ensima del otro. Prove con la funcion 2 para desplazar el cursor pero lo imprime todo y al final lo desplaza. Tambien prove con imprimir un mensaje definido en la zona de datos con la funcion 9 de la interrupcion 21h pero no se ejecuta.

Gracias

x64core

Cita de: -dominique- en  9 Diciembre 2012, 02:48 AM
Esta en modo texto. Me guie del ejemplo que tiene el emu, "Hello World". En él quise cambiar el codigo para que pueda imprimir varios mensajes. Algo asi:

************
* Mensaje     *
************

pero solo imprime en una sola linea, uno ensima del otro. Prove con la funcion 2 para desplazar el cursor pero lo imprime todo y al final lo desplaza. Tambien prove con imprimir un mensaje definido en la zona de datos con la funcion 9 de la interrupcion 21h pero no se ejecuta.

Gracias

no puedes imprimir ese tipo de texto? la funcion 02 es para escribir un caracter, la funcion 09 es para escribir una cadena,Mostra tu codigo.

-dominique-

Este es el codigo que hice, el problema es que imprime en varios colores. ¿Hay una manera de que imprima en uno solo?



org     100h   
.Data
n DB 0
v DB 'Fin del Proceso.'


.Code                           

mov     ax, 3
int     10h


mov     ax, 1003h
mov     bx, 0     
int     10h


               
mov     dl, 0   ; columnas.
mov     dh, 0   ; filas.

mov     bl, 0   
mov     si,0
mov di,0
jmp     next_char

next_row:
mov    al,n
inc al
mov n,al
inc     dh
cmp     dh, 4
je      stop_print

mov     dl, 0
cmp     n,1
je     next

next_char:


mov     ah, 02h
int     10h

mov     al, '*'
mov     bh, 0
mov     cx, 1
mov     ah, 09h
int     10h

inc     bl     
inc     dl
cmp     dl, 16
je      next_row
jmp     next_char

next:


mov     ah, 02h
int     10h

mov     al, v[si]
mov     bh, 0
mov     cx, 1
mov     ah, 09h
int     10h
inc si
inc     bl     
inc     dl
cmp     dl, 16
je      next_row


jmp     next
stop_print:

mov ah, 0
int 16h

ret

x64core

El color se establece en BL, antes de llamar a la función BL debe contener el valor correspondiente al color deseado, te dejo
la paleta de colores:


00H black      08H gray
01H blue       09H bright blue
02H green      0AH bright green
03H cyan       0BH bright cyan
04H red        0CH bright red
05H magenta    0DH bright magenta
06H brown      0EH yellow
07H white      0FH bright white



-dominique-

Muchas gracias chicos  :D