[ Borovic @ 11.03.2006. 20:30 ] @
Dobar dan.Naime, ovu temu postavljam sa namerom za razvijanje jednog jednostavnog operativnog sistena "StrongOS".Neka svi zainteresovani ucestvuju u developu time sto ce postovati kvalitetne source kodove.Hvala! Ovaj operativni sistem je predvidjen za ix86 arhitekturu procesora.U pocetku ce biti u text-mode only, ali u buducnosti nadam se da cemo uvesti simple GUI!Ovaj projekat ce biti pod GPL licencom i svaki segment koda ce svakome uvek biti dostupan.Razvijanje ovog operativnog sistema cu zapocetu sa jednostavnim bootloaderom: Code: [BITS 16] ; We need 16-bit intructions for Real mode [ORG 0x7C00] ; The BIOS loads the boot sector into memory location 0x7C00 reset_drive: mov ah, 0 ; RESET-command int 13h ; Call interrupt 13h or ah, ah ; Check for error code jnz reset_drive ; Try again if ah != 0 mov ax, 0 mov es, ax mov bx, 0x1000 ; Destination address = 0000:1000 mov ah, 02h ; READ SECTOR-command mov al, 02h ; Number of sectors to read = 1 mov ch, 0 ; Cylinder = 0 mov cl, 02h ; Sector = 2 mov dh, 0 ; Head = 0 int 13h ; Call interrupt 13h or ah, ah ; Check for error code jnz reset_drive ; Try again if ah != 0 cli ; Disable interrupts, we want to be alone xor ax, ax mov ds, ax ; Set DS-register to 0 - used by lgdt lgdt [gdt_desc] ; Load the GDT descriptor mov eax, cr0 ; Copy the contents of CR0 into EAX or eax, 1 ; Set bit 0 mov cr0, eax ; Copy the contents of EAX into CR0 jmp 08h:clear_pipe ; Jump to code segment, offset clear_pipe [BITS 32] ; We now need 32-bit instructions clear_pipe: mov ax, 10h ; Save data segment identifyer mov ds, ax ; Move a valid data segment into the data segment register mov ss, ax ; Move a valid data segment into the stack segment register mov esp, 090000h ; Move the stack pointer to 090000h jmp 08h:01000h ; Jump to section 08h (code), offset 01000h gdt: ; Address for the GDT gdt_null: ; Null Segment dd 0 dd 0 gdt_code: ; Code segment, read/execute, nonconforming dw 0FFFFh dw 0 db 0 db 10011010b db 11001111b db 0 gdt_data: ; Data segment, read/write, expand down dw 0FFFFh dw 0 db 0 db 10010010b db 11001111b db 0 gdt_end: ; Used to calculate the size of the GDT gdt_desc: ; The GDT descriptor dw gdt_end - gdt - 1 ; Limit (size) dd gdt ; Address of the GDT times 510-($-$$) db 0 ; Fill up the file with zeros dw 0AA55h ; Boot sector identifyer P.S.Ovaj kod je preuzet iz jednog tutorial-a ali je sam prilicno jasan.Ne secam se imena malopre pomenutog tutorial-a ali jednostavno da nagalsim da ovo nije moje licno autorsko delo.Nadam se da ce se i ostali ukljuciti.Sve ispravke i dopune su dobrodosle.HVALA! |