Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - ST-225

Seiten: 1 2 [3]
41
Lowlevel-Coding / Problem mit Paging
« am: 15. June 2006, 21:37 »
great thx. Fang' ich gleich morgen früh damit an  :idea:  :D
42
Lowlevel-Coding / Problem mit Paging
« am: 15. June 2006, 20:33 »
@scales of justice: Ja, war natürlich ein Kopierfehler, weil ich ein paar comments weggelassen hab  :wink:

@PortChicken: Danke für deine Ratschläge, hat aber trotzdem nicht gefunzt. Ich werde jetzt einen Bootloader mit PMode-Switch proggen. Dazu aber jetzt eine Frage: Wie mache ich das mit der load-Funktion, im PMode kann ich ja keine Hardware-Interrupts mehr verwenden. Oder kann ich das einfach vor dem Switch machen, aber dann stimmen ja die Speicheradressen nicht mehr  :?
43
Lowlevel-Coding / Problem mit Paging
« am: 15. June 2006, 14:18 »
So, nachdem ich eure (wirklich gelungenen) Lowlevel-Tuts alle gelesen hab möchte ich nun auch mit meinem eigenem OS beginnen. Ich habe mich entschlossen, gleich alles im PMode zu proggen und paging sowie softwaretasking zu benutzen. Mit dem Bootloader bin ich jetzt fertig und habe jetzt mit dem kernel begonnen. In diesem wird zuerst der PMode und daraufhin Paging aktiviert. Mit dem Paging bin ich für den Anfang mal Analog zum Tutorial aus dem lowlevel magazin #8 vorgegangen, jedoch gibt mein test-pc nie "PAGING" (Videotextspeichertest) aus. Hier der Code:
[BITS 16]
mov ax, 0x1000
mov ds, ax
mov es, axcli
call enableA20
lgdt [gdtr]
mov eax, cr0
or al, 1
mov cr0, eax
jmp codesel:PMode

[BITS 32]
PMode:
mov ax, datasel
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov esp, 0x90000


Paging:
.init
mov eax, 0
mov ecx, 4096*3
mov edi, 0x8000
rep stosd
.writepagedir
mov DWORD[0x8000+0],(0x9000 | 000000000111b)
mov DWORD[0x8000+3072],(0xA000 | 000000000111b)
.map0
xor ebx,ebx
xor edx,edx
.Loop1:
mov eax,edx
or eax,000000000111b
mov [0x9000+ebx],eax
add ebx,4
add edx,4096
cmp edx,4096*1024
jne .Loop1
.map768
mov DWORD[0xA000],(0xB8000 | 000000000111b)
.activate
mov eax, 0x8000
mov cr3, eax
mov eax, cr0
or eax,10000000000000000000000000000000b
mov cr0, eax


PMODETEST:
    mov BYTE[0xC0000000],'P'
    mov BYTE[0xC0000002],'A'
    mov BYTE[0xC0000004],'G'
    mov BYTE[0xC0000006],'I'
    mov BYTE[0xC0000008],'N'
    mov BYTE[0xC000000A],'G'
    retn

enableA20:
    .stage1
    in al, 0x64
    test al, 00000010b
    jnz .stage1
    .stage2
    mov al, 0xD0
    out 0x64, al
    .stage3
    in al, 0x64
    test al, 00000001b
    jz .stage3
    .stage4:
    in al, 0x64
    test al, 00000010b
    jnz .stage4
    .stage5
    mov al, 0xD1
    out 0x64, al
    .stage6
    in al, 0x64
    test al, 00000010b
    jnz .stage6
    .stage7
    pop eax
    out 0x60, al
    retn


gdtr:  ; Desktiptortabelle
    dw gdt_end-gdt-1   ; Limit
    dd gdt   ; Basisadresse
gdt:
    dd 0,0   ; Null-Deskriptor
codesel equ $-gdt
    dw 0xFFFF; Segmentgröße 0..15
    dw 0x0000; Segmentadresse 0..15
    db 0x00  ; Segmentadresse 16..23
    db 0x9A  ; Zugriffsberechtigung und Typ
    db 0xCF  ; Zusatzinformationen und Segmentgr??e 16...19
    db 0x00  ; Segmentadresse 24..31
datasel equ $-gdt
    dw 0xFFFF; Segmentgröße 0..15
    dw 0x0000; Segmentadresse 0..15
    db 0x00  ; Segmentadresse 16..23
    db 0x92  ; Zugriffsberechtigung und Typ
    db 0xCF  ; Zusatzinformationen und Segmentgr??e 16...19
    db 0x00  ; Segmentadresse 24..31
gdt_end


Ich hoffe es kann mir jemand helfen !
Vielen Dank schonmal im Vorraus !
Seiten: 1 2 [3]

Einloggen