Hallo,
Ich habe mir eure Tutorials durch gelesen und auch probiert, der Bootloader und der Kernel nach der ersten Ausgabe von LowLevel haben noch funktioniert,
doch als ich die Interrupt Routine aus LowLevel3 eingebaut habe zeigt er mir auf dem Monitor nur die Texte an die mit putstr ausgegeben werden, diejenigen die ich mit dem interrupt ausgebe nicht ?
Ich habe den Code des Bootloaders und des Kernels angefügt.
Danke im voraus
mfg syce
Kernel:
mov ax, 1000h
mov ds, ax
mov es, ax
start:
mov si, msg
mov al, 0x01
int 0x21
mov si, msg_boot
call putstr
call getkey
jmp reboot
msg db "Interrupt ausgeführt",13,10,0
msg_boot db "Ausgabe mit putstr, Taste drücken um neu zu starten",13,10,0
_int0x21:
_int0x21_ser0x01: ; funktion 0x01
cmp al, 0x01 ; funktion 0x01 angefragt?
jne _int0x21_end ; nächste Routine checken
_int0x21_ser0x01_start:
lodsb ; nächstes Byte laden
or al, al ; 0-Byte?
jz _int0x21_ser0x01_end
mov ah, 0x0E ; BIOS Teletype
mov bh, 0x00 ; Page 0
mov bl, 0x07 ; Text-Attribute
int 0x10 ; BIOS-Call
jmp _int0x21_ser0x01_start
_int0x21_ser0x01_end:
jmp _int0x21_end
_int0x21_end:
iret
push dx
push es
xor ax, ax
mov es, ax
cli
mov word [es:0x21*4], _int0x21 ; Pointer auf den Handler
mov [es:0x21*4+2], cs ; Pointer auf CS
sti
pop es
pop dx
putstr:
lodsb
or al, al
jz short putstrd
mov ah, 0x0E
mov bx, 0x007
int 0x10
jmp putstr
putstrd:
retn
getkey:
mov ah, 0
int 016h
ret
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
Bootloader:
org 0x7C00
start:
cli
mov ax, 0x9000
mov ss, ax
mov sp, 0
sti
mov [bootdrv], dl
call kernel
mov ax, 0x1000
mov es, ax
mov ds, ax
push ax
mov ax,0
push ax
retf
bootdrv db 0
loadmsg db "Loading...",13,10,0
putstr:
lodsb
or al, al
jz short putstrd
mov ah, 0x0E
mov bx,0x0007
int 0x10
jmp putstr
putstrd:
retn
kernel:
push ds
mov ax, 0
mov dl, [bootdrv]
int 13h
pop ds
jc kernel
load:
mov ax,0x1000
mov es, ax
mov bx,0
mov ah, 2
mov al, 5
mov cx, 2
mov dx, 0
int 13h
jc load
mov si, loadmsg
call putstr
retn
times 512-($-$$)-2 db 0
dw 0AA55h