OK, bit more info would be helpful.
[Ah while writing I see you've sorted it. Tell us the problem (a) out of interest and (b) because one day it might help someone else]
Some of what I was writing might still be useful to you so I'm posting it anyway:
I would also suggest that if you are using a non-graphics mode you stop using this interrupt entirely and simply write to the actual video memory. For the usual 80x25 mode this is at 0xB8000 so in real mode requires use of a segment register not set to 0. In my bootloader I set fs to point to the start of video memory like this
Code: Select all
mov bx 0xb800 ;bb 00 b8 [The value in fs must be mentally shifted one hex place left to get the value it actually point to]
mov fs bx ;8e e3
I can then write the letter A directly to the top left of screen like this:
Code: Select all
mov ax 0x0741
xor di, di ;quickly sets di to zero to select the top left of screen
mov [fs:di], ax
This needs a bit of explaining.
The video memory uses two bytes for each character cell. The first byte is the character to print - 0x41 or 'A', loaded to al in this example
The second byte is set to 0x07 and indicates the background colour to use and the colour for the foreground (ie the letter A itself) and is loaded to ah. Other colour possibilities are in the Wikki or readily found by a google.
In all 2000 bytes are used for the 25 rows of 80 columns at 2 bytes each.