So. Ich habs nun hingekriegt.
main:
mov ax, 0x1000 ;update segment register...
mov ds, ax
mov es, ax
init0:
mov si,s_noos_init0
call noos_putstr
mov bl, 0x05
mov si, s_noos_logo
call noos_printf
mov bl, 0x02
mov si, s_noos_jmp_good
call noos_printf
call noos_inc_line
call noos_getkey
;Variablen
;========
s_noos_init0 db "Init 0",13,10,0
s_noos_logo db "[ NoOS ]",0
s_noos_jmp_good db " Jump into kernel successful",0
;Funktionen
;========
;ret: DL = Spalte; ret: DH = Zeile
noos_get_cursor_pos:
mov ah, 0x03
int 0x10
retn
;DL = Spalte; DH = Zeile
noos_set_cursor_pos:
mov ah, 0x02
push bx
xor bh, bh
int 0x10
pop bx
retn
noos_inc_line:
call noos_get_cursor_pos
inc dh
call noos_set_cursor_pos
retn
noos_inc_row:
call noos_get_cursor_pos
inc dl
call noos_set_cursor_pos
retn
;SI = string
noos_printf:
lodsb
or al,al
jz noos_printf_end
call noos_putchar
call noos_inc_row
jmp noos_printf
noos_printf_end:
retn
;AL = char; BL = Farbe
noos_putchar:
push cx
mov cx, 1
mov ah, 0x09
int 0x10
pop cx
retn
;SI = string
noos_putstr:
lodsb
or al, al
jz noos_putstr_end
mov ah, 0x0E
mov bx, 0x07
int 0x10
jmp noos_putstr
noos_putstr_end:
retn
noos_reboot:
jmp 0xffff:0x0000
noos_getkey:
mov ah,0
int 0x16
retn
Ich hoffe das hilft vlt auch anderen weiter.
Eine kleine Frage verbleibt jedoch:
Bei getkey wird irgendwie die Cursorposition veraendert, seh ich das richtig?
Und wie kann ich dafuer sorgen, dass sie das nicht wird?