Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [OS dev / NASM / BOCHS] probleem met switch naar Pmode (https://forum.scholieren.com/showthread.php?t=1381715)

Warsocket 23-03-2006 23:47

[OS dev / NASM / BOCHS] probleem met switch naar Pmode
 
Ik heb een programmatje (klein OS in de maak) geschreven in NASM, als ik mijn code test op bochs (x86 emulator) dan werkt mijn code prima

maar als ik mijn code wegschrijf in de bootsector van een floppy en hem opstart reboot mijn pc (triple fault waarschijnlijk).

Iemand een idee waarom dit op boachs wel werkt en op een echte pc niet.

(mijn standaard assembly forum is down, en ik kan geen fatsoenlijke andere vidnen, dus in mijn laatste hoop hier deze post)

alsvast heel erg bedankt, groeten Bram

Code:

bits 16
org 0x07c00            ; Start address 0000:7c00
jmp start              ; Jump to start of boot routine & skip other data

dummy:

.586
.MMX

start:

mov ax, 0003h
int 10h

mov ax,0b800h
mov es, ax

xor bx, bx
mov dword [es:bx], 0f4d0f52h


mov ax, 0
int 16h


cli
lgdt [gdtr]

mov eax, CR0
or eax, 1
mov CR0, eax

jmp codesel:protc


bits 32
protc:

mov ax, datasel
mov ds, ax
mov es, ax

mov ax, videosel
mov gs, ax

mov eax, 2048
mov dword [DS:eax], 0f4d0f50h  ;PM in white
mov ebx, [ES:eax]

mov [gs:0], ebx

p:
jmp p


bits 16
gdtr :
  dw 8*4          ; Length of the gdt
  dd gdt          ; physical address of gdt

gdt:
    dd 0        ;NULL descriptor
    dd 0
   
    codesel equ $-gdt
    dw 0ffffh  ;4gb code section
    dw 0h      ;begin at start adress
    db 0h      ;extra byte to set start offset
    db 09ah    ;wat flags
    db 0cfh    ;nogwat flags
    db 0h

    datasel equ $-gdt
    dw 0ffffh  ;4gb data section
    dw 0h      ;begin at start adress
    db 0h      ;extra byte to set start offset
    db 092h    ;wat flags
    db 0cfh    ;nogwat flags   
    db 0h

    videosel equ $-gdt              ; ie 18h,next gdt entry
    dw 3999              ; Limit 80*25*2-1
    dw 0x8000        ; begin at start adress
    db 0x0b
    db 0x92              ; present,ring 0,data,expand-up,writable
    db 0x00              ; byte granularity 16 bit
    db 0x00

times 510-($-$$)  db 0  ; Fill bytes from present loc to 510 with 0s
              dw 0x0aa55  ; Write aa55 in bytes 511,512 to indicate that


Warsocket 24-03-2006 22:06

deze kan dicht probleem opgelost.

In het onwaarschijnlijke gevald a tiemand hier tegen hetzelfde probleem aanloopt.

onder start:

xor ax, ax
mov ds, ax

toevoegen

DS = datasegment wordt niet automatisch op 0 geinitialiseerd als je computer boot


Alle tijden zijn GMT +1. Het is nu 06:58.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.