-Sziasztok! Itt meglátjátok hogy lehet készíteni saját Op Rendszert.
Az első lépés az, hogy tervezzük meg a grafikus felületet. Ehhez jó bármi, mint például paint.
A második lépés az, hogy beprogramozzuk, (Én ajánlom az Assembly nyelvet) hogy mit tudjon, milyen legyen (grafikus felület) az OS (OS=Operating System=Operációs rendszer).
A harmadik lépés hogy lefutassuk VirtualBox-ban.
A negyedik az, hogy ha teszteltük, írjuk rá egy CD-re, vagy Pendrive-ra.
És kész is.
Assembly kód a boot-loaderhez:
bits 16
org 0
jmp main
bpbOEM db "YoOs " ;OEM azonosító max 8 byte!!!
bpbBytesPerSector: dw 512
bpbSectorsPerCluster: db 1
bpbReservedSectors: dw 1
bpbNumberOfFATs: db 2
bpbRootEntries: dw 224
bpbTotalSectors: dw 2880
bpbMedia: db 0xf8
bpbSectorsPerFAT: dw 9
bpbSectorsPerTrack: dw 18
bpbHeadsPerCylinder: dw 2
bpbHiddenSectors: dd 0
bpbTotalSectorsBig: dd 0
bsDriveNumber: db 0
bsUsed: db 0
bsExtBootSigniture: db 0x29
bsSerialNumber: dd 0xfa4a3a
bsVolumeLabel: db "YoOs FLOPPY"
bsFileSystem db "FAT12 "
Print:
lodsb
or al, al
jz .done
mov ah, 0eh
int 10h
jmp Print
.done:
ret
ReadSectors:
.MAIN
mov di, 0x0005 ; five retries for error
.SECTORLOOP
push ax
push bx
push cx
call LBACHS ; convert starting sector to CHS
mov ah, 0x02 ; BIOS read sector
mov al, 0x01 ; read one sector
mov ch, BYTE [absoluteTrack] ; track
mov cl, BYTE [absoluteSector] ; sector
mov dh, BYTE [absoluteHead] ; head
mov dl, BYTE [bsDriveNumber] ; drive
int 13h ; invoke BIOS
jnc .SUCCESS ; test for read error
xor ax, ax ; BIOS reset disk
int 0x13 ; invoke BIOS
dec di ; decrement error counter
pop cx
pop bx
pop ax
jnz .SECTORLOOP ; attempt to read again
int 0x18
.SUCCESS
mov si, msgProgress
call Print
pop cx
pop bx
pop ax
add bx, WORD [bpbBytesPerSector] ; queue next buffer
inc ax ; queue next sector
loop .MAIN ; read next sector
ret
LBACHS:
xor dx, dx div WORD [bpbSectorsPerTrack] inc dl mov BYTE [absoluteSector], dl
xor dx, dx div WORD [bpbHeadsPerCylinder] mov BYTE [absoluteHead], dl
mov BYTE [absoluteTrack], al
ret
ClusterLBA:
sub ax, 0x0002 ; zero base cluster number
xor cx, cx
mov cl, BYTE [bpbSectorsPerCluster] ; convert byte to word
mul cx
add ax, WORD [datasector] ; base data sector
ret
main:
cli
mov ax, 0x07c0
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ax, 0x0000
mov ss, ax
mov sp, 0xFFFF
sti
mov si, loading_msg
call Print
LOAD_ROOT:
xor cx, cx
xor dx, dx
mov ax, 0x0020
mul WORD [bpbRootEntries]
div WORD [bpbBytesPerSector]
xchg ax, cx ;ROOT Directory mérete (sectorok)
mov al, BYTE [bpbNumberOfFATs]
mul WORD [bpbSectorsPerFAT]
add ax, WORD [bpbReservedSectors]
mov WORD [datasector], ax
add WORD [datasector], cx
mov bx, 0x0200
call ReadSectors
mov cx, WORD [bpbRootEntries]
mov di, 0x0200
.LOOP:
push cx
mov cx, 0x000B
mov si, FileName
push di
rep cmpsb
pop di
je LOAD_FAT
pop cx
add di, 0x0020
loop .LOOP
jmp FAIL LOAD_FAT: mov dx, WORD [di + 0x001A]
mov WORD [cluster], dx xor ax, ax
mov al, BYTE [bpbNumberOfFATs]
mul WORD [bpbSectorsPerFAT]
mov cx, ax mov ax, WORD [bpbReservedSectors] mov bx, 0x0200
call ReadSectors mov ax, 0x0050
mov es, ax mov bx, 0x0000 push bx LOAD_IMAGE: mov ax, WORD [cluster]
pop bx
call ClusterLBA
xor cx, cx
mov cl, BYTE [bpbSectorsPerCluster]
call ReadSectors
push bx mov ax, WORD [cluster]
mov cx, ax
mov dx, ax
shr dx, 0x0001
add cx, dx
mov bx, 0x0200
add bx, cx
mov dx, WORD [bx]
test ax, 0x0001
jnz .PARATLAN .PAROS: and dx, 0000111111111111b
jmp .DONE .PARATLAN: shr dx, 0x0004 .DONE: mov WORD [cluster], dx
cmp dx, 0x0FF0
jb LOAD_IMAGE DONE: push WORD 0x0050
push WORD 0x0000
retf FAIL:
mov si, msgFail
call Print
mov ah, 0x00
int 0x16
int 0x19 absoluteHead db 0x00
absoluteSector db 0x00
absoluteTrack db 0x00 datasector dw 0x0000
cluster dw 0x0000
msgFail db "HIBA : Nyomjon egy gombot az ujjrainditashoz!", 0
msgProgress db "-;", 0
loading_msg db "Az operacios rendszer betoltese...", 0
FileName db "KERNEL SYS" ;max 11 BYTE!!!
times 510-($-$$) db 0
dw 0xAA55
Kernel:
org 0x0
bits 16
jmp main
Print:
lodsb
or al, al
jz .done
mov ah, 0eh
int 10h
jmp Print
.done:
ret
main:
cli
push cs
pop ds
mov si, msg
call Print
cli
hlt
msg db "Betoltott!! :D :D :D :D",0
Hasznos programok: notepad++, NASM(segít lefordítani az Assembly nyelvet a gép nyelvére), VirtualBox
-------------------------------------------------------------------------------------------
-Projektek-
Folyamatba lévő projektek száma: 1
Nothing projekt:
Én elkészítek egy op rendszert, amin semmi nincs, csak meg van adva hány bites. Ti meg különböző nyelveken, különböző programokat írtok, majd ezt CD-re ráteszitek (A nyelveket én felteszem).
-Nyelvek a nothing projekthez-
Java
JavaScript
Assembly
C
C++
Objective-C
Python
PHP
Basic
-----------------------------------------------------------------------------------------------
Ha programozást nem akartok, töltsétek le az ubuntut (VirtualBoxba), töröljétek le róla ami nem kell, tegyetek fel rá alapprogramokat, írjatok rá új áruházat, majd ezt tegyétek fel CD-re, vagy Pendrive-ra.
Ha bővebb információt szeretnétek, nézzétek Kukornák csatornáján az Op rendszer készítés sorozatot.
(Nagyon kevés az ilyen témával foglalkozó, magyar nyelvű honlap, ami nem kérdezős.)
A honlap gyakran bővül tartalommal, de a régi megmarad :)!