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