24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

246 volume VI os16<br />

Script e sorgenti del kernel 247<br />

«<br />

«<br />

«<br />

«<br />

1040024 | int #0x10<br />

1040025 | popa<br />

1040026 | popf<br />

1040027 | leave<br />

1040028 | ret<br />

104.5.5 kernel/ibm_i86/_int10_02.s<br />

Si veda la sezione 103.4.<br />

1050001 |.global __int10_02<br />

1050002 |;-----------------------------------------------------------------------<br />

1050003 |.text<br />

1050004 |;-----------------------------------------------------------------------<br />

1050005 |; INT 0x10 - video - set cursor position<br />

1050006 |; AH = 0x02<br />

1050007 |; BH = page number:<br />

1050008 |; 0-7 in modes 0 and 1<br />

1050009 |; 0-3 in modes 2 and 3<br />

1050010 |; DH = row (0x00 is top)<br />

1050011 |; DL = column (0x00 is left)<br />

1050012 |;-----------------------------------------------------------------------<br />

1050013 |.align 2<br />

1050014 |__int10_02:<br />

1050015 | enter #0, #0 ; No local variables.<br />

1050016 | pushf<br />

1050017 | cli<br />

1050018 | pusha<br />

1050019 | mov ah, #0x02<br />

1050020 | mov bh, #0x00<br />

1050021 | mov bh, 4[bp] ; 1st arg (page).<br />

1050022 | mov dx, 6[bp] ; 2nd arg (pos).<br />

1050023 | int #0x10<br />

1050024 | popa<br />

1050025 | popf<br />

1050026 | leave<br />

1050027 | ret<br />

104.5.6 kernel/ibm_i86/_int10_05.s<br />

Si veda la sezione 103.4.<br />

1060001 |.global __int10_05<br />

1060002 |;-----------------------------------------------------------------------<br />

1060003 |.text<br />

1060004 |;-----------------------------------------------------------------------<br />

1060005 |; INT 0x10 - video - select active display page<br />

1060006 |; AH = 0x05<br />

1060007 |; AL = new page number (0x00 is the first)<br />

1060008 |;-----------------------------------------------------------------------<br />

1060009 |.align 2<br />

1060010 |__int10_05:<br />

1060011 | enter #0, #0 ; No local variables.<br />

1060012 | pushf<br />

1060013 | cli<br />

1060014 | pusha<br />

1060015 | mov ah, #0x05<br />

1060016 | mov bh, 4[bp] ; 1st arg (page).<br />

1060017 | int #0x10<br />

1060018 | popa<br />

1060019 | popf<br />

1060020 | leave<br />

1060021 | ret<br />

104.5.7 kernel/ibm_i86/_int12.s<br />

Si veda la sezione 103.4.<br />

1070001 |.global __int12<br />

1070002 |;-----------------------------------------------------------------------<br />

1070003 |.text<br />

1070004 |;-----------------------------------------------------------------------<br />

1070005 |; INT 12 - bios - get memory size<br />

1070006 |; Return:<br />

1070007 |; AX = kilobytes of contiguous memory starting at absolute address<br />

1070008 |; 0x00000<br />

1070009 |;<br />

1070010 |; This call returns the contents of the word at absolute address<br />

1070011 |; 0x00413.<br />

1070012 |;-----------------------------------------------------------------------<br />

1070013 |.align 2<br />

1070014 |__int12:<br />

1070015 | enter #2, #0 ; 1 local variable.<br />

1070016 | pushf<br />

1070017 | cli<br />

1070018 | pusha<br />

1070019 | int #0x12<br />

1070020 | mov -2[bp], ax ; save AX.<br />

1070021 | popa<br />

1070022 | popf<br />

1070023 | mov ax, -2[bp] ; AX is the function return value.<br />

1070024 | leave<br />

1070025 | ret<br />

104.5.8 kernel/ibm_i86/_int13_00.s<br />

Si veda la sezione 103.4.<br />

1080001 |.global __int13_00<br />

1080002 |;-----------------------------------------------------------------------<br />

1080003 |.text<br />

1080004 |;-----------------------------------------------------------------------<br />

1080005 |; INT 0x13 - disk - reset disk system<br />

1080006 |; AH = 0x00<br />

1080007 |; DL = drive (if bit 7 is set both hard disks and floppy disks<br />

1080008 |; reset)<br />

1080009 |; Return:<br />

1080010 |; AH = status<br />

1080011 |; CF clear if successful (returned AH=0x00)<br />

1080012 |; CF set on error<br />

1080013 |;-----------------------------------------------------------------------<br />

1080014 |.align 2<br />

1080015 |__int13_00:<br />

1080016 | enter #2, #0 ; 1 local variable.<br />

1080017 | pushf<br />

1080018 | cli<br />

1080019 | pusha<br />

1080020 | mov ah, #0x00<br />

1080021 | mov dl, 4[bp] ; 1st arg.<br />

1080022 | int #0x13<br />

1080023 | mov al, #0x00<br />

1080024 | mov -2[bp], ax ; save AX.<br />

1080025 | popa<br />

1080026 | popf<br />

1080027 | mov ax, -2[bp] ; AX is the function return value.<br />

1080028 | leave<br />

1080029 | ret<br />

104.5.9 kernel/ibm_i86/_int13_02.s<br />

Si veda la sezione 103.4.<br />

1090001 |.global __int13_02<br />

1090002 |;-----------------------------------------------------------------------<br />

1090003 |.text<br />

1090004 |;-----------------------------------------------------------------------<br />

1090005 |; INT 0x13 - disk - read sectors into memory<br />

1090006 |; AH = 0x02<br />

1090007 |; AL = number of sectors to read (must be nonzero)<br />

1090008 |; CH = cylinder number (0-255)<br />

1090009 |; CL bit 6-7 =<br />

1090010 |; cylinder number (256-1023)<br />

1090011 |; CL bit 0-5 =<br />

1090012 |; sector number (1-63)<br />

1090013 |; DH = head number (0-255)<br />

1090014 |; DL = drive number (bit 7 set for hard disk)<br />

1090015 |; ES:BX -> data buffer<br />

1090016 |; Return:<br />

1090017 |; CF set on error<br />

1090018 |; CF clear if successful<br />

1090019 |; AH = status (0x00 if successful)<br />

1090020 |; AL = number of sectors transferred (only valid if CF set for<br />

1090021 |; some BIOSes)<br />

1090022 |;-----------------------------------------------------------------------<br />

1090023 |.align 2<br />

1090024 |__int13_02:<br />

1090025 | enter #2, #0 ; 1 local variable.<br />

1090026 | pushf<br />

1090027 | cli<br />

1090028 | pusha<br />

1090029 | mov ax, ds ; Set ES the same as DS.<br />

1090030 | mov es, ax ;<br />

1090031 | mov ax, 8[bp] ; 3rd arg (cylinder). It must be splitted and<br />

1090032 | mov ch, al ; assigned to the right registers.<br />

1090033 | mov cl, ah ;<br />

1090034 | shl cl, 1 ;<br />

1090035 | shl cl, 1 ;<br />

1090036 | shl cl, 1 ;<br />

1090037 | shl cl, 1 ;<br />

1090038 | shl cl, 1 ;<br />

1090039 | shl cl, 1 ;<br />

1090040 | add cl, 12[bp] ; 5th arg (sector).<br />

1090041 | mov dl, 4[bp] ; 1st arg (drive).<br />

1090042 | mov al, 6[bp] ; 2nd arg (sectors to be read).<br />

1090043 | mov dh, 10[bp] ; 4th arg (head).<br />

1090044 | mov bx, 14[bp] ; 6th arg (buffer pointer).<br />

1090045 | mov ah, #0x02<br />

1090046 | int #0x13<br />

1090047 | mov -2[bp], ax ; save AX.<br />

1090048 | popa<br />

1090049 | popf<br />

1090050 | mov ax, -2[bp] ; AX is the function return value.<br />

1090051 | leave<br />

1090052 | ret<br />

104.5.10 kernel/ibm_i86/_int13_03.s<br />

Si veda la sezione 103.4.<br />

1100001 |.global __int13_03<br />

1100002 |;-----------------------------------------------------------------------<br />

1100003 |.text<br />

1100004 |;-----------------------------------------------------------------------<br />

1100005 |; INT 0x13 - disk - write sectors to disk<br />

1100006 |; AH = 0x03<br />

1100007 |; AL = number of sectors to write (must be nonzero)<br />

1100008 |; CH = cylinder number (0-255)<br />

1100009 |; CL bit 6-7 =<br />

1100010 |; cylinder number (256-1023)<br />

1100011 |; CL bit 0-5 =<br />

1100012 |; sector number (1-63)<br />

1100013 |; DH = head number (0-255)<br />

1100014 |; DL = drive number (bit 7 set for hard disk)<br />

1100015 |; ES:BX -> data buffer<br />

1100016 |; Return:<br />

1100017 |; CF set on error<br />

1100018 |; CF clear if successful<br />

1100019 |; AH = status (0x00 if successful)<br />

1100020 |; AL = number of sectors transferred (only valid if CF set for<br />

1100021 |; some BIOSes)<br />

1100022 |;-----------------------------------------------------------------------<br />

1100023 |.align 2<br />

1100024 |__int13_03:<br />

1100025 | enter #2, #0 ; 1 local variable.<br />

1100026 | pushf<br />

1100027 | cli<br />

1100028 | pusha<br />

1100029 | mov ax, ds ; Set ES the same as DS.<br />

1100030 | mov es, ax ;<br />

1100031 | mov ax, 8[bp] ; 3rd arg (cylinder). It must be splitted and<br />

1100032 | mov ch, al ; assigned to the right registers.<br />

1100033 | mov cl, ah ;<br />

1100034 | shl cl, 1 ;<br />

1100035 | shl cl, 1 ;<br />

1100036 | shl cl, 1 ;<br />

«<br />

«

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!