M EM BUAT SI STEM OPERASI SEN D I RI

M EM BUAT SI STEM OPERASI SEN D I RI

Biasanya, saat kom put er dihidupkan akan m encoba m e- load 512- byt e sect or pert am a ( Cylinder 0 , Head 0 , Sect or 1 ) dari disk drive, m isal A: ke lokasi m em ori 0 0 0 0 h:7 C0 0 h dan m em berikan kont rolnya. Jika gagal BI OS m encoba m enggunakan MBR dari hard drive prim er. Dalam bagian ini akan m encoba m engcover boot ing dari sebuah floppy drive,dengan prinsip yang sam a dapat j uga dilakukan di harddisk. Tet api m enggunakan floppy drive m em iliki beberapa keunt ungan:

OS kit a t et ap ut uh ( windows, dos, linux, unix, be- os...) .

udah dan am an m em odifikasi boot record padaf floppy disk.

cont oh floppy disk boot program :

; directive utk membuat BOOT file: #make_boot#

; Boot record di-loaded di 0000:7C00, ; informasikan compiler utk membuat permintaan yang benar: ORG 7C00h

PUSH CS ; yakinkan DS=CS POP DS

; load alamat message ke dalam register SI : LEA SI, msg

; teletype id fungsi: MOV AH, 0Eh

print: MOV AL, [SI] CMP AL, 0 JZ done INT 10h ; cetak dg teletype. INC SI JMP print

; tunggu utk 'any key': done: MOV AH, 0

INT 16h

; simpan nilai magic di 0040h:0072h: ; 0000h - cold boot. ; 1234h - warm boot. MOV AX, 0040h MOV DS, AX MOV w.[0072h], 0000h ; cold boot.

JMP

0FFFFh:0000h

; reboot!

new_line EQU 13, 10

msg DB 'Hello ini Boot Program saya yang pertama!' DB new_line, 'Tekan sembarang tombol utk reboot', 0

t ulis cont oh diat as pada edit or em u8086 dan t ekan e m ula t e . Em ulat or secara ot om at is akan m e- load file .bin ke

0 0 0 0 h:7 C0 0 h ( ini digunakan sebagai suplem en file .binf ut k m enget ahui dim ana akan di load) . Kit a dapat m enj alankan sepert i program biasa, at au dapat m enggunakan m enu vir t u a l

dr ive unt uk m enulis: w r it e 5 1 2 byt e s di 7 c0 0 h k e boot

se ct or dari virt ual floppy drive ( file " FLOPPY_ 0 " file di

c: \ em u8086) . Set elah program dit ulis ke virt ual floppy drive, kit a dapat m em ilih boot fr om floppy dari m enu vir t ua l dr ive . File .bin unt uk boot records t erbat as pada 512 byt es ( ukuran sekt or) . Jika OS baru kit a berukuran lebih dari nilai t ersebut , kit a perlu m enggunakan suat u boot program unt uk m e- load dat a dari sect or lainnya ( sepert i m icro- os_loader.asm ) . Cont oh OS kecil dapat di t em ukan di c: \ em u8086\ exam ples. Unt uk m em buat perluasan OS kit a ( lebih dari 512 byt es) , kit a dapat t am bahkan sect or pada floppy disk. I ni direkom endasikan unt uk m enggunakan file ".bin " unt uk t uj uan ini ( unt uk m em buat file " .bin " pilih "BI N Te m pla t e " dari m enu " File " - > " N e w " ) . Unt uk m enulis file " .bin " ke virt ual floppy, pilih " W r it e .bin file t o floppy..." dari m enu " V ir t u a l dr ive " em ulat or , kit a harus m enulisnya dim anapun di boot sekt or ( Cylinder: 0 , Head: 0 , Sect or: 1 ) .

kit a dapat m enggunakan ut ilit y ini unt uk m enulis file .bin ke virt ual floppy disk ( "FLOPPY_ 0 " file) , dapat j uga m enu "w r it e

5 1 2 by t e s a t 7 c0 0 h t o boot se ct or " . bagaim anapun j uga, kit a perlu ingat bahwa file .bin yang didisain unt uk m enj adi boot record harus selalu di t ulis ke cylinder: 0 , head: 0 , sect or: 1

Boot Sect or Locat ion: Cylinder: 0 Head: 0 Sector: 1

Unt uk m enulis file .bin kef loopy disk sebenarnya gunakan writ ebin.asm , lalu kom pilasikan ke file .com dan j alankan dari com m and prom pt .

- Unt uk m enulis t ipe boot record : w r it e bin loa de r .bin ; - unt uk m enulis t ipe m odul kernel : w r it e bin k e r n e l.bin / k. param et er / k m engat akan pada program unt uk m enulis file pada sect or ke dua sebagai gant i yang pert am a .Hal t ersebut bukan m enj adi m asalah dalam rangka m enulis file ke floppy drive, t et api yang m enj adi m asalah dim ana kit a akan m enuliskannya .

Ca t a t a n : boot record ini t idak kom pit abel dengan MS- DOS/ Window s, j uga Linux at au Unix , OS t idak m engij inkan kit a m em baca at au m enulis file dalam disket hingga kit a akan m e- reform at nya ,Jadi yakinkan bahwa disket yang kit a gunakan t idak berisi dat a yang pent ing. Bagaim anapun j uga kit a dapat m enulis dan m em baca apa saj a dari dank e disk m enggunakan Ca t a t a n : boot record ini t idak kom pit abel dengan MS- DOS/ Window s, j uga Linux at au Unix , OS t idak m engij inkan kit a m em baca at au m enulis file dalam disket hingga kit a akan m e- reform at nya ,Jadi yakinkan bahwa disket yang kit a gunakan t idak berisi dat a yang pent ing. Bagaim anapun j uga kit a dapat m enulis dan m em baca apa saj a dari dank e disk m enggunakan

St rukt ur floppy drive dan disket t e yang ideal:

Unt uk disket 1 4 4 0 k b :

floppy disk m em punyai 2 side , dan ada 2 head ( 0 ..1 ) , head drive bergerak keat as perm ukaan dari disket unt uk t iap sisi.

Tiap sisi m em iliki 80 cylinders ( di nom ori 0 ..7 9 ) .

t iap cylinder m em iliki 18 sect ors ( 1 ..1 8 ) .

t iap sect or m em iliki 5 1 2 byt es.

Tot al ukuran floppy disk adalah : 2 x 80 x 18 x 512 =

1 ,4 7 4 ,5 6 0 byt es. Cat at an: disket t he MS- DOS ( window s) yang t erform at m em iliki

free space sedikit berkurang ( sekit ar 16,896 byt es) karena OS free space sedikit berkurang ( sekit ar 16,896 byt es) karena OS

I N T 1 3 h / AH = 0 2 h .

BAGI AN 1 2

PEN GEN D ALI AN D EVI CE EX TERN AL

( ROBOT, STEPPER- M OTOR...)

Ada 7 devices yang di- at t ach ke em ulat or: t raffic light s, st epper- m ot or, LED display, t herm om et er, print er, robot dan sim ple t est . kit a dapat m elihat device ket ika kit a m enu "Vir t u a l

D e vice s" dari em ulat or. Secara um um , dim ungkinkan m enggunakan CPU keluarga x86 unt uk m engendalikan sem ua device, perbedaanya berada pada nom or port I / O , ini dapat dim odifikasi m enggunakan peralat an elekt ronik . Biasanya file " .bin " dit uliskan ke dalam chip Read Only Mem ory ( ROM) , syst em m em baca program dari chip, dan m e- load ke RAM dan m enj alankannya sebagai program . Prinsip ini digunakan unt uk peralat an m odern lainnya sepert i m icro- wave ovens dan lainnya.

Tr a ffic Ligh t s

Biasanya unt uk m engont rol lam pu lalu lint as suat u larik nilai digunakan . Nilai di baca dari larik dan dikirim kan ke port , cont oh:

; controlling external device with 8086 microprocessor. ; realistic test for c:\emu8086\devices\Traffic_Lights.exe

#start=Traffic_Lights.exe#

name "traffic"

mov ax , all_red out 4, ax

mov si , offset situation

next: mov ax , [ si ] out 4, ax

; wait 5 seconds (5 million microseconds) mov cx , 4Ch

; 004C4B40h = 5,000,000 mov dx , 4B40h mov ah , 86h

int 15h

add si ,2 ; next situation cmp si , sit_end jb next mov si , offset situation jmp next

; FEDC_BA98_7654_3210 situation

dw

0000_0011_0000_1100b

s1 dw 0000_0110_1001_1010b s2

dw 0000_1000_0110_0001b s3

dw 0000_1000_0110_0001b s4

dw 0000_0100_1101_0011b sit_end = $

all_red equ 0000_0010_0100_1001b

St e ppe r - M ot or

Mot or dapat separuh dilangkahkan dengan m em asang pasangan m agnit , Mot or j uga dapat dilangkahkan penuh dengan m em asang pasangan m agnit , yang diikut i oleh pasangan m agnit yang lain dan pada akhirnya yang diikut i oleh m agnit t unggal dan set erusnya. Cara Yang t erbaik unt uk m em buat langkah penuh akan m em buat dua separuh langkah- langkah t ersebut . Set engah langkah sam a dengan 1 1 .2 5 deraj ad. sat u langkah penuh sam a dengan 2 2 .5 deraj ad. Mot or dapat di put ar baik secara clock- wise dan count er- clock- w ise.

Robot

lihat pada cont oh yang ada in c: \ em u8086\ exam ples