Hej allesammen.
Jeg har to problemer:
1) Jeg er i gang med mit eget lille operativ system, og besluttede at jeg også ville have det til at virke på en CD, i stedet for kun på en floppy. Så jeg brugte MagicISO til at lave min IMG fil, om til en ISO fil som jeg så brændte til en CD. Men, den præcis samme Assembly kode som virker udmærket på en floppy disk, laver de to første sætninger der bliver skrevet ud om til mærkelige tegn. Dette er Assembly koden:
[bits 16]
[org 0x7c00]
booter:
mov ax, 0x0000
mov ds, ax
call clearScreen
mov bp, bootingSystem
mov dh, 0x0000
mov dl, 0x0000
call output
mov bp, resetting
mov dh, 0x0001
mov dl, 0x0000
call output
call reset
mov bp, switching
mov dh, 0x0003
mov dl, 0x0000
call output
call getKey
call switch
getKey:
mov ah, 0x0000
int 0x0016
ret
reset:
mov ah, 0x0000
int 0x0013
or ah, ah
jnz reset
mov ax, 0x0000
mov es, ax
mov bx, 0x1000
mov ah, 0x0002
mov al, 0x0002
mov ch, 0x0000
mov cl, 0x0002
mov dh, 0x0000
int 0x0013
or ah, ah
jnz reset
mov bp, drivesReset
mov dh, 0x0002
mov dl, 0x0000
call output
ret
clearScreen:
mov ax, 0x0600
mov cx, 0x0000
mov dx, 0x174f
mov bh, 0x0007
int 0x0010
ret
output:
mov ah, 0x0013
mov al, 0x0000
mov bx, 0x0007
mov cx, 0x002b
int 0x0010
ret
enableA20:
in al, 0x0092
or al, 0x0002
out 0x0092, al
ret
switch:
call enableA20
cli
xor ax, ax
mov ds, ax
lgdt[gdtDesc]
mov eax, cr0
or eax, 0x0001
mov cr0, eax
jmp 0x0008:protectedMode
[bits 32]
protectedMode:
mov ax, 0x0010
mov ds, ax
mov ss, ax
mov esp, 0x090000
jmp 0x0008:0x01000
gdt:
gdtNull:
dd 0
dd 0
gdtCode:
dw 0x0ffff
dw 0
db 0
db 10011010b
db 11001111b
db 0
gdtData:
dw 0x0ffff
dw 0
db 0
db 10010010b
db 11001111b
db 0
gdtEnd:
gdtDesc:
dw gdtEnd - gdt - 1
dd gdt
bootingSystem db "Booting process started.. ", 0
resetting db "Resetting drives.. ", 0
drivesReset db "Drives reset.. ", 0
switching db "Press any key to switch to protected mode..", 0
times 510 - ($ - $$) db 0
dw 0xaa55
I denne kode, bliver de to første sætninger der skulle skrives til skærmen lavet om til det rene volapyk, når jeg booter fra en CD.
Booter jeg fra en floppy, fungerer det helt fint.
2) Jeg skal bruge en C funktion til mit operativ system, som virker som min getKey funktion i ovenstående Assembly fil.
Indlæg senest redigeret d. 17.03.2010 16:07 af Bruger #15718