Wie kann ich ohne BIOS-Interrupts im Textmodus die Cursorposition ändern?
09. November 2026, 18:25
MOV DX, 03D4h
MOV AX, 14
OUT DX, AX
INC DX
PUSH DI
SHR DI, 8
MOV AX, DI
OUT DX, AX
DEC DX
MOV AX, 15
OUT DX, AX
INC DX
POP AX
OUT DX, AX
MOV DX, 03D4h
MOV AL, 14
OUT DX, AL
INC DX
PUSH DI
SHR DI, 8
MOV AX, DI
OUT DX, AL
DEC DX
MOV AL, 15
OUT DX, AL
INC DX
POP AX
OUT DX, AL
unsigned char in(unsigned short _port)
{
// "=a" (result) means: put AL register in variable result when finished
// "d" (_port) means: load EDX with _port
unsigned char result;
__asm__ ("in %%dx, %%al" : "=a" (result) : "d" (_port));
return result;
}
void out(unsigned short _port, unsigned char _data)
{
// "a" (_data) means: load EAX with _data
// "d" (_port) means: load EDX with _port
__asm__ ("out %%al, %%dx" : :"a" (_data), "d" (_port));
}
// Setze Cursor-Position auf 0,0
out(0x3D4, 14);
out(0x3D5, 0);
out(0x3D4, 15);
out(0x3D5, 0);
unsigned short offset;
unsigned char *vidmem = (unsigned char *)0xB8000;
// Lese Cursor Position
out(0x3D4, 14);
offset = in(0x3D5) << 8;
out(0x3D4, 15);
offset |= in(0x3D5);
vidmem += offset*2;
// Setze Cursor zur 'line' Zeile
out(0x3D4, 14);
out(0x3D5, 0);
out(0x3D4, 15);
out(0x3D5, line*80);
[/code]
welches benutzt du?
das "VGABIOS-lgpl-latest" oder das "VGABIOS-elpin-2.40"?

mov edi, 0x000B8000
mov Byte [edi ], 'P'
Nein.
oder verwendest du einen anderen modus?
bist du sicher das der wert in DI stimmt?Absolut.
, sowohl bei Bochs als auch auf einem echten PC.